lyflowchart 1.0.107 → 1.0.109
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Cell_click_data_source-Vu7ZbgEv.js +11566 -0
- package/dist/Cell_click_data_source-Vu7ZbgEv.js.map +1 -0
- package/dist/index.js +7343 -18729
- package/dist/index.js.map +1 -1
- package/dist/lyflowchart.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cell_click_data_source-Vu7ZbgEv.js","names":["nativeToString","nativeHasOwnProperty","isUndefined","isArray","has","forEach","toNum","identity","map","bind","assign","set","isUndefined","isArray","attr","toString","classes","ClassList","clear","parse","remove","create","escape","set","slice","remove","transform","DEFAULT_RENDER_PRIORITY","svgCreate","add","isArray","isUndefined","isFrameElement","assign","inherits","svgCreate","isFrameElement","assign","assign","isArray","assign","svgCreate","bind","svgClasses","svgTransform","getBoundingBox","svgAttr","Refs","Base","inherits","assign","assign","DEFAULT_PRIORITY","isArray","bind","translate","svgCreate","isFrameElement","DrawModule","CoreModule","Base","Factory","bind","BUILTINS","isBuiltIn","parseName","DescriptorBuilder","assign","Registry","ensureAvailable","Properties","isUndefined","stripGlobal","defineProperty","Moddle","XSI_TYPE","error","bind","assign","parseNameNS","assign","isSimpleType","inherits","has","Moddle","assign","has","is","map","domify","domQuery","assign","inherits","domQuery","domify","BpmnModdle","svgCreate","domQuery","assign","inherits","DEFAULT_LABEL_SIZE","assign","svgCreate","assign","TextUtil","assign","assign","translate","DrawModule","ImportModule","getOriginalEvent","LOW_PRIORITY","domDelegate","assign","domQueryAll","svgRemove","svgCreate","domQuery","LOW_PRIORITY","svgCreate","assign","domQuery","isArray","svgCreate","assign","isArray","InteractionEventsModule","OutlineModule","Ids","LOW_PRIORITY","assign","isArray","domify","getElementType","isArray","forEach","inherits","domify","classes","inherits","domify","OverlaysModule","ChangeSupportModule","RootElementsModule","inherits","CoreModule","TranslateModule","SelectionModule","OverlaysModule","DrilldownModdule","domClasses","delta","deltaPos","domClosest","event","bind","domClosest","ZoomScrollModule","MoveCanvasModule"],"sources":["../node_modules/inherits-browser/dist/index.es.js","../node_modules/ids/dist/index.esm.js","../node_modules/min-dash/dist/index.esm.js","../node_modules/min-dom/dist/index.esm.js","../node_modules/tiny-svg/dist/index.esm.js","../node_modules/didi/dist/index.esm.js","../node_modules/diagram-js/lib/draw/BaseRenderer.js","../node_modules/diagram-js/lib/util/RenderUtil.js","../node_modules/diagram-js/lib/util/Elements.js","../node_modules/diagram-js/lib/draw/DefaultRenderer.js","../node_modules/diagram-js/lib/draw/Styles.js","../node_modules/diagram-js/lib/draw/index.js","../node_modules/diagram-js/lib/util/Collections.js","../node_modules/diagram-js/lib/util/Geometry.js","../node_modules/path-intersection/intersect.js","../node_modules/diagram-js/lib/layout/LayoutUtil.js","../node_modules/diagram-js/lib/core/Canvas.js","../node_modules/diagram-js/lib/core/ElementRegistry.js","../node_modules/object-refs/lib/collection.js","../node_modules/object-refs/lib/refs.js","../node_modules/object-refs/index.js","../node_modules/diagram-js/lib/model/index.js","../node_modules/diagram-js/lib/core/ElementFactory.js","../node_modules/diagram-js/lib/core/EventBus.js","../node_modules/diagram-js/lib/util/GraphicsUtil.js","../node_modules/diagram-js/lib/util/SvgTransformUtil.js","../node_modules/diagram-js/lib/core/GraphicsFactory.js","../node_modules/diagram-js/lib/core/index.js","../node_modules/diagram-js/lib/Diagram.js","../node_modules/bpmn-js/node_modules/moddle/dist/index.esm.js","../node_modules/saxen/dist/index.esm.js","../node_modules/moddle-xml/node_modules/moddle/dist/index.esm.js","../node_modules/moddle-xml/dist/index.esm.js","../node_modules/bpmn-js/node_modules/bpmn-moddle/dist/index.esm.js","../node_modules/bpmn-js/lib/import/Util.js","../node_modules/bpmn-js/lib/util/CompatibilityUtil.js","../node_modules/bpmn-js/lib/import/BpmnTreeWalker.js","../node_modules/bpmn-js/lib/util/ModelUtil.js","../node_modules/bpmn-js/lib/import/Importer.js","../node_modules/bpmn-js/lib/util/PoweredByUtil.js","../node_modules/bpmn-js/lib/BaseViewer.js","../node_modules/bpmn-js/lib/util/DiUtil.js","../node_modules/bpmn-js/lib/features/label-editing/LabelUtil.js","../node_modules/bpmn-js/lib/draw/BpmnRenderUtil.js","../node_modules/bpmn-js/lib/draw/BpmnRenderer.js","../node_modules/diagram-js/lib/util/Text.js","../node_modules/bpmn-js/lib/draw/TextRenderer.js","../node_modules/bpmn-js/lib/draw/PathMap.js","../node_modules/bpmn-js/lib/draw/index.js","../node_modules/diagram-js/lib/i18n/translate/translate.js","../node_modules/diagram-js/lib/i18n/translate/index.js","../node_modules/bpmn-js/lib/util/LabelUtil.js","../node_modules/bpmn-js/lib/import/BpmnImporter.js","../node_modules/bpmn-js/lib/import/index.js","../node_modules/bpmn-js/lib/core/index.js","../node_modules/diagram-js/lib/util/Event.js","../node_modules/diagram-js/lib/util/Platform.js","../node_modules/diagram-js/lib/util/Mouse.js","../node_modules/diagram-js/lib/features/interaction-events/InteractionEvents.js","../node_modules/diagram-js/lib/features/interaction-events/index.js","../node_modules/diagram-js/lib/features/outline/Outline.js","../node_modules/diagram-js/lib/features/outline/index.js","../node_modules/diagram-js/lib/features/selection/Selection.js","../node_modules/diagram-js/lib/features/selection/SelectionVisuals.js","../node_modules/diagram-js/lib/features/selection/SelectionBehavior.js","../node_modules/diagram-js/lib/features/selection/index.js","../node_modules/diagram-js/lib/util/IdGenerator.js","../node_modules/diagram-js/lib/features/overlays/Overlays.js","../node_modules/diagram-js/lib/features/overlays/index.js","../node_modules/diagram-js/lib/features/change-support/ChangeSupport.js","../node_modules/diagram-js/lib/features/change-support/index.js","../node_modules/diagram-js/lib/command/CommandInterceptor.js","../node_modules/diagram-js/lib/features/root-elements/RootElementsBehavior.js","../node_modules/diagram-js/lib/features/root-elements/index.js","../node_modules/diagram-js/lib/util/EscapeUtil.js","../node_modules/bpmn-js/lib/util/DrilldownUtil.js","../node_modules/bpmn-js/lib/features/drilldown/DrilldownBreadcrumbs.js","../node_modules/bpmn-js/lib/features/drilldown/DrilldownCentering.js","../node_modules/bpmn-js/lib/features/drilldown/SubprocessCompatibility.js","../node_modules/bpmn-js/lib/features/drilldown/DrilldownOverlayBehavior.js","../node_modules/bpmn-js/lib/features/drilldown/index.js","../node_modules/bpmn-js/lib/Viewer.js","../node_modules/diagram-js/lib/util/Cursor.js","../node_modules/diagram-js/lib/util/ClickTrap.js","../node_modules/diagram-js/lib/util/PositionUtil.js","../node_modules/diagram-js/lib/navigation/movecanvas/MoveCanvas.js","../node_modules/diagram-js/lib/navigation/movecanvas/index.js","../node_modules/diagram-js/lib/util/Math.js","../node_modules/diagram-js/lib/navigation/zoomscroll/ZoomUtil.js","../node_modules/diagram-js/lib/navigation/zoomscroll/ZoomScroll.js","../node_modules/diagram-js/lib/navigation/zoomscroll/index.js","../src/init-plugin.ts","../node_modules/inherits/inherits_browser.js","../src/components/Process/common/index.js","../src/components/Process/viewer/index.vue","../src/components/Process/viewer/index.vue","../src/components/approval_for_details.vue","../src/components/approval_for_details.vue","../src/components/Cell_click_data_source.vue","../src/components/Cell_click_data_source.vue"],"sourcesContent":["function e(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}export{e as default};\n//# sourceMappingURL=index.es.js.map\n","function createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar hat_1 = createCommonjsModule(function (module) {\nvar 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});\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 */\nfunction Ids(seed) {\n if (!(this instanceof Ids)) {\n return new Ids(seed);\n }\n seed = seed || [128, 36, 1];\n this._seed = seed.length ? hat_1.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 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 * Clear all claimed ids.\n */\nIds.prototype.clear = function () {\n var hats = this._seed.hats,\n id;\n for (id in hats) {\n this.unclaim(id);\n }\n};\n\nexport default Ids;\n//# sourceMappingURL=index.esm.js.map\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","function _mergeNamespaces(n, m) {\n m.forEach(function (e) {\n e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {\n if (k !== 'default' && !(k in n)) {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n });\n return Object.freeze(n);\n}\n\n/**\n * Flatten array, one level deep.\n *\n * @template T\n *\n * @param {T[][] | T[] | null} [arr]\n *\n * @return {T[]}\n */\n\nconst nativeToString = Object.prototype.toString;\nconst nativeHasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isUndefined(obj) {\n return obj === undefined;\n}\n\nfunction isArray(obj) {\n return nativeToString.call(obj) === '[object 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 nativeHasOwnProperty.call(target, key);\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\nfunction identity(arg) {\n return arg;\n}\n\nfunction toNum(arg) {\n return Number(arg);\n}\n\n/**\n * Assigns style attributes in a style-src compliant way.\n *\n * @param {Element} element\n * @param {...Object} styleSources\n *\n * @return {Element} the element\n */\nfunction assign(element, ...styleSources) {\n const target = element.style;\n\n forEach(styleSources, function(style) {\n if (!style) {\n return;\n }\n\n forEach(style, function(value, key) {\n target[key] = value;\n });\n });\n\n return element;\n}\n\n/**\n * Set attribute `name` to `val`, or get attr `name`.\n *\n * @param {Element} el\n * @param {String} name\n * @param {String} [val]\n * @api public\n */\nfunction attr(el, name, val) {\n\n // get\n if (arguments.length == 2) {\n return el.getAttribute(name);\n }\n\n // remove\n if (val === null) {\n return el.removeAttribute(name);\n }\n\n // set\n el.setAttribute(name, val);\n\n return el;\n}\n\n/**\n * Taken from https://github.com/component/classes\n *\n * Without the component bits.\n */\n\n/**\n * toString reference.\n */\n\nconst toString = Object.prototype.toString;\n\n/**\n * Wrap `el` in a `ClassList`.\n *\n * @param {Element} el\n * @return {ClassList}\n * @api public\n */\n\nfunction classes(el) {\n return new ClassList(el);\n}\n\n/**\n * Initialize a new ClassList for `el`.\n *\n * @param {Element} el\n * @api private\n */\n\nfunction ClassList(el) {\n if (!el || !el.nodeType) {\n throw new Error('A DOM element reference is required');\n }\n this.el = el;\n this.list = el.classList;\n}\n\n/**\n * Add class `name` if not already present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.add = function(name) {\n this.list.add(name);\n return this;\n};\n\n/**\n * Remove class `name` when present, or\n * pass a regular expression to remove\n * any which match.\n *\n * @param {String|RegExp} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.remove = function(name) {\n if ('[object RegExp]' == toString.call(name)) {\n return this.removeMatching(name);\n }\n\n this.list.remove(name);\n return this;\n};\n\n/**\n * Remove all classes matching `re`.\n *\n * @param {RegExp} re\n * @return {ClassList}\n * @api private\n */\n\nClassList.prototype.removeMatching = function(re) {\n const arr = this.array();\n for (let i = 0; i < arr.length; i++) {\n if (re.test(arr[i])) {\n this.remove(arr[i]);\n }\n }\n return this;\n};\n\n/**\n * Toggle class `name`, can force state via `force`.\n *\n * For browsers that support classList, but do not support `force` yet,\n * the mistake will be detected and corrected.\n *\n * @param {String} name\n * @param {Boolean} force\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.toggle = function(name, force) {\n if ('undefined' !== typeof force) {\n if (force !== this.list.toggle(name, force)) {\n this.list.toggle(name); // toggle again to correct\n }\n } else {\n this.list.toggle(name);\n }\n return this;\n};\n\n/**\n * Return an array of classes.\n *\n * @return {Array}\n * @api public\n */\n\nClassList.prototype.array = function() {\n return Array.from(this.list);\n};\n\n/**\n * Check if class `name` is present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.has =\nClassList.prototype.contains = function(name) {\n return this.list.contains(name);\n};\n\n/**\n * Clear utility\n */\n\n/**\n * Removes all children from the given element\n *\n * @param {Element} element\n *\n * @return {Element} the element (for chaining)\n */\nfunction clear(element) {\n var child;\n\n while ((child = element.firstChild)) {\n element.removeChild(child);\n }\n\n return element;\n}\n\n/**\n * Closest\n *\n * @param {Element} el\n * @param {string} selector\n * @param {boolean} checkYourSelf (optional)\n */\nfunction closest(element, selector, checkYourSelf) {\n var actualElement = checkYourSelf ? element : element.parentNode;\n\n return actualElement && typeof actualElement.closest === 'function' && actualElement.closest(selector) || null;\n}\n\nvar componentEvent = {};\n\nvar bind$1, unbind$1, prefix;\n\nfunction detect () {\n bind$1 = window.addEventListener ? 'addEventListener' : 'attachEvent';\n unbind$1 = window.removeEventListener ? 'removeEventListener' : 'detachEvent';\n prefix = bind$1 !== 'addEventListener' ? 'on' : '';\n}\n\n/**\n * Bind `el` event `type` to `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @return {Function}\n * @api public\n */\n\nvar bind_1 = componentEvent.bind = function(el, type, fn, capture){\n if (!bind$1) detect();\n el[bind$1](prefix + type, fn, capture || false);\n return fn;\n};\n\n/**\n * Unbind `el` event `type`'s callback `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @return {Function}\n * @api public\n */\n\nvar unbind_1 = componentEvent.unbind = function(el, type, fn, capture){\n if (!unbind$1) detect();\n el[unbind$1](prefix + type, fn, capture || false);\n return fn;\n};\n\nvar event = /*#__PURE__*/_mergeNamespaces({\n __proto__: null,\n bind: bind_1,\n unbind: unbind_1,\n 'default': componentEvent\n}, [componentEvent]);\n\n/**\n * Module dependencies.\n */\n\n/**\n * Delegate event `type` to `selector`\n * and invoke `fn(e)`. A callback function\n * is returned which may be passed to `.unbind()`.\n *\n * @param {Element} el\n * @param {String} selector\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @return {Function}\n * @api public\n */\n\n// Some events don't bubble, so we want to bind to the capture phase instead\n// when delegating.\nvar forceCaptureEvents = [ 'focus', 'blur' ];\n\nfunction bind(el, selector, type, fn, capture) {\n if (forceCaptureEvents.indexOf(type) !== -1) {\n capture = true;\n }\n\n return event.bind(el, type, function(e) {\n var target = e.target || e.srcElement;\n e.delegateTarget = closest(target, selector, true);\n if (e.delegateTarget) {\n fn.call(el, e);\n }\n }, capture);\n}\n\n/**\n * Unbind event `type`'s callback `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @api public\n */\nfunction unbind(el, type, fn, capture) {\n if (forceCaptureEvents.indexOf(type) !== -1) {\n capture = true;\n }\n\n return event.unbind(el, type, fn, capture);\n}\n\nvar delegate = {\n bind,\n unbind\n};\n\n/**\n * Expose `parse`.\n */\n\nvar domify = parse;\n\n/**\n * Tests for browser support.\n */\n\nvar innerHTMLBug = false;\nvar bugTestDiv;\nif (typeof document !== 'undefined') {\n bugTestDiv = document.createElement('div');\n // Setup\n bugTestDiv.innerHTML = ' <link/><table></table><a href=\"/a\">a</a><input type=\"checkbox\"/>';\n // Make sure that link elements get serialized correctly by innerHTML\n // This requires a wrapper element in IE\n innerHTMLBug = !bugTestDiv.getElementsByTagName('link').length;\n bugTestDiv = undefined;\n}\n\n/**\n * Wrap map from jquery.\n */\n\nvar map = {\n legend: [1, '<fieldset>', '</fieldset>'],\n tr: [2, '<table><tbody>', '</tbody></table>'],\n col: [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\n // for script/link/style tags to work in IE6-8, you have to wrap\n // in a div with a non-whitespace character in front, ha!\n _default: innerHTMLBug ? [1, 'X<div>', '</div>'] : [0, '', '']\n};\n\nmap.td =\nmap.th = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\nmap.option =\nmap.optgroup = [1, '<select multiple=\"multiple\">', '</select>'];\n\nmap.thead =\nmap.tbody =\nmap.colgroup =\nmap.caption =\nmap.tfoot = [1, '<table>', '</table>'];\n\nmap.polyline =\nmap.ellipse =\nmap.polygon =\nmap.circle =\nmap.text =\nmap.line =\nmap.path =\nmap.rect =\nmap.g = [1, '<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">','</svg>'];\n\n/**\n * Parse `html` and return a DOM Node instance, which could be a TextNode,\n * HTML DOM Node of some kind (<div> for example), or a DocumentFragment\n * instance, depending on the contents of the `html` string.\n *\n * @param {String} html - HTML string to \"domify\"\n * @param {Document} doc - The `document` instance to create the Node for\n * @return {DOMNode} the TextNode, DOM Node, or DocumentFragment instance\n * @api private\n */\n\nfunction parse(html, doc) {\n if ('string' != typeof html) throw new TypeError('String expected');\n\n // default to the global `document` object\n if (!doc) doc = document;\n\n // tag name\n var m = /<([\\w:]+)/.exec(html);\n if (!m) return doc.createTextNode(html);\n\n html = html.replace(/^\\s+|\\s+$/g, ''); // Remove leading/trailing whitespace\n\n var tag = m[1];\n\n // body support\n if (tag == 'body') {\n var el = doc.createElement('html');\n el.innerHTML = html;\n return el.removeChild(el.lastChild);\n }\n\n // wrap map\n var wrap = Object.prototype.hasOwnProperty.call(map, tag) ? map[tag] : map._default;\n var depth = wrap[0];\n var prefix = wrap[1];\n var suffix = wrap[2];\n var el = doc.createElement('div');\n el.innerHTML = prefix + html + suffix;\n while (depth--) el = el.lastChild;\n\n // one element\n if (el.firstChild == el.lastChild) {\n return el.removeChild(el.firstChild);\n }\n\n // several elements\n var fragment = doc.createDocumentFragment();\n while (el.firstChild) {\n fragment.appendChild(el.removeChild(el.firstChild));\n }\n\n return fragment;\n}\n\nvar domify$1 = domify;\n\n/**\n * @param { HTMLElement } element\n * @param { String } selector\n *\n * @return { boolean }\n */\nfunction matches(element, selector) {\n return element && typeof element.matches === 'function' && element.matches(selector) || false;\n}\n\nfunction query(selector, el) {\n el = el || document;\n\n return el.querySelector(selector);\n}\n\nfunction all(selector, el) {\n el = el || document;\n\n return el.querySelectorAll(selector);\n}\n\nfunction remove(el) {\n el.parentNode && el.parentNode.removeChild(el);\n}\n\nexport { assign as assignStyle, attr, classes, clear, closest, delegate, domify$1 as domify, event, matches, query, all as queryAll, remove };\n//# sourceMappingURL=index.esm.js.map\n","function ensureImported(element, target) {\n\n if (element.ownerDocument !== target.ownerDocument) {\n try {\n\n // may fail on webkit\n return target.ownerDocument.importNode(element, true);\n } catch (e) {\n\n // ignore\n }\n }\n\n return element;\n}\n\n/**\n * appendTo utility\n */\n\n\n/**\n * Append a node to a target element and return the appended node.\n *\n * @param {SVGElement} element\n * @param {SVGElement} target\n *\n * @return {SVGElement} the appended node\n */\nfunction appendTo(element, target) {\n return target.appendChild(ensureImported(element, target));\n}\n\n/**\n * append utility\n */\n\n\n/**\n * Append a node to an element\n *\n * @param {SVGElement} element\n * @param {SVGElement} node\n *\n * @return {SVGElement} the element\n */\nfunction append(target, node) {\n appendTo(node, target);\n return target;\n}\n\n/**\n * attribute accessor utility\n */\n\nvar LENGTH_ATTR = 2;\n\nvar CSS_PROPERTIES = {\n 'alignment-baseline': 1,\n 'baseline-shift': 1,\n 'clip': 1,\n 'clip-path': 1,\n 'clip-rule': 1,\n 'color': 1,\n 'color-interpolation': 1,\n 'color-interpolation-filters': 1,\n 'color-profile': 1,\n 'color-rendering': 1,\n 'cursor': 1,\n 'direction': 1,\n 'display': 1,\n 'dominant-baseline': 1,\n 'enable-background': 1,\n 'fill': 1,\n 'fill-opacity': 1,\n 'fill-rule': 1,\n 'filter': 1,\n 'flood-color': 1,\n 'flood-opacity': 1,\n 'font': 1,\n 'font-family': 1,\n 'font-size': LENGTH_ATTR,\n 'font-size-adjust': 1,\n 'font-stretch': 1,\n 'font-style': 1,\n 'font-variant': 1,\n 'font-weight': 1,\n 'glyph-orientation-horizontal': 1,\n 'glyph-orientation-vertical': 1,\n 'image-rendering': 1,\n 'kerning': 1,\n 'letter-spacing': 1,\n 'lighting-color': 1,\n 'marker': 1,\n 'marker-end': 1,\n 'marker-mid': 1,\n 'marker-start': 1,\n 'mask': 1,\n 'opacity': 1,\n 'overflow': 1,\n 'pointer-events': 1,\n 'shape-rendering': 1,\n 'stop-color': 1,\n 'stop-opacity': 1,\n 'stroke': 1,\n 'stroke-dasharray': 1,\n 'stroke-dashoffset': 1,\n 'stroke-linecap': 1,\n 'stroke-linejoin': 1,\n 'stroke-miterlimit': 1,\n 'stroke-opacity': 1,\n 'stroke-width': LENGTH_ATTR,\n 'text-anchor': 1,\n 'text-decoration': 1,\n 'text-rendering': 1,\n 'unicode-bidi': 1,\n 'visibility': 1,\n 'word-spacing': 1,\n 'writing-mode': 1\n};\n\n\nfunction getAttribute(node, name) {\n if (CSS_PROPERTIES[name]) {\n return node.style[name];\n } else {\n return node.getAttributeNS(null, name);\n }\n}\n\nfunction setAttribute(node, name, value) {\n var hyphenated = name.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n\n var type = CSS_PROPERTIES[hyphenated];\n\n if (type) {\n\n // append pixel unit, unless present\n if (type === LENGTH_ATTR && typeof value === 'number') {\n value = String(value) + 'px';\n }\n\n node.style[hyphenated] = value;\n } else {\n node.setAttributeNS(null, name, value);\n }\n}\n\nfunction setAttributes(node, attrs) {\n\n var names = Object.keys(attrs), i, name;\n\n for (i = 0, name; (name = names[i]); i++) {\n setAttribute(node, name, attrs[name]);\n }\n}\n\n/**\n * Gets or sets raw attributes on a node.\n *\n * @param {SVGElement} node\n * @param {Object} [attrs]\n * @param {String} [name]\n * @param {String} [value]\n *\n * @return {String}\n */\nfunction attr(node, name, value) {\n if (typeof name === 'string') {\n if (value !== undefined) {\n setAttribute(node, name, value);\n } else {\n return getAttribute(node, name);\n }\n } else {\n setAttributes(node, name);\n }\n\n return node;\n}\n\n/**\r\n * Taken from https://github.com/component/classes\r\n *\r\n * Without the component bits.\r\n */\r\n\r\n/**\r\n * toString reference.\r\n */\r\n\r\nconst toString = Object.prototype.toString;\r\n\r\n/**\r\n * Wrap `el` in a `ClassList`.\r\n *\r\n * @param {Element} el\r\n * @return {ClassList}\r\n * @api public\r\n */\r\n\r\nfunction classes(el) {\r\n return new ClassList(el);\r\n}\r\n\r\nfunction ClassList(el) {\r\n if (!el || !el.nodeType) {\r\n throw new Error('A DOM element reference is required');\r\n }\r\n this.el = el;\r\n this.list = el.classList;\r\n}\r\n\r\n/**\r\n * Add class `name` if not already present.\r\n *\r\n * @param {String} name\r\n * @return {ClassList}\r\n * @api public\r\n */\r\n\r\nClassList.prototype.add = function(name) {\r\n this.list.add(name);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove class `name` when present, or\r\n * pass a regular expression to remove\r\n * any which match.\r\n *\r\n * @param {String|RegExp} name\r\n * @return {ClassList}\r\n * @api public\r\n */\r\n\r\nClassList.prototype.remove = function(name) {\r\n if ('[object RegExp]' == toString.call(name)) {\r\n return this.removeMatching(name);\r\n }\r\n\r\n this.list.remove(name);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove all classes matching `re`.\r\n *\r\n * @param {RegExp} re\r\n * @return {ClassList}\r\n * @api private\r\n */\r\n\r\nClassList.prototype.removeMatching = function(re) {\r\n const arr = this.array();\r\n for (let i = 0; i < arr.length; i++) {\r\n if (re.test(arr[i])) {\r\n this.remove(arr[i]);\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Toggle class `name`, can force state via `force`.\r\n *\r\n * For browsers that support classList, but do not support `force` yet,\r\n * the mistake will be detected and corrected.\r\n *\r\n * @param {String} name\r\n * @param {Boolean} force\r\n * @return {ClassList}\r\n * @api public\r\n */\r\n\r\nClassList.prototype.toggle = function(name, force) {\r\n if ('undefined' !== typeof force) {\r\n if (force !== this.list.toggle(name, force)) {\r\n this.list.toggle(name); // toggle again to correct\r\n }\r\n } else {\r\n this.list.toggle(name);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Return an array of classes.\r\n *\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nClassList.prototype.array = function() {\r\n return Array.from(this.list);\r\n};\r\n\r\n/**\r\n * Check if class `name` is present.\r\n *\r\n * @param {String} name\r\n * @return {ClassList}\r\n * @api public\r\n */\r\n\r\nClassList.prototype.has =\r\n ClassList.prototype.contains = function(name) {\r\n return this.list.contains(name);\r\n };\n\n/**\n * Clear utility\n */\n\n/**\n * Removes all children from the given element\n *\n * @param {SVGElement} element\n * @return {Element} the element (for chaining)\n */\nfunction clear(element) {\n var child;\n\n while ((child = element.firstChild)) {\n element.removeChild(child);\n }\n\n return element;\n}\n\nfunction clone(element) {\n return element.cloneNode(true);\n}\n\nvar ns = {\n svg: 'http://www.w3.org/2000/svg'\n};\n\n/**\n * DOM parsing utility\n */\n\n\nvar SVG_START = '<svg xmlns=\"' + ns.svg + '\"';\n\nfunction parse(svg) {\n\n var unwrap = false;\n\n // ensure we import a valid svg document\n if (svg.substring(0, 4) === '<svg') {\n if (svg.indexOf(ns.svg) === -1) {\n svg = SVG_START + svg.substring(4);\n }\n } else {\n\n // namespace svg\n svg = SVG_START + '>' + svg + '</svg>';\n unwrap = true;\n }\n\n var parsed = parseDocument(svg);\n\n if (!unwrap) {\n return parsed;\n }\n\n var fragment = document.createDocumentFragment();\n\n var parent = parsed.firstChild;\n\n while (parent.firstChild) {\n fragment.appendChild(parent.firstChild);\n }\n\n return fragment;\n}\n\nfunction parseDocument(svg) {\n\n var parser;\n\n // parse\n parser = new DOMParser();\n parser.async = false;\n\n return parser.parseFromString(svg, 'text/xml');\n}\n\n/**\n * Create utility for SVG elements\n */\n\n\n\n/**\n * Create a specific type from name or SVG markup.\n *\n * @param {String} name the name or markup of the element\n * @param {Object} [attrs] attributes to set on the element\n *\n * @returns {SVGElement}\n */\nfunction create(name, attrs) {\n var element;\n\n name = name.trim();\n\n if (name.charAt(0) === '<') {\n element = parse(name).firstChild;\n element = document.importNode(element, true);\n } else {\n element = document.createElementNS(ns.svg, name);\n }\n\n if (attrs) {\n attr(element, attrs);\n }\n\n return element;\n}\n\n/**\n * Events handling utility\n */\n\nfunction on(node, event, listener, useCapture) {\n node.addEventListener(event, listener, useCapture);\n}\n\nfunction off(node, event, listener, useCapture) {\n node.removeEventListener(event, listener, useCapture);\n}\n\n/**\n * Geometry helpers\n */\n\n\n// fake node used to instantiate svg geometry elements\nvar node = null;\n\nfunction getNode() {\n if (node === null) {\n node = create('svg');\n }\n\n return node;\n}\n\nfunction extend(object, props) {\n var i, k, keys = Object.keys(props);\n\n for (i = 0; (k = keys[i]); i++) {\n object[k] = props[k];\n }\n\n return object;\n}\n\n\nfunction createPoint(x, y) {\n var point = getNode().createSVGPoint();\n\n switch (arguments.length) {\n case 0:\n return point;\n case 2:\n x = {\n x: x,\n y: y\n };\n break;\n }\n\n return extend(point, x);\n}\n\n/**\n * Create matrix via args.\n *\n * @example\n *\n * createMatrix({ a: 1, b: 1 });\n * createMatrix();\n * createMatrix(1, 2, 0, 0, 30, 20);\n *\n * @return {SVGMatrix}\n */\nfunction createMatrix(a, b, c, d, e, f) {\n var matrix = getNode().createSVGMatrix();\n\n switch (arguments.length) {\n case 0:\n return matrix;\n case 1:\n return extend(matrix, a);\n case 6:\n return extend(matrix, {\n a: a,\n b: b,\n c: c,\n d: d,\n e: e,\n f: f\n });\n }\n}\n\nfunction createTransform(matrix) {\n if (matrix) {\n return getNode().createSVGTransformFromMatrix(matrix);\n } else {\n return getNode().createSVGTransform();\n }\n}\n\n/**\n * Serialization util\n */\n\nvar TEXT_ENTITIES = /([&<>]{1})/g;\nvar ATTR_ENTITIES = /([&<>\\n\\r\"]{1})/g;\n\nvar ENTITY_REPLACEMENT = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '\\''\n};\n\nfunction escape(str, pattern) {\n\n function replaceFn(match, entity) {\n return ENTITY_REPLACEMENT[entity] || entity;\n }\n\n return str.replace(pattern, replaceFn);\n}\n\nfunction serialize(node, output) {\n\n var i, len, attrMap, attrNode, childNodes;\n\n switch (node.nodeType) {\n\n // TEXT\n case 3:\n\n // replace special XML characters\n output.push(escape(node.textContent, TEXT_ENTITIES));\n break;\n\n // ELEMENT\n case 1:\n output.push('<', node.tagName);\n\n if (node.hasAttributes()) {\n attrMap = node.attributes;\n for (i = 0, len = attrMap.length; i < len; ++i) {\n attrNode = attrMap.item(i);\n output.push(' ', attrNode.name, '=\"', escape(attrNode.value, ATTR_ENTITIES), '\"');\n }\n }\n\n if (node.hasChildNodes()) {\n output.push('>');\n childNodes = node.childNodes;\n for (i = 0, len = childNodes.length; i < len; ++i) {\n serialize(childNodes.item(i), output);\n }\n output.push('</', node.tagName, '>');\n } else {\n output.push('/>');\n }\n break;\n\n // COMMENT\n case 8:\n output.push('<!--', escape(node.nodeValue, TEXT_ENTITIES), '-->');\n break;\n\n // CDATA\n case 4:\n output.push('<![CDATA[', node.nodeValue, ']]>');\n break;\n\n default:\n throw new Error('unable to handle node ' + node.nodeType);\n }\n\n return output;\n}\n\n/**\n * innerHTML like functionality for SVG elements.\n * based on innerSVG (https://code.google.com/p/innersvg)\n */\n\n\n\nfunction set(element, svg) {\n\n var parsed = parse(svg);\n\n // clear element contents\n clear(element);\n\n if (!svg) {\n return;\n }\n\n if (!isFragment(parsed)) {\n\n // extract <svg> from parsed document\n parsed = parsed.documentElement;\n }\n\n var nodes = slice(parsed.childNodes);\n\n // import + append each node\n for (var i = 0; i < nodes.length; i++) {\n appendTo(nodes[i], element);\n }\n\n}\n\nfunction get(element) {\n var child = element.firstChild,\n output = [];\n\n while (child) {\n serialize(child, output);\n child = child.nextSibling;\n }\n\n return output.join('');\n}\n\nfunction isFragment(node) {\n return node.nodeName === '#document-fragment';\n}\n\nfunction innerSVG(element, svg) {\n\n if (svg !== undefined) {\n\n try {\n set(element, svg);\n } catch (e) {\n throw new Error('error parsing SVG: ' + e.message);\n }\n\n return element;\n } else {\n return get(element);\n }\n}\n\n\nfunction slice(arr) {\n return Array.prototype.slice.call(arr);\n}\n\n/**\n * Selection utilities\n */\n\nfunction select(node, selector) {\n return node.querySelector(selector);\n}\n\nfunction selectAll(node, selector) {\n var nodes = node.querySelectorAll(selector);\n\n return [].map.call(nodes, function(element) {\n return element;\n });\n}\n\n/**\n * prependTo utility\n */\n\n\n/**\n * Prepend a node to a target element and return the prepended node.\n *\n * @param {SVGElement} node\n * @param {SVGElement} target\n *\n * @return {SVGElement} the prepended node\n */\nfunction prependTo(node, target) {\n return target.insertBefore(ensureImported(node, target), target.firstChild || null);\n}\n\n/**\n * prepend utility\n */\n\n\n/**\n * Prepend a node to a target element\n *\n * @param {SVGElement} target\n * @param {SVGElement} node\n *\n * @return {SVGElement} the target element\n */\nfunction prepend(target, node) {\n prependTo(node, target);\n return target;\n}\n\nfunction remove(element) {\n var parent = element.parentNode;\n\n if (parent) {\n parent.removeChild(element);\n }\n\n return element;\n}\n\n/**\n * Replace utility\n */\n\n\nfunction replace(element, replacement) {\n element.parentNode.replaceChild(ensureImported(replacement, element), element);\n return replacement;\n}\n\n/**\n * transform accessor utility\n */\n\nfunction wrapMatrix(transformList, transform) {\n if (transform instanceof SVGMatrix) {\n return transformList.createSVGTransformFromMatrix(transform);\n }\n\n return transform;\n}\n\n\nfunction setTransforms(transformList, transforms) {\n var i, t;\n\n transformList.clear();\n\n for (i = 0; (t = transforms[i]); i++) {\n transformList.appendItem(wrapMatrix(transformList, t));\n }\n}\n\n/**\n * Get or set the transforms on the given node.\n *\n * @param {SVGElement} node\n * @param {SVGTransform|SVGMatrix|Array<SVGTransform|SVGMatrix>} [transforms]\n *\n * @return {SVGTransform} the consolidated transform\n */\nfunction transform(node, transforms) {\n var transformList = node.transform.baseVal;\n\n if (transforms) {\n\n if (!Array.isArray(transforms)) {\n transforms = [ transforms ];\n }\n\n setTransforms(transformList, transforms);\n }\n\n return transformList.consolidate();\n}\n\nexport { append, appendTo, attr, classes, clear, clone, create, createMatrix, createPoint, createTransform, innerSVG, off, on, prepend, prependTo, remove, replace, select, selectAll, transform };\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","var DEFAULT_RENDER_PRIORITY = 1000;\n\n/**\n * @typedef {import('../model').Base} Base\n * @typedef {import('../model').Connection} Connection\n * @typedef {import('../model').Shape} Shape\n *\n * @typedef {import('../core/EventBus').default} EventBus\n */\n\n/**\n * The base implementation of shape and connection renderers.\n *\n * @param {EventBus} eventBus\n * @param {number} [renderPriority=1000]\n */\nexport default function BaseRenderer(eventBus, renderPriority) {\n var self = this;\n\n renderPriority = renderPriority || DEFAULT_RENDER_PRIORITY;\n\n eventBus.on([ 'render.shape', 'render.connection' ], renderPriority, function(evt, context) {\n var type = evt.type,\n element = context.element,\n visuals = context.gfx,\n attrs = context.attrs;\n\n if (self.canRender(element)) {\n if (type === 'render.shape') {\n return self.drawShape(visuals, element, attrs);\n } else {\n return self.drawConnection(visuals, element, attrs);\n }\n }\n });\n\n eventBus.on([ 'render.getShapePath', 'render.getConnectionPath' ], renderPriority, function(evt, element) {\n if (self.canRender(element)) {\n if (evt.type === 'render.getShapePath') {\n return self.getShapePath(element);\n } else {\n return self.getConnectionPath(element);\n }\n }\n });\n}\n\n/**\n * Checks whether an element can be rendered.\n *\n * @param {Base} element The element to be rendered.\n *\n * @returns {boolean} Whether the element can be rendered.\n */\nBaseRenderer.prototype.canRender = function(element) {};\n\n/**\n * Draws a shape.\n *\n * @param {SVGElement} visuals The SVG element to draw the shape into.\n * @param {Shape} shape The shape to be drawn.\n *\n * @returns {SVGElement} The SVG element of the shape drawn.\n */\nBaseRenderer.prototype.drawShape = function(visuals, shape) {};\n\n/**\n * Draws a connection.\n *\n * @param {SVGElement} visuals The SVG element to draw the connection into.\n * @param {Connection} connection The connection to be drawn.\n *\n * @returns {SVGElement} The SVG element of the connection drawn.\n */\nBaseRenderer.prototype.drawConnection = function(visuals, connection) {};\n\n/**\n * Gets the SVG path of the graphical representation of a shape.\n *\n * @param {Shape} shape The shape.\n *\n * @return {string} The SVG path of the shape.\n */\nBaseRenderer.prototype.getShapePath = function(shape) {};\n\n/**\n * Gets the SVG path of the graphical representation of a connection.\n *\n * @param {Connection} connection The connection.\n *\n * @return {string} The SVG path of the connection.\n */\nBaseRenderer.prototype.getConnectionPath = function(connection) {};\n","import {\n isNumber\n} from 'min-dash';\n\nimport {\n attr as svgAttr,\n create as svgCreate\n} from 'tiny-svg';\n\n/**\n * @typedef {(string|number)[]} Component\n *\n * @typedef {import('../util/Types').Point} Point\n */\n\n/**\n * @param {Component[]} elements\n *\n * @return {string}\n */\nexport function componentsToPath(elements) {\n return elements.flat().join(',').replace(/,?([A-z]),?/g, '$1');\n}\n\nexport function toSVGPoints(points) {\n var result = '';\n\n for (var i = 0, p; (p = points[i]); i++) {\n result += p.x + ',' + p.y + ' ';\n }\n\n return result;\n}\n\nfunction move(point) {\n return [ 'M', point.x, point.y ];\n}\n\nfunction lineTo(point) {\n return [ 'L', point.x, point.y ];\n}\n\nfunction curveTo(p1, p2, p3) {\n return [ 'C', p1.x, p1.y, p2.x, p2.y, p3.x, p3.y ];\n}\n\nfunction drawPath(waypoints, cornerRadius) {\n const pointCount = waypoints.length;\n\n const path = [ move(waypoints[0]) ];\n\n for (let i = 1; i < pointCount; i++) {\n\n const pointBefore = waypoints[i - 1];\n const point = waypoints[i];\n const pointAfter = waypoints[i + 1];\n\n if (!pointAfter || !cornerRadius) {\n path.push(lineTo(point));\n\n continue;\n }\n\n const effectiveRadius = Math.min(\n cornerRadius,\n vectorLength(point.x - pointBefore.x, point.y - pointBefore.y),\n vectorLength(pointAfter.x - point.x, pointAfter.y - point.y)\n );\n\n if (!effectiveRadius) {\n path.push(lineTo(point));\n\n continue;\n }\n\n const beforePoint = getPointAtLength(point, pointBefore, effectiveRadius);\n const beforePoint2 = getPointAtLength(point, pointBefore, effectiveRadius * .5);\n\n const afterPoint = getPointAtLength(point, pointAfter, effectiveRadius);\n const afterPoint2 = getPointAtLength(point, pointAfter, effectiveRadius * .5);\n\n path.push(lineTo(beforePoint));\n path.push(curveTo(beforePoint2, afterPoint2, afterPoint));\n }\n\n return path;\n}\n\nfunction getPointAtLength(start, end, length) {\n\n const deltaX = end.x - start.x;\n const deltaY = end.y - start.y;\n\n const totalLength = vectorLength(deltaX, deltaY);\n\n const percent = length / totalLength;\n\n return {\n x: start.x + deltaX * percent,\n y: start.y + deltaY * percent\n };\n}\n\nfunction vectorLength(x, y) {\n return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\n}\n\n/**\n * @param {Point[]} points\n * @param {*} [attrs]\n * @param {number} [radius]\n *\n * @return {SVGElement}\n */\nexport function createLine(points, attrs, radius) {\n\n if (isNumber(attrs)) {\n radius = attrs;\n attrs = null;\n }\n\n if (!attrs) {\n attrs = {};\n }\n\n const line = svgCreate('path', attrs);\n\n if (isNumber(radius)) {\n line.dataset.cornerRadius = String(radius);\n }\n\n return updateLine(line, points);\n}\n\n/**\n * @param {SVGElement} gfx\n * @param {Point[]} points\n *\n * @return {SVGElement}\n */\nexport function updateLine(gfx, points) {\n\n const cornerRadius = parseInt(gfx.dataset.cornerRadius, 10) || 0;\n\n svgAttr(gfx, {\n d: componentsToPath(drawPath(points, cornerRadius))\n });\n\n return gfx;\n}\n","import {\n assign,\n filter,\n find,\n isArray,\n isNumber,\n isObject,\n isUndefined,\n groupBy,\n forEach\n} from 'min-dash';\n\n/**\n * @typedef {import('../../model').Base} Base\n * @typedef {import('../../model').Shape} Shape\n *\n * @typedef {import('../../type/Types').Rect} Rect\n */\n\n/**\n * Get parent elements.\n *\n * @param {Base[]} elements\n *\n * @returns {Base[]}\n */\nexport function getParents(elements) {\n\n // find elements that are not children of any other elements\n return filter(elements, function(element) {\n return !find(elements, function(e) {\n return e !== element && getParent(element, e);\n });\n });\n}\n\n\nfunction getParent(element, parent) {\n if (!parent) {\n return;\n }\n\n if (element === parent) {\n return parent;\n }\n\n if (!element.parent) {\n return;\n }\n\n return getParent(element.parent, parent);\n}\n\n\n/**\n * Adds an element to a collection and returns true if the\n * element was added.\n *\n * @param {Object[]} elements\n * @param {Object} e\n * @param {boolean} unique\n */\nexport function add(elements, e, unique) {\n var canAdd = !unique || elements.indexOf(e) === -1;\n\n if (canAdd) {\n elements.push(e);\n }\n\n return canAdd;\n}\n\n\n/**\n * Iterate over each element in a collection, calling the iterator function `fn`\n * with (element, index, recursionDepth).\n *\n * Recurse into all elements that are returned by `fn`.\n *\n * @param {Object|Object[]} elements\n * @param {Function} fn iterator function called with (element, index, recursionDepth)\n * @param {number} [depth] maximum recursion depth\n */\nexport function eachElement(elements, fn, depth) {\n\n depth = depth || 0;\n\n if (!isArray(elements)) {\n elements = [ elements ];\n }\n\n forEach(elements, function(s, i) {\n var filter = fn(s, i, depth);\n\n if (isArray(filter) && filter.length) {\n eachElement(filter, fn, depth + 1);\n }\n });\n}\n\n\n/**\n * Collects self + child elements up to a given depth from a list of elements.\n *\n * @param {Base|Base[]} elements the elements to select the children from\n * @param {boolean} unique whether to return a unique result set (no duplicates)\n * @param {number} maxDepth the depth to search through or -1 for infinite\n *\n * @return {Base[]} found elements\n */\nexport function selfAndChildren(elements, unique, maxDepth) {\n var result = [],\n processedChildren = [];\n\n eachElement(elements, function(element, i, depth) {\n add(result, element, unique);\n\n var children = element.children;\n\n // max traversal depth not reached yet\n if (maxDepth === -1 || depth < maxDepth) {\n\n // children exist && children not yet processed\n if (children && add(processedChildren, children, unique)) {\n return children;\n }\n }\n });\n\n return result;\n}\n\n/**\n * Return self + direct children for a number of elements\n *\n * @param {Base[]} elements to query\n * @param {boolean} allowDuplicates to allow duplicates in the result set\n *\n * @return {Base[]} the collected elements\n */\nexport function selfAndDirectChildren(elements, allowDuplicates) {\n return selfAndChildren(elements, !allowDuplicates, 1);\n}\n\n\n/**\n * Return self + ALL children for a number of elements\n *\n * @param {Base[]} elements to query\n * @param {boolean} allowDuplicates to allow duplicates in the result set\n *\n * @return {Base[]} the collected elements\n */\nexport function selfAndAllChildren(elements, allowDuplicates) {\n return selfAndChildren(elements, !allowDuplicates, -1);\n}\n\n\n/**\n * Gets the the closure for all selected elements,\n * their enclosed children and connections.\n *\n * @param {Base[]} elements\n * @param {boolean} [isTopLevel=true]\n * @param {Object} [existingClosure]\n *\n * @return {Object} newClosure\n */\nexport function getClosure(elements, isTopLevel, closure) {\n\n if (isUndefined(isTopLevel)) {\n isTopLevel = true;\n }\n\n if (isObject(isTopLevel)) {\n closure = isTopLevel;\n isTopLevel = true;\n }\n\n\n closure = closure || {};\n\n var allShapes = copyObject(closure.allShapes),\n allConnections = copyObject(closure.allConnections),\n enclosedElements = copyObject(closure.enclosedElements),\n enclosedConnections = copyObject(closure.enclosedConnections);\n\n var topLevel = copyObject(\n closure.topLevel,\n isTopLevel && groupBy(elements, function(e) { return e.id; })\n );\n\n\n function handleConnection(c) {\n if (topLevel[c.source.id] && topLevel[c.target.id]) {\n topLevel[c.id] = [ c ];\n }\n\n // not enclosed as a child, but maybe logically\n // (connecting two moved elements?)\n if (allShapes[c.source.id] && allShapes[c.target.id]) {\n enclosedConnections[c.id] = enclosedElements[c.id] = c;\n }\n\n allConnections[c.id] = c;\n }\n\n function handleElement(element) {\n\n enclosedElements[element.id] = element;\n\n if (element.waypoints) {\n\n // remember connection\n enclosedConnections[element.id] = allConnections[element.id] = element;\n } else {\n\n // remember shape\n allShapes[element.id] = element;\n\n // remember all connections\n forEach(element.incoming, handleConnection);\n\n forEach(element.outgoing, handleConnection);\n\n // recurse into children\n return element.children;\n }\n }\n\n eachElement(elements, handleElement);\n\n return {\n allShapes: allShapes,\n allConnections: allConnections,\n topLevel: topLevel,\n enclosedConnections: enclosedConnections,\n enclosedElements: enclosedElements\n };\n}\n\n/**\n * Returns the surrounding bbox for all elements in\n * the array or the element primitive.\n *\n * @param {Base|Base[]} elements\n * @param {boolean} [stopRecursion=false]\n *\n * @return {Rect}\n */\nexport function getBBox(elements, stopRecursion) {\n\n stopRecursion = !!stopRecursion;\n if (!isArray(elements)) {\n elements = [ elements ];\n }\n\n var minX,\n minY,\n maxX,\n maxY;\n\n forEach(elements, function(element) {\n\n // If element is a connection the bbox must be computed first\n var bbox = element;\n if (element.waypoints && !stopRecursion) {\n bbox = getBBox(element.waypoints, true);\n }\n\n var x = bbox.x,\n y = bbox.y,\n height = bbox.height || 0,\n width = bbox.width || 0;\n\n if (x < minX || minX === undefined) {\n minX = x;\n }\n if (y < minY || minY === undefined) {\n minY = y;\n }\n\n if ((x + width) > maxX || maxX === undefined) {\n maxX = x + width;\n }\n if ((y + height) > maxY || maxY === undefined) {\n maxY = y + height;\n }\n });\n\n return {\n x: minX,\n y: minY,\n height: maxY - minY,\n width: maxX - minX\n };\n}\n\n\n/**\n * Returns all elements that are enclosed from the bounding box.\n *\n * * If bbox.(width|height) is not specified the method returns\n * all elements with element.x/y > bbox.x/y\n * * If only bbox.x or bbox.y is specified, method return all elements with\n * e.x > bbox.x or e.y > bbox.y\n *\n * @param {Base[]} elements List of Elements to search through\n * @param {Rect} bbox the enclosing bbox.\n *\n * @return {Base[]} enclosed elements\n */\nexport function getEnclosedElements(elements, bbox) {\n\n var filteredElements = {};\n\n forEach(elements, function(element) {\n\n var e = element;\n\n if (e.waypoints) {\n e = getBBox(e);\n }\n\n if (!isNumber(bbox.y) && (e.x > bbox.x)) {\n filteredElements[element.id] = element;\n }\n if (!isNumber(bbox.x) && (e.y > bbox.y)) {\n filteredElements[element.id] = element;\n }\n if (e.x > bbox.x && e.y > bbox.y) {\n if (isNumber(bbox.width) && isNumber(bbox.height) &&\n e.width + e.x < bbox.width + bbox.x &&\n e.height + e.y < bbox.height + bbox.y) {\n\n filteredElements[element.id] = element;\n } else if (!isNumber(bbox.width) || !isNumber(bbox.height)) {\n filteredElements[element.id] = element;\n }\n }\n });\n\n return filteredElements;\n}\n\n\nexport function getType(element) {\n\n if ('waypoints' in element) {\n return 'connection';\n }\n\n if ('x' in element) {\n return 'shape';\n }\n\n return 'root';\n}\n\nexport function isFrameElement(element) {\n\n return !!(element && element.isFrame);\n}\n\n// helpers ///////////////////////////////\n\nfunction copyObject(src1, src2) {\n return assign({}, src1 || {}, src2 || {});\n}","import inherits from 'inherits-browser';\n\nimport BaseRenderer from './BaseRenderer';\n\nimport {\n componentsToPath,\n createLine\n} from '../util/RenderUtil';\n\nimport {\n append as svgAppend,\n attr as svgAttr,\n create as svgCreate\n} from 'tiny-svg';\n\nimport { assign } from 'min-dash';\n\nimport {\n isFrameElement\n} from '../util/Elements';\n\n/**\n * @typedef {import('../core/EventBus').default} EventBus\n * @typedef {import('./Styles').default} Styles\n */\n\n// apply default renderer with lowest possible priority\n// so that it only kicks in if noone else could render\nvar DEFAULT_RENDER_PRIORITY = 1;\n\n/**\n * The default renderer used for shapes and connections.\n *\n * @param {EventBus} eventBus\n * @param {Styles} styles\n */\nexport default function DefaultRenderer(eventBus, styles) {\n\n //\n BaseRenderer.call(this, eventBus, DEFAULT_RENDER_PRIORITY);\n\n this.CONNECTION_STYLE = styles.style([ 'no-fill' ], { strokeWidth: 5, stroke: 'fuchsia' });\n this.SHAPE_STYLE = styles.style({ fill: 'white', stroke: 'fuchsia', strokeWidth: 2 });\n this.FRAME_STYLE = styles.style([ 'no-fill' ], { stroke: 'fuchsia', strokeDasharray: 4, strokeWidth: 2 });\n}\n\ninherits(DefaultRenderer, BaseRenderer);\n\n\nDefaultRenderer.prototype.canRender = function() {\n return true;\n};\n\nDefaultRenderer.prototype.drawShape = function drawShape(visuals, element, attrs) {\n var rect = svgCreate('rect');\n\n svgAttr(rect, {\n x: 0,\n y: 0,\n width: element.width || 0,\n height: element.height || 0\n });\n\n if (isFrameElement(element)) {\n svgAttr(rect, assign({}, this.FRAME_STYLE, attrs || {}));\n } else {\n svgAttr(rect, assign({}, this.SHAPE_STYLE, attrs || {}));\n }\n\n svgAppend(visuals, rect);\n\n return rect;\n};\n\nDefaultRenderer.prototype.drawConnection = function drawConnection(visuals, connection, attrs) {\n\n var line = createLine(connection.waypoints, assign({}, this.CONNECTION_STYLE, attrs || {}));\n svgAppend(visuals, line);\n\n return line;\n};\n\nDefaultRenderer.prototype.getShapePath = function getShapePath(shape) {\n\n var x = shape.x,\n y = shape.y,\n width = shape.width,\n height = shape.height;\n\n var shapePath = [\n [ 'M', x, y ],\n [ 'l', width, 0 ],\n [ 'l', 0, height ],\n [ 'l', -width, 0 ],\n [ 'z' ]\n ];\n\n return componentsToPath(shapePath);\n};\n\nDefaultRenderer.prototype.getConnectionPath = function getConnectionPath(connection) {\n var waypoints = connection.waypoints;\n\n var idx, point, connectionPath = [];\n\n for (idx = 0; (point = waypoints[idx]); idx++) {\n\n // take invisible docking into account\n // when creating the path\n point = point.original || point;\n\n connectionPath.push([ idx === 0 ? 'M' : 'L', point.x, point.y ]);\n }\n\n return componentsToPath(connectionPath);\n};\n\n\nDefaultRenderer.$inject = [ 'eventBus', 'styles' ];\n","import {\n isArray,\n assign,\n reduce\n} from 'min-dash';\n\n\n/**\n * A component that manages shape styles\n */\nexport default function Styles() {\n\n var defaultTraits = {\n\n 'no-fill': {\n fill: 'none'\n },\n 'no-border': {\n strokeOpacity: 0.0\n },\n 'no-events': {\n pointerEvents: 'none'\n }\n };\n\n var self = this;\n\n /**\n * Builds a style definition from a className, a list of traits and an object of additional attributes.\n *\n * @param {string} className\n * @param {Array<string>} traits\n * @param {Object} additionalAttrs\n *\n * @return {Object} the style defintion\n */\n this.cls = function(className, traits, additionalAttrs) {\n var attrs = this.style(traits, additionalAttrs);\n\n return assign(attrs, { 'class': className });\n };\n\n /**\n * Builds a style definition from a list of traits and an object of additional attributes.\n *\n * @param {Array<string>} traits\n * @param {Object} additionalAttrs\n *\n * @return {Object} the style defintion\n */\n this.style = function(traits, additionalAttrs) {\n\n if (!isArray(traits) && !additionalAttrs) {\n additionalAttrs = traits;\n traits = [];\n }\n\n var attrs = reduce(traits, function(attrs, t) {\n return assign(attrs, defaultTraits[t] || {});\n }, {});\n\n return additionalAttrs ? assign(attrs, additionalAttrs) : attrs;\n };\n\n this.computeStyle = function(custom, traits, defaultStyles) {\n if (!isArray(traits)) {\n defaultStyles = traits;\n traits = [];\n }\n\n return self.style(traits || [], assign({}, defaultStyles, custom || {}));\n };\n}\n","import DefaultRenderer from './DefaultRenderer';\nimport Styles from './Styles';\n\nexport default {\n __init__: [ 'defaultRenderer' ],\n defaultRenderer: [ 'type', DefaultRenderer ],\n styles: [ 'type', Styles ]\n};\n","/**\n * Failsafe remove an element from a collection\n *\n * @param {Array<Object>} [collection]\n * @param {Object} [element]\n *\n * @return {number} the previous index of the element\n */\nexport function remove(collection, element) {\n\n if (!collection || !element) {\n return -1;\n }\n\n var idx = collection.indexOf(element);\n\n if (idx !== -1) {\n collection.splice(idx, 1);\n }\n\n return idx;\n}\n\n/**\n * Fail save add an element to the given connection, ensuring\n * it does not yet exist.\n *\n * @param {Array<Object>} collection\n * @param {Object} element\n * @param {number} idx\n */\nexport function add(collection, element, idx) {\n\n if (!collection || !element) {\n return;\n }\n\n if (typeof idx !== 'number') {\n idx = -1;\n }\n\n var currentIdx = collection.indexOf(element);\n\n if (currentIdx !== -1) {\n\n if (currentIdx === idx) {\n\n // nothing to do, position has not changed\n return;\n } else {\n\n if (idx !== -1) {\n\n // remove from current position\n collection.splice(currentIdx, 1);\n } else {\n\n // already exists in collection\n return;\n }\n }\n }\n\n if (idx !== -1) {\n\n // insert at specified position\n collection.splice(idx, 0, element);\n } else {\n\n // push to end\n collection.push(element);\n }\n}\n\n\n/**\n * Fail save get the index of an element in a collection.\n *\n * @param {Array<Object>} collection\n * @param {Object} element\n *\n * @return {number} the index or -1 if collection or element do\n * not exist or the element is not contained.\n */\nexport function indexOf(collection, element) {\n\n if (!collection || !element) {\n return -1;\n }\n\n return collection.indexOf(element);\n}\n","import {\n every\n} from 'min-dash';\n\n/**\n * @typedef {import('../util/Types').Axis} Axis\n * @typedef {import('../util/Types').Point} Point\n * @typedef {import('../util/Types').Rect} Rect\n */\n\n/**\n * Computes the distance between two points.\n *\n * @param {Point} p\n * @param {Point} q\n *\n * @return {number} The distance between the two points.\n */\nexport function pointDistance(a, b) {\n if (!a || !b) {\n return -1;\n }\n\n return Math.sqrt(\n Math.pow(a.x - b.x, 2) +\n Math.pow(a.y - b.y, 2)\n );\n}\n\n\n/**\n * Returns true if the point r is on the line between p and q.\n *\n * @param {Point} p\n * @param {Point} q\n * @param {Point} r\n * @param {number} [accuracy=5] The accuracy with which to check (lower is better).\n *\n * @return {boolean}\n */\nexport function pointsOnLine(p, q, r, accuracy) {\n\n if (typeof accuracy === 'undefined') {\n accuracy = 5;\n }\n\n if (!p || !q || !r) {\n return false;\n }\n\n var val = (q.x - p.x) * (r.y - p.y) - (q.y - p.y) * (r.x - p.x),\n dist = pointDistance(p, q);\n\n // @see http://stackoverflow.com/a/907491/412190\n return Math.abs(val / dist) <= accuracy;\n}\n\n\nvar ALIGNED_THRESHOLD = 2;\n\n/**\n * Check whether two points are horizontally or vertically aligned.\n *\n * @param {Point[]|Point} a\n * @param {Point} [b]\n *\n * @return {string|boolean} If and how the two points are aligned ('h', 'v' or `false`).\n */\nexport function pointsAligned(a, b) {\n var points = Array.from(arguments).flat();\n\n const axisMap = {\n 'x': 'v',\n 'y': 'h'\n };\n\n for (const [ axis, orientation ] of Object.entries(axisMap)) {\n if (pointsAlignedOnAxis(axis, points)) {\n return orientation;\n }\n }\n\n return false;\n}\n\n/**\n * @param {Axis} axis\n * @param {Point[]} points\n *\n * @return {boolean}\n */\nexport function pointsAlignedOnAxis(axis, points) {\n const referencePoint = points[0];\n\n return every(points, function(point) {\n return Math.abs(referencePoint[axis] - point[axis]) <= ALIGNED_THRESHOLD;\n });\n}\n\n/**\n * Returns true if the point p is inside the rectangle rect\n *\n * @param {Point} p\n * @param {Rect} rect\n * @param {number} tolerance\n *\n * @return {boolean}\n */\nexport function pointInRect(p, rect, tolerance) {\n tolerance = tolerance || 0;\n\n return p.x > rect.x - tolerance &&\n p.y > rect.y - tolerance &&\n p.x < rect.x + rect.width + tolerance &&\n p.y < rect.y + rect.height + tolerance;\n}\n\n/**\n * Returns a point in the middle of points p and q\n *\n * @param {Point} p\n * @param {Point} q\n *\n * @return {Point} The mid point between the two points.\n */\nexport function getMidPoint(p, q) {\n return {\n x: Math.round(p.x + ((q.x - p.x) / 2.0)),\n y: Math.round(p.y + ((q.y - p.y) / 2.0))\n };\n}\n","'use strict';\n\n/**\n * This file contains source code adapted from Snap.svg (licensed Apache-2.0).\n *\n * @see https://github.com/adobe-webplatform/Snap.svg/blob/master/src/path.js\n */\n\n/* eslint no-fallthrough: \"off\" */\n\nvar p2s = /,?([a-z]),?/gi,\n toFloat = parseFloat,\n math = Math,\n PI = math.PI,\n mmin = math.min,\n mmax = math.max,\n pow = math.pow,\n abs = math.abs,\n pathCommand = /([a-z])[\\s,]*((-?\\d*\\.?\\d*(?:e[-+]?\\d+)?[\\s]*,?[\\s]*)+)/ig,\n pathValues = /(-?\\d*\\.?\\d*(?:e[-+]?\\d+)?)[\\s]*,?[\\s]*/ig;\n\nvar isArray = Array.isArray || function(o) { return o instanceof Array; };\n\nfunction hasProperty(obj, property) {\n return Object.prototype.hasOwnProperty.call(obj, property);\n}\n\nfunction clone(obj) {\n\n if (typeof obj == 'function' || Object(obj) !== obj) {\n return obj;\n }\n\n var res = new obj.constructor;\n\n for (var key in obj) {\n if (hasProperty(obj, key)) {\n res[key] = clone(obj[key]);\n }\n }\n\n return res;\n}\n\nfunction repush(array, item) {\n for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) {\n return array.push(array.splice(i, 1)[0]);\n }\n}\n\nfunction cacher(f) {\n\n function newf() {\n\n var arg = Array.prototype.slice.call(arguments, 0),\n args = arg.join('\\u2400'),\n cache = newf.cache = newf.cache || {},\n count = newf.count = newf.count || [];\n\n if (hasProperty(cache, args)) {\n repush(count, args);\n return cache[args];\n }\n\n count.length >= 1e3 && delete cache[count.shift()];\n count.push(args);\n cache[args] = f.apply(0, arg);\n\n return cache[args];\n }\n return newf;\n}\n\nfunction parsePathString(pathString) {\n\n if (!pathString) {\n return null;\n }\n\n var pth = paths(pathString);\n\n if (pth.arr) {\n return clone(pth.arr);\n }\n\n var paramCounts = { a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0 },\n data = [];\n\n if (isArray(pathString) && isArray(pathString[0])) { // rough assumption\n data = clone(pathString);\n }\n\n if (!data.length) {\n\n String(pathString).replace(pathCommand, function(a, b, c) {\n var params = [],\n name = b.toLowerCase();\n\n c.replace(pathValues, function(a, b) {\n b && params.push(+b);\n });\n\n if (name == 'm' && params.length > 2) {\n data.push([b].concat(params.splice(0, 2)));\n name = 'l';\n b = b == 'm' ? 'l' : 'L';\n }\n\n while (params.length >= paramCounts[name]) {\n data.push([b].concat(params.splice(0, paramCounts[name])));\n if (!paramCounts[name]) {\n break;\n }\n }\n });\n }\n\n data.toString = paths.toString;\n pth.arr = clone(data);\n\n return data;\n}\n\nfunction paths(ps) {\n var p = paths.ps = paths.ps || {};\n\n if (p[ps]) {\n p[ps].sleep = 100;\n } else {\n p[ps] = {\n sleep: 100\n };\n }\n\n setTimeout(function() {\n for (var key in p) {\n if (hasProperty(p, key) && key != ps) {\n p[key].sleep--;\n !p[key].sleep && delete p[key];\n }\n }\n });\n\n return p[ps];\n}\n\nfunction rectBBox(x, y, width, height) {\n\n if (arguments.length === 1) {\n y = x.y;\n width = x.width;\n height = x.height;\n x = x.x;\n }\n\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n x2: x + width,\n y2: y + height\n };\n}\n\nfunction pathToString() {\n return this.join(',').replace(p2s, '$1');\n}\n\nfunction pathClone(pathArray) {\n var res = clone(pathArray);\n res.toString = pathToString;\n return res;\n}\n\nfunction findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n var t1 = 1 - t,\n t13 = pow(t1, 3),\n t12 = pow(t1, 2),\n t2 = t * t,\n t3 = t2 * t,\n x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x,\n y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y;\n\n return {\n x: fixError(x),\n y: fixError(y)\n };\n}\n\nfunction bezierBBox(points) {\n\n var bbox = curveBBox.apply(null, points);\n\n return rectBBox(\n bbox.x0,\n bbox.y0,\n bbox.x1 - bbox.x0,\n bbox.y1 - bbox.y0\n );\n}\n\nfunction isPointInsideBBox(bbox, x, y) {\n return x >= bbox.x &&\n x <= bbox.x + bbox.width &&\n y >= bbox.y &&\n y <= bbox.y + bbox.height;\n}\n\nfunction isBBoxIntersect(bbox1, bbox2) {\n bbox1 = rectBBox(bbox1);\n bbox2 = rectBBox(bbox2);\n return isPointInsideBBox(bbox2, bbox1.x, bbox1.y)\n || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y)\n || isPointInsideBBox(bbox2, bbox1.x, bbox1.y2)\n || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y2)\n || isPointInsideBBox(bbox1, bbox2.x, bbox2.y)\n || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y)\n || isPointInsideBBox(bbox1, bbox2.x, bbox2.y2)\n || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y2)\n || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x\n || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x)\n && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y\n || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y);\n}\n\nfunction base3(t, p1, p2, p3, p4) {\n var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4,\n t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n return t * t2 - 3 * p1 + 3 * p2;\n}\n\nfunction bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) {\n\n if (z == null) {\n z = 1;\n }\n\n z = z > 1 ? 1 : z < 0 ? 0 : z;\n\n var z2 = z / 2,\n n = 12,\n Tvalues = [-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],\n Cvalues = [0.2491,0.2491,0.2335,0.2335,0.2032,0.2032,0.1601,0.1601,0.1069,0.1069,0.0472,0.0472],\n sum = 0;\n\n for (var i = 0; i < n; i++) {\n var ct = z2 * Tvalues[i] + z2,\n xbase = base3(ct, x1, x2, x3, x4),\n ybase = base3(ct, y1, y2, y3, y4),\n comb = xbase * xbase + ybase * ybase;\n\n sum += Cvalues[i] * math.sqrt(comb);\n }\n\n return z2 * sum;\n}\n\n\nfunction intersectLines(x1, y1, x2, y2, x3, y3, x4, y4) {\n\n if (\n mmax(x1, x2) < mmin(x3, x4) ||\n mmin(x1, x2) > mmax(x3, x4) ||\n mmax(y1, y2) < mmin(y3, y4) ||\n mmin(y1, y2) > mmax(y3, y4)\n ) {\n return;\n }\n\n var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4),\n ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4),\n denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n\n if (!denominator) {\n return;\n }\n\n var px = fixError(nx / denominator),\n py = fixError(ny / denominator),\n px2 = +px.toFixed(2),\n py2 = +py.toFixed(2);\n\n if (\n px2 < +mmin(x1, x2).toFixed(2) ||\n px2 > +mmax(x1, x2).toFixed(2) ||\n px2 < +mmin(x3, x4).toFixed(2) ||\n px2 > +mmax(x3, x4).toFixed(2) ||\n py2 < +mmin(y1, y2).toFixed(2) ||\n py2 > +mmax(y1, y2).toFixed(2) ||\n py2 < +mmin(y3, y4).toFixed(2) ||\n py2 > +mmax(y3, y4).toFixed(2)\n ) {\n return;\n }\n\n return { x: px, y: py };\n}\n\nfunction fixError(number) {\n return Math.round(number * 100000000000) / 100000000000;\n}\n\nfunction findBezierIntersections(bez1, bez2, justCount) {\n var bbox1 = bezierBBox(bez1),\n bbox2 = bezierBBox(bez2);\n\n if (!isBBoxIntersect(bbox1, bbox2)) {\n return justCount ? 0 : [];\n }\n\n // As an optimization, lines will have only 1 segment\n\n var l1 = bezlen.apply(0, bez1),\n l2 = bezlen.apply(0, bez2),\n n1 = isLine(bez1) ? 1 : ~~(l1 / 5) || 1,\n n2 = isLine(bez2) ? 1 : ~~(l2 / 5) || 1,\n dots1 = [],\n dots2 = [],\n xy = {},\n res = justCount ? 0 : [];\n\n for (var i = 0; i < n1 + 1; i++) {\n var p = findDotsAtSegment.apply(0, bez1.concat(i / n1));\n dots1.push({ x: p.x, y: p.y, t: i / n1 });\n }\n\n for (i = 0; i < n2 + 1; i++) {\n p = findDotsAtSegment.apply(0, bez2.concat(i / n2));\n dots2.push({ x: p.x, y: p.y, t: i / n2 });\n }\n\n for (i = 0; i < n1; i++) {\n\n for (var j = 0; j < n2; j++) {\n var di = dots1[i],\n di1 = dots1[i + 1],\n dj = dots2[j],\n dj1 = dots2[j + 1],\n ci = abs(di1.x - di.x) < .01 ? 'y' : 'x',\n cj = abs(dj1.x - dj.x) < .01 ? 'y' : 'x',\n is = intersectLines(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y),\n key;\n\n if (is) {\n key = is.x.toFixed(9) + '#' + is.y.toFixed(9);\n\n if (xy[key]) {\n continue;\n }\n\n xy[key] = true;\n\n var t1 = di.t + abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t),\n t2 = dj.t + abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n\n if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n\n if (justCount) {\n res++;\n } else {\n res.push({\n x: is.x,\n y: is.y,\n t1: t1,\n t2: t2\n });\n }\n }\n }\n }\n }\n\n return res;\n}\n\n\n/**\n * Find or counts the intersections between two SVG paths.\n *\n * Returns a number in counting mode and a list of intersections otherwise.\n *\n * A single intersection entry contains the intersection coordinates (x, y)\n * as well as additional information regarding the intersecting segments\n * on each path (segment1, segment2) and the relative location of the\n * intersection on these segments (t1, t2).\n *\n * The path may be an SVG path string or a list of path components\n * such as `[ [ 'M', 0, 10 ], [ 'L', 20, 0 ] ]`.\n *\n * @example\n *\n * var intersections = findPathIntersections(\n * 'M0,0L100,100',\n * [ [ 'M', 0, 100 ], [ 'L', 100, 0 ] ]\n * );\n *\n * // intersections = [\n * // { x: 50, y: 50, segment1: 1, segment2: 1, t1: 0.5, t2: 0.5 }\n * // ]\n *\n * @param {String|Array<PathDef>} path1\n * @param {String|Array<PathDef>} path2\n * @param {Boolean} [justCount=false]\n *\n * @return {Array<Intersection>|Number}\n */\nfunction findPathIntersections(path1, path2, justCount) {\n path1 = pathToCurve(path1);\n path2 = pathToCurve(path2);\n\n var x1, y1, x2, y2, x1m, y1m, x2m, y2m, bez1, bez2,\n res = justCount ? 0 : [];\n\n for (var i = 0, ii = path1.length; i < ii; i++) {\n var pi = path1[i];\n\n if (pi[0] == 'M') {\n x1 = x1m = pi[1];\n y1 = y1m = pi[2];\n } else {\n\n if (pi[0] == 'C') {\n bez1 = [x1, y1].concat(pi.slice(1));\n x1 = bez1[6];\n y1 = bez1[7];\n } else {\n bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n x1 = x1m;\n y1 = y1m;\n }\n\n for (var j = 0, jj = path2.length; j < jj; j++) {\n var pj = path2[j];\n\n if (pj[0] == 'M') {\n x2 = x2m = pj[1];\n y2 = y2m = pj[2];\n } else {\n\n if (pj[0] == 'C') {\n bez2 = [x2, y2].concat(pj.slice(1));\n x2 = bez2[6];\n y2 = bez2[7];\n } else {\n bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n x2 = x2m;\n y2 = y2m;\n }\n\n var intr = findBezierIntersections(bez1, bez2, justCount);\n\n if (justCount) {\n res += intr;\n } else {\n\n for (var k = 0, kk = intr.length; k < kk; k++) {\n intr[k].segment1 = i;\n intr[k].segment2 = j;\n intr[k].bez1 = bez1;\n intr[k].bez2 = bez2;\n }\n\n res = res.concat(intr);\n }\n }\n }\n }\n }\n\n return res;\n}\n\n\nfunction pathToAbsolute(pathArray) {\n var pth = paths(pathArray);\n\n if (pth.abs) {\n return pathClone(pth.abs);\n }\n\n if (!isArray(pathArray) || !isArray(pathArray && pathArray[0])) { // rough assumption\n pathArray = parsePathString(pathArray);\n }\n\n if (!pathArray || !pathArray.length) {\n return [['M', 0, 0]];\n }\n\n var res = [],\n x = 0,\n y = 0,\n mx = 0,\n my = 0,\n start = 0,\n pa0;\n\n if (pathArray[0][0] == 'M') {\n x = +pathArray[0][1];\n y = +pathArray[0][2];\n mx = x;\n my = y;\n start++;\n res[0] = ['M', x, y];\n }\n\n for (var r, pa, i = start, ii = pathArray.length; i < ii; i++) {\n res.push(r = []);\n pa = pathArray[i];\n pa0 = pa[0];\n\n if (pa0 != pa0.toUpperCase()) {\n r[0] = pa0.toUpperCase();\n\n switch (r[0]) {\n case 'A':\n r[1] = pa[1];\n r[2] = pa[2];\n r[3] = pa[3];\n r[4] = pa[4];\n r[5] = pa[5];\n r[6] = +pa[6] + x;\n r[7] = +pa[7] + y;\n break;\n case 'V':\n r[1] = +pa[1] + y;\n break;\n case 'H':\n r[1] = +pa[1] + x;\n break;\n case 'M':\n mx = +pa[1] + x;\n my = +pa[2] + y;\n default:\n for (var j = 1, jj = pa.length; j < jj; j++) {\n r[j] = +pa[j] + ((j % 2) ? x : y);\n }\n }\n } else {\n for (var k = 0, kk = pa.length; k < kk; k++) {\n r[k] = pa[k];\n }\n }\n pa0 = pa0.toUpperCase();\n\n switch (r[0]) {\n case 'Z':\n x = +mx;\n y = +my;\n break;\n case 'H':\n x = r[1];\n break;\n case 'V':\n y = r[1];\n break;\n case 'M':\n mx = r[r.length - 2];\n my = r[r.length - 1];\n default:\n x = r[r.length - 2];\n y = r[r.length - 1];\n }\n }\n\n res.toString = pathToString;\n pth.abs = pathClone(res);\n\n return res;\n}\n\nfunction isLine(bez) {\n return (\n bez[0] === bez[2] &&\n bez[1] === bez[3] &&\n bez[4] === bez[6] &&\n bez[5] === bez[7]\n );\n}\n\nfunction lineToCurve(x1, y1, x2, y2) {\n return [\n x1, y1, x2,\n y2, x2, y2\n ];\n}\n\nfunction qubicToCurve(x1, y1, ax, ay, x2, y2) {\n var _13 = 1 / 3,\n _23 = 2 / 3;\n\n return [\n _13 * x1 + _23 * ax,\n _13 * y1 + _23 * ay,\n _13 * x2 + _23 * ax,\n _13 * y2 + _23 * ay,\n x2,\n y2\n ];\n}\n\nfunction arcToCurve(x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n\n // for more information of where this math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n var _120 = PI * 120 / 180,\n rad = PI / 180 * (+angle || 0),\n res = [],\n xy,\n rotate = cacher(function(x, y, rad) {\n var X = x * math.cos(rad) - y * math.sin(rad),\n Y = x * math.sin(rad) + y * math.cos(rad);\n\n return { x: X, y: Y };\n });\n\n if (!recursive) {\n xy = rotate(x1, y1, -rad);\n x1 = xy.x;\n y1 = xy.y;\n xy = rotate(x2, y2, -rad);\n x2 = xy.x;\n y2 = xy.y;\n\n var x = (x1 - x2) / 2,\n y = (y1 - y2) / 2;\n\n var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n\n if (h > 1) {\n h = math.sqrt(h);\n rx = h * rx;\n ry = h * ry;\n }\n\n var rx2 = rx * rx,\n ry2 = ry * ry,\n k = (large_arc_flag == sweep_flag ? -1 : 1) *\n math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),\n cx = k * rx * y / ry + (x1 + x2) / 2,\n cy = k * -ry * x / rx + (y1 + y2) / 2,\n f1 = math.asin(((y1 - cy) / ry).toFixed(9)),\n f2 = math.asin(((y2 - cy) / ry).toFixed(9));\n\n f1 = x1 < cx ? PI - f1 : f1;\n f2 = x2 < cx ? PI - f2 : f2;\n f1 < 0 && (f1 = PI * 2 + f1);\n f2 < 0 && (f2 = PI * 2 + f2);\n\n if (sweep_flag && f1 > f2) {\n f1 = f1 - PI * 2;\n }\n if (!sweep_flag && f2 > f1) {\n f2 = f2 - PI * 2;\n }\n } else {\n f1 = recursive[0];\n f2 = recursive[1];\n cx = recursive[2];\n cy = recursive[3];\n }\n\n var df = f2 - f1;\n\n if (abs(df) > _120) {\n var f2old = f2,\n x2old = x2,\n y2old = y2;\n\n f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n x2 = cx + rx * math.cos(f2);\n y2 = cy + ry * math.sin(f2);\n res = arcToCurve(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n }\n\n df = f2 - f1;\n\n var c1 = math.cos(f1),\n s1 = math.sin(f1),\n c2 = math.cos(f2),\n s2 = math.sin(f2),\n t = math.tan(df / 4),\n hx = 4 / 3 * rx * t,\n hy = 4 / 3 * ry * t,\n m1 = [x1, y1],\n m2 = [x1 + hx * s1, y1 - hy * c1],\n m3 = [x2 + hx * s2, y2 - hy * c2],\n m4 = [x2, y2];\n\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n\n if (recursive) {\n return [m2, m3, m4].concat(res);\n } else {\n res = [m2, m3, m4].concat(res).join().split(',');\n var newres = [];\n\n for (var i = 0, ii = res.length; i < ii; i++) {\n newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n }\n\n return newres;\n }\n}\n\n// Returns bounding box of cubic bezier curve.\n// Source: http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n// Original version: NISHIO Hirokazu\n// Modifications: https://github.com/timo22345\nfunction curveBBox(x0, y0, x1, y1, x2, y2, x3, y3) {\n var tvalues = [],\n bounds = [[], []],\n a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n\n for (var i = 0; i < 2; ++i) {\n\n if (i == 0) {\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n } else {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n\n if (abs(a) < 1e-12) {\n\n if (abs(b) < 1e-12) {\n continue;\n }\n\n t = -c / b;\n\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n\n continue;\n }\n\n b2ac = b * b - 4 * c * a;\n sqrtb2ac = math.sqrt(b2ac);\n\n if (b2ac < 0) {\n continue;\n }\n\n t1 = (-b + sqrtb2ac) / (2 * a);\n\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n\n t2 = (-b - sqrtb2ac) / (2 * a);\n\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var j = tvalues.length,\n jlen = j,\n mt;\n\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] = (mt * mt * mt * x0) + (3 * mt * mt * t * x1) + (3 * mt * t * t * x2) + (t * t * t * x3);\n bounds[1][j] = (mt * mt * mt * y0) + (3 * mt * mt * t * y1) + (3 * mt * t * t * y2) + (t * t * t * y3);\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n bounds[0].length = bounds[1].length = jlen + 2;\n\n return {\n x0: mmin.apply(0, bounds[0]),\n y0: mmin.apply(0, bounds[1]),\n x1: mmax.apply(0, bounds[0]),\n y1: mmax.apply(0, bounds[1])\n };\n}\n\nfunction pathToCurve(path) {\n\n var pth = paths(path);\n\n // return cached curve, if existing\n if (pth.curve) {\n return pathClone(pth.curve);\n }\n\n var curvedPath = pathToAbsolute(path),\n attrs = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null },\n processPath = function(path, d, pathCommand) {\n var nx, ny;\n\n if (!path) {\n return ['C', d.x, d.y, d.x, d.y, d.x, d.y];\n }\n\n !(path[0] in { T: 1, Q: 1 }) && (d.qx = d.qy = null);\n\n switch (path[0]) {\n case 'M':\n d.X = path[1];\n d.Y = path[2];\n break;\n case 'A':\n path = ['C'].concat(arcToCurve.apply(0, [d.x, d.y].concat(path.slice(1))));\n break;\n case 'S':\n if (pathCommand == 'C' || pathCommand == 'S') {\n\n // In 'S' case we have to take into account, if the previous command is C/S.\n nx = d.x * 2 - d.bx;\n\n // And reflect the previous\n ny = d.y * 2 - d.by;\n\n // command's control point relative to the current point.\n }\n else {\n\n // or some else or nothing\n nx = d.x;\n ny = d.y;\n }\n path = ['C', nx, ny].concat(path.slice(1));\n break;\n case 'T':\n if (pathCommand == 'Q' || pathCommand == 'T') {\n\n // In 'T' case we have to take into account, if the previous command is Q/T.\n d.qx = d.x * 2 - d.qx;\n\n // And make a reflection similar\n d.qy = d.y * 2 - d.qy;\n\n // to case 'S'.\n }\n else {\n\n // or something else or nothing\n d.qx = d.x;\n d.qy = d.y;\n }\n path = ['C'].concat(qubicToCurve(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n break;\n case 'Q':\n d.qx = path[1];\n d.qy = path[2];\n path = ['C'].concat(qubicToCurve(d.x, d.y, path[1], path[2], path[3], path[4]));\n break;\n case 'L':\n path = ['C'].concat(lineToCurve(d.x, d.y, path[1], path[2]));\n break;\n case 'H':\n path = ['C'].concat(lineToCurve(d.x, d.y, path[1], d.y));\n break;\n case 'V':\n path = ['C'].concat(lineToCurve(d.x, d.y, d.x, path[1]));\n break;\n case 'Z':\n path = ['C'].concat(lineToCurve(d.x, d.y, d.X, d.Y));\n break;\n }\n\n return path;\n },\n\n fixArc = function(pp, i) {\n\n if (pp[i].length > 7) {\n pp[i].shift();\n var pi = pp[i];\n\n while (pi.length) {\n pathCommands[i] = 'A'; // if created multiple C:s, their original seg is saved\n pp.splice(i++, 0, ['C'].concat(pi.splice(0, 6)));\n }\n\n pp.splice(i, 1);\n ii = curvedPath.length;\n }\n },\n\n pathCommands = [], // path commands of original path p\n pfirst = '', // temporary holder for original path command\n pathCommand = ''; // holder for previous path command of original path\n\n for (var i = 0, ii = curvedPath.length; i < ii; i++) {\n curvedPath[i] && (pfirst = curvedPath[i][0]); // save current path command\n\n if (pfirst != 'C') // C is not saved yet, because it may be result of conversion\n {\n pathCommands[i] = pfirst; // Save current path command\n i && (pathCommand = pathCommands[i - 1]); // Get previous path command pathCommand\n }\n curvedPath[i] = processPath(curvedPath[i], attrs, pathCommand); // Previous path command is inputted to processPath\n\n if (pathCommands[i] != 'A' && pfirst == 'C') pathCommands[i] = 'C'; // A is the only command\n // which may produce multiple C:s\n // so we have to make sure that C is also C in original path\n\n fixArc(curvedPath, i); // fixArc adds also the right amount of A:s to pathCommands\n\n var seg = curvedPath[i],\n seglen = seg.length;\n\n attrs.x = seg[seglen - 2];\n attrs.y = seg[seglen - 1];\n attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;\n attrs.by = toFloat(seg[seglen - 3]) || attrs.y;\n }\n\n // cache curve\n pth.curve = pathClone(curvedPath);\n\n return curvedPath;\n}\n\nmodule.exports = findPathIntersections;\n","import {\n isObject,\n sortBy\n} from 'min-dash';\n\nimport {\n pointDistance,\n pointsOnLine\n} from '../util/Geometry';\n\nimport intersectPaths from 'path-intersection';\n\n/**\n * @typedef {import('../model').Connection} Connection\n *\n * @typedef {import('../util/Types').DirectionTRBL} DirectionTRBL\n * @typedef {import('../util/Types').Point} Point\n * @typedef {import('../util/Types').Rect} Rect\n * @typedef {import('../util/Types').RectTRBL} RectTRBL\n */\n\nexport function roundBounds(bounds) {\n return {\n x: Math.round(bounds.x),\n y: Math.round(bounds.y),\n width: Math.round(bounds.width),\n height: Math.round(bounds.height)\n };\n}\n\n\nexport function roundPoint(point) {\n\n return {\n x: Math.round(point.x),\n y: Math.round(point.y)\n };\n}\n\n\n/**\n * Convert the given bounds to a { top, left, bottom, right } descriptor.\n *\n * @param {Point|Rect} bounds\n *\n * @return {RectTRBL}\n */\nexport function asTRBL(bounds) {\n return {\n top: bounds.y,\n right: bounds.x + (bounds.width || 0),\n bottom: bounds.y + (bounds.height || 0),\n left: bounds.x\n };\n}\n\n\n/**\n * Convert a { top, left, bottom, right } to an objects bounds.\n *\n * @param {RectTRBL} trbl\n *\n * @return {Rect}\n */\nexport function asBounds(trbl) {\n return {\n x: trbl.left,\n y: trbl.top,\n width: trbl.right - trbl.left,\n height: trbl.bottom - trbl.top\n };\n}\n\n\n/**\n * Get the mid of the given bounds or point.\n *\n * @param {Point|Rect} bounds\n *\n * @return {Point}\n */\nexport function getBoundsMid(bounds) {\n return roundPoint({\n x: bounds.x + (bounds.width || 0) / 2,\n y: bounds.y + (bounds.height || 0) / 2\n });\n}\n\n\n/**\n * Get the mid of the given Connection.\n *\n * @param {Connection} connection\n *\n * @return {Point}\n */\nexport function getConnectionMid(connection) {\n var waypoints = connection.waypoints;\n\n // calculate total length and length of each segment\n var parts = waypoints.reduce(function(parts, point, index) {\n\n var lastPoint = waypoints[index - 1];\n\n if (lastPoint) {\n var lastPart = parts[parts.length - 1];\n\n var startLength = lastPart && lastPart.endLength || 0;\n var length = distance(lastPoint, point);\n\n parts.push({\n start: lastPoint,\n end: point,\n startLength: startLength,\n endLength: startLength + length,\n length: length\n });\n }\n\n return parts;\n }, []);\n\n var totalLength = parts.reduce(function(length, part) {\n return length + part.length;\n }, 0);\n\n // find which segement contains middle point\n var midLength = totalLength / 2;\n\n var i = 0;\n var midSegment = parts[i];\n\n while (midSegment.endLength < midLength) {\n midSegment = parts[++i];\n }\n\n // calculate relative position on mid segment\n var segmentProgress = (midLength - midSegment.startLength) / midSegment.length;\n\n var midPoint = {\n x: midSegment.start.x + (midSegment.end.x - midSegment.start.x) * segmentProgress,\n y: midSegment.start.y + (midSegment.end.y - midSegment.start.y) * segmentProgress\n };\n\n return midPoint;\n}\n\n\n/**\n * Get the mid of the given Element.\n *\n * @param {Connection} connection\n *\n * @return {Point}\n */\nexport function getMid(element) {\n if (isConnection(element)) {\n return getConnectionMid(element);\n }\n\n return getBoundsMid(element);\n}\n\n// orientation utils //////////////////////\n\n/**\n * Get orientation of the given rectangle with respect to\n * the reference rectangle.\n *\n * A padding (positive or negative) may be passed to influence\n * horizontal / vertical orientation and intersection.\n *\n * @param {Rect} rect\n * @param {Rect} reference\n * @param {Point|number} padding\n *\n * @return {DirectionTRBL} the orientation; one of top, top-left, left, ..., bottom, right or intersect.\n */\nexport function getOrientation(rect, reference, padding) {\n\n padding = padding || 0;\n\n // make sure we can use an object, too\n // for individual { x, y } padding\n if (!isObject(padding)) {\n padding = { x: padding, y: padding };\n }\n\n\n var rectOrientation = asTRBL(rect),\n referenceOrientation = asTRBL(reference);\n\n var top = rectOrientation.bottom + padding.y <= referenceOrientation.top,\n right = rectOrientation.left - padding.x >= referenceOrientation.right,\n bottom = rectOrientation.top - padding.y >= referenceOrientation.bottom,\n left = rectOrientation.right + padding.x <= referenceOrientation.left;\n\n var vertical = top ? 'top' : (bottom ? 'bottom' : null),\n horizontal = left ? 'left' : (right ? 'right' : null);\n\n if (horizontal && vertical) {\n return vertical + '-' + horizontal;\n } else {\n return horizontal || vertical || 'intersect';\n }\n}\n\n\n// intersection utils //////////////////////\n\n/**\n * Get intersection between an element and a line path.\n *\n * @param {string} elementPath\n * @param {string} linePath\n * @param {boolean} cropStart Whether to crop start or end.\n *\n * @return {Point}\n */\nexport function getElementLineIntersection(elementPath, linePath, cropStart) {\n\n var intersections = getIntersections(elementPath, linePath);\n\n // recognize intersections\n // only one -> choose\n // two close together -> choose first\n // two or more distinct -> pull out appropriate one\n // none -> ok (fallback to point itself)\n if (intersections.length === 1) {\n return roundPoint(intersections[0]);\n } else if (intersections.length === 2 && pointDistance(intersections[0], intersections[1]) < 1) {\n return roundPoint(intersections[0]);\n } else if (intersections.length > 1) {\n\n // sort by intersections based on connection segment +\n // distance from start\n intersections = sortBy(intersections, function(i) {\n var distance = Math.floor(i.t2 * 100) || 1;\n\n distance = 100 - distance;\n\n distance = (distance < 10 ? '0' : '') + distance;\n\n // create a sort string that makes sure we sort\n // line segment ASC + line segment position DESC (for cropStart)\n // line segment ASC + line segment position ASC (for cropEnd)\n return i.segment2 + '#' + distance;\n });\n\n return roundPoint(intersections[cropStart ? 0 : intersections.length - 1]);\n }\n\n return null;\n}\n\n\nexport function getIntersections(a, b) {\n return intersectPaths(a, b);\n}\n\n\nexport function filterRedundantWaypoints(waypoints) {\n\n // alter copy of waypoints, not original\n waypoints = waypoints.slice();\n\n var idx = 0,\n point,\n previousPoint,\n nextPoint;\n\n while (waypoints[idx]) {\n point = waypoints[idx];\n previousPoint = waypoints[idx - 1];\n nextPoint = waypoints[idx + 1];\n\n if (pointDistance(point, nextPoint) === 0 ||\n pointsOnLine(previousPoint, nextPoint, point)) {\n\n // remove point, if overlapping with {nextPoint}\n // or on line with {previousPoint} -> {point} -> {nextPoint}\n waypoints.splice(idx, 1);\n } else {\n idx++;\n }\n }\n\n return waypoints;\n}\n\n// helpers //////////////////////\n\nfunction distance(a, b) {\n return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2));\n}\n\nfunction isConnection(element) {\n return !!element.waypoints;\n}","import {\n isNumber,\n assign,\n forEach,\n every,\n debounce,\n bind,\n reduce,\n find,\n isDefined\n} from 'min-dash';\n\nimport {\n assignStyle\n} from 'min-dom';\n\nimport {\n add as collectionAdd,\n remove as collectionRemove\n} from '../util/Collections';\n\nimport {\n getType,\n getBBox as getBoundingBox\n} from '../util/Elements';\n\nimport { asTRBL } from '../layout/LayoutUtil';\n\nimport {\n append as svgAppend,\n attr as svgAttr,\n classes as svgClasses,\n create as svgCreate,\n transform as svgTransform,\n remove as svgRemove\n} from 'tiny-svg';\n\nimport { createMatrix as createMatrix } from 'tiny-svg';\n\n/**\n * @typedef {import('.').ConnectionLike} ConnectionLike\n * @typedef {import('.').RootLike} RootLike\n * @typedef {import('.').ShapeLike} ShapeLike\n *\n * @typedef {import('./Canvas').CanvasConfig} CanvasConfig\n * @typedef {import('./Canvas').CanvasLayer} CanvasLayer\n * @typedef {import('./Canvas').CanvasLayers} CanvasLayers\n * @typedef {import('./Canvas').CanvasPlane} CanvasPlane\n * @typedef {import('./Canvas').CanvasViewbox} CanvasViewbox\n *\n * @typedef {import('./ElementRegistry').default} ElementRegistry\n * @typedef {import('./EventBus').default} EventBus\n * @typedef {import('./GraphicsFactory').default} GraphicsFactory\n *\n * @typedef {import('../util/Types').Dimensions} Dimensions\n * @typedef {import('../util/Types').Point} Point\n * @typedef {import('../util/Types').Rect} Rect\n * @typedef {import('../util/Types').RectTRBL} RectTRBL\n */\n\nfunction round(number, resolution) {\n return Math.round(number * resolution) / resolution;\n}\n\nfunction ensurePx(number) {\n return isNumber(number) ? number + 'px' : number;\n}\n\nfunction findRoot(element) {\n while (element.parent) {\n element = element.parent;\n }\n\n return element;\n}\n\n/**\n * Creates a HTML container element for a SVG element with\n * the given configuration\n *\n * @param {CanvasConfig} options\n *\n * @return {HTMLElement} the container element\n */\nfunction createContainer(options) {\n\n options = assign({}, { width: '100%', height: '100%' }, options);\n\n const container = options.container || document.body;\n\n // create a <div> around the svg element with the respective size\n // this way we can always get the correct container size\n // (this is impossible for <svg> elements at the moment)\n const parent = document.createElement('div');\n parent.setAttribute('class', 'djs-container djs-parent');\n\n assignStyle(parent, {\n position: 'relative',\n overflow: 'hidden',\n width: ensurePx(options.width),\n height: ensurePx(options.height)\n });\n\n container.appendChild(parent);\n\n return parent;\n}\n\nfunction createGroup(parent, cls, childIndex) {\n const group = svgCreate('g');\n svgClasses(group).add(cls);\n\n const index = childIndex !== undefined ? childIndex : parent.childNodes.length - 1;\n\n // must ensure second argument is node or _null_\n // cf. https://developer.mozilla.org/en-US/docs/Web/API/Node/insertBefore\n parent.insertBefore(group, parent.childNodes[index] || null);\n\n return group;\n}\n\nconst BASE_LAYER = 'base';\n\n// render plane contents behind utility layers\nconst PLANE_LAYER_INDEX = 0;\nconst UTILITY_LAYER_INDEX = 1;\n\n\nconst REQUIRED_MODEL_ATTRS = {\n shape: [ 'x', 'y', 'width', 'height' ],\n connection: [ 'waypoints' ]\n};\n\n/**\n * The main drawing canvas.\n *\n * @class\n * @constructor\n *\n * @emits Canvas#canvas.init\n *\n * @param {CanvasConfig|null} config\n * @param {EventBus} eventBus\n * @param {GraphicsFactory} graphicsFactory\n * @param {ElementRegistry} elementRegistry\n */\nexport default function Canvas(config, eventBus, graphicsFactory, elementRegistry) {\n this._eventBus = eventBus;\n this._elementRegistry = elementRegistry;\n this._graphicsFactory = graphicsFactory;\n\n /**\n * @type {number}\n */\n this._rootsIdx = 0;\n\n /**\n * @type {CanvasLayers}\n */\n this._layers = {};\n\n /**\n * @type {CanvasPlane[]}\n */\n this._planes = [];\n\n /**\n * @type {RootLike|null}\n */\n this._rootElement = null;\n\n this._init(config || {});\n}\n\nCanvas.$inject = [\n 'config.canvas',\n 'eventBus',\n 'graphicsFactory',\n 'elementRegistry'\n];\n\n/**\n * Creates a <svg> element that is wrapped into a <div>.\n * This way we are always able to correctly figure out the size of the svg element\n * by querying the parent node.\n\n * (It is not possible to get the size of a svg element cross browser @ 2014-04-01)\n\n * <div class=\"djs-container\" style=\"width: {desired-width}, height: {desired-height}\">\n * <svg width=\"100%\" height=\"100%\">\n * ...\n * </svg>\n * </div>\n *\n * @param {CanvasConfig} config\n */\nCanvas.prototype._init = function(config) {\n\n const eventBus = this._eventBus;\n\n // html container\n const container = this._container = createContainer(config);\n\n const svg = this._svg = svgCreate('svg');\n svgAttr(svg, { width: '100%', height: '100%' });\n\n svgAppend(container, svg);\n\n const viewport = this._viewport = createGroup(svg, 'viewport');\n\n // debounce canvas.viewbox.changed events\n // for smoother diagram interaction\n if (config.deferUpdate !== false) {\n this._viewboxChanged = debounce(bind(this._viewboxChanged, this), 300);\n }\n\n eventBus.on('diagram.init', () => {\n\n /**\n * An event indicating that the canvas is ready to be drawn on.\n *\n * @memberOf Canvas\n *\n * @event canvas.init\n *\n * @type {Object}\n * @property {SVGElement} svg the created svg element\n * @property {SVGElement} viewport the direct parent of diagram elements and shapes\n */\n eventBus.fire('canvas.init', {\n svg: svg,\n viewport: viewport\n });\n\n });\n\n // reset viewbox on shape changes to\n // recompute the viewbox\n eventBus.on([\n 'shape.added',\n 'connection.added',\n 'shape.removed',\n 'connection.removed',\n 'elements.changed',\n 'root.set'\n ], () => {\n delete this._cachedViewbox;\n });\n\n eventBus.on('diagram.destroy', 500, this._destroy, this);\n eventBus.on('diagram.clear', 500, this._clear, this);\n};\n\nCanvas.prototype._destroy = function() {\n this._eventBus.fire('canvas.destroy', {\n svg: this._svg,\n viewport: this._viewport\n });\n\n const parent = this._container.parentNode;\n\n if (parent) {\n parent.removeChild(this._container);\n }\n\n delete this._svg;\n delete this._container;\n delete this._layers;\n delete this._planes;\n delete this._rootElement;\n delete this._viewport;\n};\n\nCanvas.prototype._clear = function() {\n\n const allElements = this._elementRegistry.getAll();\n\n // remove all elements\n allElements.forEach(element => {\n const type = getType(element);\n\n if (type === 'root') {\n this.removeRootElement(element);\n } else {\n this._removeElement(element, type);\n }\n });\n\n // remove all planes\n this._planes = [];\n this._rootElement = null;\n\n // force recomputation of view box\n delete this._cachedViewbox;\n};\n\n/**\n * Returns the default layer on which\n * all elements are drawn.\n *\n * @return {SVGElement} The SVG element of the layer.\n */\nCanvas.prototype.getDefaultLayer = function() {\n return this.getLayer(BASE_LAYER, PLANE_LAYER_INDEX);\n};\n\n/**\n * Returns a layer that is used to draw elements\n * or annotations on it.\n *\n * Non-existing layers retrieved through this method\n * will be created. During creation, the optional index\n * may be used to create layers below or above existing layers.\n * A layer with a certain index is always created above all\n * existing layers with the same index.\n *\n * @param {string} name The name of the layer.\n * @param {number} [index] The index of the layer.\n *\n * @return {SVGElement} The SVG element of the layer.\n */\nCanvas.prototype.getLayer = function(name, index) {\n\n if (!name) {\n throw new Error('must specify a name');\n }\n\n let layer = this._layers[name];\n\n if (!layer) {\n layer = this._layers[name] = this._createLayer(name, index);\n }\n\n // throw an error if layer creation / retrival is\n // requested on different index\n if (typeof index !== 'undefined' && layer.index !== index) {\n throw new Error('layer <' + name + '> already created at index <' + index + '>');\n }\n\n return layer.group;\n};\n\n/**\n * For a given index, return the number of layers that have a higher index and\n * are visible.\n *\n * This is used to determine the node a layer should be inserted at.\n *\n * @param {number} index\n *\n * @return {number}\n */\nCanvas.prototype._getChildIndex = function(index) {\n return reduce(this._layers, function(childIndex, layer) {\n if (layer.visible && index >= layer.index) {\n childIndex++;\n }\n\n return childIndex;\n }, 0);\n};\n\n/**\n * Creates a given layer and returns it.\n *\n * @param {string} name\n * @param {number} [index=0]\n *\n * @return {CanvasLayer}\n */\nCanvas.prototype._createLayer = function(name, index) {\n\n if (typeof index === 'undefined') {\n index = UTILITY_LAYER_INDEX;\n }\n\n const childIndex = this._getChildIndex(index);\n\n return {\n group: createGroup(this._viewport, 'layer-' + name, childIndex),\n index: index,\n visible: true\n };\n};\n\n\n/**\n * Shows a given layer.\n *\n * @param {string} layer The name of the layer.\n *\n * @return {SVGElement} The SVG element of the layer.\n */\nCanvas.prototype.showLayer = function(name) {\n\n if (!name) {\n throw new Error('must specify a name');\n }\n\n const layer = this._layers[name];\n\n if (!layer) {\n throw new Error('layer <' + name + '> does not exist');\n }\n\n const viewport = this._viewport;\n const group = layer.group;\n const index = layer.index;\n\n if (layer.visible) {\n return group;\n }\n\n const childIndex = this._getChildIndex(index);\n\n viewport.insertBefore(group, viewport.childNodes[childIndex] || null);\n\n layer.visible = true;\n\n return group;\n};\n\n/**\n * Hides a given layer.\n *\n * @param {string} layer The name of the layer.\n *\n * @return {SVGElement} The SVG element of the layer.\n */\nCanvas.prototype.hideLayer = function(name) {\n\n if (!name) {\n throw new Error('must specify a name');\n }\n\n const layer = this._layers[name];\n\n if (!layer) {\n throw new Error('layer <' + name + '> does not exist');\n }\n\n const group = layer.group;\n\n if (!layer.visible) {\n return group;\n }\n\n svgRemove(group);\n\n layer.visible = false;\n\n return group;\n};\n\n\nCanvas.prototype._removeLayer = function(name) {\n\n const layer = this._layers[name];\n\n if (layer) {\n delete this._layers[name];\n\n svgRemove(layer.group);\n }\n};\n\n/**\n * Returns the currently active layer. Can be null.\n *\n * @return {CanvasLayer|null} The active layer of `null`.\n */\nCanvas.prototype.getActiveLayer = function() {\n const plane = this._findPlaneForRoot(this.getRootElement());\n\n if (!plane) {\n return null;\n }\n\n return plane.layer;\n};\n\n\n/**\n * Returns the plane which contains the given element.\n *\n * @param {ShapeLike|ConnectionLike|string} element The element or its ID.\n *\n * @return {RootLike|undefined} The root of the element.\n */\nCanvas.prototype.findRoot = function(element) {\n if (typeof element === 'string') {\n element = this._elementRegistry.get(element);\n }\n\n if (!element) {\n return;\n }\n\n const plane = this._findPlaneForRoot(\n findRoot(element)\n ) || {};\n\n return plane.rootElement;\n};\n\n/**\n * Return a list of all root elements on the diagram.\n *\n * @return {(RootLike)[]} The list of root elements.\n */\nCanvas.prototype.getRootElements = function() {\n return this._planes.map(function(plane) {\n return plane.rootElement;\n });\n};\n\nCanvas.prototype._findPlaneForRoot = function(rootElement) {\n return find(this._planes, function(plane) {\n return plane.rootElement === rootElement;\n });\n};\n\n\n/**\n * Returns the html element that encloses the\n * drawing canvas.\n *\n * @return {HTMLElement} The HTML element of the container.\n */\nCanvas.prototype.getContainer = function() {\n return this._container;\n};\n\n\n// markers //////////////////////\n\nCanvas.prototype._updateMarker = function(element, marker, add) {\n let container;\n\n if (!element.id) {\n element = this._elementRegistry.get(element);\n }\n\n // we need to access all\n container = this._elementRegistry._elements[element.id];\n\n if (!container) {\n return;\n }\n\n forEach([ container.gfx, container.secondaryGfx ], function(gfx) {\n if (gfx) {\n\n // invoke either addClass or removeClass based on mode\n if (add) {\n svgClasses(gfx).add(marker);\n } else {\n svgClasses(gfx).remove(marker);\n }\n }\n });\n\n /**\n * An event indicating that a marker has been updated for an element\n *\n * @event element.marker.update\n * @type {Object}\n * @property {Base} element the shape\n * @property {SVGElement} gfx the graphical representation of the shape\n * @property {string} marker\n * @property {boolean} add true if the marker was added, false if it got removed\n */\n this._eventBus.fire('element.marker.update', { element: element, gfx: container.gfx, marker: marker, add: !!add });\n};\n\n\n/**\n * Adds a marker to an element (basically a css class).\n *\n * Fires the element.marker.update event, making it possible to\n * integrate extension into the marker life-cycle, too.\n *\n * @example\n *\n * canvas.addMarker('foo', 'some-marker');\n *\n * const fooGfx = canvas.getGraphics('foo');\n *\n * fooGfx; // <g class=\"... some-marker\"> ... </g>\n *\n * @param {ShapeLike|ConnectionLike|string} element The element or its ID.\n * @param {string} marker The marker.\n */\nCanvas.prototype.addMarker = function(element, marker) {\n this._updateMarker(element, marker, true);\n};\n\n\n/**\n * Remove a marker from an element.\n *\n * Fires the element.marker.update event, making it possible to\n * integrate extension into the marker life-cycle, too.\n *\n * @param {ShapeLike|ConnectionLike|string} element The element or its ID.\n * @param {string} marker The marker.\n */\nCanvas.prototype.removeMarker = function(element, marker) {\n this._updateMarker(element, marker, false);\n};\n\n/**\n * Check whether an element has a given marker.\n *\n * @param {ShapeLike|ConnectionLike|string} element The element or its ID.\n * @param {string} marker The marker.\n */\nCanvas.prototype.hasMarker = function(element, marker) {\n if (!element.id) {\n element = this._elementRegistry.get(element);\n }\n\n const gfx = this.getGraphics(element);\n\n return svgClasses(gfx).has(marker);\n};\n\n/**\n * Toggles a marker on an element.\n *\n * Fires the element.marker.update event, making it possible to\n * integrate extension into the marker life-cycle, too.\n *\n * @param {ShapeLike|ConnectionLike|string} element The element or its ID.\n * @param {string} marker The marker.\n */\nCanvas.prototype.toggleMarker = function(element, marker) {\n if (this.hasMarker(element, marker)) {\n this.removeMarker(element, marker);\n } else {\n this.addMarker(element, marker);\n }\n};\n\n/**\n * Returns the current root element.\n *\n * Supports two different modes for handling root elements:\n *\n * 1. if no root element has been added before, an implicit root will be added\n * and returned. This is used in applications that don't require explicit\n * root elements.\n *\n * 2. when root elements have been added before calling `getRootElement`,\n * root elements can be null. This is used for applications that want to manage\n * root elements themselves.\n *\n * @return {RootLike} The current root element.\n */\nCanvas.prototype.getRootElement = function() {\n const rootElement = this._rootElement;\n\n // can return null if root elements are present but none was set yet\n if (rootElement || this._planes.length) {\n return rootElement;\n }\n\n return this.setRootElement(this.addRootElement(null));\n};\n\n/**\n * Adds a given root element and returns it.\n *\n * @param {ShapeLike} [rootElement] The root element to be added.\n *\n * @return {RootLike} The added root element or an implicit root element.\n */\nCanvas.prototype.addRootElement = function(rootElement) {\n const idx = this._rootsIdx++;\n\n if (!rootElement) {\n rootElement = {\n id: '__implicitroot_' + idx,\n children: [],\n isImplicit: true\n };\n }\n\n const layerName = rootElement.layer = 'root-' + idx;\n\n this._ensureValid('root', rootElement);\n\n const layer = this.getLayer(layerName, PLANE_LAYER_INDEX);\n\n this.hideLayer(layerName);\n\n this._addRoot(rootElement, layer);\n\n this._planes.push({\n rootElement: rootElement,\n layer: layer\n });\n\n return rootElement;\n};\n\n/**\n * Removes a given root element and returns it.\n *\n * @param {ShapeLike|string} rootElement The root element or its ID.\n *\n * @return {ShapeLike|undefined} The removed root element.\n */\nCanvas.prototype.removeRootElement = function(rootElement) {\n\n if (typeof rootElement === 'string') {\n rootElement = this._elementRegistry.get(rootElement);\n }\n\n const plane = this._findPlaneForRoot(rootElement);\n\n if (!plane) {\n return;\n }\n\n // hook up life-cycle events\n this._removeRoot(rootElement);\n\n // clean up layer\n this._removeLayer(rootElement.layer);\n\n // clean up plane\n this._planes = this._planes.filter(function(plane) {\n return plane.rootElement !== rootElement;\n });\n\n // clean up active root\n if (this._rootElement === rootElement) {\n this._rootElement = null;\n }\n\n return rootElement;\n};\n\n\n/**\n * Sets a given element as the new root element for the canvas\n * and returns the new root element.\n *\n * @param {RootLike} rootElement The root element to be set.\n *\n * @return {RootLike} The set root element.\n */\nCanvas.prototype.setRootElement = function(rootElement, override) {\n\n if (isDefined(override)) {\n throw new Error('override not supported');\n }\n\n if (rootElement === this._rootElement) {\n return;\n }\n\n let plane;\n\n if (!rootElement) {\n throw new Error('rootElement required');\n }\n\n plane = this._findPlaneForRoot(rootElement);\n\n // give set add semantics for backwards compatibility\n if (!plane) {\n rootElement = this.addRootElement(rootElement);\n }\n\n this._setRoot(rootElement);\n\n return rootElement;\n};\n\n\nCanvas.prototype._removeRoot = function(element) {\n const elementRegistry = this._elementRegistry,\n eventBus = this._eventBus;\n\n // simulate element remove event sequence\n eventBus.fire('root.remove', { element: element });\n eventBus.fire('root.removed', { element: element });\n\n elementRegistry.remove(element);\n};\n\n\nCanvas.prototype._addRoot = function(element, gfx) {\n const elementRegistry = this._elementRegistry,\n eventBus = this._eventBus;\n\n // resemble element add event sequence\n eventBus.fire('root.add', { element: element });\n\n elementRegistry.add(element, gfx);\n\n eventBus.fire('root.added', { element: element, gfx: gfx });\n};\n\n\nCanvas.prototype._setRoot = function(rootElement, layer) {\n\n const currentRoot = this._rootElement;\n\n if (currentRoot) {\n\n // un-associate previous root element <svg>\n this._elementRegistry.updateGraphics(currentRoot, null, true);\n\n // hide previous layer\n this.hideLayer(currentRoot.layer);\n }\n\n if (rootElement) {\n\n if (!layer) {\n layer = this._findPlaneForRoot(rootElement).layer;\n }\n\n // associate element with <svg>\n this._elementRegistry.updateGraphics(rootElement, this._svg, true);\n\n // show root layer\n this.showLayer(rootElement.layer);\n }\n\n this._rootElement = rootElement;\n\n this._eventBus.fire('root.set', { element: rootElement });\n};\n\nCanvas.prototype._ensureValid = function(type, element) {\n if (!element.id) {\n throw new Error('element must have an id');\n }\n\n if (this._elementRegistry.get(element.id)) {\n throw new Error('element <' + element.id + '> already exists');\n }\n\n const requiredAttrs = REQUIRED_MODEL_ATTRS[type];\n\n const valid = every(requiredAttrs, function(attr) {\n return typeof element[attr] !== 'undefined';\n });\n\n if (!valid) {\n throw new Error(\n 'must supply { ' + requiredAttrs.join(', ') + ' } with ' + type);\n }\n};\n\nCanvas.prototype._setParent = function(element, parent, parentIndex) {\n collectionAdd(parent.children, element, parentIndex);\n element.parent = parent;\n};\n\n/**\n * Adds an element to the canvas.\n *\n * This wires the parent <-> child relationship between the element and\n * a explicitly specified parent or an implicit root element.\n *\n * During add it emits the events\n *\n * * <{type}.add> (element, parent)\n * * <{type}.added> (element, gfx)\n *\n * Extensions may hook into these events to perform their magic.\n *\n * @param {string} type\n * @param {ConnectionLike|ShapeLike} element\n * @param {ShapeLike} [parent]\n * @param {number} [parentIndex]\n *\n * @return {ConnectionLike|ShapeLike} The added element.\n */\nCanvas.prototype._addElement = function(type, element, parent, parentIndex) {\n\n parent = parent || this.getRootElement();\n\n const eventBus = this._eventBus,\n graphicsFactory = this._graphicsFactory;\n\n this._ensureValid(type, element);\n\n eventBus.fire(type + '.add', { element: element, parent: parent });\n\n this._setParent(element, parent, parentIndex);\n\n // create graphics\n const gfx = graphicsFactory.create(type, element, parentIndex);\n\n this._elementRegistry.add(element, gfx);\n\n // update its visual\n graphicsFactory.update(type, element, gfx);\n\n eventBus.fire(type + '.added', { element: element, gfx: gfx });\n\n return element;\n};\n\n/**\n * Adds a shape to the canvas.\n *\n * @param {ShapeLike} shape The shape to be added\n * @param {ShapeLike} [parent] The shape's parent.\n * @param {number} [parentIndex] The index at which to add the shape to the parent's children.\n *\n * @return {ShapeLike} The added shape.\n */\nCanvas.prototype.addShape = function(shape, parent, parentIndex) {\n return this._addElement('shape', shape, parent, parentIndex);\n};\n\n/**\n * Adds a connection to the canvas.\n *\n * @param {ConnectionLike} connection The connection to be added.\n * @param {ShapeLike} [parent] The connection's parent.\n * @param {number} [parentIndex] The index at which to add the connection to the parent's children.\n *\n * @return {ConnectionLike} The added connection.\n */\nCanvas.prototype.addConnection = function(connection, parent, parentIndex) {\n return this._addElement('connection', connection, parent, parentIndex);\n};\n\n\n/**\n * Internal remove element\n */\nCanvas.prototype._removeElement = function(element, type) {\n\n const elementRegistry = this._elementRegistry,\n graphicsFactory = this._graphicsFactory,\n eventBus = this._eventBus;\n\n element = elementRegistry.get(element.id || element);\n\n if (!element) {\n\n // element was removed already\n return;\n }\n\n eventBus.fire(type + '.remove', { element: element });\n\n graphicsFactory.remove(element);\n\n // unset parent <-> child relationship\n collectionRemove(element.parent && element.parent.children, element);\n element.parent = null;\n\n eventBus.fire(type + '.removed', { element: element });\n\n elementRegistry.remove(element);\n\n return element;\n};\n\n\n/**\n * Removes a shape from the canvas.\n *\n * @fires ShapeRemoveEvent\n * @fires ShapeRemovedEvent\n *\n * @param {ShapeLike|string} shape The shape or its ID.\n *\n * @return {ShapeLike} The removed shape.\n */\nCanvas.prototype.removeShape = function(shape) {\n\n /**\n * An event indicating that a shape is about to be removed from the canvas.\n *\n * @memberOf Canvas\n *\n * @event ShapeRemoveEvent\n * @type {Object}\n * @property {ShapeLike} element The shape.\n * @property {SVGElement} gfx The graphical element.\n */\n\n /**\n * An event indicating that a shape has been removed from the canvas.\n *\n * @memberOf Canvas\n *\n * @event ShapeRemoved\n * @type {Object}\n * @property {ShapeLike} element The shape.\n * @property {SVGElement} gfx The graphical element.\n */\n return this._removeElement(shape, 'shape');\n};\n\n\n/**\n * Removes a connection from the canvas.\n *\n * @fires ConnectionRemoveEvent\n * @fires ConnectionRemovedEvent\n *\n * @param {ConnectionLike|string} connection The connection or its ID.\n *\n * @return {ConnectionLike} The removed connection.\n */\nCanvas.prototype.removeConnection = function(connection) {\n\n /**\n * An event indicating that a connection is about to be removed from the canvas.\n *\n * @memberOf Canvas\n *\n * @event ConnectionRemoveEvent\n * @type {Object}\n * @property {ConnectionLike} element The connection.\n * @property {SVGElement} gfx The graphical element.\n */\n\n /**\n * An event indicating that a connection has been removed from the canvas.\n *\n * @memberOf Canvas\n *\n * @event connection.removed\n * @type {Object}\n * @property {ConnectionLike} element The connection.\n * @property {SVGElement} gfx The graphical element.\n */\n return this._removeElement(connection, 'connection');\n};\n\n\n/**\n * Returns the graphical element of an element.\n *\n * @param {ShapeLike|ConnectionLike|string} element The element or its ID.\n * @param {boolean} [secondary=false] Whether to return the secondary graphical element.\n *\n * @return {SVGElement} The graphical element.\n */\nCanvas.prototype.getGraphics = function(element, secondary) {\n return this._elementRegistry.getGraphics(element, secondary);\n};\n\n\n/**\n * Perform a viewbox update via a given change function.\n *\n * @param {Function} changeFn\n */\nCanvas.prototype._changeViewbox = function(changeFn) {\n\n // notify others of the upcoming viewbox change\n this._eventBus.fire('canvas.viewbox.changing');\n\n // perform actual change\n changeFn.apply(this);\n\n // reset the cached viewbox so that\n // a new get operation on viewbox or zoom\n // triggers a viewbox re-computation\n this._cachedViewbox = null;\n\n // notify others of the change; this step\n // may or may not be debounced\n this._viewboxChanged();\n};\n\nCanvas.prototype._viewboxChanged = function() {\n this._eventBus.fire('canvas.viewbox.changed', { viewbox: this.viewbox() });\n};\n\n\n/**\n * Gets or sets the view box of the canvas, i.e. the\n * area that is currently displayed.\n *\n * The getter may return a cached viewbox (if it is currently\n * changing). To force a recomputation, pass `false` as the first argument.\n *\n * @example\n *\n * canvas.viewbox({ x: 100, y: 100, width: 500, height: 500 })\n *\n * // sets the visible area of the diagram to (100|100) -> (600|100)\n * // and and scales it according to the diagram width\n *\n * const viewbox = canvas.viewbox(); // pass `false` to force recomputing the box.\n *\n * console.log(viewbox);\n * // {\n * // inner: Dimensions,\n * // outer: Dimensions,\n * // scale,\n * // x, y,\n * // width, height\n * // }\n *\n * // if the current diagram is zoomed and scrolled, you may reset it to the\n * // default zoom via this method, too:\n *\n * const zoomedAndScrolledViewbox = canvas.viewbox();\n *\n * canvas.viewbox({\n * x: 0,\n * y: 0,\n * width: zoomedAndScrolledViewbox.outer.width,\n * height: zoomedAndScrolledViewbox.outer.height\n * });\n *\n * @param {Rect} [box] The viewbox to be set.\n *\n * @return {CanvasViewbox} The set viewbox.\n */\nCanvas.prototype.viewbox = function(box) {\n\n if (box === undefined && this._cachedViewbox) {\n return this._cachedViewbox;\n }\n\n const viewport = this._viewport,\n outerBox = this.getSize();\n let innerBox,\n matrix,\n activeLayer,\n transform,\n scale,\n x, y;\n\n if (!box) {\n\n // compute the inner box based on the\n // diagrams active layer. This allows us to exclude\n // external components, such as overlays\n\n activeLayer = this._rootElement ? this.getActiveLayer() : null;\n innerBox = activeLayer && activeLayer.getBBox() || {};\n\n transform = svgTransform(viewport);\n matrix = transform ? transform.matrix : createMatrix();\n scale = round(matrix.a, 1000);\n\n x = round(-matrix.e || 0, 1000);\n y = round(-matrix.f || 0, 1000);\n\n box = this._cachedViewbox = {\n x: x ? x / scale : 0,\n y: y ? y / scale : 0,\n width: outerBox.width / scale,\n height: outerBox.height / scale,\n scale: scale,\n inner: {\n width: innerBox.width || 0,\n height: innerBox.height || 0,\n x: innerBox.x || 0,\n y: innerBox.y || 0\n },\n outer: outerBox\n };\n\n return box;\n } else {\n\n this._changeViewbox(function() {\n scale = Math.min(outerBox.width / box.width, outerBox.height / box.height);\n\n const matrix = this._svg.createSVGMatrix()\n .scale(scale)\n .translate(-box.x, -box.y);\n\n svgTransform(viewport, matrix);\n });\n }\n\n return box;\n};\n\n\n/**\n * Gets or sets the scroll of the canvas.\n *\n * @param {Point} [delta] The scroll to be set.\n *\n * @return {Point}\n */\nCanvas.prototype.scroll = function(delta) {\n\n const node = this._viewport;\n let matrix = node.getCTM();\n\n if (delta) {\n this._changeViewbox(function() {\n delta = assign({ dx: 0, dy: 0 }, delta || {});\n\n matrix = this._svg.createSVGMatrix().translate(delta.dx, delta.dy).multiply(matrix);\n\n setCTM(node, matrix);\n });\n }\n\n return { x: matrix.e, y: matrix.f };\n};\n\n/**\n * Scrolls the viewbox to contain the given element.\n * Optionally specify a padding to be applied to the edges.\n *\n * @param {ShapeLike|ConnectionLike|string} element The element to scroll to or its ID.\n * @param {RectTRBL|number} [padding=100] The padding to be applied. Can also specify top, bottom, left and right.\n */\nCanvas.prototype.scrollToElement = function(element, padding) {\n let defaultPadding = 100;\n\n if (typeof element === 'string') {\n element = this._elementRegistry.get(element);\n }\n\n // set to correct rootElement\n const rootElement = this.findRoot(element);\n\n if (rootElement !== this.getRootElement()) {\n this.setRootElement(rootElement);\n }\n\n if (!padding) {\n padding = {};\n }\n if (typeof padding === 'number') {\n defaultPadding = padding;\n }\n\n padding = {\n top: padding.top || defaultPadding,\n right: padding.right || defaultPadding,\n bottom: padding.bottom || defaultPadding,\n left: padding.left || defaultPadding\n };\n\n const elementBounds = getBoundingBox(element),\n elementTrbl = asTRBL(elementBounds),\n viewboxBounds = this.viewbox(),\n zoom = this.zoom();\n let dx, dy;\n\n // shrink viewboxBounds with padding\n viewboxBounds.y += padding.top / zoom;\n viewboxBounds.x += padding.left / zoom;\n viewboxBounds.width -= (padding.right + padding.left) / zoom;\n viewboxBounds.height -= (padding.bottom + padding.top) / zoom;\n\n const viewboxTrbl = asTRBL(viewboxBounds);\n\n const canFit = elementBounds.width < viewboxBounds.width && elementBounds.height < viewboxBounds.height;\n\n if (!canFit) {\n\n // top-left when element can't fit\n dx = elementBounds.x - viewboxBounds.x;\n dy = elementBounds.y - viewboxBounds.y;\n\n } else {\n\n const dRight = Math.max(0, elementTrbl.right - viewboxTrbl.right),\n dLeft = Math.min(0, elementTrbl.left - viewboxTrbl.left),\n dBottom = Math.max(0, elementTrbl.bottom - viewboxTrbl.bottom),\n dTop = Math.min(0, elementTrbl.top - viewboxTrbl.top);\n\n dx = dRight || dLeft;\n dy = dBottom || dTop;\n\n }\n\n this.scroll({ dx: -dx * zoom, dy: -dy * zoom });\n};\n\n/**\n * Gets or sets the current zoom of the canvas, optionally zooming to the\n * specified position.\n *\n * The getter may return a cached zoom level. Call it with `false` as the first\n * argument to force recomputation of the current level.\n *\n * @param {number|string} [newScale] The new zoom level, either a number,\n * i.e. 0.9, or `fit-viewport` to adjust the size to fit the current viewport.\n * @param {Point} [center] The reference point { x: ..., y: ...} to zoom to.\n *\n * @return {number} The set zoom level.\n */\nCanvas.prototype.zoom = function(newScale, center) {\n\n if (!newScale) {\n return this.viewbox(newScale).scale;\n }\n\n if (newScale === 'fit-viewport') {\n return this._fitViewport(center);\n }\n\n let outer,\n matrix;\n\n this._changeViewbox(function() {\n\n if (typeof center !== 'object') {\n outer = this.viewbox().outer;\n\n center = {\n x: outer.width / 2,\n y: outer.height / 2\n };\n }\n\n matrix = this._setZoom(newScale, center);\n });\n\n return round(matrix.a, 1000);\n};\n\nfunction setCTM(node, m) {\n const mstr = 'matrix(' + m.a + ',' + m.b + ',' + m.c + ',' + m.d + ',' + m.e + ',' + m.f + ')';\n node.setAttribute('transform', mstr);\n}\n\nCanvas.prototype._fitViewport = function(center) {\n\n const vbox = this.viewbox(),\n outer = vbox.outer,\n inner = vbox.inner;\n let newScale,\n newViewbox;\n\n // display the complete diagram without zooming in.\n // instead of relying on internal zoom, we perform a\n // hard reset on the canvas viewbox to realize this\n //\n // if diagram does not need to be zoomed in, we focus it around\n // the diagram origin instead\n\n if (inner.x >= 0 &&\n inner.y >= 0 &&\n inner.x + inner.width <= outer.width &&\n inner.y + inner.height <= outer.height &&\n !center) {\n\n newViewbox = {\n x: 0,\n y: 0,\n width: Math.max(inner.width + inner.x, outer.width),\n height: Math.max(inner.height + inner.y, outer.height)\n };\n } else {\n\n newScale = Math.min(1, outer.width / inner.width, outer.height / inner.height);\n newViewbox = {\n x: inner.x + (center ? inner.width / 2 - outer.width / newScale / 2 : 0),\n y: inner.y + (center ? inner.height / 2 - outer.height / newScale / 2 : 0),\n width: outer.width / newScale,\n height: outer.height / newScale\n };\n }\n\n this.viewbox(newViewbox);\n\n return this.viewbox(false).scale;\n};\n\n\nCanvas.prototype._setZoom = function(scale, center) {\n\n const svg = this._svg,\n viewport = this._viewport;\n\n const matrix = svg.createSVGMatrix();\n const point = svg.createSVGPoint();\n\n let centerPoint,\n originalPoint,\n currentMatrix,\n scaleMatrix,\n newMatrix;\n\n currentMatrix = viewport.getCTM();\n\n const currentScale = currentMatrix.a;\n\n if (center) {\n centerPoint = assign(point, center);\n\n // revert applied viewport transformations\n originalPoint = centerPoint.matrixTransform(currentMatrix.inverse());\n\n // create scale matrix\n scaleMatrix = matrix\n .translate(originalPoint.x, originalPoint.y)\n .scale(1 / currentScale * scale)\n .translate(-originalPoint.x, -originalPoint.y);\n\n newMatrix = currentMatrix.multiply(scaleMatrix);\n } else {\n newMatrix = matrix.scale(scale);\n }\n\n setCTM(this._viewport, newMatrix);\n\n return newMatrix;\n};\n\n\n/**\n * Returns the size of the canvas.\n *\n * @return {Dimensions} The size of the canvas.\n */\nCanvas.prototype.getSize = function() {\n return {\n width: this._container.clientWidth,\n height: this._container.clientHeight\n };\n};\n\n\n/**\n * Returns the absolute bounding box of an element.\n *\n * The absolute bounding box may be used to display overlays in the callers\n * (browser) coordinate system rather than the zoomed in/out canvas coordinates.\n *\n * @param {ShapeLike|ConnectionLike} element The element.\n *\n * @return {Rect} The element's absolute bounding box.\n */\nCanvas.prototype.getAbsoluteBBox = function(element) {\n const vbox = this.viewbox();\n let bbox;\n\n // connection\n // use svg bbox\n if (element.waypoints) {\n const gfx = this.getGraphics(element);\n\n bbox = gfx.getBBox();\n }\n\n // shapes\n // use data\n else {\n bbox = element;\n }\n\n const x = bbox.x * vbox.scale - vbox.x * vbox.scale;\n const y = bbox.y * vbox.scale - vbox.y * vbox.scale;\n\n const width = bbox.width * vbox.scale;\n const height = bbox.height * vbox.scale;\n\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n};\n\n/**\n * Fires an event so other modules can react to the canvas resizing.\n */\nCanvas.prototype.resized = function() {\n\n // force recomputation of view box\n delete this._cachedViewbox;\n\n this._eventBus.fire('canvas.resized');\n};\n","var ELEMENT_ID = 'data-element-id';\n\nimport { attr as svgAttr } from 'tiny-svg';\n\n/**\n * @typedef {import('.').ElementLike} ElementLike\n *\n * @typedef {import('./EventBus').default} EventBus\n *\n * @typedef {import('./ElementRegistry').ElementRegistryCallback} ElementRegistryCallback\n */\n\n/**\n * A registry that keeps track of all shapes in the diagram.\n *\n * @class\n * @constructor\n *\n * @param {EventBus} eventBus\n */\nexport default function ElementRegistry(eventBus) {\n this._elements = {};\n\n this._eventBus = eventBus;\n}\n\nElementRegistry.$inject = [ 'eventBus' ];\n\n/**\n * Add an element and its graphical representation(s) to the registry.\n *\n * @param {ElementLike} element The element to be added.\n * @param {SVGElement} gfx The primary graphical representation.\n * @param {SVGElement} [secondaryGfx] The secondary graphical representation.\n */\nElementRegistry.prototype.add = function(element, gfx, secondaryGfx) {\n\n var id = element.id;\n\n this._validateId(id);\n\n // associate dom node with element\n svgAttr(gfx, ELEMENT_ID, id);\n\n if (secondaryGfx) {\n svgAttr(secondaryGfx, ELEMENT_ID, id);\n }\n\n this._elements[id] = { element: element, gfx: gfx, secondaryGfx: secondaryGfx };\n};\n\n/**\n * Remove an element from the registry.\n *\n * @param {ElementLike|string} element\n */\nElementRegistry.prototype.remove = function(element) {\n var elements = this._elements,\n id = element.id || element,\n container = id && elements[id];\n\n if (container) {\n\n // unset element id on gfx\n svgAttr(container.gfx, ELEMENT_ID, '');\n\n if (container.secondaryGfx) {\n svgAttr(container.secondaryGfx, ELEMENT_ID, '');\n }\n\n delete elements[id];\n }\n};\n\n/**\n * Update an elements ID.\n *\n * @param {ElementLike|string} element The element or its ID.\n * @param {string} newId The new ID.\n */\nElementRegistry.prototype.updateId = function(element, newId) {\n\n this._validateId(newId);\n\n if (typeof element === 'string') {\n element = this.get(element);\n }\n\n this._eventBus.fire('element.updateId', {\n element: element,\n newId: newId\n });\n\n var gfx = this.getGraphics(element),\n secondaryGfx = this.getGraphics(element, true);\n\n this.remove(element);\n\n element.id = newId;\n\n this.add(element, gfx, secondaryGfx);\n};\n\n/**\n * Update the graphical representation of an element.\n *\n * @param {ElementLike|string} element The element or its ID.\n * @param {SVGElement} gfx The new graphical representation.\n * @param {boolean} [secondary=false] Whether to update the secondary graphical representation.\n */\nElementRegistry.prototype.updateGraphics = function(filter, gfx, secondary) {\n var id = filter.id || filter;\n\n var container = this._elements[id];\n\n if (secondary) {\n container.secondaryGfx = gfx;\n } else {\n container.gfx = gfx;\n }\n\n if (gfx) {\n svgAttr(gfx, ELEMENT_ID, id);\n }\n\n return gfx;\n};\n\n/**\n * Get the element with the given ID or graphical representation.\n *\n * @example\n *\n * elementRegistry.get('SomeElementId_1');\n *\n * elementRegistry.get(gfx);\n *\n * @param {string|SVGElement} filter The elements ID or graphical representation.\n *\n * @return {ElementLike|undefined} The element.\n */\nElementRegistry.prototype.get = function(filter) {\n var id;\n\n if (typeof filter === 'string') {\n id = filter;\n } else {\n id = filter && svgAttr(filter, ELEMENT_ID);\n }\n\n var container = this._elements[id];\n return container && container.element;\n};\n\n/**\n * Return all elements that match a given filter function.\n *\n * @param {ElementRegistryCallback} fn The filter function.\n *\n * @return {ElementLike[]} The matching elements.\n */\nElementRegistry.prototype.filter = function(fn) {\n\n var filtered = [];\n\n this.forEach(function(element, gfx) {\n if (fn(element, gfx)) {\n filtered.push(element);\n }\n });\n\n return filtered;\n};\n\n/**\n * Return the first element that matches the given filter function.\n *\n * @param {Function} fn The filter function.\n *\n * @return {ElementLike|undefined} The matching element.\n */\nElementRegistry.prototype.find = function(fn) {\n var map = this._elements,\n keys = Object.keys(map);\n\n for (var i = 0; i < keys.length; i++) {\n var id = keys[i],\n container = map[id],\n element = container.element,\n gfx = container.gfx;\n\n if (fn(element, gfx)) {\n return element;\n }\n }\n};\n\n/**\n * Get all elements.\n *\n * @return {ElementLike[]} All elements.\n */\nElementRegistry.prototype.getAll = function() {\n return this.filter(function(e) { return e; });\n};\n\n/**\n * Execute a given function for each element.\n *\n * @param {Function} fn The function to execute.\n */\nElementRegistry.prototype.forEach = function(fn) {\n\n var map = this._elements;\n\n Object.keys(map).forEach(function(id) {\n var container = map[id],\n element = container.element,\n gfx = container.gfx;\n\n return fn(element, gfx);\n });\n};\n\n/**\n * Return the graphical representation of an element.\n *\n * @example\n *\n * elementRegistry.getGraphics('SomeElementId_1');\n *\n * elementRegistry.getGraphics(rootElement); // <g ...>\n *\n * elementRegistry.getGraphics(rootElement, true); // <svg ...>\n *\n * @param {ElementLike|string} filter The element or its ID.\n * @param {boolean} [secondary=false] Whether to return the secondary graphical representation.\n *\n * @return {SVGElement} The graphical representation.\n */\nElementRegistry.prototype.getGraphics = function(filter, secondary) {\n var id = filter.id || filter;\n\n var container = this._elements[id];\n return container && (secondary ? container.secondaryGfx : container.gfx);\n};\n\n/**\n * Validate an ID and throw an error if invalid.\n *\n * @param {string} id\n *\n * @throws {Error} Error indicating that the ID is invalid or already assigned.\n */\nElementRegistry.prototype._validateId = function(id) {\n if (!id) {\n throw new Error('element must have an id');\n }\n\n if (this._elements[id]) {\n throw new Error('element with id ' + id + ' already added');\n }\n};\n","'use strict';\n\n/**\n * An empty collection stub. Use {@link RefsCollection.extend} to extend a\n * collection with ref semantics.\n *\n * @class RefsCollection\n */\n\n/**\n * Extends a collection with {@link Refs} aware methods\n *\n * @memberof RefsCollection\n * @static\n *\n * @param {Array<Object>} collection\n * @param {Refs} refs instance\n * @param {Object} property represented by the collection\n * @param {Object} target object the collection is attached to\n *\n * @return {RefsCollection<Object>} the extended array\n */\nfunction extend(collection, refs, property, target) {\n\n var inverseProperty = property.inverse;\n\n /**\n * Removes the given element from the array and returns it.\n *\n * @method RefsCollection#remove\n *\n * @param {Object} element the element to remove\n */\n Object.defineProperty(collection, 'remove', {\n value: function(element) {\n var idx = this.indexOf(element);\n if (idx !== -1) {\n this.splice(idx, 1);\n\n // unset inverse\n refs.unset(element, inverseProperty, target);\n }\n\n return element;\n }\n });\n\n /**\n * Returns true if the collection contains the given element\n *\n * @method RefsCollection#contains\n *\n * @param {Object} element the element to check for\n */\n Object.defineProperty(collection, 'contains', {\n value: function(element) {\n return this.indexOf(element) !== -1;\n }\n });\n\n /**\n * Adds an element to the array, unless it exists already (set semantics).\n *\n * @method RefsCollection#add\n *\n * @param {Object} element the element to add\n * @param {Number} optional index to add element to\n * (possibly moving other elements around)\n */\n Object.defineProperty(collection, 'add', {\n value: function(element, idx) {\n\n var currentIdx = this.indexOf(element);\n\n if (typeof idx === 'undefined') {\n\n if (currentIdx !== -1) {\n // element already in collection (!)\n return;\n }\n\n // add to end of array, as no idx is specified\n idx = this.length;\n }\n\n // handle already in collection\n if (currentIdx !== -1) {\n\n // remove element from currentIdx\n this.splice(currentIdx, 1);\n }\n\n // add element at idx\n this.splice(idx, 0, element);\n\n if (currentIdx === -1) {\n // set inverse, unless element was\n // in collection already\n refs.set(element, inverseProperty, target);\n }\n }\n });\n\n // a simple marker, identifying this element\n // as being a refs collection\n Object.defineProperty(collection, '__refs_collection', {\n value: true\n });\n\n return collection;\n}\n\n\nfunction isExtended(collection) {\n return collection.__refs_collection === true;\n}\n\nmodule.exports.extend = extend;\n\nmodule.exports.isExtended = isExtended;","'use strict';\n\nvar Collection = require('./collection');\n\nfunction hasOwnProperty(e, property) {\n return Object.prototype.hasOwnProperty.call(e, property.name || property);\n}\n\nfunction defineCollectionProperty(ref, property, target) {\n\n var collection = Collection.extend(target[property.name] || [], ref, property, target);\n\n Object.defineProperty(target, property.name, {\n enumerable: property.enumerable,\n value: collection\n });\n\n if (collection.length) {\n\n collection.forEach(function(o) {\n ref.set(o, property.inverse, target);\n });\n }\n}\n\n\nfunction defineProperty(ref, property, target) {\n\n var inverseProperty = property.inverse;\n\n var _value = target[property.name];\n\n Object.defineProperty(target, property.name, {\n configurable: property.configurable,\n enumerable: property.enumerable,\n\n get: function() {\n return _value;\n },\n\n set: function(value) {\n\n // return if we already performed all changes\n if (value === _value) {\n return;\n }\n\n var old = _value;\n\n // temporary set null\n _value = null;\n\n if (old) {\n ref.unset(old, inverseProperty, target);\n }\n\n // set new value\n _value = value;\n\n // set inverse value\n ref.set(_value, inverseProperty, target);\n }\n });\n\n}\n\n/**\n * Creates a new references object defining two inversly related\n * attribute descriptors a and b.\n *\n * <p>\n * When bound to an object using {@link Refs#bind} the references\n * get activated and ensure that add and remove operations are applied\n * reversely, too.\n * </p>\n *\n * <p>\n * For attributes represented as collections {@link Refs} provides the\n * {@link RefsCollection#add}, {@link RefsCollection#remove} and {@link RefsCollection#contains} extensions\n * that must be used to properly hook into the inverse change mechanism.\n * </p>\n *\n * @class Refs\n *\n * @classdesc A bi-directional reference between two attributes.\n *\n * @param {Refs.AttributeDescriptor} a property descriptor\n * @param {Refs.AttributeDescriptor} b property descriptor\n *\n * @example\n *\n * var refs = Refs({ name: 'wheels', collection: true, enumerable: true }, { name: 'car' });\n *\n * var car = { name: 'toyota' };\n * var wheels = [{ pos: 'front-left' }, { pos: 'front-right' }];\n *\n * refs.bind(car, 'wheels');\n *\n * car.wheels // []\n * car.wheels.add(wheels[0]);\n * car.wheels.add(wheels[1]);\n *\n * car.wheels // [{ pos: 'front-left' }, { pos: 'front-right' }]\n *\n * wheels[0].car // { name: 'toyota' };\n * car.wheels.remove(wheels[0]);\n *\n * wheels[0].car // undefined\n */\nfunction Refs(a, b) {\n\n if (!(this instanceof Refs)) {\n return new Refs(a, b);\n }\n\n // link\n a.inverse = b;\n b.inverse = a;\n\n this.props = {};\n this.props[a.name] = a;\n this.props[b.name] = b;\n}\n\n/**\n * Binds one side of a bi-directional reference to a\n * target object.\n *\n * @memberOf Refs\n *\n * @param {Object} target\n * @param {String} property\n */\nRefs.prototype.bind = function(target, property) {\n if (typeof property === 'string') {\n if (!this.props[property]) {\n throw new Error('no property <' + property + '> in ref');\n }\n property = this.props[property];\n }\n\n if (property.collection) {\n defineCollectionProperty(this, property, target);\n } else {\n defineProperty(this, property, target);\n }\n};\n\nRefs.prototype.ensureRefsCollection = function(target, property) {\n\n var collection = target[property.name];\n\n if (!Collection.isExtended(collection)) {\n defineCollectionProperty(this, property, target);\n }\n\n return collection;\n};\n\nRefs.prototype.ensureBound = function(target, property) {\n if (!hasOwnProperty(target, property)) {\n this.bind(target, property);\n }\n};\n\nRefs.prototype.unset = function(target, property, value) {\n\n if (target) {\n this.ensureBound(target, property);\n\n if (property.collection) {\n this.ensureRefsCollection(target, property).remove(value);\n } else {\n target[property.name] = undefined;\n }\n }\n};\n\nRefs.prototype.set = function(target, property, value) {\n\n if (target) {\n this.ensureBound(target, property);\n\n if (property.collection) {\n this.ensureRefsCollection(target, property).add(value);\n } else {\n target[property.name] = value;\n }\n }\n};\n\nmodule.exports = Refs;\n\n\n/**\n * An attribute descriptor to be used specify an attribute in a {@link Refs} instance\n *\n * @typedef {Object} Refs.AttributeDescriptor\n * @property {String} name\n * @property {boolean} [collection=false]\n * @property {boolean} [enumerable=false]\n */","module.exports = require('./lib/refs');\n\nmodule.exports.Collection = require('./lib/collection');","import { assign } from 'min-dash';\nimport inherits from 'inherits-browser';\n\nimport Refs from 'object-refs';\n\nvar parentRefs = new Refs({ name: 'children', enumerable: true, collection: true }, { name: 'parent' }),\n labelRefs = new Refs({ name: 'labels', enumerable: true, collection: true }, { name: 'labelTarget' }),\n attacherRefs = new Refs({ name: 'attachers', collection: true }, { name: 'host' }),\n outgoingRefs = new Refs({ name: 'outgoing', collection: true }, { name: 'source' }),\n incomingRefs = new Refs({ name: 'incoming', collection: true }, { name: 'target' });\n\n/**\n * The basic graphical representation\n *\n * @class\n *\n * @abstract\n */\nexport function Base() {\n\n /**\n * The object that backs up the shape\n *\n * @name Base#businessObject\n * @type Object\n */\n Object.defineProperty(this, 'businessObject', {\n writable: true\n });\n\n\n /**\n * Single label support, will mapped to multi label array\n *\n * @name Base#label\n * @type Object\n */\n Object.defineProperty(this, 'label', {\n get: function() {\n return this.labels[0];\n },\n set: function(newLabel) {\n\n var label = this.label,\n labels = this.labels;\n\n if (!newLabel && label) {\n labels.remove(label);\n } else {\n labels.add(newLabel, 0);\n }\n }\n });\n\n /**\n * The parent shape\n *\n * @name Base#parent\n * @type Shape\n */\n parentRefs.bind(this, 'parent');\n\n /**\n * The list of labels\n *\n * @name Base#labels\n * @type Label\n */\n labelRefs.bind(this, 'labels');\n\n /**\n * The list of outgoing connections\n *\n * @name Base#outgoing\n * @type Array<Connection>\n */\n outgoingRefs.bind(this, 'outgoing');\n\n /**\n * The list of incoming connections\n *\n * @name Base#incoming\n * @type Array<Connection>\n */\n incomingRefs.bind(this, 'incoming');\n}\n\n\n/**\n * A graphical object\n *\n * @class\n * @constructor\n *\n * @extends Base\n */\nexport function Shape() {\n Base.call(this);\n\n /**\n * Indicates frame shapes\n *\n * @name Shape#isFrame\n * @type boolean\n */\n\n /**\n * The list of children\n *\n * @name Shape#children\n * @type Array<Base>\n */\n parentRefs.bind(this, 'children');\n\n /**\n * @name Shape#host\n * @type Shape\n */\n attacherRefs.bind(this, 'host');\n\n /**\n * @name Shape#attachers\n * @type Shape\n */\n attacherRefs.bind(this, 'attachers');\n}\n\ninherits(Shape, Base);\n\n\n/**\n * A root graphical object\n *\n * @class\n * @constructor\n *\n * @extends Shape\n */\nexport function Root() {\n Shape.call(this);\n}\n\ninherits(Root, Shape);\n\n\n/**\n * A label for an element\n *\n * @class\n * @constructor\n *\n * @extends Shape\n */\nexport function Label() {\n Shape.call(this);\n\n /**\n * The labeled element\n *\n * @name Label#labelTarget\n * @type Base\n */\n labelRefs.bind(this, 'labelTarget');\n}\n\ninherits(Label, Shape);\n\n\n/**\n * A connection between two elements\n *\n * @class\n * @constructor\n *\n * @extends Base\n */\nexport function Connection() {\n Base.call(this);\n\n /**\n * The element this connection originates from\n *\n * @name Connection#source\n * @type Base\n */\n outgoingRefs.bind(this, 'source');\n\n /**\n * The element this connection points to\n *\n * @name Connection#target\n * @type Base\n */\n incomingRefs.bind(this, 'target');\n}\n\ninherits(Connection, Base);\n\n\nvar types = {\n connection: Connection,\n shape: Shape,\n label: Label,\n root: Root\n};\n\n/**\n * Creates a model element of the given type.\n *\n * @method create\n *\n * @example\n *\n * import * as Model from 'diagram-js/lib/model';\n *\n * const connection = Model.create('connection', {\n * waypoints: [\n * { x: 100, y: 100 },\n * { x: 200, y: 100 }\n * ]\n * });\n *\n * const label = Model.create('label', {\n * x: 100,\n * y: 100,\n * width: 100,\n * height: 100,\n * labelTarget: shape\n * });\n *\n * const root = Model.create('root', {\n * x: 100,\n * y: 100,\n * width: 100,\n * height: 100\n * });\n *\n * const shape = Model.create('shape', {\n * x: 100,\n * y: 100,\n * width: 100,\n * height: 100\n * });\n *\n * @param {string} type The type of model element to be created.\n * @param {Object} attrs Attributes to create the model element with.\n *\n * @return {Connection|Label|Root|Shape} The created model element.\n */\nexport function create(type, attrs) {\n var Type = types[type];\n if (!Type) {\n throw new Error('unknown type: <' + type + '>');\n }\n return assign(new Type(), attrs);\n}","import {\n create\n} from '../model';\n\nimport { assign } from 'min-dash';\n\n/**\n * @typedef {import('../model/index').Base} Base\n * @typedef {import('../model/index').Connection} Connection\n * @typedef {import('../model/index').Label} Label\n * @typedef {import('../model/index').Root} Root\n * @typedef {import('../model/index').Shape} Shape\n * @typedef {import('../model/index').ModelAttrsConnection} ModelAttrsConnection\n * @typedef {import('../model/index').ModelAttrsLabel} ModelAttrsLabel\n * @typedef {import('../model/index').ModelAttrsRoot} ModelAttrsRoot\n * @typedef {import('../model/index').ModelAttrsShape} ModelAttrsShape\n */\n\n/**\n * A factory for model elements.\n *\n * @class\n * @constructor\n */\nexport default function ElementFactory() {\n this._uid = 12;\n}\n\n/**\n * Create a root element.\n *\n * @param {ModelAttrsRoot} attrs The attributes of the root element to be created.\n *\n * @return {Root} The created root element.\n */\nElementFactory.prototype.createRoot = function(attrs) {\n return this.create('root', attrs);\n};\n\n/**\n * Create a label.\n *\n * @param {ModelAttrsLabel} attrs The attributes of the label to be created.\n *\n * @return {Label} The created label.\n */\nElementFactory.prototype.createLabel = function(attrs) {\n return this.create('label', attrs);\n};\n\n/**\n * Create a shape.\n *\n * @param {ModelAttrsShape} attrs The attributes of the shape to be created.\n *\n * @return {Shape} The created shape.\n */\nElementFactory.prototype.createShape = function(attrs) {\n return this.create('shape', attrs);\n};\n\n/**\n * Create a connection.\n *\n * @param {ModelAttrsConnection} attrs The attributes of the connection to be created.\n *\n * @return {Connection} The created connection.\n */\nElementFactory.prototype.createConnection = function(attrs) {\n return this.create('connection', attrs);\n};\n\n/**\n * Create a model element of the given type with the given attributes.\n *\n * @param {string} type The type of the model element.\n * @param {Object} attrs The attributes of the model element.\n *\n * @return {Connection|Label|Root|Shape} The created model element.\n */\nElementFactory.prototype.create = function(type, attrs) {\n\n attrs = assign({}, attrs || {});\n\n if (!attrs.id) {\n attrs.id = type + '_' + (this._uid++);\n }\n\n return create(type, attrs);\n};","import {\n isFunction,\n isArray,\n isNumber,\n bind,\n assign\n} from 'min-dash';\n\nvar FN_REF = '__fn';\n\nvar DEFAULT_PRIORITY = 1000;\n\nvar slice = Array.prototype.slice;\n\n/**\n * @typedef {import('./EventBus').Event} Event\n * @typedef {import('./EventBus').EventCallback} EventCallback\n *\n * @typedef {Object} EventListener\n * @property {Function} callback\n * @property {EventListener|null} next\n * @property {number} priority\n */\n\n/**\n * A general purpose event bus.\n *\n * This component is used to communicate across a diagram instance.\n * Other parts of a diagram can use it to listen to and broadcast events.\n *\n *\n * ## Registering for Events\n *\n * The event bus provides the {@link EventBus#on} and {@link EventBus#once}\n * methods to register for events. {@link EventBus#off} can be used to\n * remove event registrations. Listeners receive an instance of {@link Event}\n * as the first argument. It allows them to hook into the event execution.\n *\n * ```javascript\n *\n * // listen for event\n * eventBus.on('foo', function(event) {\n *\n * // access event type\n * event.type; // 'foo'\n *\n * // stop propagation to other listeners\n * event.stopPropagation();\n *\n * // prevent event default\n * event.preventDefault();\n * });\n *\n * // listen for event with custom payload\n * eventBus.on('bar', function(event, payload) {\n * console.log(payload);\n * });\n *\n * // listen for event returning value\n * eventBus.on('foobar', function(event) {\n *\n * // stop event propagation + prevent default\n * return false;\n *\n * // stop event propagation + return custom result\n * return {\n * complex: 'listening result'\n * };\n * });\n *\n *\n * // listen with custom priority (default=1000, higher is better)\n * eventBus.on('priorityfoo', 1500, function(event) {\n * console.log('invoked first!');\n * });\n *\n *\n * // listen for event and pass the context (`this`)\n * eventBus.on('foobar', function(event) {\n * this.foo();\n * }, this);\n * ```\n *\n *\n * ## Emitting Events\n *\n * Events can be emitted via the event bus using {@link EventBus#fire}.\n *\n * ```javascript\n *\n * // false indicates that the default action\n * // was prevented by listeners\n * if (eventBus.fire('foo') === false) {\n * console.log('default has been prevented!');\n * };\n *\n *\n * // custom args + return value listener\n * eventBus.on('sum', function(event, a, b) {\n * return a + b;\n * });\n *\n * // you can pass custom arguments + retrieve result values.\n * var sum = eventBus.fire('sum', 1, 2);\n * console.log(sum); // 3\n * ```\n */\nexport default function EventBus() {\n this._listeners = {};\n\n // cleanup on destroy on lowest priority to allow\n // message passing until the bitter end\n this.on('diagram.destroy', 1, this._destroy, this);\n}\n\n\n/**\n * Register an event listener for events with the given name.\n *\n * The callback will be invoked with `event, ...additionalArguments`\n * that have been passed to {@link EventBus#fire}.\n *\n * Returning false from a listener will prevent the events default action\n * (if any is specified). To stop an event from being processed further in\n * other listeners execute {@link Event#stopPropagation}.\n *\n * Returning anything but `undefined` from a listener will stop the listener propagation.\n *\n * @param {string|string[]} events The event(s) to listen to.\n * @param {number} [priority=1000] The priority with which to listen.\n * @param {EventCallback} callback The callback.\n * @param {*} [that] Value of `this` the callback will be called with.\n */\nEventBus.prototype.on = function(events, priority, callback, that) {\n\n events = isArray(events) ? events : [ events ];\n\n if (isFunction(priority)) {\n that = callback;\n callback = priority;\n priority = DEFAULT_PRIORITY;\n }\n\n if (!isNumber(priority)) {\n throw new Error('priority must be a number');\n }\n\n var actualCallback = callback;\n\n if (that) {\n actualCallback = bind(callback, that);\n\n // make sure we remember and are able to remove\n // bound callbacks via {@link #off} using the original\n // callback\n actualCallback[FN_REF] = callback[FN_REF] || callback;\n }\n\n var self = this;\n\n events.forEach(function(e) {\n self._addListener(e, {\n priority: priority,\n callback: actualCallback,\n next: null\n });\n });\n};\n\n\n/**\n * Register an event listener that is called only once.\n *\n * @param {string} event The event to listen to.\n * @param {number} [priority=1000] The priority with which to listen.\n * @param {EventCallback} callback The callback.\n * @param {*} [that] Value of `this` the callback will be called with.\n */\nEventBus.prototype.once = function(event, priority, callback, that) {\n var self = this;\n\n if (isFunction(priority)) {\n that = callback;\n callback = priority;\n priority = DEFAULT_PRIORITY;\n }\n\n if (!isNumber(priority)) {\n throw new Error('priority must be a number');\n }\n\n function wrappedCallback() {\n wrappedCallback.__isTomb = true;\n\n var result = callback.apply(that, arguments);\n\n self.off(event, wrappedCallback);\n\n return result;\n }\n\n // make sure we remember and are able to remove\n // bound callbacks via {@link #off} using the original\n // callback\n wrappedCallback[FN_REF] = callback;\n\n this.on(event, priority, wrappedCallback);\n};\n\n\n/**\n * Removes event listeners by event and callback.\n *\n * If no callback is given, all listeners for a given event name are being removed.\n *\n * @param {string|string[]} events The events.\n * @param {EventCallback} [callback] The callback.\n */\nEventBus.prototype.off = function(events, callback) {\n\n events = isArray(events) ? events : [ events ];\n\n var self = this;\n\n events.forEach(function(event) {\n self._removeListener(event, callback);\n });\n\n};\n\n\n/**\n * Create an event recognized be the event bus.\n *\n * @param {Object} data Event data.\n *\n * @return {Event} An event that will be recognized by the event bus.\n */\nEventBus.prototype.createEvent = function(data) {\n var event = new InternalEvent();\n\n event.init(data);\n\n return event;\n};\n\n\n/**\n * Fires an event.\n *\n * @example\n *\n * // fire event by name\n * events.fire('foo');\n *\n * // fire event object with nested type\n * var event = { type: 'foo' };\n * events.fire(event);\n *\n * // fire event with explicit type\n * var event = { x: 10, y: 20 };\n * events.fire('element.moved', event);\n *\n * // pass additional arguments to the event\n * events.on('foo', function(event, bar) {\n * alert(bar);\n * });\n *\n * events.fire({ type: 'foo' }, 'I am bar!');\n *\n * @param {string} [type] The event type.\n * @param {Object} [data] The event or event data.\n * @param {...*} additional Additional arguments the callback will be called with.\n *\n * @return {*} The return value. Will be set to `false` if the default was prevented.\n */\nEventBus.prototype.fire = function(type, data) {\n var event,\n firstListener,\n returnValue,\n args;\n\n args = slice.call(arguments);\n\n if (typeof type === 'object') {\n data = type;\n type = data.type;\n }\n\n if (!type) {\n throw new Error('no event type specified');\n }\n\n firstListener = this._listeners[type];\n\n if (!firstListener) {\n return;\n }\n\n // we make sure we fire instances of our home made\n // events here. We wrap them only once, though\n if (data instanceof InternalEvent) {\n\n // we are fine, we alread have an event\n event = data;\n } else {\n event = this.createEvent(data);\n }\n\n // ensure we pass the event as the first parameter\n args[0] = event;\n\n // original event type (in case we delegate)\n var originalType = event.type;\n\n // update event type before delegation\n if (type !== originalType) {\n event.type = type;\n }\n\n try {\n returnValue = this._invokeListeners(event, args, firstListener);\n } finally {\n\n // reset event type after delegation\n if (type !== originalType) {\n event.type = originalType;\n }\n }\n\n // set the return value to false if the event default\n // got prevented and no other return value exists\n if (returnValue === undefined && event.defaultPrevented) {\n returnValue = false;\n }\n\n return returnValue;\n};\n\n/**\n * Handle an error by firing an event.\n *\n * @param {Error} error The error to be handled.\n *\n * @return {boolean} Whether the error was handled.\n */\nEventBus.prototype.handleError = function(error) {\n return this.fire('error', { error: error }) === false;\n};\n\n\nEventBus.prototype._destroy = function() {\n this._listeners = {};\n};\n\nEventBus.prototype._invokeListeners = function(event, args, listener) {\n\n var returnValue;\n\n while (listener) {\n\n // handle stopped propagation\n if (event.cancelBubble) {\n break;\n }\n\n returnValue = this._invokeListener(event, args, listener);\n\n listener = listener.next;\n }\n\n return returnValue;\n};\n\nEventBus.prototype._invokeListener = function(event, args, listener) {\n\n var returnValue;\n\n if (listener.callback.__isTomb) {\n return returnValue;\n }\n\n try {\n\n // returning false prevents the default action\n returnValue = invokeFunction(listener.callback, args);\n\n // stop propagation on return value\n if (returnValue !== undefined) {\n event.returnValue = returnValue;\n event.stopPropagation();\n }\n\n // prevent default on return false\n if (returnValue === false) {\n event.preventDefault();\n }\n } catch (error) {\n if (!this.handleError(error)) {\n console.error('unhandled error in event listener', error);\n\n throw error;\n }\n }\n\n return returnValue;\n};\n\n/**\n * Add new listener with a certain priority to the list\n * of listeners (for the given event).\n *\n * The semantics of listener registration / listener execution are\n * first register, first serve: New listeners will always be inserted\n * after existing listeners with the same priority.\n *\n * Example: Inserting two listeners with priority 1000 and 1300\n *\n * * before: [ 1500, 1500, 1000, 1000 ]\n * * after: [ 1500, 1500, (new=1300), 1000, 1000, (new=1000) ]\n *\n * @param {string} event\n * @param {EventListener} listener\n */\nEventBus.prototype._addListener = function(event, newListener) {\n\n var listener = this._getListeners(event),\n previousListener;\n\n // no prior listeners\n if (!listener) {\n this._setListeners(event, newListener);\n\n return;\n }\n\n // ensure we order listeners by priority from\n // 0 (high) to n > 0 (low)\n while (listener) {\n\n if (listener.priority < newListener.priority) {\n\n newListener.next = listener;\n\n if (previousListener) {\n previousListener.next = newListener;\n } else {\n this._setListeners(event, newListener);\n }\n\n return;\n }\n\n previousListener = listener;\n listener = listener.next;\n }\n\n // add new listener to back\n previousListener.next = newListener;\n};\n\n\nEventBus.prototype._getListeners = function(name) {\n return this._listeners[name];\n};\n\nEventBus.prototype._setListeners = function(name, listener) {\n this._listeners[name] = listener;\n};\n\nEventBus.prototype._removeListener = function(event, callback) {\n\n var listener = this._getListeners(event),\n nextListener,\n previousListener,\n listenerCallback;\n\n if (!callback) {\n\n // clear listeners\n this._setListeners(event, null);\n\n return;\n }\n\n while (listener) {\n\n nextListener = listener.next;\n\n listenerCallback = listener.callback;\n\n if (listenerCallback === callback || listenerCallback[FN_REF] === callback) {\n if (previousListener) {\n previousListener.next = nextListener;\n } else {\n\n // new first listener\n this._setListeners(event, nextListener);\n }\n }\n\n previousListener = listener;\n listener = nextListener;\n }\n};\n\n/**\n * A event that is emitted via the event bus.\n */\nfunction InternalEvent() { }\n\nInternalEvent.prototype.stopPropagation = function() {\n this.cancelBubble = true;\n};\n\nInternalEvent.prototype.preventDefault = function() {\n this.defaultPrevented = true;\n};\n\nInternalEvent.prototype.init = function(data) {\n assign(this, data || {});\n};\n\n\n/**\n * Invoke function. Be fast...\n *\n * @param {Function} fn\n * @param {*[]} args\n *\n * @return {*}\n */\nfunction invokeFunction(fn, args) {\n return fn.apply(null, args);\n}\n","/**\n * SVGs for elements are generated by the {@link GraphicsFactory}.\n *\n * This utility gives quick access to the important semantic\n * parts of an element.\n */\n\n/**\n * Returns the visual part of a diagram element.\n *\n * @param {SVGElement} gfx\n *\n * @return {SVGElement}\n */\nexport function getVisual(gfx) {\n return gfx.childNodes[0];\n}\n\n/**\n * Returns the children for a given diagram element.\n *\n * @param {SVGElement} gfx\n * @return {SVGElement}\n */\nexport function getChildren(gfx) {\n return gfx.parentNode.childNodes[1];\n}","import {\r\n transform as svgTransform,\r\n createTransform\r\n} from 'tiny-svg';\r\n\r\n\r\n/**\r\n * @param {SVGElement} element\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} angle\r\n * @param {number} amount\r\n */\r\nexport function transform(gfx, x, y, angle, amount) {\r\n var translate = createTransform();\r\n translate.setTranslate(x, y);\r\n\r\n var rotate = createTransform();\r\n rotate.setRotate(angle || 0, 0, 0);\r\n\r\n var scale = createTransform();\r\n scale.setScale(amount || 1, amount || 1);\r\n\r\n svgTransform(gfx, [ translate, rotate, scale ]);\r\n}\r\n\r\n\r\n/**\r\n * @param {SVGElement} element\r\n * @param {number} x\r\n * @param {number} y\r\n */\r\nexport function translate(gfx, x, y) {\r\n var translate = createTransform();\r\n translate.setTranslate(x, y);\r\n\r\n svgTransform(gfx, translate);\r\n}\r\n\r\n\r\n/**\r\n * @param {SVGElement} element\r\n * @param {number} angle\r\n */\r\nexport function rotate(gfx, angle) {\r\n var rotate = createTransform();\r\n rotate.setRotate(angle, 0, 0);\r\n\r\n svgTransform(gfx, rotate);\r\n}\r\n\r\n\r\n/**\r\n * @param {SVGElement} element\r\n * @param {number} amount\r\n */\r\nexport function scale(gfx, amount) {\r\n var scale = createTransform();\r\n scale.setScale(amount, amount);\r\n\r\n svgTransform(gfx, scale);\r\n}","import {\n forEach,\n reduce\n} from 'min-dash';\n\nimport {\n getChildren,\n getVisual\n} from '../util/GraphicsUtil';\n\nimport { translate } from '../util/SvgTransformUtil';\n\nimport { clear as domClear } from 'min-dom';\n\nimport {\n append as svgAppend,\n attr as svgAttr,\n classes as svgClasses,\n create as svgCreate,\n remove as svgRemove\n} from 'tiny-svg';\n\nimport {\n isFrameElement\n} from '../util/Elements';\n\n/**\n * @typedef {import('../model').ModelType} ModelType\n * @typedef {import('../model').ModelTypeConnection} ModelTypeConnection\n * @typedef {import('../model').ModelTypeShape} ModelTypeShape\n *\n * @typedef {import('.').ConnectionLike} ConnectionLike\n * @typedef {import('.').ElementLike} ElementLike\n * @typedef {import('.').ShapeLike} ShapeLike\n *\n * @typedef {import('./ElementRegistry').default} ElementRegistry\n * @typedef {import('./EventBus').default} EventBus\n */\n\n/**\n * A factory that creates graphical elements.\n *\n * @param {EventBus} eventBus\n * @param {ElementRegistry} elementRegistry\n */\nexport default function GraphicsFactory(eventBus, elementRegistry) {\n this._eventBus = eventBus;\n this._elementRegistry = elementRegistry;\n}\n\nGraphicsFactory.$inject = [ 'eventBus' , 'elementRegistry' ];\n\n\nGraphicsFactory.prototype._getChildrenContainer = function(element) {\n\n var gfx = this._elementRegistry.getGraphics(element);\n\n var childrenGfx;\n\n // root element\n if (!element.parent) {\n childrenGfx = gfx;\n } else {\n childrenGfx = getChildren(gfx);\n if (!childrenGfx) {\n childrenGfx = svgCreate('g');\n svgClasses(childrenGfx).add('djs-children');\n\n svgAppend(gfx.parentNode, childrenGfx);\n }\n }\n\n return childrenGfx;\n};\n\n/**\n * Clears the graphical representation of the element and returns the\n * cleared visual (the <g class=\"djs-visual\" /> element).\n */\nGraphicsFactory.prototype._clear = function(gfx) {\n var visual = getVisual(gfx);\n\n domClear(visual);\n\n return visual;\n};\n\n/**\n * Creates a gfx container for shapes and connections\n *\n * The layout is as follows:\n *\n * <g class=\"djs-group\">\n *\n * <!-- the gfx -->\n * <g class=\"djs-element djs-(shape|connection|frame)\">\n * <g class=\"djs-visual\">\n * <!-- the renderer draws in here -->\n * </g>\n *\n * <!-- extensions (overlays, click box, ...) goes here\n * </g>\n *\n * <!-- the gfx child nodes -->\n * <g class=\"djs-children\"></g>\n * </g>\n *\n * @param {string} type the type of the element, i.e. shape | connection\n * @param {SVGElement} childrenGfx\n * @param {number} [parentIndex] position to create container in parent\n * @param {boolean} [isFrame] is frame element\n *\n * @return {SVGElement}\n */\nGraphicsFactory.prototype._createContainer = function(\n type, childrenGfx, parentIndex, isFrame\n) {\n var outerGfx = svgCreate('g');\n svgClasses(outerGfx).add('djs-group');\n\n // insert node at position\n if (typeof parentIndex !== 'undefined') {\n prependTo(outerGfx, childrenGfx, childrenGfx.childNodes[parentIndex]);\n } else {\n svgAppend(childrenGfx, outerGfx);\n }\n\n var gfx = svgCreate('g');\n svgClasses(gfx).add('djs-element');\n svgClasses(gfx).add('djs-' + type);\n\n if (isFrame) {\n svgClasses(gfx).add('djs-frame');\n }\n\n svgAppend(outerGfx, gfx);\n\n // create visual\n var visual = svgCreate('g');\n svgClasses(visual).add('djs-visual');\n\n svgAppend(gfx, visual);\n\n return gfx;\n};\n\n/**\n * Create a graphical element.\n *\n * @param {ModelType} type The type of the element.\n * @param {ElementLike} element The element.\n * @param {number} [parentIndex] The index at which to add the graphical element to its parent's children.\n *\n * @return {SVGElement} The graphical element.\n */\nGraphicsFactory.prototype.create = function(type, element, parentIndex) {\n var childrenGfx = this._getChildrenContainer(element.parent);\n return this._createContainer(type, childrenGfx, parentIndex, isFrameElement(element));\n};\n\n/**\n * Update the containments of the given elements.\n *\n * @param {ElementLike[]} elements The elements.\n */\nGraphicsFactory.prototype.updateContainments = function(elements) {\n\n var self = this,\n elementRegistry = this._elementRegistry,\n parents;\n\n parents = reduce(elements, function(map, e) {\n\n if (e.parent) {\n map[e.parent.id] = e.parent;\n }\n\n return map;\n }, {});\n\n // update all parents of changed and reorganized their children\n // in the correct order (as indicated in our model)\n forEach(parents, function(parent) {\n\n var children = parent.children;\n\n if (!children) {\n return;\n }\n\n var childrenGfx = self._getChildrenContainer(parent);\n\n forEach(children.slice().reverse(), function(child) {\n var childGfx = elementRegistry.getGraphics(child);\n\n prependTo(childGfx.parentNode, childrenGfx);\n });\n });\n};\n\n/**\n * Draw a shape.\n *\n * @param {SVGElement} visual The graphical element.\n * @param {ShapeLike} element The shape.\n */\nGraphicsFactory.prototype.drawShape = function(visual, element) {\n var eventBus = this._eventBus;\n\n return eventBus.fire('render.shape', { gfx: visual, element: element });\n};\n\n/**\n * Get the path of a shape.\n *\n * @param {ShapeLike} element The shape.\n *\n * @return {string} The path of the shape.\n */\nGraphicsFactory.prototype.getShapePath = function(element) {\n var eventBus = this._eventBus;\n\n return eventBus.fire('render.getShapePath', element);\n};\n\n/**\n * Draw a connection.\n *\n * @param {SVGElement} visual The graphical element.\n * @param {ConnectionLike} element The connection.\n */\nGraphicsFactory.prototype.drawConnection = function(visual, element) {\n var eventBus = this._eventBus;\n\n return eventBus.fire('render.connection', { gfx: visual, element: element });\n};\n\n/**\n * Get the path of a connection.\n *\n * @param {ConnectionLike} element The connection.\n *\n * @return {string} The path of the connection.\n */\nGraphicsFactory.prototype.getConnectionPath = function(connection) {\n var eventBus = this._eventBus;\n\n return eventBus.fire('render.getConnectionPath', connection);\n};\n\n/**\n * Update an elements graphical representation.\n *\n * @param {ModelTypeShape|ModelTypeConnection} type The type of the element.\n * @param {ElementLike} element The element.\n * @param {SVGElement} gfx The graphical representation.\n */\nGraphicsFactory.prototype.update = function(type, element, gfx) {\n\n // do NOT update root element\n if (!element.parent) {\n return;\n }\n\n var visual = this._clear(gfx);\n\n // redraw\n if (type === 'shape') {\n this.drawShape(visual, element);\n\n // update positioning\n translate(gfx, element.x, element.y);\n } else\n if (type === 'connection') {\n this.drawConnection(visual, element);\n } else {\n throw new Error('unknown type: ' + type);\n }\n\n if (element.hidden) {\n svgAttr(gfx, 'display', 'none');\n } else {\n svgAttr(gfx, 'display', 'block');\n }\n};\n\n/**\n * Remove a graphical element.\n *\n * @param {ElementLike} element The element.\n */\nGraphicsFactory.prototype.remove = function(element) {\n var gfx = this._elementRegistry.getGraphics(element);\n\n // remove\n svgRemove(gfx.parentNode);\n};\n\n\n// helpers //////////\n\nfunction prependTo(newNode, parentNode, siblingNode) {\n var node = siblingNode || parentNode.firstChild;\n\n // do not prepend node to itself to prevent IE from crashing\n // https://github.com/bpmn-io/bpmn-js/issues/746\n if (newNode === node) {\n return;\n }\n\n parentNode.insertBefore(newNode, node);\n}\n","import DrawModule from '../draw';\n\nimport Canvas from './Canvas';\nimport ElementRegistry from './ElementRegistry';\nimport ElementFactory from './ElementFactory';\nimport EventBus from './EventBus';\nimport GraphicsFactory from './GraphicsFactory';\n\nexport default {\n __depends__: [ DrawModule ],\n __init__: [ 'canvas' ],\n canvas: [ 'type', Canvas ],\n elementRegistry: [ 'type', ElementRegistry ],\n elementFactory: [ 'type', ElementFactory ],\n eventBus: [ 'type', EventBus ],\n graphicsFactory: [ 'type', GraphicsFactory ]\n};","import { Injector } from 'didi';\n\nimport CoreModule from './core';\n\n/**\n * @typedef {import('didi').InjectionContext} InjectionContext\n * @typedef {import('didi').LocalsMap} LocalsMap\n * @typedef {import('didi').ModuleDeclaration} ModuleDeclaration\n *\n * @typedef {import('./Diagram').DiagramOptions} DiagramOptions\n */\n\n/**\n * Bootstrap an injector from a list of modules, instantiating a number of default components\n *\n * @param {ModuleDeclaration[]} modules\n *\n * @return {Injector} a injector to use to access the components\n */\nfunction bootstrap(modules) {\n var injector = new Injector(modules);\n\n injector.init();\n\n return injector;\n}\n\n/**\n * Creates an injector from passed options.\n *\n * @param {DiagramOptions} [options]\n *\n * @return {Injector}\n */\nfunction createInjector(options) {\n\n options = options || {};\n\n var configModule = {\n 'config': [ 'value', options ]\n };\n\n var modules = [ configModule, CoreModule ].concat(options.modules || []);\n\n return bootstrap(modules);\n}\n\n\n/**\n * The main diagram-js entry point that bootstraps the diagram with the given\n * configuration.\n *\n * To register extensions with the diagram, pass them as Array<Module> to the constructor.\n *\n * @class\n * @constructor\n *\n * @example\n *\n * <caption>Creating a plug-in that logs whenever a shape is added to the canvas.</caption>\n *\n * // plug-in implemenentation\n * function MyLoggingPlugin(eventBus) {\n * eventBus.on('shape.added', function(event) {\n * console.log('shape ', event.shape, ' was added to the diagram');\n * });\n * }\n *\n * // export as module\n * export default {\n * __init__: [ 'myLoggingPlugin' ],\n * myLoggingPlugin: [ 'type', MyLoggingPlugin ]\n * };\n *\n *\n * // instantiate the diagram with the new plug-in\n *\n * import MyLoggingModule from 'path-to-my-logging-plugin';\n *\n * var diagram = new Diagram({\n * modules: [\n * MyLoggingModule\n * ]\n * });\n *\n * diagram.invoke([ 'canvas', function(canvas) {\n * // add shape to drawing canvas\n * canvas.addShape({ x: 10, y: 10 });\n * });\n *\n * // 'shape ... was added to the diagram' logged to console\n *\n * @param {DiagramOptions} [options]\n * @param {ModuleDeclaration[]} [options.modules] External modules to instantiate with the diagram.\n * @param {Injector} [injector] An (optional) injector to bootstrap the diagram with.\n */\nexport default function Diagram(options, injector) {\n\n // create injector unless explicitly specified\n this.injector = injector = injector || createInjector(options);\n\n // API\n\n /**\n * Resolves a diagram service.\n *\n * @method Diagram#get\n *\n * @param {string} name The name of the service to get.\n * @param {boolean} [strict=true] If false, resolve missing services to null.\n */\n this.get = injector.get;\n\n /**\n * Executes a function with its dependencies injected.\n *\n * @method Diagram#invoke\n *\n * @param {Function} fn The function to be executed.\n * @param {InjectionContext} [context] The context.\n * @param {LocalsMap} [locals] The locals.\n */\n this.invoke = injector.invoke;\n\n // init\n\n // indicate via event\n\n\n /**\n * An event indicating that all plug-ins are loaded.\n *\n * Use this event to fire other events to interested plug-ins\n *\n * @memberOf Diagram\n *\n * @event diagram.init\n *\n * @example\n *\n * eventBus.on('diagram.init', function() {\n * eventBus.fire('my-custom-event', { foo: 'BAR' });\n * });\n *\n * @type {Object}\n */\n this.get('eventBus').fire('diagram.init');\n}\n\n\n/**\n * Destroys the diagram\n *\n * @method Diagram#destroy\n */\nDiagram.prototype.destroy = function() {\n this.get('eventBus').fire('diagram.destroy');\n};\n\n/**\n * Clear the diagram, removing all contents.\n */\nDiagram.prototype.clear = function() {\n this.get('eventBus').fire('diagram.clear');\n};\n","import { forEach, bind, pick, assign, isString, isObject, set } from 'min-dash';\n\n/**\n * Moddle base element.\n */\nfunction 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};\n\n/**\n * A model element factory.\n *\n * @param {Moddle} model\n * @param {Properties} properties\n */\nfunction 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\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 */\nfunction 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 */\nfunction isBuiltIn(type) {\n return !!BUILTINS[type];\n}\n\n/**\n * Return whether the given type is simple\n */\nfunction isSimple(type) {\n return !!TYPE_CONVERTERS[type];\n}\n\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 */\nfunction 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 } else\n\n // prefix + local name\n if (parts.length === 2) {\n localName = parts[1];\n prefix = parts[0];\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}\n\n/**\n * A utility to build element descriptors.\n */\nfunction 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 = parseName(parts[0], nsPrefix);\n var attrName = parseName(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};\n\n/**\n * A registry of Moddle packages.\n *\n * @param {Array<Package>} packages\n * @param {Properties} properties\n */\nfunction 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 = parseName(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 = parseName(p.name, ns.prefix),\n propertyName = propertyNs.name;\n\n // namespace property types\n if (!isBuiltIn(p.type)) {\n p.type = parseName(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 = parseName(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 = isBuiltIn(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 = parseName(cls, isBuiltIn(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 = parseName(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\n/**\n * A utility that gets and sets properties of model elements.\n *\n * @param {Model} model\n */\nfunction 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}\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 */\nfunction 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 = parseName(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};\n\nexport { Moddle, coerceType, isBuiltIn as isBuiltInType, isSimple as isSimpleType, parseName as parseNameNS };\n//# sourceMappingURL=index.esm.js.map\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. \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 (&) as well as\n * hex (ય) and decimal (ӏ) encoded characters.\n *\n * @param {string} str\n *\n * @return {string} decoded string\n */\nfunction decodeEntities(s) {\n if (s.length > 3 && s.indexOf('&') !== -1) {\n return s.replace(ENTITY_PATTERN, replaceEntities);\n }\n\n return s;\n}\n\nvar XSI_URI = 'http://www.w3.org/2001/XMLSchema-instance';\nvar XSI_PREFIX = 'xsi';\nvar XSI_TYPE = 'xsi:type';\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 */\nfunction 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 // FORCE default mapping for schema instance\n _nsUriToPrefix[XSI_URI] = XSI_PREFIX;\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 // normalize xsi:type ns attribute value\n if (name === XSI_TYPE) {\n w = value.indexOf(':');\n\n if (w !== -1) {\n nsName = value.substring(0, w);\n\n // handle default prefixes, i.e. xs:String gracefully\n nsName = nsMatrix[nsName] || nsName;\n value = nsName + value.substring(w);\n } else {\n value = defaultAlias + ':' + value;\n }\n }\n\n // end: normalize xsi:type ns attribute value\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 // normalize xsi:type ns attribute value\n if (name === XSI_TYPE) {\n w = value.indexOf(':');\n\n if (w !== -1) {\n nsName = value.substring(0, w);\n\n // handle default prefixes, i.e. xs:String gracefully\n nsName = nsMatrix[nsName] || nsName;\n value = nsName + value.substring(w);\n } else {\n value = defaultAlias + ':' + value;\n }\n }\n\n // end: normalize xsi:type ns attribute value\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}\n\nexport { Parser, decodeEntities as decode };\n","import { forEach, bind, pick, assign, isString, isObject, set } from 'min-dash';\n\n/**\n * Moddle base element.\n */\nfunction 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};\n\n/**\n * A model element factory.\n *\n * @param {Moddle} model\n * @param {Properties} properties\n */\nfunction 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\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 */\nfunction 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 */\nfunction isBuiltIn(type) {\n return !!BUILTINS[type];\n}\n\n/**\n * Return whether the given type is simple\n */\nfunction isSimple(type) {\n return !!TYPE_CONVERTERS[type];\n}\n\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 */\nfunction 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 } else\n\n // prefix + local name\n if (parts.length === 2) {\n localName = parts[1];\n prefix = parts[0];\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}\n\n/**\n * A utility to build element descriptors.\n */\nfunction 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 = parseName(parts[0], nsPrefix);\n var attrName = parseName(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};\n\n/**\n * A registry of Moddle packages.\n *\n * @param {Array<Package>} packages\n * @param {Properties} properties\n */\nfunction 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 = parseName(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 = parseName(p.name, ns.prefix),\n propertyName = propertyNs.name;\n\n // namespace property types\n if (!isBuiltIn(p.type)) {\n p.type = parseName(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 = parseName(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 = isBuiltIn(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 = parseName(cls, isBuiltIn(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 = parseName(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\n/**\n * A utility that gets and sets properties of model elements.\n *\n * @param {Model} model\n */\nfunction 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}\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 */\nfunction 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 = parseName(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};\n\nexport { Moddle, coerceType, isBuiltIn as isBuiltInType, isSimple as isSimpleType, parseName as parseNameNS };\n//# sourceMappingURL=index.esm.js.map\n","import { forEach, assign, find, isString, findIndex, filter, has } from 'min-dash';\nimport { Parser } from 'saxen';\nimport { coerceType, parseNameNS, isSimpleType, Moddle } from 'moddle';\n\nfunction hasLowerCaseAlias(pkg) {\n return pkg.xml && pkg.xml.tagAlias === 'lowerCase';\n}\n\nvar DEFAULT_NS_MAP = {\n 'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n 'xml': 'http://www.w3.org/XML/1998/namespace'\n};\n\nvar XSI_TYPE = 'xsi:type';\n\nfunction serializeFormat(element) {\n return element.xml && element.xml.serialize;\n}\n\nfunction serializeAsType(element) {\n return serializeFormat(element) === XSI_TYPE;\n}\n\nfunction serializeAsProperty(element) {\n return serializeFormat(element) === 'property';\n}\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\nfunction prefixedToName(nameNs, pkg) {\n\n var name = nameNs.name,\n localName = nameNs.localName;\n\n var typePrefix = 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 normalizeXsiTypeName(name, model) {\n\n var nameNs = parseNameNS(name);\n var pkg = model.getPackage(nameNs.prefix);\n\n return prefixedToName(nameNs, 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 */\nfunction 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 */\nfunction 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\n if (name !== 'xmlns') {\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 elementTypeName,\n elementType;\n\n // search for properties by name first\n\n if (property && !property.isAttr) {\n\n if (serializeAsType(property)) {\n elementTypeName = node.attributes[XSI_TYPE];\n\n // xsi type is optional, if it does not exists the\n // default type is assumed\n if (elementTypeName) {\n\n // take possible type prefixes from XML\n // into account, i.e.: xsi:type=\"t{ActualType}\"\n elementTypeName = normalizeXsiTypeName(elementTypeName, model);\n\n elementType = model.getType(elementTypeName);\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 elementTypeName = aliasToName(nameNs, pkg);\n 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 */\nfunction 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 Parser({ 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 }, {\n 'http://www.w3.org/XML/1998/namespace': 'xml' // add default xml ns\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\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\nfunction Namespaces(parent) {\n\n var prefixMap = {};\n var uriMap = {};\n var used = {};\n\n var wellknown = [];\n var custom = [];\n\n // API\n\n this.byUri = function(uri) {\n return uriMap[uri] || (\n parent && parent.byUri(uri)\n );\n };\n\n this.add = function(ns, isWellknown) {\n\n uriMap[ns.uri] = ns;\n\n if (isWellknown) {\n wellknown.push(ns);\n } else {\n custom.push(ns);\n }\n\n this.mapPrefix(ns.prefix, ns.uri);\n };\n\n this.uriByPrefix = function(prefix) {\n return prefixMap[prefix || 'xmlns'];\n };\n\n this.mapPrefix = function(prefix, uri) {\n prefixMap[prefix || 'xmlns'] = uri;\n };\n\n this.getNSKey = function(ns) {\n return (ns.prefix !== undefined) ? (ns.uri + '|' + ns.prefix) : ns.uri;\n };\n\n this.logUsed = function(ns) {\n\n var uri = ns.uri;\n var nsKey = this.getNSKey(ns);\n\n used[nsKey] = this.byUri(uri);\n\n // Inform parent recursively about the usage of this NS\n if (parent) {\n parent.logUsed(ns);\n }\n };\n\n this.getUsed = function(ns) {\n\n function isUsed(ns) {\n var nsKey = self.getNSKey(ns);\n\n return used[nsKey];\n }\n\n var self = this;\n\n var allNs = [].concat(wellknown, custom);\n\n return allNs.filter(isUsed);\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.parseGeneric(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 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.parseGeneric = function(element) {\n\n var self = this,\n body = this.body;\n\n var attributes = [];\n\n forEach(element, function(val, key) {\n\n var nonNsAttr;\n\n if (key === '$body') {\n body.push(new BodySerializer().build({ type: 'String' }, val));\n } else\n if (key === '$children') {\n forEach(val, function(child) {\n body.push(new ElementSerializer(self).build(child));\n });\n } else\n if (key.indexOf('$') !== 0) {\n nonNsAttr = self.parseNsAttribute(element, key, val);\n\n if (nonNsAttr) {\n attributes.push({ name: key, value: val });\n }\n }\n });\n\n return attributes;\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, attrs) {\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 // do not serialize xsi:type attribute\n // it is set manually based on the actual implementation type\n if (attr.name === XSI_TYPE) {\n return;\n }\n\n try {\n self.addAttribute(self.nsAttributeName(attr.name), attr.value);\n } catch (e) {\n /* global console */\n\n console.warn(\n 'missing namespace information for ',\n attr.name, '=', attr.value, 'on', element,\n e);\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\n 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\n 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 asType = serializeAsType(p),\n asProperty = serializeAsProperty(p);\n\n forEach(value, function(v) {\n var serializer;\n\n if (asType) {\n serializer = new TypeSerializer(self, p);\n } else\n if (asProperty) {\n serializer = new ElementSerializer(self, p);\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 element = this.element,\n model = element.$model,\n 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 = DEFAULT_NS_MAP[prefix] || model && (model.getPackage(prefix) || {}).uri;\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 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 }\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) {\n ElementSerializer.call(this, parent, propertyDescriptor);\n}\n\ninherits(TypeSerializer, ElementSerializer);\n\nTypeSerializer.prototype.parseNsAttributes = function(element) {\n\n // extracted attributes\n var attributes = ElementSerializer.prototype.parseNsAttributes.call(this, element);\n\n var descriptor = element.$descriptor;\n\n // only serialize xsi:type 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(XSI_TYPE),\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 */\nfunction 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 new ElementSerializer().build(tree).serializeTo(formatingWriter);\n\n if (!writer) {\n return internalWriter.value;\n }\n }\n\n return {\n toXML: toXML\n };\n}\n\nexport { Reader, Writer };\n//# sourceMappingURL=index.esm.js.map\n","import { isString, assign } from 'min-dash';\nimport { Moddle } from 'moddle';\nimport { Reader, Writer } from 'moddle-xml';\n\n/**\n * A sub class of {@link Moddle} with support for import and export of BPMN 2.0 xml files.\n *\n * @class BpmnModdle\n * @extends Moddle\n *\n * @param {Object|Array} packages to use for instantiating the model\n * @param {Object} [options] additional options to pass over\n */\nfunction BpmnModdle(packages, options) {\n Moddle.call(this, packages, options);\n}\n\nBpmnModdle.prototype = Object.create(Moddle.prototype);\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 error.\n *\n * @typedef {Error} ParseError\n *\n * @property {Array<Error>} warnings\n */\n\n/**\n * Instantiates a BPMN model tree from a given xml string.\n *\n * @param {String} xmlStr\n * @param {String} [typeName='bpmn:Definitions'] name of the root element\n * @param {Object} [options] options to pass to the underlying reader\n *\n * @returns {Promise<ParseResult, ParseError>}\n */\nBpmnModdle.prototype.fromXML = function(xmlStr, typeName, options) {\n\n if (!isString(typeName)) {\n options = typeName;\n typeName = 'bpmn:Definitions';\n }\n\n var reader = new Reader(assign({ model: this, lax: true }, options));\n var rootHandler = reader.handler(typeName);\n\n return reader.fromXML(xmlStr, rootHandler);\n};\n\n\n/**\n * The toXML result.\n *\n * @typedef {Object} SerializationResult\n *\n * @property {String} xml\n */\n\n/**\n * Serializes a BPMN 2.0 object tree to XML.\n *\n * @param {String} element the root element, typically an instance of `bpmn:Definitions`\n * @param {Object} [options] to pass to the underlying writer\n *\n * @returns {Promise<SerializationResult, Error>}\n */\nBpmnModdle.prototype.toXML = function(element, options) {\n\n var writer = new Writer(options);\n\n return new Promise(function(resolve, reject) {\n try {\n var result = writer.toXML(element);\n\n return resolve({\n xml: result\n });\n } catch (err) {\n return reject(err);\n }\n });\n};\n\nvar name$5 = \"BPMN20\";\nvar uri$5 = \"http://www.omg.org/spec/BPMN/20100524/MODEL\";\nvar prefix$5 = \"bpmn\";\nvar associations$5 = [\n];\nvar types$5 = [\n\t{\n\t\tname: \"Interface\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"operations\",\n\t\t\t\ttype: \"Operation\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"implementationRef\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Operation\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inMessageRef\",\n\t\t\t\ttype: \"Message\",\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outMessageRef\",\n\t\t\t\ttype: \"Message\",\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"errorRef\",\n\t\t\t\ttype: \"Error\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"implementationRef\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"EndPoint\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"Auditing\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"GlobalTask\",\n\t\tsuperClass: [\n\t\t\t\"CallableElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"resources\",\n\t\t\t\ttype: \"ResourceRole\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Monitoring\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"Performer\",\n\t\tsuperClass: [\n\t\t\t\"ResourceRole\"\n\t\t]\n\t},\n\t{\n\t\tname: \"Process\",\n\t\tsuperClass: [\n\t\t\t\"FlowElementsContainer\",\n\t\t\t\"CallableElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"processType\",\n\t\t\t\ttype: \"ProcessType\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isClosed\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"auditing\",\n\t\t\t\ttype: \"Auditing\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"monitoring\",\n\t\t\t\ttype: \"Monitoring\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"properties\",\n\t\t\t\ttype: \"Property\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"laneSets\",\n\t\t\t\tisMany: true,\n\t\t\t\treplaces: \"FlowElementsContainer#laneSets\",\n\t\t\t\ttype: \"LaneSet\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"flowElements\",\n\t\t\t\tisMany: true,\n\t\t\t\treplaces: \"FlowElementsContainer#flowElements\",\n\t\t\t\ttype: \"FlowElement\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"artifacts\",\n\t\t\t\ttype: \"Artifact\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"resources\",\n\t\t\t\ttype: \"ResourceRole\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"correlationSubscriptions\",\n\t\t\t\ttype: \"CorrelationSubscription\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"supports\",\n\t\t\t\ttype: \"Process\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"definitionalCollaborationRef\",\n\t\t\t\ttype: \"Collaboration\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isExecutable\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"LaneSet\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"lanes\",\n\t\t\t\ttype: \"Lane\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Lane\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"partitionElementRef\",\n\t\t\t\ttype: \"BaseElement\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"partitionElement\",\n\t\t\t\ttype: \"BaseElement\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"flowNodeRef\",\n\t\t\t\ttype: \"FlowNode\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"childLaneSet\",\n\t\t\t\ttype: \"LaneSet\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"GlobalManualTask\",\n\t\tsuperClass: [\n\t\t\t\"GlobalTask\"\n\t\t]\n\t},\n\t{\n\t\tname: \"ManualTask\",\n\t\tsuperClass: [\n\t\t\t\"Task\"\n\t\t]\n\t},\n\t{\n\t\tname: \"UserTask\",\n\t\tsuperClass: [\n\t\t\t\"Task\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"renderings\",\n\t\t\t\ttype: \"Rendering\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"implementation\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Rendering\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"HumanPerformer\",\n\t\tsuperClass: [\n\t\t\t\"Performer\"\n\t\t]\n\t},\n\t{\n\t\tname: \"PotentialOwner\",\n\t\tsuperClass: [\n\t\t\t\"HumanPerformer\"\n\t\t]\n\t},\n\t{\n\t\tname: \"GlobalUserTask\",\n\t\tsuperClass: [\n\t\t\t\"GlobalTask\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"implementation\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"renderings\",\n\t\t\t\ttype: \"Rendering\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Gateway\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"FlowNode\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"gatewayDirection\",\n\t\t\t\ttype: \"GatewayDirection\",\n\t\t\t\t\"default\": \"Unspecified\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"EventBasedGateway\",\n\t\tsuperClass: [\n\t\t\t\"Gateway\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"instantiate\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"eventGatewayType\",\n\t\t\t\ttype: \"EventBasedGatewayType\",\n\t\t\t\tisAttr: true,\n\t\t\t\t\"default\": \"Exclusive\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ComplexGateway\",\n\t\tsuperClass: [\n\t\t\t\"Gateway\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"activationCondition\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"default\",\n\t\t\t\ttype: \"SequenceFlow\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ExclusiveGateway\",\n\t\tsuperClass: [\n\t\t\t\"Gateway\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"default\",\n\t\t\t\ttype: \"SequenceFlow\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"InclusiveGateway\",\n\t\tsuperClass: [\n\t\t\t\"Gateway\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"default\",\n\t\t\t\ttype: \"SequenceFlow\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ParallelGateway\",\n\t\tsuperClass: [\n\t\t\t\"Gateway\"\n\t\t]\n\t},\n\t{\n\t\tname: \"RootElement\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"Relationship\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"type\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"direction\",\n\t\t\t\ttype: \"RelationshipDirection\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"source\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true,\n\t\t\t\ttype: \"Element\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"target\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true,\n\t\t\t\ttype: \"Element\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"BaseElement\",\n\t\tisAbstract: true,\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"id\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\",\n\t\t\t\tisId: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"documentation\",\n\t\t\t\ttype: \"Documentation\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"extensionDefinitions\",\n\t\t\t\ttype: \"ExtensionDefinition\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"extensionElements\",\n\t\t\t\ttype: \"ExtensionElements\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Extension\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"mustUnderstand\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"definition\",\n\t\t\t\ttype: \"ExtensionDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ExtensionDefinition\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"extensionAttributeDefinitions\",\n\t\t\t\ttype: \"ExtensionAttributeDefinition\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ExtensionAttributeDefinition\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"type\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isReference\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"extensionDefinition\",\n\t\t\t\ttype: \"ExtensionDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ExtensionElements\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"valueRef\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true,\n\t\t\t\ttype: \"Element\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"values\",\n\t\t\t\ttype: \"Element\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"extensionAttributeDefinition\",\n\t\t\t\ttype: \"ExtensionAttributeDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Documentation\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"text\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisBody: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"textFormat\",\n\t\t\t\t\"default\": \"text/plain\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Event\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"FlowNode\",\n\t\t\t\"InteractionNode\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"properties\",\n\t\t\t\ttype: \"Property\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"IntermediateCatchEvent\",\n\t\tsuperClass: [\n\t\t\t\"CatchEvent\"\n\t\t]\n\t},\n\t{\n\t\tname: \"IntermediateThrowEvent\",\n\t\tsuperClass: [\n\t\t\t\"ThrowEvent\"\n\t\t]\n\t},\n\t{\n\t\tname: \"EndEvent\",\n\t\tsuperClass: [\n\t\t\t\"ThrowEvent\"\n\t\t]\n\t},\n\t{\n\t\tname: \"StartEvent\",\n\t\tsuperClass: [\n\t\t\t\"CatchEvent\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"isInterrupting\",\n\t\t\t\t\"default\": true,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ThrowEvent\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"Event\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"dataInputs\",\n\t\t\t\ttype: \"DataInput\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"dataInputAssociations\",\n\t\t\t\ttype: \"DataInputAssociation\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputSet\",\n\t\t\t\ttype: \"InputSet\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"eventDefinitions\",\n\t\t\t\ttype: \"EventDefinition\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"eventDefinitionRef\",\n\t\t\t\ttype: \"EventDefinition\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CatchEvent\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"Event\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"parallelMultiple\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\",\n\t\t\t\t\"default\": false\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"dataOutputs\",\n\t\t\t\ttype: \"DataOutput\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"dataOutputAssociations\",\n\t\t\t\ttype: \"DataOutputAssociation\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputSet\",\n\t\t\t\ttype: \"OutputSet\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"eventDefinitions\",\n\t\t\t\ttype: \"EventDefinition\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"eventDefinitionRef\",\n\t\t\t\ttype: \"EventDefinition\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"BoundaryEvent\",\n\t\tsuperClass: [\n\t\t\t\"CatchEvent\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"cancelActivity\",\n\t\t\t\t\"default\": true,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"attachedToRef\",\n\t\t\t\ttype: \"Activity\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"EventDefinition\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"CancelEventDefinition\",\n\t\tsuperClass: [\n\t\t\t\"EventDefinition\"\n\t\t]\n\t},\n\t{\n\t\tname: \"ErrorEventDefinition\",\n\t\tsuperClass: [\n\t\t\t\"EventDefinition\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"errorRef\",\n\t\t\t\ttype: \"Error\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"TerminateEventDefinition\",\n\t\tsuperClass: [\n\t\t\t\"EventDefinition\"\n\t\t]\n\t},\n\t{\n\t\tname: \"EscalationEventDefinition\",\n\t\tsuperClass: [\n\t\t\t\"EventDefinition\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"escalationRef\",\n\t\t\t\ttype: \"Escalation\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Escalation\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"structureRef\",\n\t\t\t\ttype: \"ItemDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"escalationCode\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t],\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"CompensateEventDefinition\",\n\t\tsuperClass: [\n\t\t\t\"EventDefinition\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"waitForCompletion\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\",\n\t\t\t\t\"default\": true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"activityRef\",\n\t\t\t\ttype: \"Activity\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"TimerEventDefinition\",\n\t\tsuperClass: [\n\t\t\t\"EventDefinition\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"timeDate\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"timeCycle\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"timeDuration\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"LinkEventDefinition\",\n\t\tsuperClass: [\n\t\t\t\"EventDefinition\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"target\",\n\t\t\t\ttype: \"LinkEventDefinition\",\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"source\",\n\t\t\t\ttype: \"LinkEventDefinition\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"MessageEventDefinition\",\n\t\tsuperClass: [\n\t\t\t\"EventDefinition\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"messageRef\",\n\t\t\t\ttype: \"Message\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"operationRef\",\n\t\t\t\ttype: \"Operation\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ConditionalEventDefinition\",\n\t\tsuperClass: [\n\t\t\t\"EventDefinition\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"condition\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"SignalEventDefinition\",\n\t\tsuperClass: [\n\t\t\t\"EventDefinition\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"signalRef\",\n\t\t\t\ttype: \"Signal\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Signal\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"structureRef\",\n\t\t\t\ttype: \"ItemDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ImplicitThrowEvent\",\n\t\tsuperClass: [\n\t\t\t\"ThrowEvent\"\n\t\t]\n\t},\n\t{\n\t\tname: \"DataState\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ItemAwareElement\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"itemSubjectRef\",\n\t\t\t\ttype: \"ItemDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"dataState\",\n\t\t\t\ttype: \"DataState\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"DataAssociation\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"sourceRef\",\n\t\t\t\ttype: \"ItemAwareElement\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"targetRef\",\n\t\t\t\ttype: \"ItemAwareElement\",\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"transformation\",\n\t\t\t\ttype: \"FormalExpression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"property\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"assignment\",\n\t\t\t\ttype: \"Assignment\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"DataInput\",\n\t\tsuperClass: [\n\t\t\t\"ItemAwareElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isCollection\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputSetRef\",\n\t\t\t\ttype: \"InputSet\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputSetWithOptional\",\n\t\t\t\ttype: \"InputSet\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputSetWithWhileExecuting\",\n\t\t\t\ttype: \"InputSet\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"DataOutput\",\n\t\tsuperClass: [\n\t\t\t\"ItemAwareElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isCollection\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputSetRef\",\n\t\t\t\ttype: \"OutputSet\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputSetWithOptional\",\n\t\t\t\ttype: \"OutputSet\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputSetWithWhileExecuting\",\n\t\t\t\ttype: \"OutputSet\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"InputSet\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"dataInputRefs\",\n\t\t\t\ttype: \"DataInput\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"optionalInputRefs\",\n\t\t\t\ttype: \"DataInput\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"whileExecutingInputRefs\",\n\t\t\t\ttype: \"DataInput\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputSetRefs\",\n\t\t\t\ttype: \"OutputSet\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"OutputSet\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"dataOutputRefs\",\n\t\t\t\ttype: \"DataOutput\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputSetRefs\",\n\t\t\t\ttype: \"InputSet\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"optionalOutputRefs\",\n\t\t\t\ttype: \"DataOutput\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"whileExecutingOutputRefs\",\n\t\t\t\ttype: \"DataOutput\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Property\",\n\t\tsuperClass: [\n\t\t\t\"ItemAwareElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"DataInputAssociation\",\n\t\tsuperClass: [\n\t\t\t\"DataAssociation\"\n\t\t]\n\t},\n\t{\n\t\tname: \"DataOutputAssociation\",\n\t\tsuperClass: [\n\t\t\t\"DataAssociation\"\n\t\t]\n\t},\n\t{\n\t\tname: \"InputOutputSpecification\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"dataInputs\",\n\t\t\t\ttype: \"DataInput\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"dataOutputs\",\n\t\t\t\ttype: \"DataOutput\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputSets\",\n\t\t\t\ttype: \"InputSet\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputSets\",\n\t\t\t\ttype: \"OutputSet\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"DataObject\",\n\t\tsuperClass: [\n\t\t\t\"FlowElement\",\n\t\t\t\"ItemAwareElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"isCollection\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"InputOutputBinding\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"inputDataRef\",\n\t\t\t\ttype: \"InputSet\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputDataRef\",\n\t\t\t\ttype: \"OutputSet\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"operationRef\",\n\t\t\t\ttype: \"Operation\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Assignment\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"from\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"DataStore\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\",\n\t\t\t\"ItemAwareElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"capacity\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Integer\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isUnlimited\",\n\t\t\t\t\"default\": true,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"DataStoreReference\",\n\t\tsuperClass: [\n\t\t\t\"ItemAwareElement\",\n\t\t\t\"FlowElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"dataStoreRef\",\n\t\t\t\ttype: \"DataStore\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"DataObjectReference\",\n\t\tsuperClass: [\n\t\t\t\"ItemAwareElement\",\n\t\t\t\"FlowElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"dataObjectRef\",\n\t\t\t\ttype: \"DataObject\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ConversationLink\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"sourceRef\",\n\t\t\t\ttype: \"InteractionNode\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"targetRef\",\n\t\t\t\ttype: \"InteractionNode\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ConversationAssociation\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"innerConversationNodeRef\",\n\t\t\t\ttype: \"ConversationNode\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outerConversationNodeRef\",\n\t\t\t\ttype: \"ConversationNode\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CallConversation\",\n\t\tsuperClass: [\n\t\t\t\"ConversationNode\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"calledCollaborationRef\",\n\t\t\t\ttype: \"Collaboration\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"participantAssociations\",\n\t\t\t\ttype: \"ParticipantAssociation\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Conversation\",\n\t\tsuperClass: [\n\t\t\t\"ConversationNode\"\n\t\t]\n\t},\n\t{\n\t\tname: \"SubConversation\",\n\t\tsuperClass: [\n\t\t\t\"ConversationNode\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"conversationNodes\",\n\t\t\t\ttype: \"ConversationNode\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ConversationNode\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"InteractionNode\",\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"participantRef\",\n\t\t\t\ttype: \"Participant\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"messageFlowRefs\",\n\t\t\t\ttype: \"MessageFlow\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"correlationKeys\",\n\t\t\t\ttype: \"CorrelationKey\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"GlobalConversation\",\n\t\tsuperClass: [\n\t\t\t\"Collaboration\"\n\t\t]\n\t},\n\t{\n\t\tname: \"PartnerEntity\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"participantRef\",\n\t\t\t\ttype: \"Participant\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"PartnerRole\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"participantRef\",\n\t\t\t\ttype: \"Participant\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CorrelationProperty\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"correlationPropertyRetrievalExpression\",\n\t\t\t\ttype: \"CorrelationPropertyRetrievalExpression\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"type\",\n\t\t\t\ttype: \"ItemDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Error\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"structureRef\",\n\t\t\t\ttype: \"ItemDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"errorCode\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CorrelationKey\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"correlationPropertyRef\",\n\t\t\t\ttype: \"CorrelationProperty\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Expression\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tisAbstract: false,\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"body\",\n\t\t\t\tisBody: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"FormalExpression\",\n\t\tsuperClass: [\n\t\t\t\"Expression\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"language\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"evaluatesToTypeRef\",\n\t\t\t\ttype: \"ItemDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Message\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"itemRef\",\n\t\t\t\ttype: \"ItemDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ItemDefinition\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"itemKind\",\n\t\t\t\ttype: \"ItemKind\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"structureRef\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isCollection\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"import\",\n\t\t\t\ttype: \"Import\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"FlowElement\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"auditing\",\n\t\t\t\ttype: \"Auditing\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"monitoring\",\n\t\t\t\ttype: \"Monitoring\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"categoryValueRef\",\n\t\t\t\ttype: \"CategoryValue\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"SequenceFlow\",\n\t\tsuperClass: [\n\t\t\t\"FlowElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"isImmediate\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"conditionExpression\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"sourceRef\",\n\t\t\t\ttype: \"FlowNode\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"targetRef\",\n\t\t\t\ttype: \"FlowNode\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"FlowElementsContainer\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"laneSets\",\n\t\t\t\ttype: \"LaneSet\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"flowElements\",\n\t\t\t\ttype: \"FlowElement\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CallableElement\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"ioSpecification\",\n\t\t\t\ttype: \"InputOutputSpecification\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"property\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"supportedInterfaceRef\",\n\t\t\t\ttype: \"Interface\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"ioBinding\",\n\t\t\t\ttype: \"InputOutputBinding\",\n\t\t\t\tisMany: true,\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"property\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"FlowNode\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"FlowElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"incoming\",\n\t\t\t\ttype: \"SequenceFlow\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outgoing\",\n\t\t\t\ttype: \"SequenceFlow\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"lanes\",\n\t\t\t\ttype: \"Lane\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CorrelationPropertyRetrievalExpression\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"messagePath\",\n\t\t\t\ttype: \"FormalExpression\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"messageRef\",\n\t\t\t\ttype: \"Message\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CorrelationPropertyBinding\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"dataPath\",\n\t\t\t\ttype: \"FormalExpression\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"correlationPropertyRef\",\n\t\t\t\ttype: \"CorrelationProperty\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Resource\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"resourceParameters\",\n\t\t\t\ttype: \"ResourceParameter\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ResourceParameter\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isRequired\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"type\",\n\t\t\t\ttype: \"ItemDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CorrelationSubscription\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"correlationKeyRef\",\n\t\t\t\ttype: \"CorrelationKey\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"correlationPropertyBinding\",\n\t\t\t\ttype: \"CorrelationPropertyBinding\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"MessageFlow\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"sourceRef\",\n\t\t\t\ttype: \"InteractionNode\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"targetRef\",\n\t\t\t\ttype: \"InteractionNode\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"messageRef\",\n\t\t\t\ttype: \"Message\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"MessageFlowAssociation\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"innerMessageFlowRef\",\n\t\t\t\ttype: \"MessageFlow\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outerMessageFlowRef\",\n\t\t\t\ttype: \"MessageFlow\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"InteractionNode\",\n\t\tisAbstract: true,\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"incomingConversationLinks\",\n\t\t\t\ttype: \"ConversationLink\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outgoingConversationLinks\",\n\t\t\t\ttype: \"ConversationLink\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Participant\",\n\t\tsuperClass: [\n\t\t\t\"InteractionNode\",\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"interfaceRef\",\n\t\t\t\ttype: \"Interface\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"participantMultiplicity\",\n\t\t\t\ttype: \"ParticipantMultiplicity\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"endPointRefs\",\n\t\t\t\ttype: \"EndPoint\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"processRef\",\n\t\t\t\ttype: \"Process\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ParticipantAssociation\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"innerParticipantRef\",\n\t\t\t\ttype: \"Participant\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outerParticipantRef\",\n\t\t\t\ttype: \"Participant\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ParticipantMultiplicity\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"minimum\",\n\t\t\t\t\"default\": 0,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Integer\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"maximum\",\n\t\t\t\t\"default\": 1,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Integer\"\n\t\t\t}\n\t\t],\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"Collaboration\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isClosed\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"participants\",\n\t\t\t\ttype: \"Participant\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"messageFlows\",\n\t\t\t\ttype: \"MessageFlow\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"artifacts\",\n\t\t\t\ttype: \"Artifact\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"conversations\",\n\t\t\t\ttype: \"ConversationNode\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"conversationAssociations\",\n\t\t\t\ttype: \"ConversationAssociation\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"participantAssociations\",\n\t\t\t\ttype: \"ParticipantAssociation\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"messageFlowAssociations\",\n\t\t\t\ttype: \"MessageFlowAssociation\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"correlationKeys\",\n\t\t\t\ttype: \"CorrelationKey\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"choreographyRef\",\n\t\t\t\ttype: \"Choreography\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"conversationLinks\",\n\t\t\t\ttype: \"ConversationLink\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ChoreographyActivity\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"FlowNode\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"participantRef\",\n\t\t\t\ttype: \"Participant\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"initiatingParticipantRef\",\n\t\t\t\ttype: \"Participant\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"correlationKeys\",\n\t\t\t\ttype: \"CorrelationKey\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"loopType\",\n\t\t\t\ttype: \"ChoreographyLoopType\",\n\t\t\t\t\"default\": \"None\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CallChoreography\",\n\t\tsuperClass: [\n\t\t\t\"ChoreographyActivity\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"calledChoreographyRef\",\n\t\t\t\ttype: \"Choreography\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"participantAssociations\",\n\t\t\t\ttype: \"ParticipantAssociation\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"SubChoreography\",\n\t\tsuperClass: [\n\t\t\t\"ChoreographyActivity\",\n\t\t\t\"FlowElementsContainer\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"artifacts\",\n\t\t\t\ttype: \"Artifact\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ChoreographyTask\",\n\t\tsuperClass: [\n\t\t\t\"ChoreographyActivity\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"messageFlowRef\",\n\t\t\t\ttype: \"MessageFlow\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Choreography\",\n\t\tsuperClass: [\n\t\t\t\"Collaboration\",\n\t\t\t\"FlowElementsContainer\"\n\t\t]\n\t},\n\t{\n\t\tname: \"GlobalChoreographyTask\",\n\t\tsuperClass: [\n\t\t\t\"Choreography\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"initiatingParticipantRef\",\n\t\t\t\ttype: \"Participant\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"TextAnnotation\",\n\t\tsuperClass: [\n\t\t\t\"Artifact\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"text\",\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"textFormat\",\n\t\t\t\t\"default\": \"text/plain\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Group\",\n\t\tsuperClass: [\n\t\t\t\"Artifact\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"categoryValueRef\",\n\t\t\t\ttype: \"CategoryValue\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Association\",\n\t\tsuperClass: [\n\t\t\t\"Artifact\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"associationDirection\",\n\t\t\t\ttype: \"AssociationDirection\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"sourceRef\",\n\t\t\t\ttype: \"BaseElement\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"targetRef\",\n\t\t\t\ttype: \"BaseElement\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Category\",\n\t\tsuperClass: [\n\t\t\t\"RootElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"categoryValue\",\n\t\t\t\ttype: \"CategoryValue\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Artifact\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"CategoryValue\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"categorizedFlowElements\",\n\t\t\t\ttype: \"FlowElement\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"value\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Activity\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"FlowNode\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"isForCompensation\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"default\",\n\t\t\t\ttype: \"SequenceFlow\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"ioSpecification\",\n\t\t\t\ttype: \"InputOutputSpecification\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"property\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"boundaryEventRefs\",\n\t\t\t\ttype: \"BoundaryEvent\",\n\t\t\t\tisMany: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"properties\",\n\t\t\t\ttype: \"Property\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"dataInputAssociations\",\n\t\t\t\ttype: \"DataInputAssociation\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"dataOutputAssociations\",\n\t\t\t\ttype: \"DataOutputAssociation\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"startQuantity\",\n\t\t\t\t\"default\": 1,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Integer\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"resources\",\n\t\t\t\ttype: \"ResourceRole\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"completionQuantity\",\n\t\t\t\t\"default\": 1,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Integer\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"loopCharacteristics\",\n\t\t\t\ttype: \"LoopCharacteristics\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ServiceTask\",\n\t\tsuperClass: [\n\t\t\t\"Task\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"implementation\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"operationRef\",\n\t\t\t\ttype: \"Operation\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"SubProcess\",\n\t\tsuperClass: [\n\t\t\t\"Activity\",\n\t\t\t\"FlowElementsContainer\",\n\t\t\t\"InteractionNode\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"triggeredByEvent\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"artifacts\",\n\t\t\t\ttype: \"Artifact\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"LoopCharacteristics\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"MultiInstanceLoopCharacteristics\",\n\t\tsuperClass: [\n\t\t\t\"LoopCharacteristics\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"isSequential\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"behavior\",\n\t\t\t\ttype: \"MultiInstanceBehavior\",\n\t\t\t\t\"default\": \"All\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"loopCardinality\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"loopDataInputRef\",\n\t\t\t\ttype: \"ItemAwareElement\",\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"loopDataOutputRef\",\n\t\t\t\ttype: \"ItemAwareElement\",\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputDataItem\",\n\t\t\t\ttype: \"DataInput\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"property\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputDataItem\",\n\t\t\t\ttype: \"DataOutput\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"property\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"complexBehaviorDefinition\",\n\t\t\t\ttype: \"ComplexBehaviorDefinition\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"completionCondition\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"oneBehaviorEventRef\",\n\t\t\t\ttype: \"EventDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"noneBehaviorEventRef\",\n\t\t\t\ttype: \"EventDefinition\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"StandardLoopCharacteristics\",\n\t\tsuperClass: [\n\t\t\t\"LoopCharacteristics\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"testBefore\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"loopCondition\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"loopMaximum\",\n\t\t\t\ttype: \"Integer\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CallActivity\",\n\t\tsuperClass: [\n\t\t\t\"Activity\",\n\t\t\t\"InteractionNode\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"calledElement\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Task\",\n\t\tsuperClass: [\n\t\t\t\"Activity\",\n\t\t\t\"InteractionNode\"\n\t\t]\n\t},\n\t{\n\t\tname: \"SendTask\",\n\t\tsuperClass: [\n\t\t\t\"Task\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"implementation\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"operationRef\",\n\t\t\t\ttype: \"Operation\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"messageRef\",\n\t\t\t\ttype: \"Message\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ReceiveTask\",\n\t\tsuperClass: [\n\t\t\t\"Task\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"implementation\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"instantiate\",\n\t\t\t\t\"default\": false,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"operationRef\",\n\t\t\t\ttype: \"Operation\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"messageRef\",\n\t\t\t\ttype: \"Message\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ScriptTask\",\n\t\tsuperClass: [\n\t\t\t\"Task\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"scriptFormat\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"script\",\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"BusinessRuleTask\",\n\t\tsuperClass: [\n\t\t\t\"Task\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"implementation\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"AdHocSubProcess\",\n\t\tsuperClass: [\n\t\t\t\"SubProcess\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"completionCondition\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"ordering\",\n\t\t\t\ttype: \"AdHocOrdering\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"cancelRemainingInstances\",\n\t\t\t\t\"default\": true,\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Transaction\",\n\t\tsuperClass: [\n\t\t\t\"SubProcess\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"protocol\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"method\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"GlobalScriptTask\",\n\t\tsuperClass: [\n\t\t\t\"GlobalTask\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"scriptLanguage\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"script\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"GlobalBusinessRuleTask\",\n\t\tsuperClass: [\n\t\t\t\"GlobalTask\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"implementation\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ComplexBehaviorDefinition\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"condition\",\n\t\t\t\ttype: \"FormalExpression\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"event\",\n\t\t\t\ttype: \"ImplicitThrowEvent\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ResourceRole\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"resourceRef\",\n\t\t\t\ttype: \"Resource\",\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"resourceParameterBindings\",\n\t\t\t\ttype: \"ResourceParameterBinding\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"resourceAssignmentExpression\",\n\t\t\t\ttype: \"ResourceAssignmentExpression\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ResourceParameterBinding\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"expression\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"parameterRef\",\n\t\t\t\ttype: \"ResourceParameter\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t],\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"ResourceAssignmentExpression\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"expression\",\n\t\t\t\ttype: \"Expression\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"Import\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"importType\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"location\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"namespace\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Definitions\",\n\t\tsuperClass: [\n\t\t\t\"BaseElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"targetNamespace\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"expressionLanguage\",\n\t\t\t\t\"default\": \"http://www.w3.org/1999/XPath\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"typeLanguage\",\n\t\t\t\t\"default\": \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"imports\",\n\t\t\t\ttype: \"Import\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"extensions\",\n\t\t\t\ttype: \"Extension\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"rootElements\",\n\t\t\t\ttype: \"RootElement\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"diagrams\",\n\t\t\t\tisMany: true,\n\t\t\t\ttype: \"bpmndi:BPMNDiagram\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"exporter\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"relationships\",\n\t\t\t\ttype: \"Relationship\",\n\t\t\t\tisMany: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"exporterVersion\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t}\n];\nvar enumerations$3 = [\n\t{\n\t\tname: \"ProcessType\",\n\t\tliteralValues: [\n\t\t\t{\n\t\t\t\tname: \"None\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Public\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Private\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"GatewayDirection\",\n\t\tliteralValues: [\n\t\t\t{\n\t\t\t\tname: \"Unspecified\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Converging\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Diverging\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Mixed\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"EventBasedGatewayType\",\n\t\tliteralValues: [\n\t\t\t{\n\t\t\t\tname: \"Parallel\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Exclusive\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"RelationshipDirection\",\n\t\tliteralValues: [\n\t\t\t{\n\t\t\t\tname: \"None\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Forward\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Backward\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Both\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ItemKind\",\n\t\tliteralValues: [\n\t\t\t{\n\t\t\t\tname: \"Physical\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Information\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ChoreographyLoopType\",\n\t\tliteralValues: [\n\t\t\t{\n\t\t\t\tname: \"None\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Standard\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"MultiInstanceSequential\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"MultiInstanceParallel\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"AssociationDirection\",\n\t\tliteralValues: [\n\t\t\t{\n\t\t\t\tname: \"None\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"One\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Both\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"MultiInstanceBehavior\",\n\t\tliteralValues: [\n\t\t\t{\n\t\t\t\tname: \"None\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"One\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"All\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Complex\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"AdHocOrdering\",\n\t\tliteralValues: [\n\t\t\t{\n\t\t\t\tname: \"Parallel\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Sequential\"\n\t\t\t}\n\t\t]\n\t}\n];\nvar xml$1 = {\n\ttagAlias: \"lowerCase\",\n\ttypePrefix: \"t\"\n};\nvar BpmnPackage = {\n\tname: name$5,\n\turi: uri$5,\n\tprefix: prefix$5,\n\tassociations: associations$5,\n\ttypes: types$5,\n\tenumerations: enumerations$3,\n\txml: xml$1\n};\n\nvar name$4 = \"BPMNDI\";\nvar uri$4 = \"http://www.omg.org/spec/BPMN/20100524/DI\";\nvar prefix$4 = \"bpmndi\";\nvar types$4 = [\n\t{\n\t\tname: \"BPMNDiagram\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"plane\",\n\t\t\t\ttype: \"BPMNPlane\",\n\t\t\t\tredefines: \"di:Diagram#rootElement\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"labelStyle\",\n\t\t\t\ttype: \"BPMNLabelStyle\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t],\n\t\tsuperClass: [\n\t\t\t\"di:Diagram\"\n\t\t]\n\t},\n\t{\n\t\tname: \"BPMNPlane\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"bpmnElement\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true,\n\t\t\t\ttype: \"bpmn:BaseElement\",\n\t\t\t\tredefines: \"di:DiagramElement#modelElement\"\n\t\t\t}\n\t\t],\n\t\tsuperClass: [\n\t\t\t\"di:Plane\"\n\t\t]\n\t},\n\t{\n\t\tname: \"BPMNShape\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"bpmnElement\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true,\n\t\t\t\ttype: \"bpmn:BaseElement\",\n\t\t\t\tredefines: \"di:DiagramElement#modelElement\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isHorizontal\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isExpanded\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isMarkerVisible\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"label\",\n\t\t\t\ttype: \"BPMNLabel\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isMessageVisible\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"participantBandKind\",\n\t\t\t\ttype: \"ParticipantBandKind\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"choreographyActivityShape\",\n\t\t\t\ttype: \"BPMNShape\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true\n\t\t\t}\n\t\t],\n\t\tsuperClass: [\n\t\t\t\"di:LabeledShape\"\n\t\t]\n\t},\n\t{\n\t\tname: \"BPMNEdge\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"label\",\n\t\t\t\ttype: \"BPMNLabel\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"bpmnElement\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true,\n\t\t\t\ttype: \"bpmn:BaseElement\",\n\t\t\t\tredefines: \"di:DiagramElement#modelElement\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"sourceElement\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true,\n\t\t\t\ttype: \"di:DiagramElement\",\n\t\t\t\tredefines: \"di:Edge#source\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"targetElement\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true,\n\t\t\t\ttype: \"di:DiagramElement\",\n\t\t\t\tredefines: \"di:Edge#target\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"messageVisibleKind\",\n\t\t\t\ttype: \"MessageVisibleKind\",\n\t\t\t\tisAttr: true,\n\t\t\t\t\"default\": \"initiating\"\n\t\t\t}\n\t\t],\n\t\tsuperClass: [\n\t\t\t\"di:LabeledEdge\"\n\t\t]\n\t},\n\t{\n\t\tname: \"BPMNLabel\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"labelStyle\",\n\t\t\t\ttype: \"BPMNLabelStyle\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisReference: true,\n\t\t\t\tredefines: \"di:DiagramElement#style\"\n\t\t\t}\n\t\t],\n\t\tsuperClass: [\n\t\t\t\"di:Label\"\n\t\t]\n\t},\n\t{\n\t\tname: \"BPMNLabelStyle\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"font\",\n\t\t\t\ttype: \"dc:Font\"\n\t\t\t}\n\t\t],\n\t\tsuperClass: [\n\t\t\t\"di:Style\"\n\t\t]\n\t}\n];\nvar enumerations$2 = [\n\t{\n\t\tname: \"ParticipantBandKind\",\n\t\tliteralValues: [\n\t\t\t{\n\t\t\t\tname: \"top_initiating\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"middle_initiating\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"bottom_initiating\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"top_non_initiating\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"middle_non_initiating\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"bottom_non_initiating\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"MessageVisibleKind\",\n\t\tliteralValues: [\n\t\t\t{\n\t\t\t\tname: \"initiating\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"non_initiating\"\n\t\t\t}\n\t\t]\n\t}\n];\nvar associations$4 = [\n];\nvar BpmnDiPackage = {\n\tname: name$4,\n\turi: uri$4,\n\tprefix: prefix$4,\n\ttypes: types$4,\n\tenumerations: enumerations$2,\n\tassociations: associations$4\n};\n\nvar name$3 = \"DC\";\nvar uri$3 = \"http://www.omg.org/spec/DD/20100524/DC\";\nvar prefix$3 = \"dc\";\nvar types$3 = [\n\t{\n\t\tname: \"Boolean\"\n\t},\n\t{\n\t\tname: \"Integer\"\n\t},\n\t{\n\t\tname: \"Real\"\n\t},\n\t{\n\t\tname: \"String\"\n\t},\n\t{\n\t\tname: \"Font\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"size\",\n\t\t\t\ttype: \"Real\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isBold\",\n\t\t\t\ttype: \"Boolean\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isItalic\",\n\t\t\t\ttype: \"Boolean\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isUnderline\",\n\t\t\t\ttype: \"Boolean\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"isStrikeThrough\",\n\t\t\t\ttype: \"Boolean\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Point\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"x\",\n\t\t\t\ttype: \"Real\",\n\t\t\t\t\"default\": \"0\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"y\",\n\t\t\t\ttype: \"Real\",\n\t\t\t\t\"default\": \"0\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Bounds\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"x\",\n\t\t\t\ttype: \"Real\",\n\t\t\t\t\"default\": \"0\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"y\",\n\t\t\t\ttype: \"Real\",\n\t\t\t\t\"default\": \"0\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"width\",\n\t\t\t\ttype: \"Real\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"height\",\n\t\t\t\ttype: \"Real\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t}\n];\nvar associations$3 = [\n];\nvar DcPackage = {\n\tname: name$3,\n\turi: uri$3,\n\tprefix: prefix$3,\n\ttypes: types$3,\n\tassociations: associations$3\n};\n\nvar name$2 = \"DI\";\nvar uri$2 = \"http://www.omg.org/spec/DD/20100524/DI\";\nvar prefix$2 = \"di\";\nvar types$2 = [\n\t{\n\t\tname: \"DiagramElement\",\n\t\tisAbstract: true,\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"id\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisId: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"extension\",\n\t\t\t\ttype: \"Extension\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"owningDiagram\",\n\t\t\t\ttype: \"Diagram\",\n\t\t\t\tisReadOnly: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"owningElement\",\n\t\t\t\ttype: \"DiagramElement\",\n\t\t\t\tisReadOnly: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"modelElement\",\n\t\t\t\tisReadOnly: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true,\n\t\t\t\ttype: \"Element\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"style\",\n\t\t\t\ttype: \"Style\",\n\t\t\t\tisReadOnly: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"ownedElement\",\n\t\t\t\ttype: \"DiagramElement\",\n\t\t\t\tisReadOnly: true,\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Node\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"DiagramElement\"\n\t\t]\n\t},\n\t{\n\t\tname: \"Edge\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"DiagramElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"source\",\n\t\t\t\ttype: \"DiagramElement\",\n\t\t\t\tisReadOnly: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"target\",\n\t\t\t\ttype: \"DiagramElement\",\n\t\t\t\tisReadOnly: true,\n\t\t\t\tisVirtual: true,\n\t\t\t\tisReference: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"waypoint\",\n\t\t\t\tisUnique: false,\n\t\t\t\tisMany: true,\n\t\t\t\ttype: \"dc:Point\",\n\t\t\t\txml: {\n\t\t\t\t\tserialize: \"xsi:type\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Diagram\",\n\t\tisAbstract: true,\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"id\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisId: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"rootElement\",\n\t\t\t\ttype: \"DiagramElement\",\n\t\t\t\tisReadOnly: true,\n\t\t\t\tisVirtual: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"documentation\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"resolution\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Real\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"ownedStyle\",\n\t\t\t\ttype: \"Style\",\n\t\t\t\tisReadOnly: true,\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Shape\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"Node\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"bounds\",\n\t\t\t\ttype: \"dc:Bounds\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Plane\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"Node\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"planeElement\",\n\t\t\t\ttype: \"DiagramElement\",\n\t\t\t\tsubsettedProperty: \"DiagramElement-ownedElement\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"LabeledEdge\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"Edge\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"ownedLabel\",\n\t\t\t\ttype: \"Label\",\n\t\t\t\tisReadOnly: true,\n\t\t\t\tsubsettedProperty: \"DiagramElement-ownedElement\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"LabeledShape\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"Shape\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"ownedLabel\",\n\t\t\t\ttype: \"Label\",\n\t\t\t\tisReadOnly: true,\n\t\t\t\tsubsettedProperty: \"DiagramElement-ownedElement\",\n\t\t\t\tisMany: true,\n\t\t\t\tisVirtual: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Label\",\n\t\tisAbstract: true,\n\t\tsuperClass: [\n\t\t\t\"Node\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"bounds\",\n\t\t\t\ttype: \"dc:Bounds\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Style\",\n\t\tisAbstract: true,\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"id\",\n\t\t\t\tisAttr: true,\n\t\t\t\tisId: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Extension\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"values\",\n\t\t\t\tisMany: true,\n\t\t\t\ttype: \"Element\"\n\t\t\t}\n\t\t]\n\t}\n];\nvar associations$2 = [\n];\nvar xml = {\n\ttagAlias: \"lowerCase\"\n};\nvar DiPackage = {\n\tname: name$2,\n\turi: uri$2,\n\tprefix: prefix$2,\n\ttypes: types$2,\n\tassociations: associations$2,\n\txml: xml\n};\n\nvar name$1 = \"bpmn.io colors for BPMN\";\nvar uri$1 = \"http://bpmn.io/schema/bpmn/biocolor/1.0\";\nvar prefix$1 = \"bioc\";\nvar types$1 = [\n\t{\n\t\tname: \"ColoredShape\",\n\t\t\"extends\": [\n\t\t\t\"bpmndi:BPMNShape\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"stroke\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"fill\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ColoredEdge\",\n\t\t\"extends\": [\n\t\t\t\"bpmndi:BPMNEdge\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"stroke\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"fill\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t}\n];\nvar enumerations$1 = [\n];\nvar associations$1 = [\n];\nvar BiocPackage = {\n\tname: name$1,\n\turi: uri$1,\n\tprefix: prefix$1,\n\ttypes: types$1,\n\tenumerations: enumerations$1,\n\tassociations: associations$1\n};\n\nvar name = \"BPMN in Color\";\nvar uri = \"http://www.omg.org/spec/BPMN/non-normative/color/1.0\";\nvar prefix = \"color\";\nvar types = [\n\t{\n\t\tname: \"ColoredLabel\",\n\t\t\"extends\": [\n\t\t\t\"bpmndi:BPMNLabel\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"color\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ColoredShape\",\n\t\t\"extends\": [\n\t\t\t\"bpmndi:BPMNShape\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"background-color\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"border-color\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"ColoredEdge\",\n\t\t\"extends\": [\n\t\t\t\"bpmndi:BPMNEdge\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"border-color\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t}\n];\nvar enumerations = [\n];\nvar associations = [\n];\nvar BpmnInColorPackage = {\n\tname: name,\n\turi: uri,\n\tprefix: prefix,\n\ttypes: types,\n\tenumerations: enumerations,\n\tassociations: associations\n};\n\nvar packages = {\n bpmn: BpmnPackage,\n bpmndi: BpmnDiPackage,\n dc: DcPackage,\n di: DiPackage,\n bioc: BiocPackage,\n color: BpmnInColorPackage\n};\n\nfunction simple(additionalPackages, options) {\n var pks = assign({}, packages, additionalPackages);\n\n return new BpmnModdle(pks, options);\n}\n\nexport { simple as default };\n","export function elementToString(e) {\n if (!e) {\n return '<null>';\n }\n\n return '<' + e.$type + (e.id ? ' id=\"' + e.id : '') + '\" />';\n}","import {\n has,\n isFunction\n} from 'min-dash';\n\n// TODO(nikku): remove with future bpmn-js version\n\n/**\n * Wraps APIs to check:\n *\n * 1) If a callback is passed -> Warn users about callback deprecation.\n * 2) If Promise class is implemented in current environment.\n *\n * @private\n */\nexport function wrapForCompatibility(api) {\n\n return function() {\n\n if (!window.Promise) {\n throw new Error('Promises is not supported in this environment. Please polyfill Promise.');\n }\n\n var argLen = arguments.length;\n if (argLen >= 1 && isFunction(arguments[argLen - 1])) {\n\n var callback = arguments[argLen - 1];\n\n console.warn(new Error(\n 'Passing callbacks to ' + api.name + ' is deprecated and will be removed in a future major release. ' +\n 'Please switch to promises: https://bpmn.io/l/moving-to-promises.html'\n ));\n\n var argsWithoutCallback = Array.prototype.slice.call(arguments, 0, -1);\n\n api.apply(this, argsWithoutCallback).then(function(result) {\n\n var firstKey = Object.keys(result)[0];\n\n // The APIs we are wrapping all resolve a single item depending on the API.\n // For instance, importXML resolves { warnings } and saveXML returns { xml }.\n // That's why we can call the callback with the first item of result.\n return callback(null, result[firstKey]);\n\n // Passing a second paramter instead of catch because we don't want to\n // catch errors thrown by callback().\n }, function(err) {\n\n return callback(err, err.warnings);\n });\n } else {\n\n return api.apply(this, arguments);\n }\n };\n}\n\n\n// TODO(nikku): remove with future bpmn-js version\n\nvar DI_ERROR_MESSAGE = 'Tried to access di from the businessObject. The di is available through the diagram element only. For more information, see https://github.com/bpmn-io/bpmn-js/issues/1472';\n\nexport function ensureCompatDiRef(businessObject) {\n\n // bpmnElement can have multiple independent DIs\n if (!has(businessObject, 'di')) {\n Object.defineProperty(businessObject, 'di', {\n enumerable: false,\n get: function() {\n throw new Error(DI_ERROR_MESSAGE);\n }\n });\n }\n}","import {\n filter,\n find,\n forEach\n} from 'min-dash';\n\nimport {\n elementToString\n} from './Util';\n\nimport {\n ensureCompatDiRef\n} from '../util/CompatibilityUtil';\n\n\n/**\n * Returns true if an element has the given meta-model type\n *\n * @param {ModdleElement} element\n * @param {string} type\n *\n * @return {boolean}\n */\nfunction is(element, type) {\n return element.$instanceOf(type);\n}\n\n\n/**\n * Find a suitable display candidate for definitions where the DI does not\n * correctly specify one.\n */\nfunction findDisplayCandidate(definitions) {\n return find(definitions.rootElements, function(e) {\n return is(e, 'bpmn:Process') || is(e, 'bpmn:Collaboration');\n });\n}\n\n\nexport default function BpmnTreeWalker(handler, translate) {\n\n // list of containers already walked\n var handledElements = {};\n\n // list of elements to handle deferred to ensure\n // prerequisites are drawn\n var deferred = [];\n\n var diMap = {};\n\n // Helpers //////////////////////\n\n function contextual(fn, ctx) {\n return function(e) {\n fn(e, ctx);\n };\n }\n\n function handled(element) {\n handledElements[element.id] = element;\n }\n\n function isHandled(element) {\n return handledElements[element.id];\n }\n\n function visit(element, ctx) {\n\n var gfx = element.gfx;\n\n // avoid multiple rendering of elements\n if (gfx) {\n throw new Error(\n translate('already rendered {element}', { element: elementToString(element) })\n );\n }\n\n // call handler\n return handler.element(element, diMap[element.id], ctx);\n }\n\n function visitRoot(element, diagram) {\n return handler.root(element, diMap[element.id], diagram);\n }\n\n function visitIfDi(element, ctx) {\n\n try {\n var gfx = diMap[element.id] && visit(element, ctx);\n\n handled(element);\n\n return gfx;\n } catch (e) {\n logError(e.message, { element: element, error: e });\n\n console.error(translate('failed to import {element}', { element: elementToString(element) }));\n console.error(e);\n }\n }\n\n function logError(message, context) {\n handler.error(message, context);\n }\n\n // DI handling //////////////////////\n\n function registerDi(di) {\n var bpmnElement = di.bpmnElement;\n\n if (bpmnElement) {\n if (diMap[bpmnElement.id]) {\n logError(\n translate('multiple DI elements defined for {element}', {\n element: elementToString(bpmnElement)\n }),\n { element: bpmnElement }\n );\n } else {\n diMap[bpmnElement.id] = di;\n\n ensureCompatDiRef(bpmnElement);\n }\n } else {\n logError(\n translate('no bpmnElement referenced in {element}', {\n element: elementToString(di)\n }),\n { element: di }\n );\n }\n }\n\n function handleDiagram(diagram) {\n handlePlane(diagram.plane);\n }\n\n function handlePlane(plane) {\n registerDi(plane);\n\n forEach(plane.planeElement, handlePlaneElement);\n }\n\n function handlePlaneElement(planeElement) {\n registerDi(planeElement);\n }\n\n\n // Semantic handling //////////////////////\n\n /**\n * Handle definitions and return the rendered diagram (if any)\n *\n * @param {ModdleElement} definitions to walk and import\n * @param {ModdleElement} [diagram] specific diagram to import and display\n *\n * @throws {Error} if no diagram to display could be found\n */\n function handleDefinitions(definitions, diagram) {\n\n // make sure we walk the correct bpmnElement\n\n var diagrams = definitions.diagrams;\n\n if (diagram && diagrams.indexOf(diagram) === -1) {\n throw new Error(translate('diagram not part of bpmn:Definitions'));\n }\n\n if (!diagram && diagrams && diagrams.length) {\n diagram = diagrams[0];\n }\n\n // no diagram -> nothing to import\n if (!diagram) {\n throw new Error(translate('no diagram to display'));\n }\n\n // load DI from selected diagram only\n diMap = {};\n handleDiagram(diagram);\n\n\n var plane = diagram.plane;\n\n if (!plane) {\n throw new Error(translate(\n 'no plane for {element}',\n { element: elementToString(diagram) }\n ));\n }\n\n var rootElement = plane.bpmnElement;\n\n // ensure we default to a suitable display candidate (process or collaboration),\n // even if non is specified in DI\n if (!rootElement) {\n rootElement = findDisplayCandidate(definitions);\n\n if (!rootElement) {\n throw new Error(translate('no process or collaboration to display'));\n } else {\n\n logError(\n translate('correcting missing bpmnElement on {plane} to {rootElement}', {\n plane: elementToString(plane),\n rootElement: elementToString(rootElement)\n })\n );\n\n // correct DI on the fly\n plane.bpmnElement = rootElement;\n registerDi(plane);\n }\n }\n\n\n var ctx = visitRoot(rootElement, plane);\n\n if (is(rootElement, 'bpmn:Process') || is(rootElement, 'bpmn:SubProcess')) {\n handleProcess(rootElement, ctx);\n } else if (is(rootElement, 'bpmn:Collaboration')) {\n handleCollaboration(rootElement, ctx);\n\n // force drawing of everything not yet drawn that is part of the target DI\n handleUnhandledProcesses(definitions.rootElements, ctx);\n } else {\n throw new Error(\n translate('unsupported bpmnElement for {plane}: {rootElement}', {\n plane: elementToString(plane),\n rootElement: elementToString(rootElement)\n })\n );\n }\n\n // handle all deferred elements\n handleDeferred(deferred);\n }\n\n function handleDeferred() {\n\n var fn;\n\n // drain deferred until empty\n while (deferred.length) {\n fn = deferred.shift();\n\n fn();\n }\n }\n\n function handleProcess(process, context) {\n handleFlowElementsContainer(process, context);\n handleIoSpecification(process.ioSpecification, context);\n\n handleArtifacts(process.artifacts, context);\n\n // log process handled\n handled(process);\n }\n\n function handleUnhandledProcesses(rootElements, ctx) {\n\n // walk through all processes that have not yet been drawn and draw them\n // if they contain lanes with DI information.\n // we do this to pass the free-floating lane test cases in the MIWG test suite\n var processes = filter(rootElements, function(e) {\n return !isHandled(e) && is(e, 'bpmn:Process') && e.laneSets;\n });\n\n processes.forEach(contextual(handleProcess, ctx));\n }\n\n function handleMessageFlow(messageFlow, context) {\n visitIfDi(messageFlow, context);\n }\n\n function handleMessageFlows(messageFlows, context) {\n forEach(messageFlows, contextual(handleMessageFlow, context));\n }\n\n function handleDataAssociation(association, context) {\n visitIfDi(association, context);\n }\n\n function handleDataInput(dataInput, context) {\n visitIfDi(dataInput, context);\n }\n\n function handleDataOutput(dataOutput, context) {\n visitIfDi(dataOutput, context);\n }\n\n function handleArtifact(artifact, context) {\n\n // bpmn:TextAnnotation\n // bpmn:Group\n // bpmn:Association\n\n visitIfDi(artifact, context);\n }\n\n function handleArtifacts(artifacts, context) {\n\n forEach(artifacts, function(e) {\n if (is(e, 'bpmn:Association')) {\n deferred.push(function() {\n handleArtifact(e, context);\n });\n } else {\n handleArtifact(e, context);\n }\n });\n }\n\n function handleIoSpecification(ioSpecification, context) {\n\n if (!ioSpecification) {\n return;\n }\n\n forEach(ioSpecification.dataInputs, contextual(handleDataInput, context));\n forEach(ioSpecification.dataOutputs, contextual(handleDataOutput, context));\n }\n\n function handleSubProcess(subProcess, context) {\n handleFlowElementsContainer(subProcess, context);\n handleArtifacts(subProcess.artifacts, context);\n }\n\n function handleFlowNode(flowNode, context) {\n var childCtx = visitIfDi(flowNode, context);\n\n if (is(flowNode, 'bpmn:SubProcess')) {\n handleSubProcess(flowNode, childCtx || context);\n }\n\n if (is(flowNode, 'bpmn:Activity')) {\n handleIoSpecification(flowNode.ioSpecification, context);\n }\n\n // defer handling of associations\n // affected types:\n //\n // * bpmn:Activity\n // * bpmn:ThrowEvent\n // * bpmn:CatchEvent\n //\n deferred.push(function() {\n forEach(flowNode.dataInputAssociations, contextual(handleDataAssociation, context));\n forEach(flowNode.dataOutputAssociations, contextual(handleDataAssociation, context));\n });\n }\n\n function handleSequenceFlow(sequenceFlow, context) {\n visitIfDi(sequenceFlow, context);\n }\n\n function handleDataElement(dataObject, context) {\n visitIfDi(dataObject, context);\n }\n\n function handleLane(lane, context) {\n\n deferred.push(function() {\n\n var newContext = visitIfDi(lane, context);\n\n if (lane.childLaneSet) {\n handleLaneSet(lane.childLaneSet, newContext || context);\n }\n\n wireFlowNodeRefs(lane);\n });\n }\n\n function handleLaneSet(laneSet, context) {\n forEach(laneSet.lanes, contextual(handleLane, context));\n }\n\n function handleLaneSets(laneSets, context) {\n forEach(laneSets, contextual(handleLaneSet, context));\n }\n\n function handleFlowElementsContainer(container, context) {\n handleFlowElements(container.flowElements, context);\n\n if (container.laneSets) {\n handleLaneSets(container.laneSets, context);\n }\n }\n\n function handleFlowElements(flowElements, context) {\n forEach(flowElements, function(e) {\n if (is(e, 'bpmn:SequenceFlow')) {\n deferred.push(function() {\n handleSequenceFlow(e, context);\n });\n } else if (is(e, 'bpmn:BoundaryEvent')) {\n deferred.unshift(function() {\n handleFlowNode(e, context);\n });\n } else if (is(e, 'bpmn:FlowNode')) {\n handleFlowNode(e, context);\n } else if (is(e, 'bpmn:DataObject')) {\n\n // SKIP (assume correct referencing via DataObjectReference)\n } else if (is(e, 'bpmn:DataStoreReference')) {\n handleDataElement(e, context);\n } else if (is(e, 'bpmn:DataObjectReference')) {\n handleDataElement(e, context);\n } else {\n logError(\n translate('unrecognized flowElement {element} in context {context}', {\n element: elementToString(e),\n context: (context ? elementToString(context.businessObject) : 'null')\n }),\n { element: e, context: context }\n );\n }\n });\n }\n\n function handleParticipant(participant, context) {\n var newCtx = visitIfDi(participant, context);\n\n var process = participant.processRef;\n if (process) {\n handleProcess(process, newCtx || context);\n }\n }\n\n function handleCollaboration(collaboration, context) {\n\n forEach(collaboration.participants, contextual(handleParticipant, context));\n\n handleArtifacts(collaboration.artifacts, context);\n\n // handle message flows latest in the process\n deferred.push(function() {\n handleMessageFlows(collaboration.messageFlows, context);\n });\n }\n\n\n function wireFlowNodeRefs(lane) {\n\n // wire the virtual flowNodeRefs <-> relationship\n forEach(lane.flowNodeRef, function(flowNode) {\n var lanes = flowNode.get('lanes');\n\n if (lanes) {\n lanes.push(lane);\n }\n });\n }\n\n // API //////////////////////\n\n return {\n handleDeferred: handleDeferred,\n handleDefinitions: handleDefinitions,\n handleSubProcess: handleSubProcess,\n registerDi: registerDi\n };\n}","import {\n some\n} from 'min-dash';\n\n\n/**\n * Is an element of the given BPMN type?\n *\n * @param {djs.model.Base|ModdleElement} element\n * @param {string} type\n *\n * @return {boolean}\n */\nexport function is(element, type) {\n var bo = getBusinessObject(element);\n\n return bo && (typeof bo.$instanceOf === 'function') && bo.$instanceOf(type);\n}\n\n\n/**\n * Return true if element has any of the given types.\n *\n * @param {djs.model.Base} element\n * @param {Array<string>} types\n *\n * @return {boolean}\n */\nexport function isAny(element, types) {\n return some(types, function(t) {\n return is(element, t);\n });\n}\n\n/**\n * Return the business object for a given element.\n *\n * @param {djs.model.Base|ModdleElement} element\n *\n * @return {ModdleElement}\n */\nexport function getBusinessObject(element) {\n return (element && element.businessObject) || element;\n}\n\n/**\n * Return the di object for a given element.\n *\n * @param {djs.model.Base} element\n *\n * @return {ModdleElement}\n */\nexport function getDi(element) {\n return element && element.di;\n}","import {\n find,\n forEach,\n map\n} from 'min-dash';\n\nimport BpmnTreeWalker from './BpmnTreeWalker';\n\nimport { is } from '../util/ModelUtil';\n\n\n/**\n * The importBpmnDiagram result.\n *\n * @typedef {Object} ImportBPMNDiagramResult\n *\n * @property {Array<string>} warnings\n */\n\n/**\n* The importBpmnDiagram error.\n*\n* @typedef {Error} ImportBPMNDiagramError\n*\n* @property {Array<string>} warnings\n*/\n\n/**\n * Import the definitions into a diagram.\n *\n * Errors and warnings are reported through the specified callback.\n *\n * @param {djs.Diagram} diagram\n * @param {ModdleElement<Definitions>} definitions\n * @param {ModdleElement<BPMNDiagram>} [bpmnDiagram] the diagram to be rendered\n * (if not provided, the first one will be rendered)\n *\n * Returns {Promise<ImportBPMNDiagramResult, ImportBPMNDiagramError>}\n */\nexport function importBpmnDiagram(diagram, definitions, bpmnDiagram) {\n\n var importer,\n eventBus,\n translate,\n canvas;\n\n var error,\n warnings = [];\n\n /**\n * Walk the diagram semantically, importing (=drawing)\n * all elements you encounter.\n *\n * @param {ModdleElement<Definitions>} definitions\n * @param {ModdleElement<BPMNDiagram>} bpmnDiagram\n */\n function render(definitions, bpmnDiagram) {\n\n var visitor = {\n\n root: function(element, di) {\n return importer.add(element, di);\n },\n\n element: function(element, di, parentShape) {\n return importer.add(element, di, parentShape);\n },\n\n error: function(message, context) {\n warnings.push({ message: message, context: context });\n }\n };\n\n var walker = new BpmnTreeWalker(visitor, translate);\n\n\n bpmnDiagram = bpmnDiagram || (definitions.diagrams && definitions.diagrams[0]);\n\n var diagramsToImport = getDiagramsToImport(definitions, bpmnDiagram);\n\n if (!diagramsToImport) {\n throw new Error(translate('no diagram to display'));\n }\n\n // traverse BPMN 2.0 document model,\n // starting at definitions\n forEach(diagramsToImport, function(diagram) {\n walker.handleDefinitions(definitions, diagram);\n });\n\n var rootId = bpmnDiagram.plane.bpmnElement.id;\n\n // we do need to account for different ways we create root elements\n // each nested imported <root> do have the `_plane` suffix, while\n // the root <root> is found under the business object ID\n canvas.setRootElement(\n canvas.findRoot(rootId + '_plane') || canvas.findRoot(rootId)\n );\n }\n\n return new Promise(function(resolve, reject) {\n try {\n importer = diagram.get('bpmnImporter');\n eventBus = diagram.get('eventBus');\n translate = diagram.get('translate');\n canvas = diagram.get('canvas');\n\n eventBus.fire('import.render.start', { definitions: definitions });\n\n render(definitions, bpmnDiagram);\n\n eventBus.fire('import.render.complete', {\n error: error,\n warnings: warnings\n });\n\n return resolve({ warnings: warnings });\n } catch (e) {\n\n e.warnings = warnings;\n return reject(e);\n }\n });\n}\n\n/**\n * Returns all diagrams in the same hierarchy as the requested diagram.\n * Includes all parent and sub process diagrams.\n *\n * @param {Array} definitions\n * @param {Object} bpmnDiagram\n *\n * @returns {Array<Object>}\n */\nfunction getDiagramsToImport(definitions, bpmnDiagram) {\n if (!bpmnDiagram) {\n return;\n }\n\n var bpmnElement = bpmnDiagram.plane.bpmnElement,\n rootElement = bpmnElement;\n\n if (!is(bpmnElement, 'bpmn:Process') && !is(bpmnElement, 'bpmn:Collaboration')) {\n rootElement = findRootProcess(bpmnElement);\n }\n\n // in case the process is part of a collaboration, the plane references the\n // collaboration, not the process\n var collaboration;\n\n if (is(rootElement, 'bpmn:Collaboration')) {\n collaboration = rootElement;\n } else {\n collaboration = find(definitions.rootElements, function(element) {\n if (!is(element, 'bpmn:Collaboration')) {\n return;\n }\n\n return find(element.participants, function(participant) {\n return participant.processRef === rootElement;\n });\n });\n }\n\n var rootElements = [ rootElement ];\n\n // all collaboration processes can contain sub-diagrams\n if (collaboration) {\n rootElements = map(collaboration.participants, function(participant) {\n return participant.processRef;\n });\n\n rootElements.push(collaboration);\n }\n\n var allChildren = selfAndAllFlowElements(rootElements);\n\n // if we have multiple diagrams referencing the same element, we\n // use the first in the file\n var diagramsToImport = [ bpmnDiagram ];\n var handledElements = [ bpmnElement ];\n\n forEach(definitions.diagrams, function(diagram) {\n var businessObject = diagram.plane.bpmnElement;\n\n if (\n allChildren.indexOf(businessObject) !== -1 &&\n handledElements.indexOf(businessObject) === -1\n ) {\n diagramsToImport.push(diagram);\n handledElements.push(businessObject);\n }\n });\n\n\n return diagramsToImport;\n}\n\nfunction selfAndAllFlowElements(elements) {\n var result = [];\n\n forEach(elements, function(element) {\n if (!element) {\n return;\n }\n\n result.push(element);\n\n result = result.concat(selfAndAllFlowElements(element.flowElements));\n });\n\n return result;\n}\n\nfunction findRootProcess(element) {\n var parent = element;\n\n while (parent) {\n if (is(parent, 'bpmn:Process')) {\n return parent;\n }\n\n parent = parent.$parent;\n }\n}","/**\n * This file must not be changed or exchanged.\n *\n * @see http://bpmn.io/license for more information.\n */\n\nimport {\n assignStyle,\n domify,\n delegate as domDelegate,\n query as domQuery\n} from 'min-dom';\n\n\n// inlined ../../resources/logo.svg\nvar BPMNIO_LOGO_SVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 14.02 5.57\" width=\"53\" height=\"21\"><path fill=\"currentColor\" d=\"M1.88.92v.14c0 .41-.13.68-.4.8.33.14.46.44.46.86v.33c0 .61-.33.95-.95.95H0V0h.95c.65 0 .93.3.93.92zM.63.57v1.06h.24c.24 0 .38-.1.38-.43V.98c0-.28-.1-.4-.32-.4zm0 1.63v1.22h.36c.2 0 .32-.1.32-.39v-.35c0-.37-.12-.48-.4-.48H.63zM4.18.99v.52c0 .64-.31.98-.94.98h-.3V4h-.62V0h.92c.63 0 .94.35.94.99zM2.94.57v1.35h.3c.2 0 .3-.09.3-.37v-.6c0-.29-.1-.38-.3-.38h-.3zm2.89 2.27L6.25 0h.88v4h-.6V1.12L6.1 3.99h-.6l-.46-2.82v2.82h-.55V0h.87zM8.14 1.1V4h-.56V0h.79L9 2.4V0h.56v4h-.64zm2.49 2.29v.6h-.6v-.6zM12.12 1c0-.63.33-1 .95-1 .61 0 .95.37.95 1v2.04c0 .64-.34 1-.95 1-.62 0-.95-.37-.95-1zm.62 2.08c0 .28.13.39.33.39s.32-.1.32-.4V.98c0-.29-.12-.4-.32-.4s-.33.11-.33.4z\"/><path fill=\"currentColor\" d=\"M0 4.53h14.02v1.04H0zM11.08 0h.63v.62h-.63zm.63 4V1h-.63v2.98z\"/></svg>';\n\nexport var BPMNIO_IMG = BPMNIO_LOGO_SVG;\n\nexport var LOGO_STYLES = {\n verticalAlign: 'middle'\n};\n\nexport var LINK_STYLES = {\n 'color': '#404040'\n};\n\nvar LIGHTBOX_STYLES = {\n 'zIndex': '1001',\n 'position': 'fixed',\n 'top': '0',\n 'left': '0',\n 'right': '0',\n 'bottom': '0'\n};\n\nvar BACKDROP_STYLES = {\n 'width': '100%',\n 'height': '100%',\n 'background': 'rgba(40,40,40,0.2)'\n};\n\nvar NOTICE_STYLES = {\n 'position': 'absolute',\n 'left': '50%',\n 'top': '40%',\n 'transform': 'translate(-50%)',\n 'width': '260px',\n 'padding': '10px',\n 'background': 'white',\n 'boxShadow': '0 1px 4px rgba(0,0,0,0.3)',\n 'fontFamily': 'Helvetica, Arial, sans-serif',\n 'fontSize': '14px',\n 'display': 'flex',\n 'lineHeight': '1.3'\n};\n\nvar LIGHTBOX_MARKUP =\n '<div class=\"bjs-powered-by-lightbox\">' +\n '<div class=\"backdrop\"></div>' +\n '<div class=\"notice\">' +\n '<a href=\"https://bpmn.io\" target=\"_blank\" rel=\"noopener\" class=\"link\">' +\n BPMNIO_IMG +\n '</a>' +\n '<span>' +\n 'Web-based tooling for BPMN, DMN and CMMN diagrams ' +\n 'powered by <a href=\"https://bpmn.io\" target=\"_blank\" rel=\"noopener\">bpmn.io</a>.' +\n '</span>' +\n '</div>' +\n '</div>';\n\n\nvar lightbox;\n\nfunction createLightbox() {\n lightbox = domify(LIGHTBOX_MARKUP);\n\n assignStyle(lightbox, LIGHTBOX_STYLES);\n assignStyle(domQuery('svg', lightbox), LOGO_STYLES);\n assignStyle(domQuery('.backdrop', lightbox), BACKDROP_STYLES);\n assignStyle(domQuery('.notice', lightbox), NOTICE_STYLES);\n assignStyle(domQuery('.link', lightbox), LINK_STYLES, {\n 'margin': '15px 20px 15px 10px',\n 'alignSelf': 'center'\n });\n}\n\nexport function open() {\n\n if (!lightbox) {\n createLightbox();\n\n domDelegate.bind(lightbox, '.backdrop', 'click', function(event) {\n document.body.removeChild(lightbox);\n });\n }\n\n document.body.appendChild(lightbox);\n}\n","/**\n * The code in the <project-logo></project-logo> area\n * must not be changed.\n *\n * @see http://bpmn.io/license for more information.\n */\nimport {\n assign,\n find,\n isNumber,\n omit\n} from 'min-dash';\n\nimport {\n domify,\n assignStyle,\n query as domQuery,\n remove as domRemove\n} from 'min-dom';\n\nimport {\n innerSVG\n} from 'tiny-svg';\n\nimport Diagram from 'diagram-js';\nimport BpmnModdle from 'bpmn-moddle';\n\nimport inherits from 'inherits-browser';\n\nimport {\n importBpmnDiagram\n} from './import/Importer';\n\nimport {\n wrapForCompatibility\n} from './util/CompatibilityUtil';\n\n\n/**\n * @typedef { import('didi').ModuleDeclaration } Module\n */\n\n/**\n * A base viewer for BPMN 2.0 diagrams.\n *\n * Have a look at {@link Viewer}, {@link NavigatedViewer} or {@link Modeler} for\n * bundles that include actual features.\n *\n * @param {Object} [options] configuration options to pass to the viewer\n * @param {DOMElement} [options.container] the container to render the viewer in, defaults to body.\n * @param {string|number} [options.width] the width of the viewer\n * @param {string|number} [options.height] the height of the viewer\n * @param {Object} [options.moddleExtensions] extension packages to provide\n * @param {Module[]} [options.modules] a list of modules to override the default modules\n * @param {Module[]} [options.additionalModules] a list of modules to use with the default modules\n */\nexport default function BaseViewer(options) {\n\n options = assign({}, DEFAULT_OPTIONS, options);\n\n this._moddle = this._createModdle(options);\n\n this._container = this._createContainer(options);\n\n /* <project-logo> */\n\n addProjectLogo(this._container);\n\n /* </project-logo> */\n\n this._init(this._container, this._moddle, options);\n}\n\ninherits(BaseViewer, Diagram);\n\n/**\n* The importXML result.\n*\n* @typedef {Object} ImportXMLResult\n*\n* @property {Array<string>} warnings\n*/\n\n/**\n* The importXML error.\n*\n* @typedef {Error} ImportXMLError\n*\n* @property {Array<string>} warnings\n*/\n\n/**\n * Parse and render a BPMN 2.0 diagram.\n *\n * Once finished the viewer reports back the result to the\n * provided callback function with (err, warnings).\n *\n * ## Life-Cycle Events\n *\n * During import the viewer will fire life-cycle events:\n *\n * * import.parse.start (about to read model from xml)\n * * import.parse.complete (model read; may have worked or not)\n * * import.render.start (graphical import start)\n * * import.render.complete (graphical import finished)\n * * import.done (everything done)\n *\n * You can use these events to hook into the life-cycle.\n *\n * @param {string} xml the BPMN 2.0 xml\n * @param {ModdleElement<BPMNDiagram>|string} [bpmnDiagram] BPMN diagram or id of diagram to render (if not provided, the first one will be rendered)\n *\n * Returns {Promise<ImportXMLResult, ImportXMLError>}\n */\nBaseViewer.prototype.importXML = wrapForCompatibility(async function importXML(xml, bpmnDiagram) {\n\n const self = this;\n\n function ParseCompleteEvent(data) {\n\n const event = self.get('eventBus').createEvent(data);\n\n // TODO(nikku): remove with future bpmn-js version\n Object.defineProperty(event, 'context', {\n enumerable: true,\n get: function() {\n\n console.warn(new Error(\n 'import.parse.complete <context> is deprecated ' +\n 'and will be removed in future library versions'\n ));\n\n return {\n warnings: data.warnings,\n references: data.references,\n elementsById: data.elementsById\n };\n }\n });\n\n return event;\n }\n\n let aggregatedWarnings = [];\n try {\n\n // hook in pre-parse listeners +\n // allow xml manipulation\n xml = this._emit('import.parse.start', { xml: xml }) || xml;\n\n let parseResult;\n try {\n parseResult = await this._moddle.fromXML(xml, 'bpmn:Definitions');\n } catch (error) {\n this._emit('import.parse.complete', {\n error\n });\n\n throw error;\n }\n\n let definitions = parseResult.rootElement;\n const references = parseResult.references;\n const parseWarnings = parseResult.warnings;\n const elementsById = parseResult.elementsById;\n\n aggregatedWarnings = aggregatedWarnings.concat(parseWarnings);\n\n // hook in post parse listeners +\n // allow definitions manipulation\n definitions = this._emit('import.parse.complete', ParseCompleteEvent({\n error: null,\n definitions: definitions,\n elementsById: elementsById,\n references: references,\n warnings: aggregatedWarnings\n })) || definitions;\n\n const importResult = await this.importDefinitions(definitions, bpmnDiagram);\n\n aggregatedWarnings = aggregatedWarnings.concat(importResult.warnings);\n\n this._emit('import.done', { error: null, warnings: aggregatedWarnings });\n\n return { warnings: aggregatedWarnings };\n } catch (err) {\n let error = err;\n aggregatedWarnings = aggregatedWarnings.concat(error.warnings || []);\n addWarningsToError(error, aggregatedWarnings);\n\n error = checkValidationError(error);\n\n this._emit('import.done', { error, warnings: error.warnings });\n\n throw error;\n }\n});\n\n/**\n* The importDefinitions result.\n*\n* @typedef {Object} ImportDefinitionsResult\n*\n* @property {Array<string>} warnings\n*/\n\n/**\n* The importDefinitions error.\n*\n* @typedef {Error} ImportDefinitionsError\n*\n* @property {Array<string>} warnings\n*/\n\n/**\n * Import parsed definitions and render a BPMN 2.0 diagram.\n *\n * Once finished the viewer reports back the result to the\n * provided callback function with (err, warnings).\n *\n * ## Life-Cycle Events\n *\n * During import the viewer will fire life-cycle events:\n *\n * * import.render.start (graphical import start)\n * * import.render.complete (graphical import finished)\n *\n * You can use these events to hook into the life-cycle.\n *\n * @param {ModdleElement<Definitions>} definitions parsed BPMN 2.0 definitions\n * @param {ModdleElement<BPMNDiagram>|string} [bpmnDiagram] BPMN diagram or id of diagram to render (if not provided, the first one will be rendered)\n *\n * Returns {Promise<ImportDefinitionsResult, ImportDefinitionsError>}\n */\nBaseViewer.prototype.importDefinitions = wrapForCompatibility(async function importDefinitions(definitions, bpmnDiagram) {\n this._setDefinitions(definitions);\n const result = await this.open(bpmnDiagram);\n\n return { warnings: result.warnings };\n});\n\n/**\n * The open result.\n *\n * @typedef {Object} OpenResult\n *\n * @property {Array<string>} warnings\n */\n\n/**\n* The open error.\n*\n* @typedef {Error} OpenError\n*\n* @property {Array<string>} warnings\n*/\n\n/**\n * Open diagram of previously imported XML.\n *\n * Once finished the viewer reports back the result to the\n * provided callback function with (err, warnings).\n *\n * ## Life-Cycle Events\n *\n * During switch the viewer will fire life-cycle events:\n *\n * * import.render.start (graphical import start)\n * * import.render.complete (graphical import finished)\n *\n * You can use these events to hook into the life-cycle.\n *\n * @param {string|ModdleElement<BPMNDiagram>} [bpmnDiagramOrId] id or the diagram to open\n *\n * Returns {Promise<OpenResult, OpenError>}\n */\nBaseViewer.prototype.open = wrapForCompatibility(async function open(bpmnDiagramOrId) {\n\n const definitions = this._definitions;\n let bpmnDiagram = bpmnDiagramOrId;\n\n if (!definitions) {\n const error = new Error('no XML imported');\n addWarningsToError(error, []);\n\n throw error;\n }\n\n if (typeof bpmnDiagramOrId === 'string') {\n bpmnDiagram = findBPMNDiagram(definitions, bpmnDiagramOrId);\n\n if (!bpmnDiagram) {\n const error = new Error('BPMNDiagram <' + bpmnDiagramOrId + '> not found');\n addWarningsToError(error, []);\n\n throw error;\n }\n }\n\n // clear existing rendered diagram\n // catch synchronous exceptions during #clear()\n try {\n this.clear();\n } catch (error) {\n addWarningsToError(error, []);\n\n throw error;\n }\n\n // perform graphical import\n const { warnings } = await importBpmnDiagram(this, definitions, bpmnDiagram);\n\n return { warnings };\n});\n\n/**\n * The saveXML result.\n *\n * @typedef {Object} SaveXMLResult\n *\n * @property {string} xml\n */\n\n/**\n * Export the currently displayed BPMN 2.0 diagram as\n * a BPMN 2.0 XML document.\n *\n * ## Life-Cycle Events\n *\n * During XML saving the viewer will fire life-cycle events:\n *\n * * saveXML.start (before serialization)\n * * saveXML.serialized (after xml generation)\n * * saveXML.done (everything done)\n *\n * You can use these events to hook into the life-cycle.\n *\n * @param {Object} [options] export options\n * @param {boolean} [options.format=false] output formatted XML\n * @param {boolean} [options.preamble=true] output preamble\n *\n * Returns {Promise<SaveXMLResult, Error>}\n */\nBaseViewer.prototype.saveXML = wrapForCompatibility(async function saveXML(options) {\n\n options = options || {};\n\n let definitions = this._definitions,\n error, xml;\n\n try {\n if (!definitions) {\n throw new Error('no definitions loaded');\n }\n\n // allow to fiddle around with definitions\n definitions = this._emit('saveXML.start', {\n definitions\n }) || definitions;\n\n const result = await this._moddle.toXML(definitions, options);\n xml = result.xml;\n\n xml = this._emit('saveXML.serialized', {\n xml\n }) || xml;\n } catch (err) {\n error = err;\n }\n\n const result = error ? { error } : { xml };\n\n this._emit('saveXML.done', result);\n\n if (error) {\n throw error;\n }\n\n return result;\n});\n\n/**\n * The saveSVG result.\n *\n * @typedef {Object} SaveSVGResult\n *\n * @property {string} svg\n */\n\n/**\n * Export the currently displayed BPMN 2.0 diagram as\n * an SVG image.\n *\n * ## Life-Cycle Events\n *\n * During SVG saving the viewer will fire life-cycle events:\n *\n * * saveSVG.start (before serialization)\n * * saveSVG.done (everything done)\n *\n * You can use these events to hook into the life-cycle.\n *\n * @param {Object} [options]\n *\n * Returns {Promise<SaveSVGResult, Error>}\n */\nBaseViewer.prototype.saveSVG = wrapForCompatibility(async function saveSVG(options = {}) {\n this._emit('saveSVG.start');\n\n let svg, err;\n\n try {\n const canvas = this.get('canvas');\n\n const contentNode = canvas.getActiveLayer(),\n defsNode = domQuery('defs', canvas._svg);\n\n const contents = innerSVG(contentNode),\n defs = defsNode ? '<defs>' + innerSVG(defsNode) + '</defs>' : '';\n\n const bbox = contentNode.getBBox();\n\n svg =\n '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n' +\n '<!-- created with bpmn-js / http://bpmn.io -->\\n' +\n '<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\\n' +\n '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" ' +\n 'width=\"' + bbox.width + '\" height=\"' + bbox.height + '\" ' +\n 'viewBox=\"' + bbox.x + ' ' + bbox.y + ' ' + bbox.width + ' ' + bbox.height + '\" version=\"1.1\">' +\n defs + contents +\n '</svg>';\n } catch (e) {\n err = e;\n }\n\n this._emit('saveSVG.done', {\n error: err,\n svg: svg\n });\n\n if (err) {\n throw err;\n }\n\n return { svg };\n});\n\n/**\n * Get a named diagram service.\n *\n * @example\n *\n * const elementRegistry = viewer.get('elementRegistry');\n * const startEventShape = elementRegistry.get('StartEvent_1');\n *\n * @param {string} name\n *\n * @return {Object} diagram service instance\n *\n * @method BaseViewer#get\n */\n\n/**\n * Invoke a function in the context of this viewer.\n *\n * @example\n *\n * viewer.invoke(function(elementRegistry) {\n * const startEventShape = elementRegistry.get('StartEvent_1');\n * });\n *\n * @param {Function} fn to be invoked\n *\n * @return {Object} the functions return value\n *\n * @method BaseViewer#invoke\n */\n\n\nBaseViewer.prototype._setDefinitions = function(definitions) {\n this._definitions = definitions;\n};\n\n/**\n * Return modules to instantiate with.\n *\n * @param {any} options the instance got created with\n *\n * @return {Module[]}\n */\nBaseViewer.prototype.getModules = function(options) {\n return this._modules;\n};\n\n/**\n * Remove all drawn elements from the viewer.\n *\n * After calling this method the viewer can still\n * be reused for opening another diagram.\n *\n * @method BaseViewer#clear\n */\nBaseViewer.prototype.clear = function() {\n if (!this.getDefinitions()) {\n\n // no diagram to clear\n return;\n }\n\n // remove drawn elements\n Diagram.prototype.clear.call(this);\n};\n\n/**\n * Destroy the viewer instance and remove all its\n * remainders from the document tree.\n */\nBaseViewer.prototype.destroy = function() {\n\n // diagram destroy\n Diagram.prototype.destroy.call(this);\n\n // dom detach\n domRemove(this._container);\n};\n\n/**\n * Register an event listener\n *\n * Remove a previously added listener via {@link #off(event, callback)}.\n *\n * @param {string} event\n * @param {number} [priority]\n * @param {Function} callback\n * @param {Object} [that]\n */\nBaseViewer.prototype.on = function(event, priority, callback, target) {\n return this.get('eventBus').on(event, priority, callback, target);\n};\n\n/**\n * De-register an event listener\n *\n * @param {string} event\n * @param {Function} callback\n */\nBaseViewer.prototype.off = function(event, callback) {\n this.get('eventBus').off(event, callback);\n};\n\nBaseViewer.prototype.attachTo = function(parentNode) {\n\n if (!parentNode) {\n throw new Error('parentNode required');\n }\n\n // ensure we detach from the\n // previous, old parent\n this.detach();\n\n // unwrap jQuery if provided\n if (parentNode.get && parentNode.constructor.prototype.jquery) {\n parentNode = parentNode.get(0);\n }\n\n if (typeof parentNode === 'string') {\n parentNode = domQuery(parentNode);\n }\n\n parentNode.appendChild(this._container);\n\n this._emit('attach', {});\n\n this.get('canvas').resized();\n};\n\nBaseViewer.prototype.getDefinitions = function() {\n return this._definitions;\n};\n\nBaseViewer.prototype.detach = function() {\n\n const container = this._container,\n parentNode = container.parentNode;\n\n if (!parentNode) {\n return;\n }\n\n this._emit('detach', {});\n\n parentNode.removeChild(container);\n};\n\nBaseViewer.prototype._init = function(container, moddle, options) {\n\n const baseModules = options.modules || this.getModules(options),\n additionalModules = options.additionalModules || [],\n staticModules = [\n {\n bpmnjs: [ 'value', this ],\n moddle: [ 'value', moddle ]\n }\n ];\n\n const diagramModules = [].concat(staticModules, baseModules, additionalModules);\n\n const diagramOptions = assign(omit(options, [ 'additionalModules' ]), {\n canvas: assign({}, options.canvas, { container: container }),\n modules: diagramModules\n });\n\n // invoke diagram constructor\n Diagram.call(this, diagramOptions);\n\n if (options && options.container) {\n this.attachTo(options.container);\n }\n};\n\n/**\n * Emit an event on the underlying {@link EventBus}\n *\n * @param {string} type\n * @param {Object} event\n *\n * @return {Object} event processing result (if any)\n */\nBaseViewer.prototype._emit = function(type, event) {\n return this.get('eventBus').fire(type, event);\n};\n\nBaseViewer.prototype._createContainer = function(options) {\n\n const container = domify('<div class=\"bjs-container\"></div>');\n\n assignStyle(container, {\n width: ensureUnit(options.width),\n height: ensureUnit(options.height),\n position: options.position\n });\n\n return container;\n};\n\nBaseViewer.prototype._createModdle = function(options) {\n const moddleOptions = assign({}, this._moddleExtensions, options.moddleExtensions);\n\n return new BpmnModdle(moddleOptions);\n};\n\nBaseViewer.prototype._modules = [];\n\n// helpers ///////////////\n\nfunction addWarningsToError(err, warningsAry) {\n err.warnings = warningsAry;\n return err;\n}\n\nfunction checkValidationError(err) {\n\n // check if we can help the user by indicating wrong BPMN 2.0 xml\n // (in case he or the exporting tool did not get that right)\n\n const pattern = /unparsable content <([^>]+)> detected([\\s\\S]*)$/;\n const match = pattern.exec(err.message);\n\n if (match) {\n err.message =\n 'unparsable content <' + match[1] + '> detected; ' +\n 'this may indicate an invalid BPMN 2.0 diagram file' + match[2];\n }\n\n return err;\n}\n\nconst DEFAULT_OPTIONS = {\n width: '100%',\n height: '100%',\n position: 'relative'\n};\n\n\n/**\n * Ensure the passed argument is a proper unit (defaulting to px)\n */\nfunction ensureUnit(val) {\n return val + (isNumber(val) ? 'px' : '');\n}\n\n\n/**\n * Find BPMNDiagram in definitions by ID\n *\n * @param {ModdleElement<Definitions>} definitions\n * @param {string} diagramId\n *\n * @return {ModdleElement<BPMNDiagram>|null}\n */\nfunction findBPMNDiagram(definitions, diagramId) {\n if (!diagramId) {\n return null;\n }\n\n return find(definitions.diagrams, function(element) {\n return element.id === diagramId;\n }) || null;\n}\n\n\n/* <project-logo> */\n\nimport {\n open as openPoweredBy,\n BPMNIO_IMG,\n LOGO_STYLES,\n LINK_STYLES\n} from './util/PoweredByUtil';\n\nimport {\n event as domEvent\n} from 'min-dom';\n\n/**\n * Adds the project logo to the diagram container as\n * required by the bpmn.io license.\n *\n * @see http://bpmn.io/license\n *\n * @param {Element} container\n */\nfunction addProjectLogo(container) {\n const img = BPMNIO_IMG;\n\n const linkMarkup =\n '<a href=\"http://bpmn.io\" ' +\n 'target=\"_blank\" ' +\n 'class=\"bjs-powered-by\" ' +\n 'title=\"Powered by bpmn.io\" ' +\n '>' +\n img +\n '</a>';\n\n const linkElement = domify(linkMarkup);\n\n assignStyle(domQuery('svg', linkElement), LOGO_STYLES);\n assignStyle(linkElement, LINK_STYLES, {\n position: 'absolute',\n bottom: '15px',\n right: '15px',\n zIndex: '100'\n });\n\n container.appendChild(linkElement);\n\n domEvent.bind(linkElement, 'click', function(event) {\n openPoweredBy();\n\n event.preventDefault();\n });\n}\n\n/* </project-logo> */\n","import {\n is,\n getBusinessObject,\n getDi\n} from './ModelUtil';\n\nimport {\n forEach\n} from 'min-dash';\n\n\nexport function isExpanded(element, di) {\n\n if (is(element, 'bpmn:CallActivity')) {\n return false;\n }\n\n if (is(element, 'bpmn:SubProcess')) {\n di = di || getDi(element);\n\n if (di && is(di, 'bpmndi:BPMNPlane')) {\n return true;\n }\n\n return di && !!di.isExpanded;\n }\n\n if (is(element, 'bpmn:Participant')) {\n return !!getBusinessObject(element).processRef;\n }\n\n return true;\n}\n\nexport function isInterrupting(element) {\n return element && getBusinessObject(element).isInterrupting !== false;\n}\n\nexport function isEventSubProcess(element) {\n return element && !!getBusinessObject(element).triggeredByEvent;\n}\n\nexport function hasEventDefinition(element, eventType) {\n var bo = getBusinessObject(element),\n hasEventDefinition = false;\n\n if (bo.eventDefinitions) {\n forEach(bo.eventDefinitions, function(event) {\n if (is(event, eventType)) {\n hasEventDefinition = true;\n }\n });\n }\n\n return hasEventDefinition;\n}\n\nexport function hasErrorEventDefinition(element) {\n return hasEventDefinition(element, 'bpmn:ErrorEventDefinition');\n}\n\nexport function hasEscalationEventDefinition(element) {\n return hasEventDefinition(element, 'bpmn:EscalationEventDefinition');\n}\n\nexport function hasCompensateEventDefinition(element) {\n return hasEventDefinition(element, 'bpmn:CompensateEventDefinition');\n}\n","import { is } from '../../util/ModelUtil';\n\nfunction getLabelAttr(semantic) {\n if (\n is(semantic, 'bpmn:FlowElement') ||\n is(semantic, 'bpmn:Participant') ||\n is(semantic, 'bpmn:Lane') ||\n is(semantic, 'bpmn:SequenceFlow') ||\n is(semantic, 'bpmn:MessageFlow') ||\n is(semantic, 'bpmn:DataInput') ||\n is(semantic, 'bpmn:DataOutput')\n ) {\n return 'name';\n }\n\n if (is(semantic, 'bpmn:TextAnnotation')) {\n return 'text';\n }\n\n if (is(semantic, 'bpmn:Group')) {\n return 'categoryValueRef';\n }\n}\n\nfunction getCategoryValue(semantic) {\n var categoryValueRef = semantic['categoryValueRef'];\n\n if (!categoryValueRef) {\n return '';\n }\n\n\n return categoryValueRef.value || '';\n}\n\nexport function getLabel(element) {\n var semantic = element.businessObject,\n attr = getLabelAttr(semantic);\n\n if (attr) {\n\n if (attr === 'categoryValueRef') {\n\n return getCategoryValue(semantic);\n }\n\n return semantic[attr] || '';\n }\n}\n\n\nexport function setLabel(element, text, isExternal) {\n var semantic = element.businessObject,\n attr = getLabelAttr(semantic);\n\n if (attr) {\n\n if (attr === 'categoryValueRef') {\n semantic['categoryValueRef'].value = text;\n } else {\n semantic[attr] = text;\n }\n\n }\n\n return element;\n}","import {\n every,\n some\n} from 'min-dash';\n\nimport {\n getDi\n} from '../util/ModelUtil';\n\nimport {\n componentsToPath\n} from 'diagram-js/lib/util/RenderUtil';\n\n// re-export getDi for compatibility\nexport { getDi };\n\nexport var black = 'hsl(225, 10%, 15%)';\n\n// element utils //////////////////////\n\n/**\n * Checks if eventDefinition of the given element matches with semantic type.\n *\n * @return {boolean} true if element is of the given semantic type\n */\nexport function isTypedEvent(event, eventDefinitionType, filter) {\n\n function matches(definition, filter) {\n return every(filter, function(val, key) {\n\n // we want a == conversion here, to be able to catch\n // undefined == false and friends\n /* jshint -W116 */\n return definition[key] == val;\n });\n }\n\n return some(event.eventDefinitions, function(definition) {\n return definition.$type === eventDefinitionType && matches(event, filter);\n });\n}\n\nexport function isThrowEvent(event) {\n return (event.$type === 'bpmn:IntermediateThrowEvent') || (event.$type === 'bpmn:EndEvent');\n}\n\nexport function isCollection(element) {\n var dataObject = element.dataObjectRef;\n\n return element.isCollection || (dataObject && dataObject.isCollection);\n}\n\nexport function getSemantic(element) {\n return element.businessObject;\n}\n\n\n// color access //////////////////////\n\nexport function getFillColor(element, defaultColor) {\n var di = getDi(element);\n\n return di.get('color:background-color') || di.get('bioc:fill') || defaultColor || 'white';\n}\n\nexport function getStrokeColor(element, defaultColor) {\n var di = getDi(element);\n\n return di.get('color:border-color') || di.get('bioc:stroke') || defaultColor || black;\n}\n\nexport function getLabelColor(element, defaultColor, defaultStrokeColor) {\n var di = getDi(element),\n label = di.get('label');\n\n return label && label.get('color:color') || defaultColor ||\n getStrokeColor(element, defaultStrokeColor);\n}\n\n// cropping path customizations //////////////////////\n\nexport function getCirclePath(shape) {\n\n var cx = shape.x + shape.width / 2,\n cy = shape.y + shape.height / 2,\n radius = shape.width / 2;\n\n var circlePath = [\n [ 'M', cx, cy ],\n [ 'm', 0, -radius ],\n [ 'a', radius, radius, 0, 1, 1, 0, 2 * radius ],\n [ 'a', radius, radius, 0, 1, 1, 0, -2 * radius ],\n [ 'z' ]\n ];\n\n return componentsToPath(circlePath);\n}\n\nexport function getRoundRectPath(shape, borderRadius) {\n\n var x = shape.x,\n y = shape.y,\n width = shape.width,\n height = shape.height;\n\n var roundRectPath = [\n [ 'M', x + borderRadius, y ],\n [ 'l', width - borderRadius * 2, 0 ],\n [ 'a', borderRadius, borderRadius, 0, 0, 1, borderRadius, borderRadius ],\n [ 'l', 0, height - borderRadius * 2 ],\n [ 'a', borderRadius, borderRadius, 0, 0, 1, -borderRadius, borderRadius ],\n [ 'l', borderRadius * 2 - width, 0 ],\n [ 'a', borderRadius, borderRadius, 0, 0, 1, -borderRadius, -borderRadius ],\n [ 'l', 0, borderRadius * 2 - height ],\n [ 'a', borderRadius, borderRadius, 0, 0, 1, borderRadius, -borderRadius ],\n [ 'z' ]\n ];\n\n return componentsToPath(roundRectPath);\n}\n\nexport function getDiamondPath(shape) {\n\n var width = shape.width,\n height = shape.height,\n x = shape.x,\n y = shape.y,\n halfWidth = width / 2,\n halfHeight = height / 2;\n\n var diamondPath = [\n [ 'M', x + halfWidth, y ],\n [ 'l', halfWidth, halfHeight ],\n [ 'l', -halfWidth, halfHeight ],\n [ 'l', -halfWidth, -halfHeight ],\n [ 'z' ]\n ];\n\n return componentsToPath(diamondPath);\n}\n\nexport function getRectPath(shape) {\n var x = shape.x,\n y = shape.y,\n width = shape.width,\n height = shape.height;\n\n var rectPath = [\n [ 'M', x, y ],\n [ 'l', width, 0 ],\n [ 'l', 0, height ],\n [ 'l', -width, 0 ],\n [ 'z' ]\n ];\n\n return componentsToPath(rectPath);\n}","import inherits from 'inherits-browser';\n\nimport {\n isObject,\n assign,\n forEach\n} from 'min-dash';\n\nimport BaseRenderer from 'diagram-js/lib/draw/BaseRenderer';\n\nimport {\n isExpanded,\n isEventSubProcess\n} from '../util/DiUtil';\n\nimport {\n getLabel\n} from '../features/label-editing/LabelUtil';\n\nimport { is } from '../util/ModelUtil';\n\nimport {\n createLine\n} from 'diagram-js/lib/util/RenderUtil';\n\nimport {\n isTypedEvent,\n isThrowEvent,\n isCollection,\n getDi,\n getSemantic,\n getCirclePath,\n getRoundRectPath,\n getDiamondPath,\n getRectPath,\n getFillColor,\n getStrokeColor,\n getLabelColor\n} from './BpmnRenderUtil';\n\nimport {\n query as domQuery\n} from 'min-dom';\n\nimport {\n append as svgAppend,\n attr as svgAttr,\n create as svgCreate,\n classes as svgClasses\n} from 'tiny-svg';\n\nimport {\n rotate,\n transform,\n translate\n} from 'diagram-js/lib/util/SvgTransformUtil';\n\nimport Ids from 'ids';\n\nimport { black } from './BpmnRenderUtil';\n\nvar RENDERER_IDS = new Ids();\n\nvar TASK_BORDER_RADIUS = 10;\nvar INNER_OUTER_DIST = 3;\n\nvar DEFAULT_FILL_OPACITY = .95,\n HIGH_FILL_OPACITY = .35;\n\nvar ELEMENT_LABEL_DISTANCE = 10;\n\nexport default function BpmnRenderer(\n config, eventBus, styles, pathMap,\n canvas, textRenderer, priority) {\n\n BaseRenderer.call(this, eventBus, priority);\n\n var defaultFillColor = config && config.defaultFillColor,\n defaultStrokeColor = config && config.defaultStrokeColor,\n defaultLabelColor = config && config.defaultLabelColor;\n\n var rendererId = RENDERER_IDS.next();\n\n var markers = {};\n\n function shapeStyle(attrs) {\n return styles.computeStyle(attrs, {\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n stroke: black,\n strokeWidth: 2,\n fill: 'white'\n });\n }\n\n function lineStyle(attrs) {\n return styles.computeStyle(attrs, [ 'no-fill' ], {\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n stroke: black,\n strokeWidth: 2\n });\n }\n\n function addMarker(id, options) {\n var {\n ref = { x: 0, y: 0 },\n scale = 1,\n element\n } = options;\n\n var marker = svgCreate('marker', {\n id: id,\n viewBox: '0 0 20 20',\n refX: ref.x,\n refY: ref.y,\n markerWidth: 20 * scale,\n markerHeight: 20 * scale,\n orient: 'auto'\n });\n\n svgAppend(marker, element);\n\n var defs = domQuery('defs', canvas._svg);\n\n if (!defs) {\n defs = svgCreate('defs');\n\n svgAppend(canvas._svg, defs);\n }\n\n svgAppend(defs, marker);\n\n markers[id] = marker;\n }\n\n function colorEscape(str) {\n\n // only allow characters and numbers\n return str.replace(/[^0-9a-zA-z]+/g, '_');\n }\n\n function marker(type, fill, stroke) {\n var id = type + '-' + colorEscape(fill) + '-' + colorEscape(stroke) + '-' + rendererId;\n\n if (!markers[id]) {\n createMarker(id, type, fill, stroke);\n }\n\n return 'url(#' + id + ')';\n }\n\n function createMarker(id, type, fill, stroke) {\n\n if (type === 'sequenceflow-end') {\n var sequenceflowEnd = svgCreate('path', {\n d: 'M 1 5 L 11 10 L 1 15 Z',\n ...shapeStyle({\n fill: stroke,\n stroke: stroke,\n strokeWidth: 1\n })\n });\n\n addMarker(id, {\n element: sequenceflowEnd,\n ref: { x: 11, y: 10 },\n scale: 0.5\n });\n }\n\n if (type === 'messageflow-start') {\n var messageflowStart = svgCreate('circle', {\n cx: 6,\n cy: 6,\n r: 3.5,\n ...shapeStyle({\n fill: fill,\n stroke: stroke,\n strokeWidth: 1,\n\n // fix for safari / chrome / firefox bug not correctly\n // resetting stroke dash array\n strokeDasharray: [ 10000, 1 ]\n })\n });\n\n addMarker(id, {\n element: messageflowStart,\n ref: { x: 6, y: 6 }\n });\n }\n\n if (type === 'messageflow-end') {\n var messageflowEnd = svgCreate('path', {\n d: 'm 1 5 l 0 -3 l 7 3 l -7 3 z',\n ...shapeStyle({\n fill: fill,\n stroke: stroke,\n strokeWidth: 1,\n\n // fix for safari / chrome / firefox bug not correctly\n // resetting stroke dash array\n strokeDasharray: [ 10000, 1 ]\n })\n });\n\n addMarker(id, {\n element: messageflowEnd,\n ref: { x: 8.5, y: 5 }\n });\n }\n\n if (type === 'association-start') {\n var associationStart = svgCreate('path', {\n d: 'M 11 5 L 1 10 L 11 15',\n ...lineStyle({\n fill: 'none',\n stroke: stroke,\n strokeWidth: 1.5,\n\n // fix for safari / chrome / firefox bug not correctly\n // resetting stroke dash array\n strokeDasharray: [ 10000, 1 ]\n })\n });\n\n addMarker(id, {\n element: associationStart,\n ref: { x: 1, y: 10 },\n scale: 0.5\n });\n }\n\n if (type === 'association-end') {\n var associationEnd = svgCreate('path', {\n d: 'M 1 5 L 11 10 L 1 15',\n ...lineStyle({\n fill: 'none',\n stroke: stroke,\n strokeWidth: 1.5,\n\n // fix for safari / chrome / firefox bug not correctly\n // resetting stroke dash array\n strokeDasharray: [ 10000, 1 ]\n })\n });\n\n addMarker(id, {\n element: associationEnd,\n ref: { x: 11, y: 10 },\n scale: 0.5\n });\n }\n\n if (type === 'conditional-flow-marker') {\n var conditionalFlowMarker = svgCreate('path', {\n d: 'M 0 10 L 8 6 L 16 10 L 8 14 Z',\n ...shapeStyle({\n fill: fill,\n stroke: stroke\n })\n });\n\n addMarker(id, {\n element: conditionalFlowMarker,\n ref: { x: -1, y: 10 },\n scale: 0.5\n });\n }\n\n if (type === 'conditional-default-flow-marker') {\n var defaultFlowMarker = svgCreate('path', {\n d: 'M 6 4 L 10 16',\n ...shapeStyle({\n stroke: stroke\n })\n });\n\n addMarker(id, {\n element: defaultFlowMarker,\n ref: { x: 0, y: 10 },\n scale: 0.5\n });\n }\n }\n\n function drawCircle(parentGfx, width, height, offset, attrs) {\n\n if (isObject(offset)) {\n attrs = offset;\n offset = 0;\n }\n\n offset = offset || 0;\n\n attrs = shapeStyle(attrs);\n\n if (attrs.fill === 'none') {\n delete attrs.fillOpacity;\n }\n\n var cx = width / 2,\n cy = height / 2;\n\n var circle = svgCreate('circle', {\n cx: cx,\n cy: cy,\n r: Math.round((width + height) / 4 - offset),\n ...attrs\n });\n\n svgAppend(parentGfx, circle);\n\n return circle;\n }\n\n function drawRect(parentGfx, width, height, r, offset, attrs) {\n\n if (isObject(offset)) {\n attrs = offset;\n offset = 0;\n }\n\n offset = offset || 0;\n\n attrs = shapeStyle(attrs);\n\n var rect = svgCreate('rect', {\n x: offset,\n y: offset,\n width: width - offset * 2,\n height: height - offset * 2,\n rx: r,\n ry: r,\n ...attrs\n });\n\n svgAppend(parentGfx, rect);\n\n return rect;\n }\n\n function drawDiamond(parentGfx, width, height, attrs) {\n\n var x_2 = width / 2;\n var y_2 = height / 2;\n\n var points = [\n { x: x_2, y: 0 },\n { x: width, y: y_2 },\n { x: x_2, y: height },\n { x: 0, y: y_2 }\n ];\n\n var pointsString = points.map(function(point) {\n return point.x + ',' + point.y;\n }).join(' ');\n\n attrs = shapeStyle(attrs);\n\n var polygon = svgCreate('polygon', {\n ...attrs,\n points: pointsString\n });\n\n svgAppend(parentGfx, polygon);\n\n return polygon;\n }\n\n /**\n * @param {SVGElement} parentGfx\n * @param {Point[]} waypoints\n * @param {any} attrs\n * @param {number} [radius]\n *\n * @return {SVGElement}\n */\n function drawLine(parentGfx, waypoints, attrs, radius) {\n attrs = lineStyle(attrs);\n\n var line = createLine(waypoints, attrs, radius);\n\n svgAppend(parentGfx, line);\n\n return line;\n }\n\n /**\n * @param {SVGElement} parentGfx\n * @param {Point[]} waypoints\n * @param {any} attrs\n *\n * @return {SVGElement}\n */\n function drawConnectionSegments(parentGfx, waypoints, attrs) {\n return drawLine(parentGfx, waypoints, attrs, 5);\n }\n\n function drawPath(parentGfx, d, attrs) {\n\n attrs = lineStyle(attrs);\n\n var path = svgCreate('path', {\n ...attrs,\n d\n });\n\n svgAppend(parentGfx, path);\n\n return path;\n }\n\n function drawMarker(type, parentGfx, path, attrs) {\n return drawPath(parentGfx, path, assign({ 'data-marker': type }, attrs));\n }\n\n function renderer(type) {\n return handlers[type];\n }\n\n function as(type) {\n return function(parentGfx, element) {\n return renderer(type)(parentGfx, element);\n };\n }\n\n function renderEventContent(element, parentGfx) {\n\n var event = getSemantic(element);\n var isThrowing = isThrowEvent(event);\n\n if (event.eventDefinitions && event.eventDefinitions.length > 1) {\n if (event.parallelMultiple) {\n return renderer('bpmn:ParallelMultipleEventDefinition')(parentGfx, element, isThrowing);\n }\n else {\n return renderer('bpmn:MultipleEventDefinition')(parentGfx, element, isThrowing);\n }\n }\n\n if (isTypedEvent(event, 'bpmn:MessageEventDefinition')) {\n return renderer('bpmn:MessageEventDefinition')(parentGfx, element, isThrowing);\n }\n\n if (isTypedEvent(event, 'bpmn:TimerEventDefinition')) {\n return renderer('bpmn:TimerEventDefinition')(parentGfx, element, isThrowing);\n }\n\n if (isTypedEvent(event, 'bpmn:ConditionalEventDefinition')) {\n return renderer('bpmn:ConditionalEventDefinition')(parentGfx, element);\n }\n\n if (isTypedEvent(event, 'bpmn:SignalEventDefinition')) {\n return renderer('bpmn:SignalEventDefinition')(parentGfx, element, isThrowing);\n }\n\n if (isTypedEvent(event, 'bpmn:EscalationEventDefinition')) {\n return renderer('bpmn:EscalationEventDefinition')(parentGfx, element, isThrowing);\n }\n\n if (isTypedEvent(event, 'bpmn:LinkEventDefinition')) {\n return renderer('bpmn:LinkEventDefinition')(parentGfx, element, isThrowing);\n }\n\n if (isTypedEvent(event, 'bpmn:ErrorEventDefinition')) {\n return renderer('bpmn:ErrorEventDefinition')(parentGfx, element, isThrowing);\n }\n\n if (isTypedEvent(event, 'bpmn:CancelEventDefinition')) {\n return renderer('bpmn:CancelEventDefinition')(parentGfx, element, isThrowing);\n }\n\n if (isTypedEvent(event, 'bpmn:CompensateEventDefinition')) {\n return renderer('bpmn:CompensateEventDefinition')(parentGfx, element, isThrowing);\n }\n\n if (isTypedEvent(event, 'bpmn:TerminateEventDefinition')) {\n return renderer('bpmn:TerminateEventDefinition')(parentGfx, element, isThrowing);\n }\n\n return null;\n }\n\n function renderLabel(parentGfx, label, options) {\n\n options = assign({\n size: {\n width: 100\n }\n }, options);\n\n var text = textRenderer.createText(label || '', options);\n\n svgClasses(text).add('djs-label');\n\n svgAppend(parentGfx, text);\n\n return text;\n }\n\n function renderEmbeddedLabel(parentGfx, element, align) {\n var semantic = getSemantic(element);\n\n return renderLabel(parentGfx, semantic.name, {\n box: element,\n align: align,\n padding: 7,\n style: {\n fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor)\n }\n });\n }\n\n function renderExternalLabel(parentGfx, element) {\n\n var box = {\n width: 90,\n height: 30,\n x: element.width / 2 + element.x,\n y: element.height / 2 + element.y\n };\n\n return renderLabel(parentGfx, getLabel(element), {\n box: box,\n fitBox: true,\n style: assign(\n {},\n textRenderer.getExternalStyle(),\n {\n fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor)\n }\n )\n });\n }\n\n function renderLaneLabel(parentGfx, text, element) {\n var textBox = renderLabel(parentGfx, text, {\n box: {\n height: 30,\n width: element.height\n },\n align: 'center-middle',\n style: {\n fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor)\n }\n });\n\n var top = -1 * element.height;\n\n transform(textBox, 0, -top, 270);\n }\n\n var handlers = this.handlers = {\n 'bpmn:Event': function(parentGfx, element, attrs) {\n\n if (!('fillOpacity' in attrs)) {\n attrs.fillOpacity = DEFAULT_FILL_OPACITY;\n }\n\n return drawCircle(parentGfx, element.width, element.height, attrs);\n },\n 'bpmn:StartEvent': function(parentGfx, element) {\n var attrs = {\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n };\n\n var semantic = getSemantic(element);\n\n if (!semantic.isInterrupting) {\n attrs = {\n strokeDasharray: '6',\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n };\n }\n\n var circle = renderer('bpmn:Event')(parentGfx, element, attrs);\n\n renderEventContent(element, parentGfx);\n\n return circle;\n },\n 'bpmn:MessageEventDefinition': function(parentGfx, element, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_MESSAGE', {\n xScaleFactor: 0.9,\n yScaleFactor: 0.9,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.235,\n my: 0.315\n }\n });\n\n var fill = isThrowing ? getStrokeColor(element, defaultStrokeColor) : getFillColor(element, defaultFillColor);\n var stroke = isThrowing ? getFillColor(element, defaultFillColor) : getStrokeColor(element, defaultStrokeColor);\n\n var messagePath = drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: fill,\n stroke: stroke\n });\n\n return messagePath;\n },\n 'bpmn:TimerEventDefinition': function(parentGfx, element) {\n var circle = drawCircle(parentGfx, element.width, element.height, 0.2 * element.height, {\n strokeWidth: 2,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n var pathData = pathMap.getScaledPath('EVENT_TIMER_WH', {\n xScaleFactor: 0.75,\n yScaleFactor: 0.75,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.5,\n my: 0.5\n }\n });\n\n drawPath(parentGfx, pathData, {\n strokeWidth: 2,\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n for (var i = 0;i < 12; i++) {\n\n var linePathData = pathMap.getScaledPath('EVENT_TIMER_LINE', {\n xScaleFactor: 0.75,\n yScaleFactor: 0.75,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.5,\n my: 0.5\n }\n });\n\n var width = element.width / 2;\n var height = element.height / 2;\n\n drawPath(parentGfx, linePathData, {\n strokeWidth: 1,\n transform: 'rotate(' + (i * 30) + ',' + height + ',' + width + ')',\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n }\n\n return circle;\n },\n 'bpmn:EscalationEventDefinition': function(parentGfx, event, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_ESCALATION', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.5,\n my: 0.2\n }\n });\n\n var fill = isThrowing ? getStrokeColor(event, defaultStrokeColor) : 'none';\n\n return drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: fill,\n stroke: getStrokeColor(event, defaultStrokeColor)\n });\n },\n 'bpmn:ConditionalEventDefinition': function(parentGfx, event) {\n var pathData = pathMap.getScaledPath('EVENT_CONDITIONAL', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.5,\n my: 0.222\n }\n });\n\n return drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n stroke: getStrokeColor(event, defaultStrokeColor)\n });\n },\n 'bpmn:LinkEventDefinition': function(parentGfx, event, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_LINK', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.57,\n my: 0.263\n }\n });\n\n var fill = isThrowing ? getStrokeColor(event, defaultStrokeColor) : 'none';\n\n return drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: fill,\n stroke: getStrokeColor(event, defaultStrokeColor)\n });\n },\n 'bpmn:ErrorEventDefinition': function(parentGfx, event, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_ERROR', {\n xScaleFactor: 1.1,\n yScaleFactor: 1.1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.2,\n my: 0.722\n }\n });\n\n var fill = isThrowing ? getStrokeColor(event, defaultStrokeColor) : 'none';\n\n return drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: fill,\n stroke: getStrokeColor(event, defaultStrokeColor)\n });\n },\n 'bpmn:CancelEventDefinition': function(parentGfx, event, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_CANCEL_45', {\n xScaleFactor: 1.0,\n yScaleFactor: 1.0,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.638,\n my: -0.055\n }\n });\n\n var fill = isThrowing ? getStrokeColor(event, defaultStrokeColor) : 'none';\n\n var path = drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: fill,\n stroke: getStrokeColor(event, defaultStrokeColor)\n });\n\n rotate(path, 45);\n\n return path;\n },\n 'bpmn:CompensateEventDefinition': function(parentGfx, event, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_COMPENSATION', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.22,\n my: 0.5\n }\n });\n\n var fill = isThrowing ? getStrokeColor(event, defaultStrokeColor) : 'none';\n\n return drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: fill,\n stroke: getStrokeColor(event, defaultStrokeColor)\n });\n },\n 'bpmn:SignalEventDefinition': function(parentGfx, event, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_SIGNAL', {\n xScaleFactor: 0.9,\n yScaleFactor: 0.9,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.5,\n my: 0.2\n }\n });\n\n var fill = isThrowing ? getStrokeColor(event, defaultStrokeColor) : 'none';\n\n return drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: fill,\n stroke: getStrokeColor(event, defaultStrokeColor)\n });\n },\n 'bpmn:MultipleEventDefinition': function(parentGfx, event, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_MULTIPLE', {\n xScaleFactor: 1.1,\n yScaleFactor: 1.1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.222,\n my: 0.36\n }\n });\n\n var fill = isThrowing ? getStrokeColor(event, defaultStrokeColor) : 'none';\n\n return drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: fill\n });\n },\n 'bpmn:ParallelMultipleEventDefinition': function(parentGfx, event) {\n var pathData = pathMap.getScaledPath('EVENT_PARALLEL_MULTIPLE', {\n xScaleFactor: 1.2,\n yScaleFactor: 1.2,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.458,\n my: 0.194\n }\n });\n\n return drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: getStrokeColor(event, defaultStrokeColor),\n stroke: getStrokeColor(event, defaultStrokeColor)\n });\n },\n 'bpmn:EndEvent': function(parentGfx, element) {\n var circle = renderer('bpmn:Event')(parentGfx, element, {\n strokeWidth: 4,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n renderEventContent(element, parentGfx, true);\n\n return circle;\n },\n 'bpmn:TerminateEventDefinition': function(parentGfx, element) {\n var circle = drawCircle(parentGfx, element.width, element.height, 8, {\n strokeWidth: 4,\n fill: getStrokeColor(element, defaultStrokeColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n return circle;\n },\n 'bpmn:IntermediateEvent': function(parentGfx, element) {\n var outer = renderer('bpmn:Event')(parentGfx, element, {\n strokeWidth: 1.5,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n /* inner */\n drawCircle(parentGfx, element.width, element.height, INNER_OUTER_DIST, {\n strokeWidth: 1.5,\n fill: getFillColor(element, 'none'),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n renderEventContent(element, parentGfx);\n\n return outer;\n },\n 'bpmn:IntermediateCatchEvent': as('bpmn:IntermediateEvent'),\n 'bpmn:IntermediateThrowEvent': as('bpmn:IntermediateEvent'),\n\n 'bpmn:Activity': function(parentGfx, element, attrs) {\n\n attrs = attrs || {};\n\n if (!('fillOpacity' in attrs)) {\n attrs.fillOpacity = DEFAULT_FILL_OPACITY;\n }\n\n return drawRect(parentGfx, element.width, element.height, TASK_BORDER_RADIUS, attrs);\n },\n\n 'bpmn:Task': function(parentGfx, element) {\n var attrs = {\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n };\n\n var rect = renderer('bpmn:Activity')(parentGfx, element, attrs);\n\n renderEmbeddedLabel(parentGfx, element, 'center-middle');\n attachTaskMarkers(parentGfx, element);\n\n return rect;\n },\n 'bpmn:ServiceTask': function(parentGfx, element) {\n var task = renderer('bpmn:Task')(parentGfx, element);\n\n var pathDataBG = pathMap.getScaledPath('TASK_TYPE_SERVICE', {\n abspos: {\n x: 12,\n y: 18\n }\n });\n\n /* service bg */ drawPath(parentGfx, pathDataBG, {\n strokeWidth: 1,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n var fillPathData = pathMap.getScaledPath('TASK_TYPE_SERVICE_FILL', {\n abspos: {\n x: 17.2,\n y: 18\n }\n });\n\n /* service fill */ drawPath(parentGfx, fillPathData, {\n strokeWidth: 0,\n fill: getFillColor(element, defaultFillColor)\n });\n\n var pathData = pathMap.getScaledPath('TASK_TYPE_SERVICE', {\n abspos: {\n x: 17,\n y: 22\n }\n });\n\n /* service */ drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n return task;\n },\n 'bpmn:UserTask': function(parentGfx, element) {\n var task = renderer('bpmn:Task')(parentGfx, element);\n\n var x = 15;\n var y = 12;\n\n var pathData = pathMap.getScaledPath('TASK_TYPE_USER_1', {\n abspos: {\n x: x,\n y: y\n }\n });\n\n /* user path */ drawPath(parentGfx, pathData, {\n strokeWidth: 0.5,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n var pathData2 = pathMap.getScaledPath('TASK_TYPE_USER_2', {\n abspos: {\n x: x,\n y: y\n }\n });\n\n /* user2 path */ drawPath(parentGfx, pathData2, {\n strokeWidth: 0.5,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n var pathData3 = pathMap.getScaledPath('TASK_TYPE_USER_3', {\n abspos: {\n x: x,\n y: y\n }\n });\n\n /* user3 path */ drawPath(parentGfx, pathData3, {\n strokeWidth: 0.5,\n fill: getStrokeColor(element, defaultStrokeColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n return task;\n },\n 'bpmn:ManualTask': function(parentGfx, element) {\n var task = renderer('bpmn:Task')(parentGfx, element);\n\n var pathData = pathMap.getScaledPath('TASK_TYPE_MANUAL', {\n abspos: {\n x: 17,\n y: 15\n }\n });\n\n /* manual path */ drawPath(parentGfx, pathData, {\n strokeWidth: 0.5, // 0.25,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n return task;\n },\n 'bpmn:SendTask': function(parentGfx, element) {\n var task = renderer('bpmn:Task')(parentGfx, element);\n\n var pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: 21,\n containerHeight: 14,\n position: {\n mx: 0.285,\n my: 0.357\n }\n });\n\n /* send path */ drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: getStrokeColor(element, defaultStrokeColor),\n stroke: getFillColor(element, defaultFillColor)\n });\n\n return task;\n },\n 'bpmn:ReceiveTask' : function(parentGfx, element) {\n var semantic = getSemantic(element);\n\n var task = renderer('bpmn:Task')(parentGfx, element);\n var pathData;\n\n if (semantic.instantiate) {\n drawCircle(parentGfx, 28, 28, 20 * 0.22, { strokeWidth: 1 });\n\n pathData = pathMap.getScaledPath('TASK_TYPE_INSTANTIATING_SEND', {\n abspos: {\n x: 7.77,\n y: 9.52\n }\n });\n } else {\n\n pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {\n xScaleFactor: 0.9,\n yScaleFactor: 0.9,\n containerWidth: 21,\n containerHeight: 14,\n position: {\n mx: 0.3,\n my: 0.4\n }\n });\n }\n\n /* receive path */ drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n return task;\n },\n 'bpmn:ScriptTask': function(parentGfx, element) {\n var task = renderer('bpmn:Task')(parentGfx, element);\n\n var pathData = pathMap.getScaledPath('TASK_TYPE_SCRIPT', {\n abspos: {\n x: 15,\n y: 20\n }\n });\n\n /* script path */ drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n return task;\n },\n 'bpmn:BusinessRuleTask': function(parentGfx, element) {\n var task = renderer('bpmn:Task')(parentGfx, element);\n\n var headerPathData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_HEADER', {\n abspos: {\n x: 8,\n y: 8\n }\n });\n\n var businessHeaderPath = drawPath(parentGfx, headerPathData);\n svgAttr(businessHeaderPath, {\n strokeWidth: 1,\n fill: getFillColor(element, '#aaaaaa'),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n var headerData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_MAIN', {\n abspos: {\n x: 8,\n y: 8\n }\n });\n\n var businessPath = drawPath(parentGfx, headerData);\n svgAttr(businessPath, {\n strokeWidth: 1,\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n return task;\n },\n 'bpmn:SubProcess': function(parentGfx, element, attrs) {\n attrs = {\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor),\n ...attrs\n };\n\n var rect = renderer('bpmn:Activity')(parentGfx, element, attrs);\n\n var expanded = isExpanded(element);\n\n if (isEventSubProcess(element)) {\n svgAttr(rect, {\n strokeDasharray: '0, 5.5',\n strokeWidth: 2.5\n });\n }\n\n renderEmbeddedLabel(parentGfx, element, expanded ? 'center-top' : 'center-middle');\n\n if (expanded) {\n attachTaskMarkers(parentGfx, element);\n } else {\n attachTaskMarkers(parentGfx, element, [ 'SubProcessMarker' ]);\n }\n\n return rect;\n },\n 'bpmn:AdHocSubProcess': function(parentGfx, element) {\n return renderer('bpmn:SubProcess')(parentGfx, element);\n },\n 'bpmn:Transaction': function(parentGfx, element) {\n var outer = renderer('bpmn:SubProcess')(parentGfx, element, { strokeWidth: 1.5 });\n\n var innerAttrs = styles.style([ 'no-fill', 'no-events' ], {\n stroke: getStrokeColor(element, defaultStrokeColor),\n strokeWidth: 1.5\n });\n\n /* inner path */ drawRect(parentGfx, element.width, element.height, TASK_BORDER_RADIUS - 3, INNER_OUTER_DIST, innerAttrs);\n\n return outer;\n },\n 'bpmn:CallActivity': function(parentGfx, element) {\n return renderer('bpmn:SubProcess')(parentGfx, element, {\n strokeWidth: 5\n });\n },\n 'bpmn:Participant': function(parentGfx, element) {\n\n var strokeWidth = 1.5;\n\n var attrs = {\n fillOpacity: DEFAULT_FILL_OPACITY,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor),\n strokeWidth\n };\n\n var lane = renderer('bpmn:Lane')(parentGfx, element, attrs);\n\n var expandedPool = isExpanded(element);\n\n if (expandedPool) {\n drawLine(parentGfx, [\n { x: 30, y: 0 },\n { x: 30, y: element.height }\n ], {\n stroke: getStrokeColor(element, defaultStrokeColor),\n strokeWidth\n });\n var text = getSemantic(element).name;\n renderLaneLabel(parentGfx, text, element);\n } else {\n\n // collapsed pool draw text inline\n var text2 = getSemantic(element).name;\n renderLabel(parentGfx, text2, {\n box: element, align: 'center-middle',\n style: {\n fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor)\n }\n });\n }\n\n var participantMultiplicity = !!(getSemantic(element).participantMultiplicity);\n\n if (participantMultiplicity) {\n renderer('ParticipantMultiplicityMarker')(parentGfx, element);\n }\n\n return lane;\n },\n 'bpmn:Lane': function(parentGfx, element, attrs) {\n var rect = drawRect(parentGfx, element.width, element.height, 0, {\n fill: getFillColor(element, defaultFillColor),\n fillOpacity: HIGH_FILL_OPACITY,\n stroke: getStrokeColor(element, defaultStrokeColor),\n strokeWidth: 1.5,\n ...attrs\n });\n\n var semantic = getSemantic(element);\n\n if (semantic.$type === 'bpmn:Lane') {\n var text = semantic.name;\n renderLaneLabel(parentGfx, text, element);\n }\n\n return rect;\n },\n 'bpmn:InclusiveGateway': function(parentGfx, element) {\n var diamond = renderer('bpmn:Gateway')(parentGfx, element);\n\n /* circle path */\n drawCircle(parentGfx, element.width, element.height, element.height * 0.24, {\n strokeWidth: 2.5,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n return diamond;\n },\n 'bpmn:ExclusiveGateway': function(parentGfx, element) {\n var diamond = renderer('bpmn:Gateway')(parentGfx, element);\n\n var pathData = pathMap.getScaledPath('GATEWAY_EXCLUSIVE', {\n xScaleFactor: 0.4,\n yScaleFactor: 0.4,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.32,\n my: 0.3\n }\n });\n\n if ((getDi(element).isMarkerVisible)) {\n drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: getStrokeColor(element, defaultStrokeColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n }\n\n return diamond;\n },\n 'bpmn:ComplexGateway': function(parentGfx, element) {\n var diamond = renderer('bpmn:Gateway')(parentGfx, element);\n\n var pathData = pathMap.getScaledPath('GATEWAY_COMPLEX', {\n xScaleFactor: 0.5,\n yScaleFactor:0.5,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.46,\n my: 0.26\n }\n });\n\n /* complex path */ drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: getStrokeColor(element, defaultStrokeColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n return diamond;\n },\n 'bpmn:ParallelGateway': function(parentGfx, element) {\n var diamond = renderer('bpmn:Gateway')(parentGfx, element);\n\n var pathData = pathMap.getScaledPath('GATEWAY_PARALLEL', {\n xScaleFactor: 0.6,\n yScaleFactor:0.6,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.46,\n my: 0.2\n }\n });\n\n /* parallel path */ drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: getStrokeColor(element, defaultStrokeColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n return diamond;\n },\n 'bpmn:EventBasedGateway': function(parentGfx, element) {\n\n var semantic = getSemantic(element);\n\n var diamond = renderer('bpmn:Gateway')(parentGfx, element);\n\n /* outer circle path */ drawCircle(parentGfx, element.width, element.height, element.height * 0.20, {\n strokeWidth: 1,\n fill: 'none',\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n var type = semantic.eventGatewayType;\n var instantiate = !!semantic.instantiate;\n\n function drawEvent() {\n\n var pathData = pathMap.getScaledPath('GATEWAY_EVENT_BASED', {\n xScaleFactor: 0.18,\n yScaleFactor: 0.18,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.36,\n my: 0.44\n }\n });\n\n /* event path */ drawPath(parentGfx, pathData, {\n strokeWidth: 2,\n fill: getFillColor(element, 'none'),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n }\n\n if (type === 'Parallel') {\n\n var pathData = pathMap.getScaledPath('GATEWAY_PARALLEL', {\n xScaleFactor: 0.4,\n yScaleFactor:0.4,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.474,\n my: 0.296\n }\n });\n\n drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill: 'none'\n });\n } else if (type === 'Exclusive') {\n\n if (!instantiate) {\n drawCircle(parentGfx, element.width, element.height, element.height * 0.26, {\n strokeWidth: 1,\n fill: 'none',\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n }\n\n drawEvent();\n }\n\n\n return diamond;\n },\n 'bpmn:Gateway': function(parentGfx, element) {\n return drawDiamond(parentGfx, element.width, element.height, {\n fill: getFillColor(element, defaultFillColor),\n fillOpacity: DEFAULT_FILL_OPACITY,\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n },\n 'bpmn:SequenceFlow': function(parentGfx, element) {\n var fill = getFillColor(element, defaultFillColor),\n stroke = getStrokeColor(element, defaultStrokeColor);\n\n var path = drawConnectionSegments(parentGfx, element.waypoints, {\n markerEnd: marker('sequenceflow-end', fill, stroke),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n var sequenceFlow = getSemantic(element);\n\n var source;\n\n if (element.source) {\n source = element.source.businessObject;\n\n // conditional flow marker\n if (sequenceFlow.conditionExpression && source.$instanceOf('bpmn:Activity')) {\n svgAttr(path, {\n markerStart: marker('conditional-flow-marker', fill, stroke)\n });\n }\n\n // default marker\n if (source.default && (source.$instanceOf('bpmn:Gateway') || source.$instanceOf('bpmn:Activity')) &&\n source.default === sequenceFlow) {\n svgAttr(path, {\n markerStart: marker('conditional-default-flow-marker', fill, stroke)\n });\n }\n }\n\n return path;\n },\n 'bpmn:Association': function(parentGfx, element, attrs) {\n\n var semantic = getSemantic(element);\n\n var fill = getFillColor(element, defaultFillColor),\n stroke = getStrokeColor(element, defaultStrokeColor);\n\n attrs = {\n strokeDasharray: '0, 5',\n stroke: getStrokeColor(element, defaultStrokeColor),\n ...attrs\n };\n\n if (semantic.associationDirection === 'One' ||\n semantic.associationDirection === 'Both') {\n attrs.markerEnd = marker('association-end', fill, stroke);\n }\n\n if (semantic.associationDirection === 'Both') {\n attrs.markerStart = marker('association-start', fill, stroke);\n }\n\n return drawConnectionSegments(parentGfx, element.waypoints, attrs);\n },\n 'bpmn:DataInputAssociation': function(parentGfx, element) {\n var fill = getFillColor(element, defaultFillColor),\n stroke = getStrokeColor(element, defaultStrokeColor);\n\n return renderer('bpmn:Association')(parentGfx, element, {\n markerEnd: marker('association-end', fill, stroke)\n });\n },\n 'bpmn:DataOutputAssociation': function(parentGfx, element) {\n var fill = getFillColor(element, defaultFillColor),\n stroke = getStrokeColor(element, defaultStrokeColor);\n\n return renderer('bpmn:Association')(parentGfx, element, {\n markerEnd: marker('association-end', fill, stroke)\n });\n },\n 'bpmn:MessageFlow': function(parentGfx, element) {\n\n var semantic = getSemantic(element),\n di = getDi(element);\n\n var fill = getFillColor(element, defaultFillColor),\n stroke = getStrokeColor(element, defaultStrokeColor);\n\n var path = drawConnectionSegments(parentGfx, element.waypoints, {\n markerEnd: marker('messageflow-end', fill, stroke),\n markerStart: marker('messageflow-start', fill, stroke),\n strokeDasharray: '10, 11',\n strokeWidth: 1.5,\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n if (semantic.messageRef) {\n var midPoint = path.getPointAtLength(path.getTotalLength() / 2);\n\n var markerPathData = pathMap.getScaledPath('MESSAGE_FLOW_MARKER', {\n abspos: {\n x: midPoint.x,\n y: midPoint.y\n }\n });\n\n var messageAttrs = { strokeWidth: 1 };\n\n if (di.messageVisibleKind === 'initiating') {\n messageAttrs.fill = 'white';\n messageAttrs.stroke = black;\n } else {\n messageAttrs.fill = '#888';\n messageAttrs.stroke = 'white';\n }\n\n var message = drawPath(parentGfx, markerPathData, messageAttrs);\n\n var labelText = semantic.messageRef.name;\n var label = renderLabel(parentGfx, labelText, {\n align: 'center-top',\n fitBox: true,\n style: {\n fill: getStrokeColor(element, defaultLabelColor, defaultStrokeColor)\n }\n });\n\n var messageBounds = message.getBBox(),\n labelBounds = label.getBBox();\n\n var translateX = midPoint.x - labelBounds.width / 2,\n translateY = midPoint.y + messageBounds.height / 2 + ELEMENT_LABEL_DISTANCE;\n\n transform(label, translateX, translateY, 0);\n\n }\n\n return path;\n },\n 'bpmn:DataObject': function(parentGfx, element) {\n var pathData = pathMap.getScaledPath('DATA_OBJECT_PATH', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.474,\n my: 0.296\n }\n });\n\n var elementObject = drawPath(parentGfx, pathData, {\n fill: getFillColor(element, defaultFillColor),\n fillOpacity: DEFAULT_FILL_OPACITY,\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n var semantic = getSemantic(element);\n\n if (isCollection(semantic)) {\n renderDataItemCollection(parentGfx, element);\n }\n\n return elementObject;\n },\n 'bpmn:DataObjectReference': as('bpmn:DataObject'),\n 'bpmn:DataInput': function(parentGfx, element) {\n\n var arrowPathData = pathMap.getRawPath('DATA_ARROW');\n\n // page\n var elementObject = renderer('bpmn:DataObject')(parentGfx, element);\n\n /* input arrow path */ drawPath(parentGfx, arrowPathData, { strokeWidth: 1 });\n\n return elementObject;\n },\n 'bpmn:DataOutput': function(parentGfx, element) {\n var arrowPathData = pathMap.getRawPath('DATA_ARROW');\n\n // page\n var elementObject = renderer('bpmn:DataObject')(parentGfx, element);\n\n /* output arrow path */ drawPath(parentGfx, arrowPathData, {\n strokeWidth: 1,\n fill: black\n });\n\n return elementObject;\n },\n 'bpmn:DataStoreReference': function(parentGfx, element) {\n var DATA_STORE_PATH = pathMap.getScaledPath('DATA_STORE', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0,\n my: 0.133\n }\n });\n\n var elementStore = drawPath(parentGfx, DATA_STORE_PATH, {\n strokeWidth: 2,\n fill: getFillColor(element, defaultFillColor),\n fillOpacity: DEFAULT_FILL_OPACITY,\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n return elementStore;\n },\n 'bpmn:BoundaryEvent': function(parentGfx, element) {\n\n var semantic = getSemantic(element),\n cancel = semantic.cancelActivity;\n\n var attrs = {\n strokeWidth: 1.5,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n };\n\n if (!cancel) {\n attrs.strokeDasharray = '6';\n }\n\n // apply fillOpacity\n var outerAttrs = {\n ...attrs,\n fillOpacity: 1\n };\n\n // apply no-fill\n var innerAttrs = {\n ...attrs,\n fill: 'none'\n };\n\n var outer = renderer('bpmn:Event')(parentGfx, element, outerAttrs);\n\n /* inner path */ drawCircle(parentGfx, element.width, element.height, INNER_OUTER_DIST, innerAttrs);\n\n renderEventContent(element, parentGfx);\n\n return outer;\n },\n 'bpmn:Group': function(parentGfx, element) {\n return drawRect(parentGfx, element.width, element.height, TASK_BORDER_RADIUS, {\n stroke: getStrokeColor(element, defaultStrokeColor),\n strokeWidth: 1.5,\n strokeDasharray: '10,6,0,6',\n fill: 'none',\n pointerEvents: 'none'\n });\n },\n 'label': function(parentGfx, element) {\n return renderExternalLabel(parentGfx, element);\n },\n 'bpmn:TextAnnotation': function(parentGfx, element) {\n var textElement = drawRect(parentGfx, element.width, element.height, 0, 0, {\n 'fill': 'none',\n 'stroke': 'none'\n });\n\n var textPathData = pathMap.getScaledPath('TEXT_ANNOTATION', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.0,\n my: 0.0\n }\n });\n\n drawPath(parentGfx, textPathData, {\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n var text = getSemantic(element).text || '';\n renderLabel(parentGfx, text, {\n box: element,\n align: 'left-top',\n padding: 7,\n style: {\n fill: getLabelColor(element, defaultLabelColor, defaultStrokeColor)\n }\n });\n\n return textElement;\n },\n 'ParticipantMultiplicityMarker': function(parentGfx, element) {\n var markerPath = pathMap.getScaledPath('MARKER_PARALLEL', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: ((element.width / 2) / element.width),\n my: (element.height - 15) / element.height\n }\n });\n\n drawMarker('participant-multiplicity', parentGfx, markerPath, {\n strokeWidth: 2,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n },\n 'SubProcessMarker': function(parentGfx, element) {\n var markerRect = drawRect(parentGfx, 14, 14, 0, {\n strokeWidth: 1,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n\n // Process marker is placed in the middle of the box\n // therefore fixed values can be used here\n translate(markerRect, element.width / 2 - 7.5, element.height - 20);\n\n var markerPath = pathMap.getScaledPath('MARKER_SUB_PROCESS', {\n xScaleFactor: 1.5,\n yScaleFactor: 1.5,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: (element.width / 2 - 7.5) / element.width,\n my: (element.height - 20) / element.height\n }\n });\n\n drawMarker('sub-process', parentGfx, markerPath, {\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n },\n 'ParallelMarker': function(parentGfx, element, position) {\n var markerPath = pathMap.getScaledPath('MARKER_PARALLEL', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: ((element.width / 2 + position.parallel) / element.width),\n my: (element.height - 20) / element.height\n }\n });\n\n drawMarker('parallel', parentGfx, markerPath, {\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n },\n 'SequentialMarker': function(parentGfx, element, position) {\n var markerPath = pathMap.getScaledPath('MARKER_SEQUENTIAL', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: ((element.width / 2 + position.seq) / element.width),\n my: (element.height - 19) / element.height\n }\n });\n\n drawMarker('sequential', parentGfx, markerPath, {\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n },\n 'CompensationMarker': function(parentGfx, element, position) {\n var markerMath = pathMap.getScaledPath('MARKER_COMPENSATION', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: ((element.width / 2 + position.compensation) / element.width),\n my: (element.height - 13) / element.height\n }\n });\n\n drawMarker('compensation', parentGfx, markerMath, {\n strokeWidth: 1,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n },\n 'LoopMarker': function(parentGfx, element, position) {\n var markerPath = pathMap.getScaledPath('MARKER_LOOP', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: ((element.width / 2 + position.loop) / element.width),\n my: (element.height - 7) / element.height\n }\n });\n\n drawMarker('loop', parentGfx, markerPath, {\n strokeWidth: 1.5,\n fill: getFillColor(element, defaultFillColor),\n stroke: getStrokeColor(element, defaultStrokeColor),\n strokeMiterlimit: 0.5\n });\n },\n 'AdhocMarker': function(parentGfx, element, position) {\n var markerPath = pathMap.getScaledPath('MARKER_ADHOC', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: ((element.width / 2 + position.adhoc) / element.width),\n my: (element.height - 15) / element.height\n }\n });\n\n drawMarker('adhoc', parentGfx, markerPath, {\n strokeWidth: 1,\n fill: getStrokeColor(element, defaultStrokeColor),\n stroke: getStrokeColor(element, defaultStrokeColor)\n });\n }\n };\n\n function attachTaskMarkers(parentGfx, element, taskMarkers) {\n var obj = getSemantic(element);\n\n var subprocess = taskMarkers && taskMarkers.indexOf('SubProcessMarker') !== -1;\n var position;\n\n if (subprocess) {\n position = {\n seq: -21,\n parallel: -22,\n compensation: -42,\n loop: -18,\n adhoc: 10\n };\n } else {\n position = {\n seq: -3,\n parallel: -6,\n compensation: -27,\n loop: 0,\n adhoc: 10\n };\n }\n\n forEach(taskMarkers, function(marker) {\n renderer(marker)(parentGfx, element, position);\n });\n\n if (obj.isForCompensation) {\n renderer('CompensationMarker')(parentGfx, element, position);\n }\n\n if (obj.$type === 'bpmn:AdHocSubProcess') {\n renderer('AdhocMarker')(parentGfx, element, position);\n }\n\n var loopCharacteristics = obj.loopCharacteristics,\n isSequential = loopCharacteristics && loopCharacteristics.isSequential;\n\n if (loopCharacteristics) {\n\n if (isSequential === undefined) {\n renderer('LoopMarker')(parentGfx, element, position);\n }\n\n if (isSequential === false) {\n renderer('ParallelMarker')(parentGfx, element, position);\n }\n\n if (isSequential === true) {\n renderer('SequentialMarker')(parentGfx, element, position);\n }\n }\n }\n\n function renderDataItemCollection(parentGfx, element) {\n\n var yPosition = (element.height - 18) / element.height;\n\n var pathData = pathMap.getScaledPath('DATA_OBJECT_COLLECTION_PATH', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.33,\n my: yPosition\n }\n });\n\n /* collection path */ drawPath(parentGfx, pathData, {\n strokeWidth: 2\n });\n }\n\n\n // extension API, use at your own risk\n this._drawPath = drawPath;\n\n this._renderer = renderer;\n}\n\n\ninherits(BpmnRenderer, BaseRenderer);\n\nBpmnRenderer.$inject = [\n 'config.bpmnRenderer',\n 'eventBus',\n 'styles',\n 'pathMap',\n 'canvas',\n 'textRenderer'\n];\n\n\nBpmnRenderer.prototype.canRender = function(element) {\n return is(element, 'bpmn:BaseElement');\n};\n\nBpmnRenderer.prototype.drawShape = function(parentGfx, element) {\n var type = element.type;\n var h = this._renderer(type);\n\n /* jshint -W040 */\n return h(parentGfx, element);\n};\n\nBpmnRenderer.prototype.drawConnection = function(parentGfx, element) {\n var type = element.type;\n var h = this._renderer(type);\n\n /* jshint -W040 */\n return h(parentGfx, element);\n};\n\nBpmnRenderer.prototype.getShapePath = function(element) {\n\n if (is(element, 'bpmn:Event')) {\n return getCirclePath(element);\n }\n\n if (is(element, 'bpmn:Activity')) {\n return getRoundRectPath(element, TASK_BORDER_RADIUS);\n }\n\n if (is(element, 'bpmn:Gateway')) {\n return getDiamondPath(element);\n }\n\n return getRectPath(element);\n};\n","import {\n isObject,\n assign,\n forEach,\n reduce\n} from 'min-dash';\n\nimport {\n append as svgAppend,\n attr as svgAttr,\n create as svgCreate,\n remove as svgRemove\n} from 'tiny-svg';\n\nimport {\n assignStyle\n} from 'min-dom';\n\n/**\n * @typedef {import('../util/Types').Dimensions} Dimensions\n */\n\nvar DEFAULT_BOX_PADDING = 0;\n\nvar DEFAULT_LABEL_SIZE = {\n width: 150,\n height: 50\n};\n\n\nfunction parseAlign(align) {\n\n var parts = align.split('-');\n\n return {\n horizontal: parts[0] || 'center',\n vertical: parts[1] || 'top'\n };\n}\n\nfunction parsePadding(padding) {\n\n if (isObject(padding)) {\n return assign({ top: 0, left: 0, right: 0, bottom: 0 }, padding);\n } else {\n return {\n top: padding,\n left: padding,\n right: padding,\n bottom: padding\n };\n }\n}\n\nfunction getTextBBox(text, fakeText) {\n\n fakeText.textContent = text;\n\n var textBBox;\n\n try {\n var bbox,\n emptyLine = text === '';\n\n // add dummy text, when line is empty to\n // determine correct height\n fakeText.textContent = emptyLine ? 'dummy' : text;\n\n textBBox = fakeText.getBBox();\n\n // take text rendering related horizontal\n // padding into account\n bbox = {\n width: textBBox.width + textBBox.x * 2,\n height: textBBox.height\n };\n\n if (emptyLine) {\n\n // correct width\n bbox.width = 0;\n }\n\n return bbox;\n } catch (e) {\n return { width: 0, height: 0 };\n }\n}\n\n\n/**\n * Layout the next line and return the layouted element.\n *\n * Alters the lines passed.\n *\n * @param {string[]} lines\n *\n * @return {Object} the line descriptor, an object { width, height, text }\n */\nfunction layoutNext(lines, maxWidth, fakeText) {\n\n var originalLine = lines.shift(),\n fitLine = originalLine;\n\n var textBBox;\n\n for (;;) {\n textBBox = getTextBBox(fitLine, fakeText);\n\n textBBox.width = fitLine ? textBBox.width : 0;\n\n // try to fit\n if (fitLine === ' ' || fitLine === '' || textBBox.width < Math.round(maxWidth) || fitLine.length < 2) {\n return fit(lines, fitLine, originalLine, textBBox);\n }\n\n fitLine = shortenLine(fitLine, textBBox.width, maxWidth);\n }\n}\n\nfunction fit(lines, fitLine, originalLine, textBBox) {\n if (fitLine.length < originalLine.length) {\n var remainder = originalLine.slice(fitLine.length).trim();\n\n lines.unshift(remainder);\n }\n\n return {\n width: textBBox.width,\n height: textBBox.height,\n text: fitLine\n };\n}\n\nvar SOFT_BREAK = '\\u00AD';\n\n\n/**\n * Shortens a line based on spacing and hyphens.\n * Returns the shortened result on success.\n *\n * @param {string} line\n * @param {number} maxLength the maximum characters of the string\n *\n * @return {string} the shortened string\n */\nfunction semanticShorten(line, maxLength) {\n\n var parts = line.split(/(\\s|-|\\u00AD)/g),\n part,\n shortenedParts = [],\n length = 0;\n\n // try to shorten via break chars\n if (parts.length > 1) {\n\n while ((part = parts.shift())) {\n if (part.length + length < maxLength) {\n shortenedParts.push(part);\n length += part.length;\n } else {\n\n // remove previous part, too if hyphen does not fit anymore\n if (part === '-' || part === SOFT_BREAK) {\n shortenedParts.pop();\n }\n\n break;\n }\n }\n }\n\n var last = shortenedParts[shortenedParts.length - 1];\n\n // translate trailing soft break to actual hyphen\n if (last && last === SOFT_BREAK) {\n shortenedParts[shortenedParts.length - 1] = '-';\n }\n\n return shortenedParts.join('');\n}\n\n\nfunction shortenLine(line, width, maxWidth) {\n var length = Math.max(line.length * (maxWidth / width), 1);\n\n // try to shorten semantically (i.e. based on spaces and hyphens)\n var shortenedLine = semanticShorten(line, length);\n\n if (!shortenedLine) {\n\n // force shorten by cutting the long word\n shortenedLine = line.slice(0, Math.max(Math.round(length - 1), 1));\n }\n\n return shortenedLine;\n}\n\n\nfunction getHelperSvg() {\n var helperSvg = document.getElementById('helper-svg');\n\n if (!helperSvg) {\n helperSvg = svgCreate('svg');\n\n svgAttr(helperSvg, {\n id: 'helper-svg'\n });\n\n assignStyle(helperSvg, {\n visibility: 'hidden',\n position: 'fixed',\n width: 0,\n height: 0\n });\n\n document.body.appendChild(helperSvg);\n }\n\n return helperSvg;\n}\n\n\n/**\n * Creates a new label utility\n *\n * @param {Object} config\n * @param {Dimensions} config.size\n * @param {number} config.padding\n * @param {Object} config.style\n * @param {string} config.align\n */\nexport default function Text(config) {\n\n this._config = assign({}, {\n size: DEFAULT_LABEL_SIZE,\n padding: DEFAULT_BOX_PADDING,\n style: {},\n align: 'center-top'\n }, config || {});\n}\n\n/**\n * Returns the layouted text as an SVG element.\n *\n * @param {string} text\n * @param {Object} options\n *\n * @return {SVGElement}\n */\nText.prototype.createText = function(text, options) {\n return this.layoutText(text, options).element;\n};\n\n/**\n * Returns a labels layouted dimensions.\n *\n * @param {string} text to layout\n * @param {Object} options\n *\n * @return {Dimensions}\n */\nText.prototype.getDimensions = function(text, options) {\n return this.layoutText(text, options).dimensions;\n};\n\n/**\n * Creates and returns a label and its bounding box.\n *\n * @method Text#createText\n *\n * @param {string} text the text to render on the label\n * @param {Object} options\n * @param {string} options.align how to align in the bounding box.\n * Any of { 'center-middle', 'center-top' },\n * defaults to 'center-top'.\n * @param {string} options.style style to be applied to the text\n * @param {boolean} options.fitBox indicates if box will be recalculated to\n * fit text\n *\n * @return {Object} { element, dimensions }\n */\nText.prototype.layoutText = function(text, options) {\n var box = assign({}, this._config.size, options.box),\n style = assign({}, this._config.style, options.style),\n align = parseAlign(options.align || this._config.align),\n padding = parsePadding(options.padding !== undefined ? options.padding : this._config.padding),\n fitBox = options.fitBox || false;\n\n var lineHeight = getLineHeight(style);\n\n // we split text by lines and normalize\n // {soft break} + {line break} => { line break }\n var lines = text.split(/\\u00AD?\\r?\\n/),\n layouted = [];\n\n var maxWidth = box.width - padding.left - padding.right;\n\n // ensure correct rendering by attaching helper text node to invisible SVG\n var helperText = svgCreate('text');\n svgAttr(helperText, { x: 0, y: 0 });\n svgAttr(helperText, style);\n\n var helperSvg = getHelperSvg();\n\n svgAppend(helperSvg, helperText);\n\n while (lines.length) {\n layouted.push(layoutNext(lines, maxWidth, helperText));\n }\n\n if (align.vertical === 'middle') {\n padding.top = padding.bottom = 0;\n }\n\n var totalHeight = reduce(layouted, function(sum, line, idx) {\n return sum + (lineHeight || line.height);\n }, 0) + padding.top + padding.bottom;\n\n var maxLineWidth = reduce(layouted, function(sum, line, idx) {\n return line.width > sum ? line.width : sum;\n }, 0);\n\n // the y position of the next line\n var y = padding.top;\n\n if (align.vertical === 'middle') {\n y += (box.height - totalHeight) / 2;\n }\n\n // magic number initial offset\n y -= (lineHeight || layouted[0].height) / 4;\n\n\n var textElement = svgCreate('text');\n\n svgAttr(textElement, style);\n\n // layout each line taking into account that parent\n // shape might resize to fit text size\n forEach(layouted, function(line) {\n\n var x;\n\n y += (lineHeight || line.height);\n\n switch (align.horizontal) {\n case 'left':\n x = padding.left;\n break;\n\n case 'right':\n x = ((fitBox ? maxLineWidth : maxWidth)\n - padding.right - line.width);\n break;\n\n default:\n\n // aka center\n x = Math.max((((fitBox ? maxLineWidth : maxWidth)\n - line.width) / 2 + padding.left), 0);\n }\n\n var tspan = svgCreate('tspan');\n svgAttr(tspan, { x: x, y: y });\n\n tspan.textContent = line.text;\n\n svgAppend(textElement, tspan);\n });\n\n svgRemove(helperText);\n\n var dimensions = {\n width: maxLineWidth,\n height: totalHeight\n };\n\n return {\n dimensions: dimensions,\n element: textElement\n };\n};\n\n\nfunction getLineHeight(style) {\n if ('fontSize' in style && 'lineHeight' in style) {\n return style.lineHeight * parseInt(style.fontSize, 10);\n }\n}","import { assign } from 'min-dash';\n\nimport TextUtil from 'diagram-js/lib/util/Text';\n\nvar DEFAULT_FONT_SIZE = 12;\nvar LINE_HEIGHT_RATIO = 1.2;\n\nvar MIN_TEXT_ANNOTATION_HEIGHT = 30;\n\n\nexport default function TextRenderer(config) {\n\n var defaultStyle = assign({\n fontFamily: 'Arial, sans-serif',\n fontSize: DEFAULT_FONT_SIZE,\n fontWeight: 'normal',\n lineHeight: LINE_HEIGHT_RATIO\n }, config && config.defaultStyle || {});\n\n var fontSize = parseInt(defaultStyle.fontSize, 10) - 1;\n\n var externalStyle = assign({}, defaultStyle, {\n fontSize: fontSize\n }, config && config.externalStyle || {});\n\n var textUtil = new TextUtil({\n style: defaultStyle\n });\n\n /**\n * Get the new bounds of an externally rendered,\n * layouted label.\n *\n * @param {Bounds} bounds\n * @param {string} text\n *\n * @return {Bounds}\n */\n this.getExternalLabelBounds = function(bounds, text) {\n\n var layoutedDimensions = textUtil.getDimensions(text, {\n box: {\n width: 90,\n height: 30,\n x: bounds.width / 2 + bounds.x,\n y: bounds.height / 2 + bounds.y\n },\n style: externalStyle\n });\n\n // resize label shape to fit label text\n return {\n x: Math.round(bounds.x + bounds.width / 2 - layoutedDimensions.width / 2),\n y: Math.round(bounds.y),\n width: Math.ceil(layoutedDimensions.width),\n height: Math.ceil(layoutedDimensions.height)\n };\n\n };\n\n /**\n * Get the new bounds of text annotation.\n *\n * @param {Bounds} bounds\n * @param {string} text\n *\n * @return {Bounds}\n */\n this.getTextAnnotationBounds = function(bounds, text) {\n\n var layoutedDimensions = textUtil.getDimensions(text, {\n box: bounds,\n style: defaultStyle,\n align: 'left-top',\n padding: 5\n });\n\n return {\n x: bounds.x,\n y: bounds.y,\n width: bounds.width,\n height: Math.max(MIN_TEXT_ANNOTATION_HEIGHT, Math.round(layoutedDimensions.height))\n };\n };\n\n /**\n * Create a layouted text element.\n *\n * @param {string} text\n * @param {Object} [options]\n *\n * @return {SVGElement} rendered text\n */\n this.createText = function(text, options) {\n return textUtil.createText(text, options || {});\n };\n\n /**\n * Get default text style.\n */\n this.getDefaultStyle = function() {\n return defaultStyle;\n };\n\n /**\n * Get the external text style.\n */\n this.getExternalStyle = function() {\n return externalStyle;\n };\n\n}\n\nTextRenderer.$inject = [\n 'config.textRenderer'\n];","/**\n * Map containing SVG paths needed by BpmnRenderer.\n */\n\nexport default function PathMap() {\n\n /**\n * Contains a map of path elements\n *\n * <h1>Path definition</h1>\n * A parameterized path is defined like this:\n * <pre>\n * 'GATEWAY_PARALLEL': {\n * d: 'm {mx},{my} {e.x0},0 0,{e.x1} {e.x1},0 0,{e.y0} -{e.x1},0 0,{e.y1} ' +\n '-{e.x0},0 0,-{e.y1} -{e.x1},0 0,-{e.y0} {e.x1},0 z',\n * height: 17.5,\n * width: 17.5,\n * heightElements: [2.5, 7.5],\n * widthElements: [2.5, 7.5]\n * }\n * </pre>\n * <p>It's important to specify a correct <b>height and width</b> for the path as the scaling\n * is based on the ratio between the specified height and width in this object and the\n * height and width that is set as scale target (Note x,y coordinates will be scaled with\n * individual ratios).</p>\n * <p>The '<b>heightElements</b>' and '<b>widthElements</b>' array must contain the values that will be scaled.\n * The scaling is based on the computed ratios.\n * Coordinates on the y axis should be in the <b>heightElement</b>'s array, they will be scaled using\n * the computed ratio coefficient.\n * In the parameterized path the scaled values can be accessed through the 'e' object in {} brackets.\n * <ul>\n * <li>The values for the y axis can be accessed in the path string using {e.y0}, {e.y1}, ....</li>\n * <li>The values for the x axis can be accessed in the path string using {e.x0}, {e.x1}, ....</li>\n * </ul>\n * The numbers x0, x1 respectively y0, y1, ... map to the corresponding array index.\n * </p>\n */\n this.pathMap = {\n 'EVENT_MESSAGE': {\n d: 'm {mx},{my} l 0,{e.y1} l {e.x1},0 l 0,-{e.y1} z l {e.x0},{e.y0} l {e.x0},-{e.y0}',\n height: 36,\n width: 36,\n heightElements: [ 6, 14 ],\n widthElements: [ 10.5, 21 ]\n },\n 'EVENT_SIGNAL': {\n d: 'M {mx},{my} l {e.x0},{e.y0} l -{e.x1},0 Z',\n height: 36,\n width: 36,\n heightElements: [ 18 ],\n widthElements: [ 10, 20 ]\n },\n 'EVENT_ESCALATION': {\n d: 'M {mx},{my} l {e.x0},{e.y0} l -{e.x0},-{e.y1} l -{e.x0},{e.y1} Z',\n height: 36,\n width: 36,\n heightElements: [ 20, 7 ],\n widthElements: [ 8 ]\n },\n 'EVENT_CONDITIONAL': {\n d: 'M {e.x0},{e.y0} l {e.x1},0 l 0,{e.y2} l -{e.x1},0 Z ' +\n 'M {e.x2},{e.y3} l {e.x0},0 ' +\n 'M {e.x2},{e.y4} l {e.x0},0 ' +\n 'M {e.x2},{e.y5} l {e.x0},0 ' +\n 'M {e.x2},{e.y6} l {e.x0},0 ' +\n 'M {e.x2},{e.y7} l {e.x0},0 ' +\n 'M {e.x2},{e.y8} l {e.x0},0 ',\n height: 36,\n width: 36,\n heightElements: [ 8.5, 14.5, 18, 11.5, 14.5, 17.5, 20.5, 23.5, 26.5 ],\n widthElements: [ 10.5, 14.5, 12.5 ]\n },\n 'EVENT_LINK': {\n d: 'm {mx},{my} 0,{e.y0} -{e.x1},0 0,{e.y1} {e.x1},0 0,{e.y0} {e.x0},-{e.y2} -{e.x0},-{e.y2} z',\n height: 36,\n width: 36,\n heightElements: [ 4.4375, 6.75, 7.8125 ],\n widthElements: [ 9.84375, 13.5 ]\n },\n 'EVENT_ERROR': {\n d: 'm {mx},{my} {e.x0},-{e.y0} {e.x1},-{e.y1} {e.x2},{e.y2} {e.x3},-{e.y3} -{e.x4},{e.y4} -{e.x5},-{e.y5} z',\n height: 36,\n width: 36,\n heightElements: [ 0.023, 8.737, 8.151, 16.564, 10.591, 8.714 ],\n widthElements: [ 0.085, 6.672, 6.97, 4.273, 5.337, 6.636 ]\n },\n 'EVENT_CANCEL_45': {\n d: 'm {mx},{my} -{e.x1},0 0,{e.x0} {e.x1},0 0,{e.y1} {e.x0},0 ' +\n '0,-{e.y1} {e.x1},0 0,-{e.y0} -{e.x1},0 0,-{e.y1} -{e.x0},0 z',\n height: 36,\n width: 36,\n heightElements: [ 4.75, 8.5 ],\n widthElements: [ 4.75, 8.5 ]\n },\n 'EVENT_COMPENSATION': {\n d: 'm {mx},{my} {e.x0},-{e.y0} 0,{e.y1} z m {e.x1},-{e.y2} {e.x2},-{e.y3} 0,{e.y1} -{e.x2},-{e.y3} z',\n height: 36,\n width: 36,\n heightElements: [ 6.5, 13, 0.4, 6.1 ],\n widthElements: [ 9, 9.3, 8.7 ]\n },\n 'EVENT_TIMER_WH': {\n d: 'M {mx},{my} l {e.x0},-{e.y0} m -{e.x0},{e.y0} l {e.x1},{e.y1} ',\n height: 36,\n width: 36,\n heightElements: [ 10, 2 ],\n widthElements: [ 3, 7 ]\n },\n 'EVENT_TIMER_LINE': {\n d: 'M {mx},{my} ' +\n 'm {e.x0},{e.y0} l -{e.x1},{e.y1} ',\n height: 36,\n width: 36,\n heightElements: [ 10, 3 ],\n widthElements: [ 0, 0 ]\n },\n 'EVENT_MULTIPLE': {\n d:'m {mx},{my} {e.x1},-{e.y0} {e.x1},{e.y0} -{e.x0},{e.y1} -{e.x2},0 z',\n height: 36,\n width: 36,\n heightElements: [ 6.28099, 12.56199 ],\n widthElements: [ 3.1405, 9.42149, 12.56198 ]\n },\n 'EVENT_PARALLEL_MULTIPLE': {\n d:'m {mx},{my} {e.x0},0 0,{e.y1} {e.x1},0 0,{e.y0} -{e.x1},0 0,{e.y1} ' +\n '-{e.x0},0 0,-{e.y1} -{e.x1},0 0,-{e.y0} {e.x1},0 z',\n height: 36,\n width: 36,\n heightElements: [ 2.56228, 7.68683 ],\n widthElements: [ 2.56228, 7.68683 ]\n },\n 'GATEWAY_EXCLUSIVE': {\n d:'m {mx},{my} {e.x0},{e.y0} {e.x1},{e.y0} {e.x2},0 {e.x4},{e.y2} ' +\n '{e.x4},{e.y1} {e.x2},0 {e.x1},{e.y3} {e.x0},{e.y3} ' +\n '{e.x3},0 {e.x5},{e.y1} {e.x5},{e.y2} {e.x3},0 z',\n height: 17.5,\n width: 17.5,\n heightElements: [ 8.5, 6.5312, -6.5312, -8.5 ],\n widthElements: [ 6.5, -6.5, 3, -3, 5, -5 ]\n },\n 'GATEWAY_PARALLEL': {\n d:'m {mx},{my} 0,{e.y1} -{e.x1},0 0,{e.y0} {e.x1},0 0,{e.y1} {e.x0},0 ' +\n '0,-{e.y1} {e.x1},0 0,-{e.y0} -{e.x1},0 0,-{e.y1} -{e.x0},0 z',\n height: 30,\n width: 30,\n heightElements: [ 5, 12.5 ],\n widthElements: [ 5, 12.5 ]\n },\n 'GATEWAY_EVENT_BASED': {\n d:'m {mx},{my} {e.x0},{e.y0} {e.x0},{e.y1} {e.x1},{e.y2} {e.x2},0 z',\n height: 11,\n width: 11,\n heightElements: [ -6, 6, 12, -12 ],\n widthElements: [ 9, -3, -12 ]\n },\n 'GATEWAY_COMPLEX': {\n d:'m {mx},{my} 0,{e.y0} -{e.x0},-{e.y1} -{e.x1},{e.y2} {e.x0},{e.y1} -{e.x2},0 0,{e.y3} ' +\n '{e.x2},0 -{e.x0},{e.y1} l {e.x1},{e.y2} {e.x0},-{e.y1} 0,{e.y0} {e.x3},0 0,-{e.y0} {e.x0},{e.y1} ' +\n '{e.x1},-{e.y2} -{e.x0},-{e.y1} {e.x2},0 0,-{e.y3} -{e.x2},0 {e.x0},-{e.y1} -{e.x1},-{e.y2} ' +\n '-{e.x0},{e.y1} 0,-{e.y0} -{e.x3},0 z',\n height: 17.125,\n width: 17.125,\n heightElements: [ 4.875, 3.4375, 2.125, 3 ],\n widthElements: [ 3.4375, 2.125, 4.875, 3 ]\n },\n 'DATA_OBJECT_PATH': {\n d:'m 0,0 {e.x1},0 {e.x0},{e.y0} 0,{e.y1} -{e.x2},0 0,-{e.y2} {e.x1},0 0,{e.y0} {e.x0},0',\n height: 61,\n width: 51,\n heightElements: [ 10, 50, 60 ],\n widthElements: [ 10, 40, 50, 60 ]\n },\n 'DATA_OBJECT_COLLECTION_PATH': {\n d: 'm{mx},{my} m 3,2 l 0,10 m 3,-10 l 0,10 m 3,-10 l 0,10',\n height: 10,\n width: 10,\n heightElements: [],\n widthElements: []\n },\n 'DATA_ARROW': {\n d:'m 5,9 9,0 0,-3 5,5 -5,5 0,-3 -9,0 z',\n height: 61,\n width: 51,\n heightElements: [],\n widthElements: []\n },\n 'DATA_STORE': {\n d:'m {mx},{my} ' +\n 'l 0,{e.y2} ' +\n 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0 ' +\n 'l 0,-{e.y2} ' +\n 'c -{e.x0},-{e.y1} -{e.x1},-{e.y1} -{e.x2},0' +\n 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0 ' +\n 'm -{e.x2},{e.y0}' +\n 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0' +\n 'm -{e.x2},{e.y0}' +\n 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0',\n height: 61,\n width: 61,\n heightElements: [ 7, 10, 45 ],\n widthElements: [ 2, 58, 60 ]\n },\n 'TEXT_ANNOTATION': {\n d: 'm {mx}, {my} m 10,0 l -10,0 l 0,{e.y0} l 10,0',\n height: 30,\n width: 10,\n heightElements: [ 30 ],\n widthElements: [ 10 ]\n },\n 'MARKER_SUB_PROCESS': {\n d: 'm{mx},{my} m 7,2 l 0,10 m -5,-5 l 10,0',\n height: 10,\n width: 10,\n heightElements: [],\n widthElements: []\n },\n 'MARKER_PARALLEL': {\n d: 'm{mx},{my} m 3,2 l 0,10 m 3,-10 l 0,10 m 3,-10 l 0,10',\n height: 10,\n width: 10,\n heightElements: [],\n widthElements: []\n },\n 'MARKER_SEQUENTIAL': {\n d: 'm{mx},{my} m 0,3 l 10,0 m -10,3 l 10,0 m -10,3 l 10,0',\n height: 10,\n width: 10,\n heightElements: [],\n widthElements: []\n },\n 'MARKER_COMPENSATION': {\n d: 'm {mx},{my} 7,-5 0,10 z m 7.1,-0.3 6.9,-4.7 0,10 -6.9,-4.7 z',\n height: 10,\n width: 21,\n heightElements: [],\n widthElements: []\n },\n 'MARKER_LOOP': {\n d: 'm {mx},{my} c 3.526979,0 6.386161,-2.829858 6.386161,-6.320661 0,-3.490806 -2.859182,-6.320661 ' +\n '-6.386161,-6.320661 -3.526978,0 -6.38616,2.829855 -6.38616,6.320661 0,1.745402 ' +\n '0.714797,3.325567 1.870463,4.469381 0.577834,0.571908 1.265885,1.034728 2.029916,1.35457 ' +\n 'l -0.718163,-3.909793 m 0.718163,3.909793 -3.885211,0.802902',\n height: 13.9,\n width: 13.7,\n heightElements: [],\n widthElements: []\n },\n 'MARKER_ADHOC': {\n d: 'm {mx},{my} m 0.84461,2.64411 c 1.05533,-1.23780996 2.64337,-2.07882 4.29653,-1.97997996 2.05163,0.0805 ' +\n '3.85579,1.15803 5.76082,1.79107 1.06385,0.34139996 2.24454,0.1438 3.18759,-0.43767 0.61743,-0.33642 ' +\n '1.2775,-0.64078 1.7542,-1.17511 0,0.56023 0,1.12046 0,1.6807 -0.98706,0.96237996 -2.29792,1.62393996 ' +\n '-3.6918,1.66181996 -1.24459,0.0927 -2.46671,-0.2491 -3.59505,-0.74812 -1.35789,-0.55965 ' +\n '-2.75133,-1.33436996 -4.27027,-1.18121996 -1.37741,0.14601 -2.41842,1.13685996 -3.44288,1.96782996 z',\n height: 4,\n width: 15,\n heightElements: [],\n widthElements: []\n },\n 'TASK_TYPE_SEND': {\n d: 'm {mx},{my} l 0,{e.y1} l {e.x1},0 l 0,-{e.y1} z l {e.x0},{e.y0} l {e.x0},-{e.y0}',\n height: 14,\n width: 21,\n heightElements: [ 6, 14 ],\n widthElements: [ 10.5, 21 ]\n },\n 'TASK_TYPE_SCRIPT': {\n d: 'm {mx},{my} c 9.966553,-6.27276 -8.000926,-7.91932 2.968968,-14.938 l -8.802728,0 ' +\n 'c -10.969894,7.01868 6.997585,8.66524 -2.968967,14.938 z ' +\n 'm -7,-12 l 5,0 ' +\n 'm -4.5,3 l 4.5,0 ' +\n 'm -3,3 l 5,0' +\n 'm -4,3 l 5,0',\n height: 15,\n width: 12.6,\n heightElements: [ 6, 14 ],\n widthElements: [ 10.5, 21 ]\n },\n 'TASK_TYPE_USER_1': {\n d: 'm {mx},{my} c 0.909,-0.845 1.594,-2.049 1.594,-3.385 0,-2.554 -1.805,-4.62199999 ' +\n '-4.357,-4.62199999 -2.55199998,0 -4.28799998,2.06799999 -4.28799998,4.62199999 0,1.348 ' +\n '0.974,2.562 1.89599998,3.405 -0.52899998,0.187 -5.669,2.097 -5.794,4.7560005 v 6.718 ' +\n 'h 17 v -6.718 c 0,-2.2980005 -5.5279996,-4.5950005 -6.0509996,-4.7760005 z' +\n 'm -8,6 l 0,5.5 m 11,0 l 0,-5'\n },\n 'TASK_TYPE_USER_2': {\n d: 'm {mx},{my} m 2.162,1.009 c 0,2.4470005 -2.158,4.4310005 -4.821,4.4310005 ' +\n '-2.66499998,0 -4.822,-1.981 -4.822,-4.4310005 '\n },\n 'TASK_TYPE_USER_3': {\n d: 'm {mx},{my} m -6.9,-3.80 c 0,0 2.25099998,-2.358 4.27399998,-1.177 2.024,1.181 4.221,1.537 ' +\n '4.124,0.965 -0.098,-0.57 -0.117,-3.79099999 -4.191,-4.13599999 -3.57499998,0.001 ' +\n '-4.20799998,3.36699999 -4.20699998,4.34799999 z'\n },\n 'TASK_TYPE_MANUAL': {\n d: 'm {mx},{my} c 0.234,-0.01 5.604,0.008 8.029,0.004 0.808,0 1.271,-0.172 1.417,-0.752 0.227,-0.898 ' +\n '-0.334,-1.314 -1.338,-1.316 -2.467,-0.01 -7.886,-0.004 -8.108,-0.004 -0.014,-0.079 0.016,-0.533 0,-0.61 ' +\n '0.195,-0.042 8.507,0.006 9.616,0.002 0.877,-0.007 1.35,-0.438 1.353,-1.208 0.003,-0.768 -0.479,-1.09 ' +\n '-1.35,-1.091 -2.968,-0.002 -9.619,-0.013 -9.619,-0.013 v -0.591 c 0,0 5.052,-0.016 7.225,-0.016 ' +\n '0.888,-0.002 1.354,-0.416 1.351,-1.193 -0.006,-0.761 -0.492,-1.196 -1.361,-1.196 -3.473,-0.005 ' +\n '-10.86,-0.003 -11.0829995,-0.003 -0.022,-0.047 -0.045,-0.094 -0.069,-0.139 0.3939995,-0.319 ' +\n '2.0409995,-1.626 2.4149995,-2.017 0.469,-0.4870005 0.519,-1.1650005 0.162,-1.6040005 -0.414,-0.511 ' +\n '-0.973,-0.5 -1.48,-0.236 -1.4609995,0.764 -6.5999995,3.6430005 -7.7329995,4.2710005 -0.9,0.499 ' +\n '-1.516,1.253 -1.882,2.19 -0.37000002,0.95 -0.17,2.01 -0.166,2.979 0.004,0.718 -0.27300002,1.345 ' +\n '-0.055,2.063 0.629,2.087 2.425,3.312 4.859,3.318 4.6179995,0.014 9.2379995,-0.139 13.8569995,-0.158 ' +\n '0.755,-0.004 1.171,-0.301 1.182,-1.033 0.012,-0.754 -0.423,-0.969 -1.183,-0.973 -1.778,-0.01 ' +\n '-5.824,-0.004 -6.04,-0.004 10e-4,-0.084 0.003,-0.586 10e-4,-0.67 z'\n },\n 'TASK_TYPE_INSTANTIATING_SEND': {\n d: 'm {mx},{my} l 0,8.4 l 12.6,0 l 0,-8.4 z l 6.3,3.6 l 6.3,-3.6'\n },\n 'TASK_TYPE_SERVICE': {\n d: 'm {mx},{my} v -1.71335 c 0.352326,-0.0705 0.703932,-0.17838 1.047628,-0.32133 ' +\n '0.344416,-0.14465 0.665822,-0.32133 0.966377,-0.52145 l 1.19431,1.18005 1.567487,-1.57688 ' +\n '-1.195028,-1.18014 c 0.403376,-0.61394 0.683079,-1.29908 0.825447,-2.01824 l 1.622133,-0.01 ' +\n 'v -2.2196 l -1.636514,0.01 c -0.07333,-0.35153 -0.178319,-0.70024 -0.323564,-1.04372 ' +\n '-0.145244,-0.34406 -0.321407,-0.6644 -0.522735,-0.96217 l 1.131035,-1.13631 -1.583305,-1.56293 ' +\n '-1.129598,1.13589 c -0.614052,-0.40108 -1.302883,-0.68093 -2.022633,-0.82247 l 0.0093,-1.61852 ' +\n 'h -2.241173 l 0.0042,1.63124 c -0.353763,0.0736 -0.705369,0.17977 -1.049785,0.32371 -0.344415,0.14437 ' +\n '-0.665102,0.32092 -0.9635006,0.52046 l -1.1698628,-1.15823 -1.5667691,1.5792 1.1684265,1.15669 ' +\n 'c -0.4026573,0.61283 -0.68308,1.29797 -0.8247287,2.01713 l -1.6588041,0.003 v 2.22174 ' +\n 'l 1.6724648,-0.006 c 0.073327,0.35077 0.1797598,0.70243 0.3242851,1.04472 0.1452428,0.34448 ' +\n '0.3214064,0.6644 0.5227339,0.96066 l -1.1993431,1.19723 1.5840256,1.56011 1.1964668,-1.19348 ' +\n 'c 0.6140517,0.40346 1.3028827,0.68232 2.0233517,0.82331 l 7.19e-4,1.69892 h 2.226848 z ' +\n 'm 0.221462,-3.9957 c -1.788948,0.7502 -3.8576,-0.0928 -4.6097055,-1.87438 -0.7521065,-1.78321 ' +\n '0.090598,-3.84627 1.8802645,-4.59604 1.78823,-0.74936 3.856881,0.0929 4.608987,1.87437 ' +\n '0.752106,1.78165 -0.0906,3.84612 -1.879546,4.59605 z'\n },\n 'TASK_TYPE_SERVICE_FILL': {\n d: 'm {mx},{my} c -1.788948,0.7502 -3.8576,-0.0928 -4.6097055,-1.87438 -0.7521065,-1.78321 ' +\n '0.090598,-3.84627 1.8802645,-4.59604 1.78823,-0.74936 3.856881,0.0929 4.608987,1.87437 ' +\n '0.752106,1.78165 -0.0906,3.84612 -1.879546,4.59605 z'\n },\n 'TASK_TYPE_BUSINESS_RULE_HEADER': {\n d: 'm {mx},{my} 0,4 20,0 0,-4 z'\n },\n 'TASK_TYPE_BUSINESS_RULE_MAIN': {\n d: 'm {mx},{my} 0,12 20,0 0,-12 z' +\n 'm 0,8 l 20,0 ' +\n 'm -13,-4 l 0,8'\n },\n 'MESSAGE_FLOW_MARKER': {\n d: 'm {mx},{my} m -10.5 ,-7 l 0,14 l 21,0 l 0,-14 z l 10.5,6 l 10.5,-6'\n }\n };\n\n this.getRawPath = function getRawPath(pathId) {\n return this.pathMap[pathId].d;\n };\n\n /**\n * Scales the path to the given height and width.\n * <h1>Use case</h1>\n * <p>Use case is to scale the content of elements (event, gateways) based\n * on the element bounding box's size.\n * </p>\n * <h1>Why not transform</h1>\n * <p>Scaling a path with transform() will also scale the stroke and IE does not support\n * the option 'non-scaling-stroke' to prevent this.\n * Also there are use cases where only some parts of a path should be\n * scaled.</p>\n *\n * @param {string} pathId The ID of the path.\n * @param {Object} param <p>\n * Example param object scales the path to 60% size of the container (data.width, data.height).\n * <pre>\n * {\n * xScaleFactor: 0.6,\n * yScaleFactor:0.6,\n * containerWidth: data.width,\n * containerHeight: data.height,\n * position: {\n * mx: 0.46,\n * my: 0.2,\n * }\n * }\n * </pre>\n * <ul>\n * <li>targetpathwidth = xScaleFactor * containerWidth</li>\n * <li>targetpathheight = yScaleFactor * containerHeight</li>\n * <li>Position is used to set the starting coordinate of the path. M is computed:\n * <ul>\n * <li>position.x * containerWidth</li>\n * <li>position.y * containerHeight</li>\n * </ul>\n * Center of the container <pre> position: {\n * mx: 0.5,\n * my: 0.5,\n * }</pre>\n * Upper left corner of the container\n * <pre> position: {\n * mx: 0.0,\n * my: 0.0,\n * }</pre>\n * </li>\n * </ul>\n * </p>\n *\n */\n this.getScaledPath = function getScaledPath(pathId, param) {\n var rawPath = this.pathMap[pathId];\n\n // positioning\n // compute the start point of the path\n var mx, my;\n\n if (param.abspos) {\n mx = param.abspos.x;\n my = param.abspos.y;\n } else {\n mx = param.containerWidth * param.position.mx;\n my = param.containerHeight * param.position.my;\n }\n\n var coordinates = {}; // map for the scaled coordinates\n if (param.position) {\n\n // path\n var heightRatio = (param.containerHeight / rawPath.height) * param.yScaleFactor;\n var widthRatio = (param.containerWidth / rawPath.width) * param.xScaleFactor;\n\n\n // Apply height ratio\n for (var heightIndex = 0; heightIndex < rawPath.heightElements.length; heightIndex++) {\n coordinates['y' + heightIndex] = rawPath.heightElements[heightIndex] * heightRatio;\n }\n\n // Apply width ratio\n for (var widthIndex = 0; widthIndex < rawPath.widthElements.length; widthIndex++) {\n coordinates['x' + widthIndex] = rawPath.widthElements[widthIndex] * widthRatio;\n }\n }\n\n // Apply value to raw path\n var path = format(\n rawPath.d, {\n mx: mx,\n my: my,\n e: coordinates\n }\n );\n return path;\n };\n}\n\n// helpers //////////////////////\n\n// copied and adjusted from https://github.com/adobe-webplatform/Snap.svg/blob/master/src/svg.js\nvar tokenRegex = /\\{([^{}]+)\\}/g,\n objNotationRegex = /(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g; // matches .xxxxx or [\"xxxxx\"] to run over object properties\n\nfunction replacer(all, key, obj) {\n var res = obj;\n key.replace(objNotationRegex, function(all, name, quote, quotedName, isFunc) {\n name = name || quotedName;\n if (res) {\n if (name in res) {\n res = res[name];\n }\n typeof res == 'function' && isFunc && (res = res());\n }\n });\n res = (res == null || res == obj ? all : res) + '';\n\n return res;\n}\n\nfunction format(str, obj) {\n return String(str).replace(tokenRegex, function(all, key) {\n return replacer(all, key, obj);\n });\n}\n","import BpmnRenderer from './BpmnRenderer';\nimport TextRenderer from './TextRenderer';\n\nimport PathMap from './PathMap';\n\nexport default {\n __init__: [ 'bpmnRenderer' ],\n bpmnRenderer: [ 'type', BpmnRenderer ],\n textRenderer: [ 'type', TextRenderer ],\n pathMap: [ 'type', PathMap ]\n};\n","/**\n * @typedef {import('./').Replacements} Replacements\n */\n\n/**\n * A simple translation stub to be used for multi-language support\n * in diagrams. Can be easily replaced with a more sophisticated\n * solution.\n *\n * @example\n *\n * // use it inside any diagram component by injecting `translate`.\n *\n * function MyService(translate) {\n * alert(translate('HELLO {you}', { you: 'You!' }));\n * }\n *\n * @param {string} template to interpolate\n * @param {Replacements} [replacements] a map with substitutes\n *\n * @return {string} the translated string\n */\nexport default function translate(template, replacements) {\n\n replacements = replacements || {};\n\n return template.replace(/{([^}]+)}/g, function(_, key) {\n return replacements[key] || '{' + key + '}';\n });\n}","import translate from './translate';\n\nexport default {\n translate: [ 'value', translate ]\n};","import {\n assign\n} from 'min-dash';\n\nimport { is } from './ModelUtil';\n\n\nexport var DEFAULT_LABEL_SIZE = {\n width: 90,\n height: 20\n};\n\nexport var FLOW_LABEL_INDENT = 15;\n\n\n/**\n * Returns true if the given semantic has an external label\n *\n * @param {BpmnElement} semantic\n * @return {boolean} true if has label\n */\nexport function isLabelExternal(semantic) {\n return is(semantic, 'bpmn:Event') ||\n is(semantic, 'bpmn:Gateway') ||\n is(semantic, 'bpmn:DataStoreReference') ||\n is(semantic, 'bpmn:DataObjectReference') ||\n is(semantic, 'bpmn:DataInput') ||\n is(semantic, 'bpmn:DataOutput') ||\n is(semantic, 'bpmn:SequenceFlow') ||\n is(semantic, 'bpmn:MessageFlow') ||\n is(semantic, 'bpmn:Group');\n}\n\n/**\n * Returns true if the given element has an external label\n *\n * @param {djs.model.shape} element\n * @return {boolean} true if has label\n */\nexport function hasExternalLabel(element) {\n return isLabel(element.label);\n}\n\n/**\n * Get the position for sequence flow labels\n *\n * @param {Array<Point>} waypoints\n * @return {Point} the label position\n */\nexport function getFlowLabelPosition(waypoints) {\n\n // get the waypoints mid\n var mid = waypoints.length / 2 - 1;\n\n var first = waypoints[Math.floor(mid)];\n var second = waypoints[Math.ceil(mid + 0.01)];\n\n // get position\n var position = getWaypointsMid(waypoints);\n\n // calculate angle\n var angle = Math.atan((second.y - first.y) / (second.x - first.x));\n\n var x = position.x,\n y = position.y;\n\n if (Math.abs(angle) < Math.PI / 2) {\n y -= FLOW_LABEL_INDENT;\n } else {\n x += FLOW_LABEL_INDENT;\n }\n\n return { x: x, y: y };\n}\n\n\n/**\n * Get the middle of a number of waypoints\n *\n * @param {Array<Point>} waypoints\n * @return {Point} the mid point\n */\nexport function getWaypointsMid(waypoints) {\n\n var mid = waypoints.length / 2 - 1;\n\n var first = waypoints[Math.floor(mid)];\n var second = waypoints[Math.ceil(mid + 0.01)];\n\n return {\n x: first.x + (second.x - first.x) / 2,\n y: first.y + (second.y - first.y) / 2\n };\n}\n\n\nexport function getExternalLabelMid(element) {\n\n if (element.waypoints) {\n return getFlowLabelPosition(element.waypoints);\n } else if (is(element, 'bpmn:Group')) {\n return {\n x: element.x + element.width / 2,\n y: element.y + DEFAULT_LABEL_SIZE.height / 2\n };\n } else {\n return {\n x: element.x + element.width / 2,\n y: element.y + element.height + DEFAULT_LABEL_SIZE.height / 2\n };\n }\n}\n\n\n/**\n * Returns the bounds of an elements label, parsed from the elements DI or\n * generated from its bounds.\n *\n * @param {BpmndDi} di\n * @param {djs.model.Base} element\n */\nexport function getExternalLabelBounds(di, element) {\n\n var mid,\n size,\n bounds,\n label = di.label;\n\n if (label && label.bounds) {\n bounds = label.bounds;\n\n size = {\n width: Math.max(DEFAULT_LABEL_SIZE.width, bounds.width),\n height: bounds.height\n };\n\n mid = {\n x: bounds.x + bounds.width / 2,\n y: bounds.y + bounds.height / 2\n };\n } else {\n\n mid = getExternalLabelMid(element);\n\n size = DEFAULT_LABEL_SIZE;\n }\n\n return assign({\n x: mid.x - size.width / 2,\n y: mid.y - size.height / 2\n }, size);\n}\n\nexport function isLabel(element) {\n return element && !!element.labelTarget;\n}\n","import {\n assign\n} from 'min-dash';\n\nimport { is } from '../util/ModelUtil';\n\nimport {\n isLabelExternal,\n getExternalLabelBounds\n} from '../util/LabelUtil';\n\nimport {\n getMid\n} from 'diagram-js/lib/layout/LayoutUtil';\n\nimport {\n isExpanded\n} from '../util/DiUtil';\n\nimport {\n getLabel\n} from '../features/label-editing/LabelUtil';\n\nimport {\n elementToString\n} from './Util';\n\n\n/**\n * @param {ModdleElement} semantic\n * @param {ModdleElement} di\n * @param {Object} [attrs=null]\n *\n * @return {Object}\n */\nfunction elementData(semantic, di, attrs) {\n return assign({\n id: semantic.id,\n type: semantic.$type,\n businessObject: semantic,\n di: di\n }, attrs);\n}\n\nfunction getWaypoints(di, source, target) {\n\n var waypoints = di.waypoint;\n\n if (!waypoints || waypoints.length < 2) {\n return [ getMid(source), getMid(target) ];\n }\n\n return waypoints.map(function(p) {\n return { x: p.x, y: p.y };\n });\n}\n\nfunction notYetDrawn(translate, semantic, refSemantic, property) {\n return new Error(translate('element {element} referenced by {referenced}#{property} not yet drawn', {\n element: elementToString(refSemantic),\n referenced: elementToString(semantic),\n property: property\n }));\n}\n\n\n/**\n * An importer that adds bpmn elements to the canvas\n *\n * @param {EventBus} eventBus\n * @param {Canvas} canvas\n * @param {ElementFactory} elementFactory\n * @param {ElementRegistry} elementRegistry\n * @param {Function} translate\n * @param {TextRenderer} textRenderer\n */\nexport default function BpmnImporter(\n eventBus, canvas, elementFactory,\n elementRegistry, translate, textRenderer) {\n\n this._eventBus = eventBus;\n this._canvas = canvas;\n this._elementFactory = elementFactory;\n this._elementRegistry = elementRegistry;\n this._translate = translate;\n this._textRenderer = textRenderer;\n}\n\nBpmnImporter.$inject = [\n 'eventBus',\n 'canvas',\n 'elementFactory',\n 'elementRegistry',\n 'translate',\n 'textRenderer'\n];\n\n\n/**\n * Add bpmn element (semantic) to the canvas onto the\n * specified parent shape.\n */\nBpmnImporter.prototype.add = function(semantic, di, parentElement) {\n var element,\n translate = this._translate,\n hidden;\n\n var parentIndex;\n\n // ROOT ELEMENT\n // handle the special case that we deal with a\n // invisible root element (process, subprocess or collaboration)\n if (is(di, 'bpmndi:BPMNPlane')) {\n\n var attrs = is(semantic, 'bpmn:SubProcess')\n ? { id: semantic.id + '_plane' }\n : {};\n\n // add a virtual element (not being drawn)\n element = this._elementFactory.createRoot(elementData(semantic, di, attrs));\n\n this._canvas.addRootElement(element);\n }\n\n // SHAPE\n else if (is(di, 'bpmndi:BPMNShape')) {\n\n var collapsed = !isExpanded(semantic, di),\n isFrame = isFrameElement(semantic);\n\n hidden = parentElement && (parentElement.hidden || parentElement.collapsed);\n\n var bounds = di.bounds;\n\n element = this._elementFactory.createShape(elementData(semantic, di, {\n collapsed: collapsed,\n hidden: hidden,\n x: Math.round(bounds.x),\n y: Math.round(bounds.y),\n width: Math.round(bounds.width),\n height: Math.round(bounds.height),\n isFrame: isFrame\n }));\n\n if (is(semantic, 'bpmn:BoundaryEvent')) {\n this._attachBoundary(semantic, element);\n }\n\n // insert lanes behind other flow nodes (cf. #727)\n if (is(semantic, 'bpmn:Lane')) {\n parentIndex = 0;\n }\n\n if (is(semantic, 'bpmn:DataStoreReference')) {\n\n // check whether data store is inside our outside of its semantic parent\n if (!isPointInsideBBox(parentElement, getMid(bounds))) {\n parentElement = this._canvas.findRoot(parentElement);\n }\n }\n\n this._canvas.addShape(element, parentElement, parentIndex);\n }\n\n // CONNECTION\n else if (is(di, 'bpmndi:BPMNEdge')) {\n\n var source = this._getSource(semantic),\n target = this._getTarget(semantic);\n\n hidden = parentElement && (parentElement.hidden || parentElement.collapsed);\n\n element = this._elementFactory.createConnection(elementData(semantic, di, {\n hidden: hidden,\n source: source,\n target: target,\n waypoints: getWaypoints(di, source, target)\n }));\n\n if (is(semantic, 'bpmn:DataAssociation')) {\n\n // render always on top; this ensures DataAssociations\n // are rendered correctly across different \"hacks\" people\n // love to model such as cross participant / sub process\n // associations\n parentElement = this._canvas.findRoot(parentElement);\n }\n\n this._canvas.addConnection(element, parentElement, parentIndex);\n } else {\n throw new Error(translate('unknown di {di} for element {semantic}', {\n di: elementToString(di),\n semantic: elementToString(semantic)\n }));\n }\n\n // (optional) LABEL\n if (isLabelExternal(semantic) && getLabel(element)) {\n this.addLabel(semantic, di, element);\n }\n\n\n this._eventBus.fire('bpmnElement.added', { element: element });\n\n return element;\n};\n\n\n/**\n * Attach the boundary element to the given host\n *\n * @param {ModdleElement} boundarySemantic\n * @param {djs.model.Base} boundaryElement\n */\nBpmnImporter.prototype._attachBoundary = function(boundarySemantic, boundaryElement) {\n var translate = this._translate;\n var hostSemantic = boundarySemantic.attachedToRef;\n\n if (!hostSemantic) {\n throw new Error(translate('missing {semantic}#attachedToRef', {\n semantic: elementToString(boundarySemantic)\n }));\n }\n\n var host = this._elementRegistry.get(hostSemantic.id),\n attachers = host && host.attachers;\n\n if (!host) {\n throw notYetDrawn(translate, boundarySemantic, hostSemantic, 'attachedToRef');\n }\n\n // wire element.host <> host.attachers\n boundaryElement.host = host;\n\n if (!attachers) {\n host.attachers = attachers = [];\n }\n\n if (attachers.indexOf(boundaryElement) === -1) {\n attachers.push(boundaryElement);\n }\n};\n\n\n/**\n * add label for an element\n */\nBpmnImporter.prototype.addLabel = function(semantic, di, element) {\n var bounds,\n text,\n label;\n\n bounds = getExternalLabelBounds(di, element);\n\n text = getLabel(element);\n\n if (text) {\n\n // get corrected bounds from actual layouted text\n bounds = this._textRenderer.getExternalLabelBounds(bounds, text);\n }\n\n label = this._elementFactory.createLabel(elementData(semantic, di, {\n id: semantic.id + '_label',\n labelTarget: element,\n type: 'label',\n hidden: element.hidden || !getLabel(element),\n x: Math.round(bounds.x),\n y: Math.round(bounds.y),\n width: Math.round(bounds.width),\n height: Math.round(bounds.height)\n }));\n\n return this._canvas.addShape(label, element.parent);\n};\n\n/**\n * Return the drawn connection end based on the given side.\n *\n * @throws {Error} if the end is not yet drawn\n */\nBpmnImporter.prototype._getEnd = function(semantic, side) {\n\n var element,\n refSemantic,\n type = semantic.$type,\n translate = this._translate;\n\n refSemantic = semantic[side + 'Ref'];\n\n // handle mysterious isMany DataAssociation#sourceRef\n if (side === 'source' && type === 'bpmn:DataInputAssociation') {\n refSemantic = refSemantic && refSemantic[0];\n }\n\n // fix source / target for DataInputAssociation / DataOutputAssociation\n if (side === 'source' && type === 'bpmn:DataOutputAssociation' ||\n side === 'target' && type === 'bpmn:DataInputAssociation') {\n\n refSemantic = semantic.$parent;\n }\n\n element = refSemantic && this._getElement(refSemantic);\n\n if (element) {\n return element;\n }\n\n if (refSemantic) {\n throw notYetDrawn(translate, semantic, refSemantic, side + 'Ref');\n } else {\n throw new Error(translate('{semantic}#{side} Ref not specified', {\n semantic: elementToString(semantic),\n side: side\n }));\n }\n};\n\nBpmnImporter.prototype._getSource = function(semantic) {\n return this._getEnd(semantic, 'source');\n};\n\nBpmnImporter.prototype._getTarget = function(semantic) {\n return this._getEnd(semantic, 'target');\n};\n\n\nBpmnImporter.prototype._getElement = function(semantic) {\n return this._elementRegistry.get(semantic.id);\n};\n\n\n// helpers ////////////////////\n\nfunction isPointInsideBBox(bbox, point) {\n var x = point.x,\n y = point.y;\n\n return x >= bbox.x &&\n x <= bbox.x + bbox.width &&\n y >= bbox.y &&\n y <= bbox.y + bbox.height;\n}\n\nfunction isFrameElement(semantic) {\n return is(semantic, 'bpmn:Group');\n}","import translate from 'diagram-js/lib/i18n/translate';\n\nimport BpmnImporter from './BpmnImporter';\n\nexport default {\n __depends__: [\n translate\n ],\n bpmnImporter: [ 'type', BpmnImporter ]\n};","import DrawModule from '../draw';\nimport ImportModule from '../import';\n\nexport default {\n __depends__: [\n DrawModule,\n ImportModule\n ]\n};","function __stopPropagation(event) {\n if (!event || typeof event.stopPropagation !== 'function') {\n return;\n }\n\n event.stopPropagation();\n}\n\n\nexport function getOriginal(event) {\n return event.originalEvent || event.srcEvent;\n}\n\n\nexport function stopPropagation(event, immediate) {\n __stopPropagation(event, immediate);\n __stopPropagation(getOriginal(event), immediate);\n}\n\n\nexport function toPoint(event) {\n\n if (event.pointers && event.pointers.length) {\n event = event.pointers[0];\n }\n\n if (event.touches && event.touches.length) {\n event = event.touches[0];\n }\n\n return event ? {\n x: event.clientX,\n y: event.clientY\n } : null;\n}","export function isMac() {\n return (/mac/i).test(navigator.platform);\n}","import {\n getOriginal as getOriginalEvent\n} from './Event';\n\nimport {\n isMac\n} from './Platform';\n\nexport {\n isMac\n} from './Platform';\n\nexport function isButton(event, button) {\n return (getOriginalEvent(event) || event).button === button;\n}\n\nexport function isPrimaryButton(event) {\n\n // button === 0 -> left áka primary mouse button\n return isButton(event, 0);\n}\n\nexport function isAuxiliaryButton(event) {\n\n // button === 1 -> auxiliary áka wheel button\n return isButton(event, 1);\n}\n\nexport function isSecondaryButton(event) {\n\n // button === 2 -> right áka secondary button\n return isButton(event, 2);\n}\n\nexport function hasPrimaryModifier(event) {\n var originalEvent = getOriginalEvent(event) || event;\n\n if (!isPrimaryButton(event)) {\n return false;\n }\n\n // Use cmd as primary modifier key for mac OS\n if (isMac()) {\n return originalEvent.metaKey;\n } else {\n return originalEvent.ctrlKey;\n }\n}\n\n\nexport function hasSecondaryModifier(event) {\n var originalEvent = getOriginalEvent(event) || event;\n\n return isPrimaryButton(event) && originalEvent.shiftKey;\n}\n","import {\n forEach,\n assign\n} from 'min-dash';\n\nimport {\n delegate as domDelegate,\n query as domQuery,\n queryAll as domQueryAll\n} from 'min-dom';\n\nimport {\n isPrimaryButton,\n isAuxiliaryButton\n} from '../../util/Mouse';\n\nimport {\n append as svgAppend,\n attr as svgAttr,\n create as svgCreate,\n remove as svgRemove\n} from 'tiny-svg';\n\nimport {\n createLine,\n updateLine\n} from '../../util/RenderUtil';\n\n/**\n * @typedef {import('../../model').Base} Base\n *\n * @typedef {import('../../core/ElementRegistry').default} ElementRegistry\n * @typedef {import('../../core/EventBus').default} EventBus\n * @typedef {import('../../draw/Styles').default} Styles\n */\n\nfunction allowAll(event) { return true; }\n\nfunction allowPrimaryAndAuxiliary(event) {\n return isPrimaryButton(event) || isAuxiliaryButton(event);\n}\n\nvar LOW_PRIORITY = 500;\n\n\n/**\n * A plugin that provides interaction events for diagram elements.\n *\n * It emits the following events:\n *\n * * element.click\n * * element.contextmenu\n * * element.dblclick\n * * element.hover\n * * element.mousedown\n * * element.mousemove\n * * element.mouseup\n * * element.out\n *\n * Each event is a tuple { element, gfx, originalEvent }.\n *\n * Canceling the event via Event#preventDefault()\n * prevents the original DOM operation.\n *\n * @param {EventBus} eventBus\n * @param {ElementRegistry} elementRegistry\n * @param {Styles} styles\n */\nexport default function InteractionEvents(eventBus, elementRegistry, styles) {\n\n var self = this;\n\n /**\n * Fire an interaction event.\n *\n * @param {string} type local event name, e.g. element.click.\n * @param {MouseEvent|TouchEvent} event native event\n * @param {Base} [element] the diagram element to emit the event on;\n * defaults to the event target\n */\n function fire(type, event, element) {\n\n if (isIgnored(type, event)) {\n return;\n }\n\n var target, gfx, returnValue;\n\n if (!element) {\n target = event.delegateTarget || event.target;\n\n if (target) {\n gfx = target;\n element = elementRegistry.get(gfx);\n }\n } else {\n gfx = elementRegistry.getGraphics(element);\n }\n\n if (!gfx || !element) {\n return;\n }\n\n returnValue = eventBus.fire(type, {\n element: element,\n gfx: gfx,\n originalEvent: event\n });\n\n if (returnValue === false) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n // TODO(nikku): document this\n var handlers = {};\n\n function mouseHandler(localEventName) {\n return handlers[localEventName];\n }\n\n function isIgnored(localEventName, event) {\n\n var filter = ignoredFilters[localEventName] || isPrimaryButton;\n\n // only react on left mouse button interactions\n // except for interaction events that are enabled\n // for secundary mouse button\n return !filter(event);\n }\n\n var bindings = {\n click: 'element.click',\n contextmenu: 'element.contextmenu',\n dblclick: 'element.dblclick',\n mousedown: 'element.mousedown',\n mousemove: 'element.mousemove',\n mouseover: 'element.hover',\n mouseout: 'element.out',\n mouseup: 'element.mouseup',\n };\n\n var ignoredFilters = {\n 'element.contextmenu': allowAll,\n 'element.mousedown': allowPrimaryAndAuxiliary,\n 'element.mouseup': allowPrimaryAndAuxiliary,\n 'element.click': allowPrimaryAndAuxiliary,\n 'element.dblclick': allowPrimaryAndAuxiliary\n };\n\n\n // manual event trigger //////////\n\n /**\n * Trigger an interaction event (based on a native dom event)\n * on the target shape or connection.\n *\n * @param {string} eventName the name of the triggered DOM event\n * @param {MouseEvent|TouchEvent} event\n * @param {Base} targetElement\n */\n function triggerMouseEvent(eventName, event, targetElement) {\n\n // i.e. element.mousedown...\n var localEventName = bindings[eventName];\n\n if (!localEventName) {\n throw new Error('unmapped DOM event name <' + eventName + '>');\n }\n\n return fire(localEventName, event, targetElement);\n }\n\n\n var ELEMENT_SELECTOR = 'svg, .djs-element';\n\n // event handling ///////\n\n function registerEvent(node, event, localEvent, ignoredFilter) {\n\n var handler = handlers[localEvent] = function(event) {\n fire(localEvent, event);\n };\n\n if (ignoredFilter) {\n ignoredFilters[localEvent] = ignoredFilter;\n }\n\n handler.$delegate = domDelegate.bind(node, ELEMENT_SELECTOR, event, handler);\n }\n\n function unregisterEvent(node, event, localEvent) {\n\n var handler = mouseHandler(localEvent);\n\n if (!handler) {\n return;\n }\n\n domDelegate.unbind(node, event, handler.$delegate);\n }\n\n function registerEvents(svg) {\n forEach(bindings, function(val, key) {\n registerEvent(svg, key, val);\n });\n }\n\n function unregisterEvents(svg) {\n forEach(bindings, function(val, key) {\n unregisterEvent(svg, key, val);\n });\n }\n\n eventBus.on('canvas.destroy', function(event) {\n unregisterEvents(event.svg);\n });\n\n eventBus.on('canvas.init', function(event) {\n registerEvents(event.svg);\n });\n\n\n // hit box updating ////////////////\n\n eventBus.on([ 'shape.added', 'connection.added' ], function(event) {\n var element = event.element,\n gfx = event.gfx;\n\n eventBus.fire('interactionEvents.createHit', { element: element, gfx: gfx });\n });\n\n // Update djs-hit on change.\n // A low priortity is necessary, because djs-hit of labels has to be updated\n // after the label bounds have been updated in the renderer.\n eventBus.on([\n 'shape.changed',\n 'connection.changed'\n ], LOW_PRIORITY, function(event) {\n\n var element = event.element,\n gfx = event.gfx;\n\n eventBus.fire('interactionEvents.updateHit', { element: element, gfx: gfx });\n });\n\n eventBus.on('interactionEvents.createHit', LOW_PRIORITY, function(event) {\n var element = event.element,\n gfx = event.gfx;\n\n self.createDefaultHit(element, gfx);\n });\n\n eventBus.on('interactionEvents.updateHit', function(event) {\n var element = event.element,\n gfx = event.gfx;\n\n self.updateDefaultHit(element, gfx);\n });\n\n\n // hit styles ////////////\n\n var STROKE_HIT_STYLE = createHitStyle('djs-hit djs-hit-stroke');\n\n var CLICK_STROKE_HIT_STYLE = createHitStyle('djs-hit djs-hit-click-stroke');\n\n var ALL_HIT_STYLE = createHitStyle('djs-hit djs-hit-all');\n\n var NO_MOVE_HIT_STYLE = createHitStyle('djs-hit djs-hit-no-move');\n\n var HIT_TYPES = {\n 'all': ALL_HIT_STYLE,\n 'click-stroke': CLICK_STROKE_HIT_STYLE,\n 'stroke': STROKE_HIT_STYLE,\n 'no-move': NO_MOVE_HIT_STYLE\n };\n\n function createHitStyle(classNames, attrs) {\n\n attrs = assign({\n stroke: 'white',\n strokeWidth: 15\n }, attrs || {});\n\n return styles.cls(classNames, [ 'no-fill', 'no-border' ], attrs);\n }\n\n\n // style helpers ///////////////\n\n function applyStyle(hit, type) {\n\n var attrs = HIT_TYPES[type];\n\n if (!attrs) {\n throw new Error('invalid hit type <' + type + '>');\n }\n\n svgAttr(hit, attrs);\n\n return hit;\n }\n\n function appendHit(gfx, hit) {\n svgAppend(gfx, hit);\n }\n\n\n // API\n\n /**\n * Remove hints on the given graphics.\n *\n * @param {SVGElement} gfx\n */\n this.removeHits = function(gfx) {\n var hits = domQueryAll('.djs-hit', gfx);\n\n forEach(hits, svgRemove);\n };\n\n /**\n * Create default hit for the given element.\n *\n * @param {Base} element\n * @param {SVGElement} gfx\n *\n * @return {SVGElement} created hit\n */\n this.createDefaultHit = function(element, gfx) {\n var waypoints = element.waypoints,\n isFrame = element.isFrame,\n boxType;\n\n if (waypoints) {\n return this.createWaypointsHit(gfx, waypoints);\n } else {\n\n boxType = isFrame ? 'stroke' : 'all';\n\n return this.createBoxHit(gfx, boxType, {\n width: element.width,\n height: element.height\n });\n }\n };\n\n /**\n * Create hits for the given waypoints.\n *\n * @param {SVGElement} gfx\n * @param {Array<Point>} waypoints\n *\n * @return {SVGElement}\n */\n this.createWaypointsHit = function(gfx, waypoints) {\n\n var hit = createLine(waypoints);\n\n applyStyle(hit, 'stroke');\n\n appendHit(gfx, hit);\n\n return hit;\n };\n\n /**\n * Create hits for a box.\n *\n * @param {SVGElement} gfx\n * @param {string} hitType\n * @param {Object} attrs\n *\n * @return {SVGElement}\n */\n this.createBoxHit = function(gfx, type, attrs) {\n\n attrs = assign({\n x: 0,\n y: 0\n }, attrs);\n\n var hit = svgCreate('rect');\n\n applyStyle(hit, type);\n\n svgAttr(hit, attrs);\n\n appendHit(gfx, hit);\n\n return hit;\n };\n\n /**\n * Update default hit of the element.\n *\n * @param {Base} element\n * @param {SVGElement} gfx\n *\n * @return {SVGElement} updated hit\n */\n this.updateDefaultHit = function(element, gfx) {\n\n var hit = domQuery('.djs-hit', gfx);\n\n if (!hit) {\n return;\n }\n\n if (element.waypoints) {\n updateLine(hit, element.waypoints);\n } else {\n svgAttr(hit, {\n width: element.width,\n height: element.height\n });\n }\n\n return hit;\n };\n\n this.fire = fire;\n\n this.triggerMouseEvent = triggerMouseEvent;\n\n this.mouseHandler = mouseHandler;\n\n this.registerEvent = registerEvent;\n this.unregisterEvent = unregisterEvent;\n}\n\n\nInteractionEvents.$inject = [\n 'eventBus',\n 'elementRegistry',\n 'styles'\n];\n\n\n/**\n * An event indicating that the mouse hovered over an element\n *\n * @event element.hover\n *\n * @type {Object}\n * @property {Base} element\n * @property {SVGElement} gfx\n * @property {Event} originalEvent\n */\n\n/**\n * An event indicating that the mouse has left an element\n *\n * @event element.out\n *\n * @type {Object}\n * @property {Base} element\n * @property {SVGElement} gfx\n * @property {Event} originalEvent\n */\n\n/**\n * An event indicating that the mouse has clicked an element\n *\n * @event element.click\n *\n * @type {Object}\n * @property {Base} element\n * @property {SVGElement} gfx\n * @property {Event} originalEvent\n */\n\n/**\n * An event indicating that the mouse has double clicked an element\n *\n * @event element.dblclick\n *\n * @type {Object}\n * @property {Base} element\n * @property {SVGElement} gfx\n * @property {Event} originalEvent\n */\n\n/**\n * An event indicating that the mouse has gone down on an element.\n *\n * @event element.mousedown\n *\n * @type {Object}\n * @property {Base} element\n * @property {SVGElement} gfx\n * @property {Event} originalEvent\n */\n\n/**\n * An event indicating that the mouse has gone up on an element.\n *\n * @event element.mouseup\n *\n * @type {Object}\n * @property {Base} element\n * @property {SVGElement} gfx\n * @property {Event} originalEvent\n */\n\n/**\n * An event indicating that the context menu action is triggered\n * via mouse or touch controls.\n *\n * @event element.contextmenu\n *\n * @type {Object}\n * @property {Base} element\n * @property {SVGElement} gfx\n * @property {Event} originalEvent\n */","import InteractionEvents from './InteractionEvents';\n\nexport default {\n __init__: [ 'interactionEvents' ],\n interactionEvents: [ 'type', InteractionEvents ]\n};","import { getBBox } from '../../util/Elements';\n\nvar LOW_PRIORITY = 500;\n\nimport {\n append as svgAppend,\n attr as svgAttr,\n create as svgCreate\n} from 'tiny-svg';\n\nimport {\n query as domQuery\n} from 'min-dom';\n\nimport {\n assign\n} from 'min-dash';\n\n/**\n * @typedef {import('../../model').Base} Base\n *\n * @typedef {import('../../core/EventBus').default} EventBus\n * @typedef {import('../../draw/Styles').default} Styles\n */\n\n/**\n * @class\n *\n * A plugin that adds an outline to shapes and connections that may be activated and styled\n * via CSS classes.\n *\n * @param {EventBus} eventBus\n * @param {Styles} styles\n */\nexport default function Outline(eventBus, styles) {\n\n this.offset = 6;\n\n var OUTLINE_STYLE = styles.cls('djs-outline', [ 'no-fill' ]);\n\n var self = this;\n\n function createOutline(gfx, bounds) {\n var outline = svgCreate('rect');\n\n svgAttr(outline, assign({\n x: 10,\n y: 10,\n rx: 4,\n width: 100,\n height: 100\n }, OUTLINE_STYLE));\n\n svgAppend(gfx, outline);\n\n return outline;\n }\n\n // A low priortity is necessary, because outlines of labels have to be updated\n // after the label bounds have been updated in the renderer.\n eventBus.on([ 'shape.added', 'shape.changed' ], LOW_PRIORITY, function(event) {\n var element = event.element,\n gfx = event.gfx;\n\n var outline = domQuery('.djs-outline', gfx);\n\n if (!outline) {\n outline = createOutline(gfx, element);\n }\n\n self.updateShapeOutline(outline, element);\n });\n\n eventBus.on([ 'connection.added', 'connection.changed' ], function(event) {\n var element = event.element,\n gfx = event.gfx;\n\n var outline = domQuery('.djs-outline', gfx);\n\n if (!outline) {\n outline = createOutline(gfx, element);\n }\n\n self.updateConnectionOutline(outline, element);\n });\n}\n\n\n/**\n * Updates the outline of a shape respecting the dimension of the\n * element and an outline offset.\n *\n * @param {SVGElement} outline\n * @param {Base} element\n */\nOutline.prototype.updateShapeOutline = function(outline, element) {\n\n svgAttr(outline, {\n x: -this.offset,\n y: -this.offset,\n width: element.width + this.offset * 2,\n height: element.height + this.offset * 2\n });\n\n};\n\n\n/**\n * Updates the outline of a connection respecting the bounding box of\n * the connection and an outline offset.\n *\n * @param {SVGElement} outline\n * @param {Base} element\n */\nOutline.prototype.updateConnectionOutline = function(outline, connection) {\n\n var bbox = getBBox(connection);\n\n svgAttr(outline, {\n x: bbox.x - this.offset,\n y: bbox.y - this.offset,\n width: bbox.width + this.offset * 2,\n height: bbox.height + this.offset * 2\n });\n\n};\n\n\nOutline.$inject = [ 'eventBus', 'styles', 'elementRegistry' ];","import Outline from './Outline';\n\nexport default {\n __init__: [ 'outline' ],\n outline: [ 'type', Outline ]\n};","import {\n isArray,\n forEach\n} from 'min-dash';\n\n/**\n * @typedef {import('../../core/EventBus').default} EventBus\n */\n\n/**\n * A service that offers the current selection in a diagram.\n * Offers the api to control the selection, too.\n *\n * @class\n *\n * @param {EventBus} eventBus\n */\nexport default function Selection(eventBus, canvas) {\n\n this._eventBus = eventBus;\n this._canvas = canvas;\n\n this._selectedElements = [];\n\n var self = this;\n\n eventBus.on([ 'shape.remove', 'connection.remove' ], function(e) {\n var element = e.element;\n self.deselect(element);\n });\n\n eventBus.on([ 'diagram.clear', 'root.set' ], function(e) {\n self.select(null);\n });\n}\n\nSelection.$inject = [ 'eventBus', 'canvas' ];\n\n\nSelection.prototype.deselect = function(element) {\n var selectedElements = this._selectedElements;\n\n var idx = selectedElements.indexOf(element);\n\n if (idx !== -1) {\n var oldSelection = selectedElements.slice();\n\n selectedElements.splice(idx, 1);\n\n this._eventBus.fire('selection.changed', { oldSelection: oldSelection, newSelection: selectedElements });\n }\n};\n\n\nSelection.prototype.get = function() {\n return this._selectedElements;\n};\n\nSelection.prototype.isSelected = function(element) {\n return this._selectedElements.indexOf(element) !== -1;\n};\n\n\n/**\n * This method selects one or more elements on the diagram.\n *\n * By passing an additional add parameter you can decide whether or not the element(s)\n * should be added to the already existing selection or not.\n *\n * @method Selection#select\n *\n * @param {Object|Object[]} elements element or array of elements to be selected\n * @param {boolean} [add] whether the element(s) should be appended to the current selection, defaults to false\n */\nSelection.prototype.select = function(elements, add) {\n var selectedElements = this._selectedElements,\n oldSelection = selectedElements.slice();\n\n if (!isArray(elements)) {\n elements = elements ? [ elements ] : [];\n }\n\n var canvas = this._canvas;\n\n var rootElement = canvas.getRootElement();\n\n elements = elements.filter(function(element) {\n var elementRoot = canvas.findRoot(element);\n\n return rootElement === elementRoot;\n });\n\n // selection may be cleared by passing an empty array or null\n // to the method\n if (add) {\n forEach(elements, function(element) {\n if (selectedElements.indexOf(element) !== -1) {\n\n // already selected\n return;\n } else {\n selectedElements.push(element);\n }\n });\n } else {\n this._selectedElements = selectedElements = elements.slice();\n }\n\n this._eventBus.fire('selection.changed', { oldSelection: oldSelection, newSelection: selectedElements });\n};\n","import {\n assign,\n forEach\n} from 'min-dash';\n\nimport {\n append as svgAppend,\n attr as svgAttr,\n classes as svgClasses,\n clear as svgClear,\n create as svgCreate\n} from 'tiny-svg';\n\nimport { getBBox } from '../../util/Elements';\n\n/**\n * @typedef {import('../../core/Canvas').default} Canvas\n * @typedef {import('../../core/EventBus').default} EventBus\n * @typedef {import('./Selection').default} Selection\n */\n\nvar MARKER_HOVER = 'hover',\n MARKER_SELECTED = 'selected';\n\nvar SELECTION_OUTLINE_PADDING = 6;\n\n\n/**\n * A plugin that adds a visible selection UI to shapes and connections\n * by appending the <code>hover</code> and <code>selected</code> classes to them.\n *\n * @class\n *\n * Makes elements selectable, too.\n *\n * @param {Canvas} canvas\n * @param {EventBus} eventBus\n * @param {Selection} selection\n */\nexport default function SelectionVisuals(canvas, eventBus, selection) {\n this._canvas = canvas;\n\n var self = this;\n\n this._multiSelectionBox = null;\n\n function addMarker(e, cls) {\n canvas.addMarker(e, cls);\n }\n\n function removeMarker(e, cls) {\n canvas.removeMarker(e, cls);\n }\n\n eventBus.on('element.hover', function(event) {\n addMarker(event.element, MARKER_HOVER);\n });\n\n eventBus.on('element.out', function(event) {\n removeMarker(event.element, MARKER_HOVER);\n });\n\n eventBus.on('selection.changed', function(event) {\n\n function deselect(s) {\n removeMarker(s, MARKER_SELECTED);\n }\n\n function select(s) {\n addMarker(s, MARKER_SELECTED);\n }\n\n var oldSelection = event.oldSelection,\n newSelection = event.newSelection;\n\n forEach(oldSelection, function(e) {\n if (newSelection.indexOf(e) === -1) {\n deselect(e);\n }\n });\n\n forEach(newSelection, function(e) {\n if (oldSelection.indexOf(e) === -1) {\n select(e);\n }\n });\n\n self._updateSelectionOutline(newSelection);\n });\n\n\n eventBus.on('element.changed', function(event) {\n if (selection.isSelected(event.element)) {\n self._updateSelectionOutline(selection.get());\n }\n });\n}\n\nSelectionVisuals.$inject = [\n 'canvas',\n 'eventBus',\n 'selection'\n];\n\nSelectionVisuals.prototype._updateSelectionOutline = function(selection) {\n var layer = this._canvas.getLayer('selectionOutline');\n\n svgClear(layer);\n\n var enabled = selection.length > 1;\n\n var container = this._canvas.getContainer();\n\n svgClasses(container)[enabled ? 'add' : 'remove']('djs-multi-select');\n\n if (!enabled) {\n return;\n }\n\n var bBox = addSelectionOutlinePadding(getBBox(selection));\n\n var rect = svgCreate('rect');\n\n svgAttr(rect, assign({\n rx: 3\n }, bBox));\n\n svgClasses(rect).add('djs-selection-outline');\n\n svgAppend(layer, rect);\n};\n\n// helpers //////////\n\nfunction addSelectionOutlinePadding(bBox) {\n return {\n x: bBox.x - SELECTION_OUTLINE_PADDING,\n y: bBox.y - SELECTION_OUTLINE_PADDING,\n width: bBox.width + SELECTION_OUTLINE_PADDING * 2,\n height: bBox.height + SELECTION_OUTLINE_PADDING * 2\n };\n}","import {\n hasPrimaryModifier,\n hasSecondaryModifier,\n isPrimaryButton\n} from '../../util/Mouse';\n\nimport {\n find,\n isArray\n} from 'min-dash';\n\n/**\n * @typedef {import('../../core/Canvas').default} Canvas\n * @typedef {import('../../core/ElementRegistry').default} ElementRegistry\n * @typedef {import('../../core/EventBus').default} EventBus\n * @typedef {import('./Selection').default} Selection\n */\n\n/**\n * @param {EventBus} eventBus\n * @param {Selection} selection\n * @param {Canvas} canvas\n * @param {ElementRegistry} elementRegistry\n */\nexport default function SelectionBehavior(eventBus, selection, canvas, elementRegistry) {\n\n // Select elements on create\n eventBus.on('create.end', 500, function(event) {\n var context = event.context,\n canExecute = context.canExecute,\n elements = context.elements,\n hints = context.hints || {},\n autoSelect = hints.autoSelect;\n\n if (canExecute) {\n if (autoSelect === false) {\n\n // Select no elements\n return;\n }\n\n if (isArray(autoSelect)) {\n selection.select(autoSelect);\n } else {\n\n // Select all elements by default\n selection.select(elements.filter(isShown));\n }\n }\n });\n\n // Select connection targets on connect\n eventBus.on('connect.end', 500, function(event) {\n var context = event.context,\n connection = context.connection;\n\n if (connection) {\n selection.select(connection);\n }\n });\n\n // Select shapes on move\n eventBus.on('shape.move.end', 500, function(event) {\n var previousSelection = event.previousSelection || [];\n\n var shape = elementRegistry.get(event.context.shape.id);\n\n // Always select main shape on move\n var isSelected = find(previousSelection, function(selectedShape) {\n return shape.id === selectedShape.id;\n });\n\n if (!isSelected) {\n selection.select(shape);\n }\n });\n\n // Select elements on click\n eventBus.on('element.click', function(event) {\n\n if (!isPrimaryButton(event)) {\n return;\n }\n\n var element = event.element;\n\n if (element === canvas.getRootElement()) {\n element = null;\n }\n\n var isSelected = selection.isSelected(element),\n isMultiSelect = selection.get().length > 1;\n\n // Add to selection if CTRL or SHIFT pressed\n var add = hasPrimaryModifier(event) || hasSecondaryModifier(event);\n\n if (isSelected && isMultiSelect) {\n if (add) {\n\n // Deselect element\n return selection.deselect(element);\n } else {\n\n // Select element only\n return selection.select(element);\n }\n } else if (!isSelected) {\n\n // Select element\n selection.select(element, add);\n } else {\n\n // Deselect element\n selection.deselect(element);\n }\n });\n}\n\nSelectionBehavior.$inject = [\n 'eventBus',\n 'selection',\n 'canvas',\n 'elementRegistry'\n];\n\n\nfunction isShown(element) {\n return !element.hidden;\n}\n","import InteractionEventsModule from '../interaction-events';\nimport OutlineModule from '../outline';\n\nimport Selection from './Selection';\nimport SelectionVisuals from './SelectionVisuals';\nimport SelectionBehavior from './SelectionBehavior';\n\n\nexport default {\n __init__: [ 'selectionVisuals', 'selectionBehavior' ],\n __depends__: [\n InteractionEventsModule,\n OutlineModule\n ],\n selection: [ 'type', Selection ],\n selectionVisuals: [ 'type', SelectionVisuals ],\n selectionBehavior: [ 'type', SelectionBehavior ]\n};\n","/**\n * Util that provides unique IDs.\n *\n * @class\n * @constructor\n *\n * The ids can be customized via a given prefix and contain a random value to avoid collisions.\n *\n * @param {string} prefix a prefix to prepend to generated ids (for better readability)\n */\nexport default function IdGenerator(prefix) {\n\n this._counter = 0;\n this._prefix = (prefix ? prefix + '-' : '') + Math.floor(Math.random() * 1000000000) + '-';\n}\n\n/**\n * Returns a next unique ID.\n *\n * @returns {string} the id\n */\nIdGenerator.prototype.next = function() {\n return this._prefix + (++this._counter);\n};\n","import {\n isArray,\n isString,\n isObject,\n assign,\n forEach,\n find,\n filter,\n matchPattern,\n isDefined\n} from 'min-dash';\n\nimport {\n assignStyle,\n domify,\n classes as domClasses,\n attr as domAttr,\n remove as domRemove,\n clear as domClear\n} from 'min-dom';\n\nimport {\n getBBox\n} from '../../util/Elements';\n\nimport Ids from '../../util/IdGenerator';\n\n// document wide unique overlay ids\nvar ids = new Ids('ov');\n\nvar LOW_PRIORITY = 500;\n\n/**\n * @typedef {import('../../core/Canvas').default} Canvas\n * @typedef {import('../../core/ElementRegistry').default} ElementRegistry\n * @typedef {import('../../core/EventBus').default} EventBus\n *\n * @typedef {import('./Overlays').Overlay} Overlay\n * @typedef {import('./Overlays').OverlayAttrs} OverlayAttrs\n * @typedef {import('./Overlays').OverlayContainer} OverlayContainer\n * @typedef {import('./Overlays').OverlaysConfig} OverlaysConfig\n * @typedef {import('./Overlays').OverlaysConfigDefault} OverlaysConfigDefault\n * @typedef {import('./Overlays').OverlaysFilter} OverlaysFilter\n */\n\n/**\n * A service that allows users to attach overlays to diagram elements.\n *\n * The overlay service will take care of overlay positioning during updates.\n *\n * @example\n *\n * // add a pink badge on the top left of the shape\n *\n * overlays.add(someShape, {\n * position: {\n * top: -5,\n * left: -5\n * },\n * html: '<div style=\"width: 10px; background: fuchsia; color: white;\">0</div>'\n * });\n *\n * // or add via shape id\n *\n * overlays.add('some-element-id', {\n * position: {\n * top: -5,\n * left: -5\n * }\n * html: '<div style=\"width: 10px; background: fuchsia; color: white;\">0</div>'\n * });\n *\n * // or add with optional type\n *\n * overlays.add(someShape, 'badge', {\n * position: {\n * top: -5,\n * left: -5\n * }\n * html: '<div style=\"width: 10px; background: fuchsia; color: white;\">0</div>'\n * });\n *\n *\n * // remove an overlay\n *\n * var id = overlays.add(...);\n * overlays.remove(id);\n *\n *\n * You may configure overlay defaults during tool by providing a `config` module\n * with `overlays.defaults` as an entry:\n *\n * {\n * overlays: {\n * defaults: {\n * show: {\n * minZoom: 0.7,\n * maxZoom: 5.0\n * },\n * scale: {\n * min: 1\n * }\n * }\n * }\n *\n * @param {OverlaysConfig} config\n * @param {EventBus} eventBus\n * @param {Canvas} canvas\n * @param {ElementRegistry} elementRegistry\n */\nexport default function Overlays(config, eventBus, canvas, elementRegistry) {\n this._eventBus = eventBus;\n this._canvas = canvas;\n this._elementRegistry = elementRegistry;\n\n this._ids = ids;\n\n /**\n * @type {OverlaysConfigDefault}\n */\n this._overlayDefaults = assign({\n\n // no show constraints\n show: null,\n\n // always scale\n scale: true\n }, config && config.defaults);\n\n /**\n * @type {Map<string, Overlay>}\n */\n this._overlays = {};\n\n /**\n * @type {OverlayContainer[]}\n */\n this._overlayContainers = [];\n\n /**\n * @type {HTMLElement}\n */\n this._overlayRoot = createRoot(canvas.getContainer());\n\n this._init();\n}\n\n\nOverlays.$inject = [\n 'config.overlays',\n 'eventBus',\n 'canvas',\n 'elementRegistry'\n];\n\n\n/**\n * Returns the overlay with the specified ID or a list of overlays\n * for an element with a given type.\n *\n * @example\n *\n * // return the single overlay with the given ID\n * overlays.get('some-id');\n *\n * // return all overlays for the shape\n * overlays.get({ element: someShape });\n *\n * // return all overlays on shape with type 'badge'\n * overlays.get({ element: someShape, type: 'badge' });\n *\n * // shape can also be specified as ID\n * overlays.get({ element: 'element-id', type: 'badge' });\n *\n * @param {OverlaysFilter} search The filter to be used to find the overlay(s).\n *\n * @return {Overlay|Overlay[]} The overlay(s).\n */\nOverlays.prototype.get = function(search) {\n\n if (isString(search)) {\n search = { id: search };\n }\n\n if (isString(search.element)) {\n search.element = this._elementRegistry.get(search.element);\n }\n\n if (search.element) {\n var container = this._getOverlayContainer(search.element, true);\n\n // return a list of overlays when searching by element (+type)\n if (container) {\n return search.type ? filter(container.overlays, matchPattern({ type: search.type })) : container.overlays.slice();\n } else {\n return [];\n }\n } else\n if (search.type) {\n return filter(this._overlays, matchPattern({ type: search.type }));\n } else {\n\n // return single element when searching by id\n return search.id ? this._overlays[search.id] : null;\n }\n};\n\n/**\n * Adds an HTML overlay to an element.\n *\n * @param {Base|string} element The element to add the overlay to.\n * @param {string} [type] An optional type that can be used to filter.\n * @param {OverlayAttrs} overlay The overlay.\n *\n * @return {string} The overlay's ID that can be used to get or remove it.\n */\nOverlays.prototype.add = function(element, type, overlay) {\n\n if (isObject(type)) {\n overlay = type;\n type = null;\n }\n\n if (!element.id) {\n element = this._elementRegistry.get(element);\n }\n\n if (!overlay.position) {\n throw new Error('must specifiy overlay position');\n }\n\n if (!overlay.html) {\n throw new Error('must specifiy overlay html');\n }\n\n if (!element) {\n throw new Error('invalid element specified');\n }\n\n var id = this._ids.next();\n\n overlay = assign({}, this._overlayDefaults, overlay, {\n id: id,\n type: type,\n element: element,\n html: overlay.html\n });\n\n this._addOverlay(overlay);\n\n return id;\n};\n\n\n/**\n * Remove an overlay with the given ID or all overlays matching the given filter.\n *\n * @see Overlays#get for filter options.\n *\n * @param {OverlaysFilter} filter The filter to be used to find the overlay.\n */\nOverlays.prototype.remove = function(filter) {\n\n var overlays = this.get(filter) || [];\n\n if (!isArray(overlays)) {\n overlays = [ overlays ];\n }\n\n var self = this;\n\n forEach(overlays, function(overlay) {\n\n var container = self._getOverlayContainer(overlay.element, true);\n\n if (overlay) {\n domRemove(overlay.html);\n domRemove(overlay.htmlContainer);\n\n delete overlay.htmlContainer;\n delete overlay.element;\n\n delete self._overlays[overlay.id];\n }\n\n if (container) {\n var idx = container.overlays.indexOf(overlay);\n if (idx !== -1) {\n container.overlays.splice(idx, 1);\n }\n }\n });\n\n};\n\n/**\n * Checks whether overlays are shown.\n *\n * @returns {boolean} Whether overlays are shown.\n */\nOverlays.prototype.isShown = function() {\n return this._overlayRoot.style.display !== 'none';\n};\n\n/**\n * Show all overlays.\n */\nOverlays.prototype.show = function() {\n setVisible(this._overlayRoot);\n};\n\n/**\n * Hide all overlays.\n */\nOverlays.prototype.hide = function() {\n setVisible(this._overlayRoot, false);\n};\n\n/**\n * Remove all overlays and their container.\n */\nOverlays.prototype.clear = function() {\n this._overlays = {};\n\n this._overlayContainers = [];\n\n domClear(this._overlayRoot);\n};\n\nOverlays.prototype._updateOverlayContainer = function(container) {\n var element = container.element,\n html = container.html;\n\n // update container left,top according to the elements x,y coordinates\n // this ensures we can attach child elements relative to this container\n\n var x = element.x,\n y = element.y;\n\n if (element.waypoints) {\n var bbox = getBBox(element);\n x = bbox.x;\n y = bbox.y;\n }\n\n setPosition(html, x, y);\n\n domAttr(container.html, 'data-container-id', element.id);\n};\n\n\nOverlays.prototype._updateOverlay = function(overlay) {\n\n var position = overlay.position,\n htmlContainer = overlay.htmlContainer,\n element = overlay.element;\n\n // update overlay html relative to shape because\n // it is already positioned on the element\n\n // update relative\n var left = position.left,\n top = position.top;\n\n if (position.right !== undefined) {\n\n var width;\n\n if (element.waypoints) {\n width = getBBox(element).width;\n } else {\n width = element.width;\n }\n\n left = position.right * -1 + width;\n }\n\n if (position.bottom !== undefined) {\n\n var height;\n\n if (element.waypoints) {\n height = getBBox(element).height;\n } else {\n height = element.height;\n }\n\n top = position.bottom * -1 + height;\n }\n\n setPosition(htmlContainer, left || 0, top || 0);\n this._updateOverlayVisibilty(overlay, this._canvas.viewbox());\n};\n\n\nOverlays.prototype._createOverlayContainer = function(element) {\n var html = domify('<div class=\"djs-overlays\" />');\n assignStyle(html, { position: 'absolute' });\n\n this._overlayRoot.appendChild(html);\n\n var container = {\n html: html,\n element: element,\n overlays: []\n };\n\n this._updateOverlayContainer(container);\n\n this._overlayContainers.push(container);\n\n return container;\n};\n\n\nOverlays.prototype._updateRoot = function(viewbox) {\n var scale = viewbox.scale || 1;\n\n var matrix = 'matrix(' +\n [\n scale,\n 0,\n 0,\n scale,\n -1 * viewbox.x * scale,\n -1 * viewbox.y * scale\n ].join(',') +\n ')';\n\n setTransform(this._overlayRoot, matrix);\n};\n\n\nOverlays.prototype._getOverlayContainer = function(element, raw) {\n var container = find(this._overlayContainers, function(c) {\n return c.element === element;\n });\n\n\n if (!container && !raw) {\n return this._createOverlayContainer(element);\n }\n\n return container;\n};\n\n\nOverlays.prototype._addOverlay = function(overlay) {\n\n var id = overlay.id,\n element = overlay.element,\n html = overlay.html,\n htmlContainer,\n overlayContainer;\n\n // unwrap jquery (for those who need it)\n if (html.get && html.constructor.prototype.jquery) {\n html = html.get(0);\n }\n\n // create proper html elements from\n // overlay HTML strings\n if (isString(html)) {\n html = domify(html);\n }\n\n overlayContainer = this._getOverlayContainer(element);\n\n htmlContainer = domify('<div class=\"djs-overlay\" data-overlay-id=\"' + id + '\">');\n assignStyle(htmlContainer, { position: 'absolute' });\n\n htmlContainer.appendChild(html);\n\n if (overlay.type) {\n domClasses(htmlContainer).add('djs-overlay-' + overlay.type);\n }\n\n var elementRoot = this._canvas.findRoot(element);\n var activeRoot = this._canvas.getRootElement();\n\n setVisible(htmlContainer, elementRoot === activeRoot);\n\n overlay.htmlContainer = htmlContainer;\n\n overlayContainer.overlays.push(overlay);\n overlayContainer.html.appendChild(htmlContainer);\n\n this._overlays[id] = overlay;\n\n this._updateOverlay(overlay);\n this._updateOverlayVisibilty(overlay, this._canvas.viewbox());\n};\n\n\nOverlays.prototype._updateOverlayVisibilty = function(overlay, viewbox) {\n var show = overlay.show,\n rootElement = this._canvas.findRoot(overlay.element),\n minZoom = show && show.minZoom,\n maxZoom = show && show.maxZoom,\n htmlContainer = overlay.htmlContainer,\n activeRootElement = this._canvas.getRootElement(),\n visible = true;\n\n if (rootElement !== activeRootElement) {\n visible = false;\n } else if (show) {\n if (\n (isDefined(minZoom) && minZoom > viewbox.scale) ||\n (isDefined(maxZoom) && maxZoom < viewbox.scale)\n ) {\n visible = false;\n }\n }\n\n setVisible(htmlContainer, visible);\n\n this._updateOverlayScale(overlay, viewbox);\n};\n\n\nOverlays.prototype._updateOverlayScale = function(overlay, viewbox) {\n var shouldScale = overlay.scale,\n minScale,\n maxScale,\n htmlContainer = overlay.htmlContainer;\n\n var scale, transform = '';\n\n if (shouldScale !== true) {\n\n if (shouldScale === false) {\n minScale = 1;\n maxScale = 1;\n } else {\n minScale = shouldScale.min;\n maxScale = shouldScale.max;\n }\n\n if (isDefined(minScale) && viewbox.scale < minScale) {\n scale = (1 / viewbox.scale || 1) * minScale;\n }\n\n if (isDefined(maxScale) && viewbox.scale > maxScale) {\n scale = (1 / viewbox.scale || 1) * maxScale;\n }\n }\n\n if (isDefined(scale)) {\n transform = 'scale(' + scale + ',' + scale + ')';\n }\n\n setTransform(htmlContainer, transform);\n};\n\n\nOverlays.prototype._updateOverlaysVisibilty = function(viewbox) {\n\n var self = this;\n\n forEach(this._overlays, function(overlay) {\n self._updateOverlayVisibilty(overlay, viewbox);\n });\n};\n\n\nOverlays.prototype._init = function() {\n\n var eventBus = this._eventBus;\n\n var self = this;\n\n\n // scroll/zoom integration\n\n function updateViewbox(viewbox) {\n self._updateRoot(viewbox);\n self._updateOverlaysVisibilty(viewbox);\n\n self.show();\n }\n\n eventBus.on('canvas.viewbox.changing', function(event) {\n self.hide();\n });\n\n eventBus.on('canvas.viewbox.changed', function(event) {\n updateViewbox(event.viewbox);\n });\n\n\n // remove integration\n\n eventBus.on([ 'shape.remove', 'connection.remove' ], function(e) {\n var element = e.element;\n var overlays = self.get({ element: element });\n\n forEach(overlays, function(o) {\n self.remove(o.id);\n });\n\n var container = self._getOverlayContainer(element);\n\n if (container) {\n domRemove(container.html);\n var i = self._overlayContainers.indexOf(container);\n if (i !== -1) {\n self._overlayContainers.splice(i, 1);\n }\n }\n });\n\n\n // move integration\n\n eventBus.on('element.changed', LOW_PRIORITY, function(e) {\n var element = e.element;\n\n var container = self._getOverlayContainer(element, true);\n\n if (container) {\n forEach(container.overlays, function(overlay) {\n self._updateOverlay(overlay);\n });\n\n self._updateOverlayContainer(container);\n }\n });\n\n\n // marker integration, simply add them on the overlays as classes, too.\n\n eventBus.on('element.marker.update', function(e) {\n var container = self._getOverlayContainer(e.element, true);\n if (container) {\n domClasses(container.html)[e.add ? 'add' : 'remove'](e.marker);\n }\n });\n\n\n eventBus.on('root.set', function() {\n self._updateOverlaysVisibilty(self._canvas.viewbox());\n });\n\n // clear overlays with diagram\n\n eventBus.on('diagram.clear', this.clear, this);\n};\n\n\n\n// helpers /////////////////////////////\n\nfunction createRoot(parentNode) {\n var root = domify(\n '<div class=\"djs-overlay-container\" />'\n );\n\n assignStyle(root, {\n position: 'absolute',\n width: 0,\n height: 0\n });\n\n parentNode.insertBefore(root, parentNode.firstChild);\n\n return root;\n}\n\nfunction setPosition(el, x, y) {\n assignStyle(el, { left: x + 'px', top: y + 'px' });\n}\n\n/**\n * Set element visible\n *\n * @param {DOMElement} el\n * @param {boolean} [visible=true]\n */\nfunction setVisible(el, visible) {\n el.style.display = visible === false ? 'none' : '';\n}\n\nfunction setTransform(el, transform) {\n\n el.style['transform-origin'] = 'top left';\n\n [ '', '-ms-', '-webkit-' ].forEach(function(prefix) {\n el.style[prefix + 'transform'] = transform;\n });\n}","import Overlays from './Overlays';\n\nexport default {\n __init__: [ 'overlays' ],\n overlays: [ 'type', Overlays ]\n};","import {\n getType as getElementType\n} from '../../util/Elements';\n\n/**\n * @typedef {import('../../core/Canvas').default} Canvas\n * @typedef {import('../../core/ElementRegistry').default} ElementRegistry\n * @typedef {import('../../core/EventBus').default} EventBus\n * @typedef {import('../../core/GraphicsFactory').default} GraphicsFactory\n */\n\n/**\n * Adds change support to the diagram, including\n *\n * <ul>\n * <li>redrawing shapes and connections on change</li>\n * </ul>\n *\n * @param {EventBus} eventBus\n * @param {Canvas} canvas\n * @param {ElementRegistry} elementRegistry\n * @param {GraphicsFactory} graphicsFactory\n */\nexport default function ChangeSupport(\n eventBus, canvas, elementRegistry,\n graphicsFactory) {\n\n\n // redraw shapes / connections on change\n\n eventBus.on('element.changed', function(event) {\n\n var element = event.element;\n\n // element might have been deleted and replaced by new element with same ID\n // thus check for parent of element except for root element\n if (element.parent || element === canvas.getRootElement()) {\n event.gfx = elementRegistry.getGraphics(element);\n }\n\n // shape + gfx may have been deleted\n if (!event.gfx) {\n return;\n }\n\n eventBus.fire(getElementType(element) + '.changed', event);\n });\n\n eventBus.on('elements.changed', function(event) {\n\n var elements = event.elements;\n\n elements.forEach(function(e) {\n eventBus.fire('element.changed', { element: e });\n });\n\n graphicsFactory.updateContainments(elements);\n });\n\n eventBus.on('shape.changed', function(event) {\n graphicsFactory.update('shape', event.element, event.gfx);\n });\n\n eventBus.on('connection.changed', function(event) {\n graphicsFactory.update('connection', event.element, event.gfx);\n });\n}\n\nChangeSupport.$inject = [\n 'eventBus',\n 'canvas',\n 'elementRegistry',\n 'graphicsFactory'\n];","import ChangeSupport from './ChangeSupport';\n\nexport default {\n __init__: [ 'changeSupport' ],\n changeSupport: [ 'type', ChangeSupport ]\n};","import {\n forEach,\n isFunction,\n isArray,\n isNumber,\n isObject\n} from 'min-dash';\n\n/**\n * @typedef {import('../core/EventBus').default} EventBus\n * @typedef {import(./CommandInterceptor).HandlerFunction} HandlerFunction\n * @typedef {import(./CommandInterceptor).ComposeHandlerFunction} ComposeHandlerFunction\n */\n\nvar DEFAULT_PRIORITY = 1000;\n\n/**\n * A utility that can be used to plug into the command execution for\n * extension and/or validation.\n *\n * @class\n * @constructor\n *\n * @param {EventBus} eventBus\n *\n * @example\n *\n * import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';\n *\n * class CommandLogger extends CommandInterceptor {\n * constructor(eventBus) {\n * super(eventBus);\n *\n * this.preExecute('shape.create', (event) => {\n * console.log('commandStack.shape-create.preExecute', event);\n * });\n * }\n */\nexport default function CommandInterceptor(eventBus) {\n\n /**\n * @type {EventBus}\n */\n this._eventBus = eventBus;\n}\n\nCommandInterceptor.$inject = [ 'eventBus' ];\n\nfunction unwrapEvent(fn, that) {\n return function(event) {\n return fn.call(that || null, event.context, event.command, event);\n };\n}\n\n/**\n * Intercept a command during one of the phases.\n *\n * @param {string|string[]} [events] One or more commands to intercept.\n * @param {string} [hook] Phase during which to intercept command.\n * @param {number} [priority] Priority with which command will be intercepted.\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn Callback.\n * @param {boolean} [unwrap] Whether the event should be unwrapped.\n * @param {*} [that] `this` value the callback will be called with.\n */\nCommandInterceptor.prototype.on = function(events, hook, priority, handlerFn, unwrap, that) {\n\n if (isFunction(hook) || isNumber(hook)) {\n that = unwrap;\n unwrap = handlerFn;\n handlerFn = priority;\n priority = hook;\n hook = null;\n }\n\n if (isFunction(priority)) {\n that = unwrap;\n unwrap = handlerFn;\n handlerFn = priority;\n priority = DEFAULT_PRIORITY;\n }\n\n if (isObject(unwrap)) {\n that = unwrap;\n unwrap = false;\n }\n\n if (!isFunction(handlerFn)) {\n throw new Error('handlerFn must be a function');\n }\n\n if (!isArray(events)) {\n events = [ events ];\n }\n\n var eventBus = this._eventBus;\n\n forEach(events, function(event) {\n\n // concat commandStack(.event)?(.hook)?\n var fullEvent = [ 'commandStack', event, hook ].filter(function(e) { return e; }).join('.');\n\n eventBus.on(fullEvent, priority, unwrap ? unwrapEvent(handlerFn, that) : handlerFn, that);\n });\n};\n\n\nvar hooks = [\n 'canExecute',\n 'preExecute',\n 'preExecuted',\n 'execute',\n 'executed',\n 'postExecute',\n 'postExecuted',\n 'revert',\n 'reverted'\n];\n\n/*\n * Add prototype methods for each phase of command execution (e.g. execute,\n * revert).\n */\nforEach(hooks, function(hook) {\n\n /**\n * Add prototype method for a specific phase of command execution.\n *\n * @param {string|string[]} [events] One or more commands to intercept.\n * @param {number} [priority] Priority with which command will be intercepted.\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn Callback.\n * @param {boolean} [unwrap] Whether the event should be unwrapped.\n * @param {*} [that] `this` value the callback will be called with.\n */\n CommandInterceptor.prototype[hook] = function(events, priority, handlerFn, unwrap, that) {\n\n if (isFunction(events) || isNumber(events)) {\n that = unwrap;\n unwrap = handlerFn;\n handlerFn = priority;\n priority = events;\n events = null;\n }\n\n this.on(events, hook, priority, handlerFn, unwrap, that);\n };\n});\n","import inherits from 'inherits-browser';\n\nimport CommandInterceptor from '../../command/CommandInterceptor';\n\n/**\n * @typedef {import('didi').Injector} Injector\n *\n * @typedef {import('../../core/Canvas').default} Canvas\n */\n\n/**\n * A modeling behavior that ensures we set the correct root element\n * as we undo and redo commands.\n *\n * @param {Canvas} canvas\n * @param {Injector} injector\n */\nexport default function RootElementsBehavior(canvas, injector) {\n\n injector.invoke(CommandInterceptor, this);\n\n this.executed(function(event) {\n var context = event.context;\n\n if (context.rootElement) {\n canvas.setRootElement(context.rootElement);\n } else {\n context.rootElement = canvas.getRootElement();\n }\n });\n\n this.revert(function(event) {\n var context = event.context;\n\n if (context.rootElement) {\n canvas.setRootElement(context.rootElement);\n }\n });\n}\n\ninherits(RootElementsBehavior, CommandInterceptor);\n\nRootElementsBehavior.$inject = [ 'canvas', 'injector' ];","import RootElementsBehavior from './RootElementsBehavior';\n\nexport default {\n __init__: [ 'rootElementsBehavior' ],\n rootElementsBehavior: [ 'type', RootElementsBehavior ]\n};\n","/**\n * @param {string} str\n * @returns {string}\n */\nexport function escapeCSS(str) {\n return CSS.escape(str);\n}\n\nvar HTML_ESCAPE_MAP = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': '''\n};\n\nexport function escapeHTML(str) {\n str = '' + str;\n\n return str && str.replace(/[&<>\"']/g, function(match) {\n return HTML_ESCAPE_MAP[match];\n });\n}\n","import { getDi, is } from './ModelUtil';\n\n\nexport var planeSuffix = '_plane';\n\n/**\n * Get primary shape ID for a plane.\n *\n * @param {djs.model.Base|ModdleElement} element\n *\n * @returns {String}\n */\nexport function getShapeIdFromPlane(element) {\n var id = element.id;\n\n return removePlaneSuffix(id);\n}\n\n/**\n * Get plane ID for a primary shape.\n *\n * @param {djs.model.Base|ModdleElement} element\n *\n * @returns {String}\n */\nexport function getPlaneIdFromShape(element) {\n var id = element.id;\n\n if (is(element, 'bpmn:SubProcess')) {\n return addPlaneSuffix(id);\n }\n\n return id;\n}\n\n/**\n * Get plane ID for primary shape ID.\n *\n * @param {String} id\n *\n * @returns {String}\n */\nexport function toPlaneId(id) {\n return addPlaneSuffix(id);\n}\n\n/**\n * Check wether element is plane.\n *\n * @param {djs.model.Base|ModdleElement} element\n *\n * @returns {Boolean}\n */\nexport function isPlane(element) {\n var di = getDi(element);\n\n return is(di, 'bpmndi:BPMNPlane');\n}\n\nfunction addPlaneSuffix(id) {\n return id + planeSuffix;\n}\n\nfunction removePlaneSuffix(id) {\n return id.replace(new RegExp(planeSuffix + '$'), '');\n}","import { domify, classes } from 'min-dom';\nimport { find } from 'min-dash';\n\nimport { escapeHTML } from 'diagram-js/lib/util/EscapeUtil';\nimport { getBusinessObject, is } from '../../util/ModelUtil';\nimport {\n getPlaneIdFromShape\n} from '../../util/DrilldownUtil';\n\nvar OPEN_CLASS = 'bjs-breadcrumbs-shown';\n\n\n/**\n * Adds overlays that allow switching planes on collapsed subprocesses.\n *\n * @param {eventBus} eventBus\n * @param {elementRegistry} elementRegistry\n * @param {overlays} overlays\n * @param {canvas} canvas\n */\nexport default function DrilldownBreadcrumbs(eventBus, elementRegistry, overlays, canvas) {\n var breadcrumbs = domify('<ul class=\"bjs-breadcrumbs\"></ul>');\n var container = canvas.getContainer();\n var containerClasses = classes(container);\n container.appendChild(breadcrumbs);\n\n var boParents = [];\n\n // update breadcrumbs if name or ID of the primary shape changes\n eventBus.on('element.changed', function(e) {\n var shape = e.element,\n bo = getBusinessObject(shape);\n\n var isPresent = find(boParents, function(el) {\n return el === bo;\n });\n\n if (!isPresent) {\n return;\n }\n\n updateBreadcrumbs();\n });\n\n /**\n * Updates the displayed breadcrumbs. If no element is provided, only the\n * labels are updated.\n *\n * @param {djs.model.Base} [element]\n */\n function updateBreadcrumbs(element) {\n if (element) {\n boParents = getBoParentChain(element);\n }\n\n var path = boParents.map(function(parent) {\n var title = escapeHTML(parent.name || parent.id);\n var link = domify('<li><span class=\"bjs-crumb\"><a title=\"' + title + '\">' + title + '</a></span></li>');\n\n var parentPlane = canvas.findRoot(getPlaneIdFromShape(parent)) || canvas.findRoot(parent.id);\n\n // when the root is a collaboration, the process does not have a corresponding\n // element in the elementRegisty. Instead, we search for the corresponding participant\n if (!parentPlane && is(parent, 'bpmn:Process')) {\n var participant = elementRegistry.find(function(element) {\n var bo = getBusinessObject(element);\n return bo && bo.processRef && bo.processRef === parent;\n });\n\n parentPlane = canvas.findRoot(participant.id);\n }\n\n link.addEventListener('click', function() {\n canvas.setRootElement(parentPlane);\n });\n\n return link;\n });\n\n breadcrumbs.innerHTML = '';\n\n // show breadcrumbs and expose state to .djs-container\n var visible = path.length > 1;\n containerClasses.toggle(OPEN_CLASS, visible);\n\n path.forEach(function(el) {\n breadcrumbs.appendChild(el);\n });\n }\n\n eventBus.on('root.set', function(event) {\n updateBreadcrumbs(event.element);\n });\n\n}\n\nDrilldownBreadcrumbs.$inject = [ 'eventBus', 'elementRegistry', 'overlays', 'canvas' ];\n\n\n// helpers //////////\n\n/**\n * Returns the parents for the element using the business object chain,\n * starting with the root element.\n *\n * @param {djs.model.Shape} child\n *\n * @returns {Array<djs.model.Shape>} parents\n */\nfunction getBoParentChain(child) {\n var bo = getBusinessObject(child);\n\n var parents = [];\n\n for (var element = bo; element; element = element.$parent) {\n if (is(element, 'bpmn:SubProcess') || is(element, 'bpmn:Process')) {\n parents.push(element);\n }\n }\n\n return parents.reverse();\n}","import { is } from '../../util/ModelUtil';\n\n/**\n * Move collapsed subprocesses into view when drilling down.\n *\n * Zoom and scroll are saved in a session.\n *\n * @param {eventBus} eventBus\n * @param {canvas} canvas\n */\nexport default function DrilldownCentering(eventBus, canvas) {\n\n var currentRoot = null;\n var positionMap = new Map();\n\n eventBus.on('root.set', function(event) {\n var newRoot = event.element;\n var currentViewbox = canvas.viewbox();\n var storedViewbox = positionMap.get(newRoot);\n\n positionMap.set(currentRoot, {\n x: currentViewbox.x,\n y: currentViewbox.y,\n zoom: currentViewbox.scale\n });\n\n currentRoot = newRoot;\n\n // current root was replaced with a collaboration, we don't update the viewbox\n if (is(newRoot, 'bpmn:Collaboration') && !storedViewbox) {\n return;\n }\n\n storedViewbox = storedViewbox || { x: 0, y: 0, zoom: 1 };\n\n var dx = (currentViewbox.x - storedViewbox.x) * currentViewbox.scale,\n dy = (currentViewbox.y - storedViewbox.y) * currentViewbox.scale;\n\n if (dx !== 0 || dy !== 0) {\n canvas.scroll({\n dx: dx,\n dy: dy\n });\n }\n\n if (storedViewbox.zoom !== currentViewbox.scale) {\n canvas.zoom(storedViewbox.zoom, { x: 0, y: 0 });\n }\n });\n\n eventBus.on('diagram.clear', function() {\n positionMap.clear();\n currentRoot = null;\n });\n\n}\n\nDrilldownCentering.$inject = [ 'eventBus', 'canvas' ];\n\n\n/**\n * ES5 Map implementation. Works.\n */\nfunction Map() {\n\n this._entries = [];\n\n this.set = function(key, value) {\n\n var found = false;\n\n for (var k in this._entries) {\n if (this._entries[k][0] === key) {\n this._entries[k][1] = value;\n\n found = true;\n\n break;\n }\n }\n\n if (!found) {\n this._entries.push([ key, value ]);\n }\n };\n\n this.get = function(key) {\n\n for (var k in this._entries) {\n if (this._entries[k][0] === key) {\n return this._entries[k][1];\n }\n }\n\n return null;\n };\n\n this.clear = function() {\n this._entries.length = 0;\n };\n\n this.remove = function(key) {\n\n var idx = -1;\n\n for (var k in this._entries) {\n if (this._entries[k][0] === key) {\n idx = k;\n\n break;\n }\n }\n\n if (idx !== -1) {\n this._entries.splice(idx, 1);\n }\n };\n}","\nimport { asBounds, asTRBL } from 'diagram-js/lib/layout/LayoutUtil';\nimport { is, isAny } from '../../util/ModelUtil';\n\nvar DEFAULT_POSITION = {\n x: 180,\n y: 160\n};\n\n/**\n * Hook into `import.render.start` and create new planes for diagrams with\n * collapsed subprocesses and all dis on the same plane.\n *\n * @param {eventBus} eventBus\n * @param {moddle} moddle\n */\nexport default function SubprocessCompatibility(eventBus, moddle) {\n this._eventBus = eventBus;\n this._moddle = moddle;\n\n var self = this;\n\n eventBus.on('import.render.start', 1500, function(e, context) {\n self.handleImport(context.definitions);\n });\n}\n\nSubprocessCompatibility.prototype.handleImport = function(definitions) {\n if (!definitions.diagrams) {\n return;\n }\n\n var self = this;\n this._definitions = definitions;\n this._processToDiagramMap = {};\n\n definitions.diagrams.forEach(function(diagram) {\n if (!diagram.plane || !diagram.plane.bpmnElement) {\n return;\n }\n\n self._processToDiagramMap[diagram.plane.bpmnElement.id] = diagram;\n });\n\n var newDiagrams = [];\n definitions.diagrams.forEach(function(diagram) {\n var createdDiagrams = self.createNewDiagrams(diagram.plane);\n Array.prototype.push.apply(newDiagrams, createdDiagrams);\n });\n\n newDiagrams.forEach(function(diagram) {\n self.movePlaneElementsToOrigin(diagram.plane);\n });\n};\n\n\n/**\n * Moves all DI elements from collapsed subprocesses to a new plane.\n *\n * @param {Object} plane\n * @return {Array} new diagrams created for the collapsed subprocesses\n */\nSubprocessCompatibility.prototype.createNewDiagrams = function(plane) {\n var self = this;\n\n var collapsedElements = [];\n var elementsToMove = [];\n\n plane.get('planeElement').forEach(function(diElement) {\n var bo = diElement.bpmnElement;\n\n if (!bo) {\n return;\n }\n\n var parent = bo.$parent;\n\n if (is(bo, 'bpmn:SubProcess') && !diElement.isExpanded) {\n collapsedElements.push(bo);\n }\n\n if (shouldMoveToPlane(bo, plane)) {\n\n // don't change the array while we iterate over it\n elementsToMove.push({ diElement: diElement, parent: parent });\n }\n });\n\n var newDiagrams = [];\n\n // create new planes for all collapsed subprocesses, even when they are empty\n collapsedElements.forEach(function(element) {\n if (!self._processToDiagramMap[element.id]) {\n var diagram = self.createDiagram(element);\n self._processToDiagramMap[element.id] = diagram;\n newDiagrams.push(diagram);\n }\n });\n\n elementsToMove.forEach(function(element) {\n var diElement = element.diElement;\n var parent = element.parent;\n\n // parent is expanded, get nearest collapsed parent\n while (parent && collapsedElements.indexOf(parent) === -1) {\n parent = parent.$parent;\n }\n\n // false positive, all parents are expanded\n if (!parent) {\n return;\n }\n\n var diagram = self._processToDiagramMap[parent.id];\n self.moveToDiPlane(diElement, diagram.plane);\n });\n\n return newDiagrams;\n};\n\nSubprocessCompatibility.prototype.movePlaneElementsToOrigin = function(plane) {\n var elements = plane.get('planeElement');\n\n // get bounding box of all elements\n var planeBounds = getPlaneBounds(plane);\n\n var offset = {\n x: planeBounds.x - DEFAULT_POSITION.x,\n y: planeBounds.y - DEFAULT_POSITION.y\n };\n\n elements.forEach(function(diElement) {\n if (diElement.waypoint) {\n diElement.waypoint.forEach(function(waypoint) {\n waypoint.x = waypoint.x - offset.x;\n waypoint.y = waypoint.y - offset.y;\n });\n } else if (diElement.bounds) {\n diElement.bounds.x = diElement.bounds.x - offset.x;\n diElement.bounds.y = diElement.bounds.y - offset.y;\n }\n });\n};\n\n\nSubprocessCompatibility.prototype.moveToDiPlane = function(diElement, newPlane) {\n var containingDiagram = findRootDiagram(diElement);\n\n // remove DI from old Plane and add it to the new one\n var parentPlaneElement = containingDiagram.plane.get('planeElement');\n parentPlaneElement.splice(parentPlaneElement.indexOf(diElement), 1);\n newPlane.get('planeElement').push(diElement);\n};\n\n\nSubprocessCompatibility.prototype.createDiagram = function(bo) {\n var plane = this._moddle.create('bpmndi:BPMNPlane', { bpmnElement: bo });\n var diagram = this._moddle.create('bpmndi:BPMNDiagram', {\n plane: plane\n });\n plane.$parent = diagram;\n plane.bpmnElement = bo;\n diagram.$parent = this._definitions;\n this._definitions.diagrams.push(diagram);\n return diagram;\n};\n\nSubprocessCompatibility.$inject = [ 'eventBus', 'moddle' ];\n\n\n// helpers //////////////////////////\n\nfunction findRootDiagram(element) {\n if (is(element, 'bpmndi:BPMNDiagram')) {\n return element;\n } else {\n return findRootDiagram(element.$parent);\n }\n}\n\nfunction getPlaneBounds(plane) {\n var planeTrbl = {\n top: Infinity,\n right: -Infinity,\n bottom: -Infinity,\n left: Infinity\n };\n\n plane.planeElement.forEach(function(element) {\n if (!element.bounds) {\n return;\n }\n\n var trbl = asTRBL(element.bounds);\n\n planeTrbl.top = Math.min(trbl.top, planeTrbl.top);\n planeTrbl.left = Math.min(trbl.left, planeTrbl.left);\n });\n\n return asBounds(planeTrbl);\n}\n\nfunction shouldMoveToPlane(bo, plane) {\n var parent = bo.$parent;\n\n // don't move elements that are already on the plane\n if (!is(parent, 'bpmn:SubProcess') || parent === plane.bpmnElement) {\n return false;\n }\n\n // dataAssociations are children of the subprocess but rendered on process level\n // cf. https://github.com/bpmn-io/bpmn-js/issues/1619\n if (isAny(bo, [ 'bpmn:DataInputAssociation', 'bpmn:DataOutputAssociation' ])) {\n return false;\n }\n\n return true;\n}\n","import inherits from 'inherits-browser';\n\nimport CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';\nimport { is } from '../../util/ModelUtil';\nimport { classes, domify } from 'min-dom';\nimport { getPlaneIdFromShape } from '../../util/DrilldownUtil';\n\nvar LOW_PRIORITY = 250;\nvar ARROW_DOWN_SVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 16 16\"><path fill-rule=\"evenodd\" d=\"M4.81801948,3.50735931 L10.4996894,9.1896894 L10.5,4 L12,4 L12,12 L4,12 L4,10.5 L9.6896894,10.4996894 L3.75735931,4.56801948 C3.46446609,4.27512627 3.46446609,3.80025253 3.75735931,3.50735931 C4.05025253,3.21446609 4.52512627,3.21446609 4.81801948,3.50735931 Z\"/></svg>';\n\nvar EMPTY_MARKER = 'bjs-drilldown-empty';\n\nexport default function DrilldownOverlayBehavior(\n canvas, eventBus, elementRegistry, overlays\n) {\n CommandInterceptor.call(this, eventBus);\n\n this._canvas = canvas;\n this._eventBus = eventBus;\n this._elementRegistry = elementRegistry;\n this._overlays = overlays;\n\n var self = this;\n\n this.executed('shape.toggleCollapse', LOW_PRIORITY, function(context) {\n var shape = context.shape;\n\n // Add overlay to the collapsed shape\n if (self.canDrillDown(shape)) {\n self.addOverlay(shape);\n } else {\n self.removeOverlay(shape);\n }\n }, true);\n\n\n this.reverted('shape.toggleCollapse', LOW_PRIORITY, function(context) {\n var shape = context.shape;\n\n // Add overlay to the collapsed shape\n if (self.canDrillDown(shape)) {\n self.addOverlay(shape);\n } else {\n self.removeOverlay(shape);\n }\n }, true);\n\n\n this.executed([ 'shape.create', 'shape.move', 'shape.delete' ], LOW_PRIORITY,\n function(context) {\n var oldParent = context.oldParent,\n newParent = context.newParent || context.parent,\n shape = context.shape;\n\n // Add overlay to the collapsed shape\n if (self.canDrillDown(shape)) {\n self.addOverlay(shape);\n }\n\n self.updateDrilldownOverlay(oldParent);\n self.updateDrilldownOverlay(newParent);\n self.updateDrilldownOverlay(shape);\n }, true);\n\n\n this.reverted([ 'shape.create', 'shape.move', 'shape.delete' ], LOW_PRIORITY,\n function(context) {\n var oldParent = context.oldParent,\n newParent = context.newParent || context.parent,\n shape = context.shape;\n\n // Add overlay to the collapsed shape\n if (self.canDrillDown(shape)) {\n self.addOverlay(shape);\n }\n\n self.updateDrilldownOverlay(oldParent);\n self.updateDrilldownOverlay(newParent);\n self.updateDrilldownOverlay(shape);\n }, true);\n\n\n eventBus.on('import.render.complete', function() {\n elementRegistry.filter(function(e) {\n return self.canDrillDown(e);\n }).map(function(el) {\n self.addOverlay(el);\n });\n });\n\n}\n\ninherits(DrilldownOverlayBehavior, CommandInterceptor);\n\nDrilldownOverlayBehavior.prototype.updateDrilldownOverlay = function(shape) {\n var canvas = this._canvas;\n\n if (!shape) {\n return;\n }\n\n var root = canvas.findRoot(shape);\n if (root) {\n this.updateOverlayVisibility(root);\n }\n};\n\n\nDrilldownOverlayBehavior.prototype.canDrillDown = function(element) {\n var canvas = this._canvas;\n return is(element, 'bpmn:SubProcess') && canvas.findRoot(getPlaneIdFromShape(element));\n};\n\n/**\n * Updates visibility of the drilldown overlay. If the plane has no elements,\n * the drilldown will be only shown when the element is selected.\n *\n * @param {djs.model.Shape|djs.model.Root} element collapsed shape or root element\n */\nDrilldownOverlayBehavior.prototype.updateOverlayVisibility = function(element) {\n var overlays = this._overlays;\n\n var bo = element.businessObject;\n\n var overlay = overlays.get({ element: bo.id, type: 'drilldown' })[0];\n\n if (!overlay) {\n return;\n }\n\n var hasContent = bo && bo.flowElements && bo.flowElements.length;\n classes(overlay.html).toggle(EMPTY_MARKER, !hasContent);\n};\n\n/**\n * Attaches a drilldown button to the given element. We assume that the plane has\n * the same id as the element.\n *\n * @param {djs.model.Shape} element collapsed shape\n */\nDrilldownOverlayBehavior.prototype.addOverlay = function(element) {\n var canvas = this._canvas;\n var overlays = this._overlays;\n\n var existingOverlays = overlays.get({ element: element, type: 'drilldown' });\n if (existingOverlays.length) {\n this.removeOverlay(element);\n }\n\n var button = domify('<button class=\"bjs-drilldown\">' + ARROW_DOWN_SVG + '</button>');\n\n button.addEventListener('click', function() {\n canvas.setRootElement(canvas.findRoot(getPlaneIdFromShape(element)));\n });\n\n overlays.add(element, 'drilldown', {\n position: {\n bottom: -7,\n right: -8\n },\n html: button\n });\n\n this.updateOverlayVisibility(element);\n};\n\nDrilldownOverlayBehavior.prototype.removeOverlay = function(element) {\n var overlays = this._overlays;\n\n overlays.remove({\n element: element,\n type: 'drilldown'\n });\n};\n\nDrilldownOverlayBehavior.$inject = [\n 'canvas',\n 'eventBus',\n 'elementRegistry',\n 'overlays'\n];","import OverlaysModule from 'diagram-js/lib/features/overlays';\nimport ChangeSupportModule from 'diagram-js/lib/features/change-support';\nimport RootElementsModule from 'diagram-js/lib/features/root-elements';\n\nimport DrilldownBreadcrumbs from './DrilldownBreadcrumbs';\nimport DrilldownCentering from './DrilldownCentering';\nimport SubprocessCompatibility from './SubprocessCompatibility';\nimport DrilldownOverlayBehavior from './DrilldownOverlayBehavior';\n\nexport default {\n __depends__: [ OverlaysModule, ChangeSupportModule, RootElementsModule ],\n __init__: [ 'drilldownBreadcrumbs', 'drilldownOverlayBehavior', 'drilldownCentering', 'subprocessCompatibility' ],\n drilldownBreadcrumbs: [ 'type', DrilldownBreadcrumbs ],\n drilldownCentering: [ 'type', DrilldownCentering ],\n drilldownOverlayBehavior: [ 'type', DrilldownOverlayBehavior ],\n subprocessCompatibility: [ 'type', SubprocessCompatibility ]\n};","import inherits from 'inherits-browser';\n\nimport CoreModule from './core';\nimport TranslateModule from 'diagram-js/lib/i18n/translate';\nimport SelectionModule from 'diagram-js/lib/features/selection';\nimport OverlaysModule from 'diagram-js/lib/features/overlays';\nimport DrilldownModdule from './features/drilldown';\n\nimport BaseViewer from './BaseViewer';\n\n\n/**\n * @typedef { import('didi').ModuleDeclaration } Module\n */\n\n/**\n * A viewer for BPMN 2.0 diagrams.\n *\n * Have a look at {@link NavigatedViewer} or {@link Modeler} for bundles that include\n * additional features.\n *\n *\n * ## Extending the Viewer\n *\n * In order to extend the viewer pass extension modules to bootstrap via the\n * `additionalModules` option. An extension module is an object that exposes\n * named services.\n *\n * The following example depicts the integration of a simple\n * logging component that integrates with interaction events:\n *\n *\n * ```javascript\n *\n * // logging component\n * function InteractionLogger(eventBus) {\n * eventBus.on('element.hover', function(event) {\n * console.log()\n * })\n * }\n *\n * InteractionLogger.$inject = [ 'eventBus' ]; // minification save\n *\n * // extension module\n * var extensionModule = {\n * __init__: [ 'interactionLogger' ],\n * interactionLogger: [ 'type', InteractionLogger ]\n * };\n *\n * // extend the viewer\n * var bpmnViewer = new Viewer({ additionalModules: [ extensionModule ] });\n * bpmnViewer.importXML(...);\n * ```\n *\n * @param {Object} [options] configuration options to pass to the viewer\n * @param {DOMElement} [options.container] the container to render the viewer in, defaults to body.\n * @param {string|number} [options.width] the width of the viewer\n * @param {string|number} [options.height] the height of the viewer\n * @param {Object} [options.moddleExtensions] extension packages to provide\n * @param {Module[]} [options.modules] a list of modules to override the default modules\n * @param {Module[]} [options.additionalModules] a list of modules to use with the default modules\n */\nexport default function Viewer(options) {\n BaseViewer.call(this, options);\n}\n\ninherits(Viewer, BaseViewer);\n\n// modules the viewer is composed of\nViewer.prototype._modules = [\n CoreModule,\n TranslateModule,\n SelectionModule,\n OverlaysModule,\n DrilldownModdule\n];\n\n// default moddle extensions the viewer is composed of\nViewer.prototype._moddleExtensions = {};","import {\n classes as domClasses\n} from 'min-dom';\n\nvar CURSOR_CLS_PATTERN = /^djs-cursor-.*$/;\n\n\nexport function set(mode) {\n var classes = domClasses(document.body);\n\n classes.removeMatching(CURSOR_CLS_PATTERN);\n\n if (mode) {\n classes.add('djs-cursor-' + mode);\n }\n}\n\nexport function unset() {\n set(null);\n}\n\nexport function has(mode) {\n var classes = domClasses(document.body);\n\n return classes.has('djs-cursor-' + mode);\n}\n","var TRAP_PRIORITY = 5000;\n\n/**\n * Installs a click trap that prevents a ghost click following a dragging operation.\n *\n * @return {Function} a function to immediately remove the installed trap.\n */\nexport function install(eventBus, eventName) {\n\n eventName = eventName || 'element.click';\n\n function trap() {\n return false;\n }\n\n eventBus.once(eventName, TRAP_PRIORITY, trap);\n\n return function() {\n eventBus.off(eventName, trap);\n };\n}","export function center(bounds) {\n return {\n x: bounds.x + (bounds.width / 2),\n y: bounds.y + (bounds.height / 2)\n };\n}\n\n\nexport function delta(a, b) {\n return {\n x: a.x - b.x,\n y: a.y - b.y\n };\n}","import {\n set as cursorSet,\n unset as cursorUnset\n} from '../../util/Cursor';\n\nimport {\n install as installClickTrap\n} from '../../util/ClickTrap';\n\nimport {\n delta as deltaPos\n} from '../../util/PositionUtil';\n\nimport {\n event as domEvent,\n closest as domClosest\n} from 'min-dom';\n\nimport {\n toPoint\n} from '../../util/Event';\n\n/**\n * @typedef {import('../../core/Canvas').default} Canvas\n * @typedef {import('../../core/EventBus').default} EventBus\n */\n\nvar THRESHOLD = 15;\n\n\n/**\n * Move the canvas via mouse.\n *\n * @param {EventBus} eventBus\n * @param {Canvas} canvas\n */\nexport default function MoveCanvas(eventBus, canvas) {\n\n var context;\n\n\n // listen for move on element mouse down;\n // allow others to hook into the event before us though\n // (dragging / element moving will do this)\n eventBus.on('element.mousedown', 500, function(e) {\n return handleStart(e.originalEvent);\n });\n\n\n function handleMove(event) {\n\n var start = context.start,\n button = context.button,\n position = toPoint(event),\n delta = deltaPos(position, start);\n\n if (!context.dragging && length(delta) > THRESHOLD) {\n context.dragging = true;\n\n if (button === 0) {\n installClickTrap(eventBus);\n }\n\n cursorSet('grab');\n }\n\n if (context.dragging) {\n\n var lastPosition = context.last || context.start;\n\n delta = deltaPos(position, lastPosition);\n\n canvas.scroll({\n dx: delta.x,\n dy: delta.y\n });\n\n context.last = position;\n }\n\n // prevent select\n event.preventDefault();\n }\n\n\n function handleEnd(event) {\n domEvent.unbind(document, 'mousemove', handleMove);\n domEvent.unbind(document, 'mouseup', handleEnd);\n\n context = null;\n\n cursorUnset();\n }\n\n function handleStart(event) {\n\n // event is already handled by '.djs-draggable'\n if (domClosest(event.target, '.djs-draggable')) {\n return;\n }\n\n var button = event.button;\n\n // reject right mouse button or modifier key\n if (button >= 2 || event.ctrlKey || event.shiftKey || event.altKey) {\n return;\n }\n\n context = {\n button: button,\n start: toPoint(event)\n };\n\n domEvent.bind(document, 'mousemove', handleMove);\n domEvent.bind(document, 'mouseup', handleEnd);\n\n // we've handled the event\n return true;\n }\n\n this.isActive = function() {\n return !!context;\n };\n\n}\n\n\nMoveCanvas.$inject = [\n 'eventBus',\n 'canvas'\n];\n\n\n\n// helpers ///////\n\nfunction length(point) {\n return Math.sqrt(Math.pow(point.x, 2) + Math.pow(point.y, 2));\n}\n","import MoveCanvas from './MoveCanvas';\n\nexport default {\n __init__: [ 'moveCanvas' ],\n moveCanvas: [ 'type', MoveCanvas ]\n};","/**\n * Get the logarithm of x with base 10.\n *\n * @param {number} x\n */\nexport function log10(x) {\n return Math.log(x) / Math.log(10);\n}\n\nexport { delta as substract } from './PositionUtil';\n","import {\n log10\n} from '../../util/Math';\n\n/**\n * Get step size for given range and number of steps.\n *\n * @param {Object} range\n * @param {number} range.min\n * @param {number} range.max\n */\nexport function getStepSize(range, steps) {\n\n var minLinearRange = log10(range.min),\n maxLinearRange = log10(range.max);\n\n var absoluteLinearRange = Math.abs(minLinearRange) + Math.abs(maxLinearRange);\n\n return absoluteLinearRange / steps;\n}\n\nexport function cap(range, scale) {\n return Math.max(range.min, Math.min(range.max, scale));\n}\n","import {\n event as domEvent,\n closest as domClosest\n} from 'min-dom';\n\nimport {\n getStepSize,\n cap\n} from './ZoomUtil';\n\nimport {\n log10\n} from '../../util/Math';\n\nimport {\n bind\n} from 'min-dash';\n\n/**\n * @typedef {import('../../core/Canvas').default} Canvas\n * @typedef {import('../../core/EventBus').default} EventBus\n */\n\nvar sign = Math.sign || function(n) {\n return n >= 0 ? 1 : -1;\n};\n\nvar RANGE = { min: 0.2, max: 4 },\n NUM_STEPS = 10;\n\nvar DELTA_THRESHOLD = 0.1;\n\nvar DEFAULT_SCALE = 0.75;\n\n/**\n * An implementation of zooming and scrolling within the\n * {@link Canvas} via the mouse wheel.\n *\n * Mouse wheel zooming / scrolling may be disabled using\n * the {@link toggle(enabled)} method.\n *\n * @param {Object} [config]\n * @param {boolean} [config.enabled=true] default enabled state\n * @param {number} [config.scale=.75] scroll sensivity\n * @param {EventBus} eventBus\n * @param {Canvas} canvas\n */\nexport default function ZoomScroll(config, eventBus, canvas) {\n\n config = config || {};\n\n this._enabled = false;\n\n this._canvas = canvas;\n this._container = canvas._container;\n\n this._handleWheel = bind(this._handleWheel, this);\n\n this._totalDelta = 0;\n this._scale = config.scale || DEFAULT_SCALE;\n\n var self = this;\n\n eventBus.on('canvas.init', function(e) {\n self._init(config.enabled !== false);\n });\n}\n\nZoomScroll.$inject = [\n 'config.zoomScroll',\n 'eventBus',\n 'canvas'\n];\n\nZoomScroll.prototype.scroll = function scroll(delta) {\n this._canvas.scroll(delta);\n};\n\n\nZoomScroll.prototype.reset = function reset() {\n this._canvas.zoom('fit-viewport');\n};\n\n/**\n * Zoom depending on delta.\n *\n * @param {number} delta\n * @param {Object} position\n */\nZoomScroll.prototype.zoom = function zoom(delta, position) {\n\n // zoom with half the step size of stepZoom\n var stepSize = getStepSize(RANGE, NUM_STEPS * 2);\n\n // add until threshold reached\n this._totalDelta += delta;\n\n if (Math.abs(this._totalDelta) > DELTA_THRESHOLD) {\n this._zoom(delta, position, stepSize);\n\n // reset\n this._totalDelta = 0;\n }\n};\n\n\nZoomScroll.prototype._handleWheel = function handleWheel(event) {\n\n // event is already handled by '.djs-scrollable'\n if (domClosest(event.target, '.djs-scrollable', true)) {\n return;\n }\n\n var element = this._container;\n\n event.preventDefault();\n\n // pinch to zoom is mapped to wheel + ctrlKey = true\n // in modern browsers (!)\n\n var isZoom = event.ctrlKey;\n\n var isHorizontalScroll = event.shiftKey;\n\n var factor = -1 * this._scale,\n delta;\n\n if (isZoom) {\n factor *= event.deltaMode === 0 ? 0.020 : 0.32;\n } else {\n factor *= event.deltaMode === 0 ? 1.0 : 16.0;\n }\n\n if (isZoom) {\n var elementRect = element.getBoundingClientRect();\n\n var offset = {\n x: event.clientX - elementRect.left,\n y: event.clientY - elementRect.top\n };\n\n delta = (\n Math.sqrt(\n Math.pow(event.deltaY, 2) +\n Math.pow(event.deltaX, 2)\n ) * sign(event.deltaY) * factor\n );\n\n // zoom in relative to diagram {x,y} coordinates\n this.zoom(delta, offset);\n } else {\n\n if (isHorizontalScroll) {\n delta = {\n dx: factor * event.deltaY,\n dy: 0\n };\n } else {\n delta = {\n dx: factor * event.deltaX,\n dy: factor * event.deltaY\n };\n }\n\n this.scroll(delta);\n }\n};\n\n/**\n * Zoom with fixed step size.\n *\n * @param {number} delta - Zoom delta (1 for zooming in, -1 for out).\n * @param {Object} position\n */\nZoomScroll.prototype.stepZoom = function stepZoom(delta, position) {\n\n var stepSize = getStepSize(RANGE, NUM_STEPS);\n\n this._zoom(delta, position, stepSize);\n};\n\n\n/**\n * Zoom in/out given a step size.\n *\n * @param {number} delta\n * @param {Object} position\n * @param {number} stepSize\n */\nZoomScroll.prototype._zoom = function(delta, position, stepSize) {\n var canvas = this._canvas;\n\n var direction = delta > 0 ? 1 : -1;\n\n var currentLinearZoomLevel = log10(canvas.zoom());\n\n // snap to a proximate zoom step\n var newLinearZoomLevel = Math.round(currentLinearZoomLevel / stepSize) * stepSize;\n\n // increase or decrease one zoom step in the given direction\n newLinearZoomLevel += stepSize * direction;\n\n // calculate the absolute logarithmic zoom level based on the linear zoom level\n // (e.g. 2 for an absolute x2 zoom)\n var newLogZoomLevel = Math.pow(10, newLinearZoomLevel);\n\n canvas.zoom(cap(RANGE, newLogZoomLevel), position);\n};\n\n\n/**\n * Toggle the zoom scroll ability via mouse wheel.\n *\n * @param {boolean} [newEnabled] new enabled state\n */\nZoomScroll.prototype.toggle = function toggle(newEnabled) {\n\n var element = this._container;\n var handleWheel = this._handleWheel;\n\n var oldEnabled = this._enabled;\n\n if (typeof newEnabled === 'undefined') {\n newEnabled = !oldEnabled;\n }\n\n // only react on actual changes\n if (oldEnabled !== newEnabled) {\n\n // add or remove wheel listener based on\n // changed enabled state\n domEvent[newEnabled ? 'bind' : 'unbind'](element, 'wheel', handleWheel, false);\n }\n\n this._enabled = newEnabled;\n\n return newEnabled;\n};\n\n\nZoomScroll.prototype._init = function(newEnabled) {\n this.toggle(newEnabled);\n};\n","import ZoomScroll from './ZoomScroll';\n\nexport default {\n __init__: [ 'zoomScroll' ],\n zoomScroll: [ 'type', ZoomScroll ]\n};","import { App } from 'vue';\nconst _data = {};\n\nconst REQUEST_KEY = 'request';\nconst USE_USER_STORE_KEY = 'useUserStore';\nconst GET_API_DATA_KEY = 'getApiData';\n\nexport function requestInit(request: any) {\n return {\n install(app: App) {\n _data[REQUEST_KEY] = request;\n },\n };\n}\nexport function useUserStoreInit(useUserStore: any) {\n return {\n install(app: App) {\n _data[USE_USER_STORE_KEY] = useUserStore;\n },\n };\n}\nexport function getApiDataInit(getApiData: any) {\n return {\n install(app: App) {\n _data[GET_API_DATA_KEY] = getApiData;\n },\n };\n}\nexport function useRequest() {\n return _data[REQUEST_KEY];\n}\nexport function useUserStore() {\n return _data[USE_USER_STORE_KEY];\n}\nexport function useGetApiData() {\n return _data[GET_API_DATA_KEY];\n}","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (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 };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","import inherits from \"inherits\";\nimport Viewer from \"bpmn-js/lib/Viewer\";\nimport ZoomScrollModule from \"diagram-js/lib/navigation/zoomscroll\";\nimport MoveCanvasModule from \"diagram-js/lib/navigation/movecanvas\";\nfunction CustomViewer(options) {\n Viewer.call(this, options);\n}\ninherits(CustomViewer, Viewer);\nCustomViewer.prototype._modules = [].concat(Viewer.prototype._modules, [ZoomScrollModule, MoveCanvasModule]);\nexport {\n CustomViewer\n};\n","<template>\n <div class=\"containers\">\n <a-layout style=\"align-items: stretch; height: 100%\">\n <a-layout-content class=\"flow-viewer\">\n <!-- 状态说明 -->\n <div class=\"process-status\">\n <span class=\"intro\">状态:</span>\n <span class=\"finish\">已办理</span>\n <span class=\"processing\">处理中</span>\n <span class=\"todo\">未进行</span>\n </div>\n\n <!-- 流程图容器 -->\n <a-spin\n :spinning=\"loading\"\n wrapperClassName=\"canvas-wrapper\"\n >\n <div\n ref=\"flowCanvasRef\"\n class=\"canvas\"\n ></div>\n </a-spin>\n\n <!-- 操作按钮组 -->\n <a-space\n class=\"button-group\"\n size=\"small\"\n >\n <a-tooltip title=\"适中\">\n <a-button\n @click=\"fitViewport\"\n size=\"small\"\n >\n <template #icon><DragOutlined /></template>\n </a-button>\n </a-tooltip>\n <a-tooltip title=\"放大\">\n <a-button\n @click=\"() => zoomViewport(true)\"\n size=\"small\"\n >\n <template #icon><ZoomInOutlined /></template>\n </a-button>\n </a-tooltip>\n <a-tooltip title=\"缩小\">\n <a-button\n @click=\"() => zoomViewport(false)\"\n size=\"small\"\n >\n <template #icon><ZoomOutOutlined /></template>\n </a-button>\n </a-tooltip>\n </a-space>\n </a-layout-content>\n </a-layout>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch, onBeforeUnmount, onMounted, nextTick } from 'vue';\nimport { message } from 'ant-design-vue';\nimport { DragOutlined, ZoomInOutlined, ZoomOutOutlined } from '@ant-design/icons-vue';\nimport { CustomViewer as BpmnViewer } from '@/components/Process/common';\n\nexport default defineComponent({\n name: 'BpmnViewer',\n props: {\n flowData: {\n type: Object,\n default: () => ({}),\n },\n procInsId: {\n type: String,\n default: '',\n },\n height: {\n type: Number,\n default: 0,\n },\n },\n components: {\n DragOutlined,\n ZoomInOutlined,\n ZoomOutOutlined,\n },\n setup(props) {\n const flowCanvasRef = ref<HTMLDivElement | null>(null);\n const bpmnViewer = ref<any>(null);\n const loading = ref(true);\n\n // 加载流程图\n const loadFlowCanvas = async (flowData: any) => {\n try {\n loading.value = true;\n await bpmnViewer.value.importXML(flowData.xmlData);\n await nextTick();\n await fitViewport();\n\n if (flowData.nodeData?.length > 0) {\n await fillColor(flowData.nodeData);\n }\n } catch (err: any) {\n console.error('BPMN 加载失败:', err.message, err.warnings);\n message.error('流程图加载失败');\n } finally {\n loading.value = false;\n }\n };\n\n // 适配视口\n const fitViewport = () => {\n if (!bpmnViewer.value) return;\n const canvas = bpmnViewer.value.get('canvas');\n canvas.zoom('fit-viewport', 'auto');\n };\n\n // 缩放\n const zoomViewport = (zoomIn = true) => {\n if (!bpmnViewer.value) return;\n const canvas = bpmnViewer.value.get('canvas');\n const currentZoom = canvas.zoom();\n const newZoom = zoomIn ? currentZoom + 0.1 : currentZoom - 0.1;\n if (newZoom >= 0.2) {\n canvas.zoom(newZoom);\n }\n };\n\n // 高亮节点\n const fillColor = (nodeData: any[]) => {\n if (!bpmnViewer.value) return;\n\n const canvas = bpmnViewer.value.get('canvas');\n const definitions = bpmnViewer.value.getDefinitions();\n const rootElements = definitions.rootElements;\n\n if (!rootElements?.[0]?.flowElements) return;\n\n rootElements[0].flowElements.forEach((n: any) => {\n const completeTask = nodeData.find(m => m.key === n.name); // 匹配name属性\n const todoTask = nodeData.find(m => !m.completed);\n const endTask = nodeData[nodeData.length - 1];\n if (n.$type === 'bpmn:UserTask') {\n if (completeTask) {\n canvas.addMarker(n.id, completeTask.completed ? 'highlight' : 'highlight-todo');\n n.outgoing?.forEach((nn: any) => {\n const targetTask = nodeData.find(m => m.key === nn.targetRef.name);\n if (targetTask) {\n if (todoTask && completeTask.key === todoTask.key && !todoTask.completed) {\n canvas.addMarker(nn.id, todoTask.completed ? 'highlight' : 'highlight-todo');\n canvas.addMarker(\n nn.targetRef.id,\n todoTask.completed ? 'highlight' : 'highlight-todo',\n );\n } else {\n canvas.addMarker(nn.id, targetTask.completed ? 'highlight' : 'highlight-todo');\n canvas.addMarker(\n nn.targetRef.id,\n targetTask.completed ? 'highlight' : 'highlight-todo',\n );\n }\n }\n });\n }\n } else if (n.$type === 'bpmn:ExclusiveGateway' || n.$type === 'bpmn:ParallelGateway') {\n if (completeTask) {\n canvas.addMarker(n.id, completeTask.completed ? 'highlight' : 'highlight-todo');\n n.outgoing?.forEach((nn: any) => {\n const targetTask = nodeData.find(m => m.key === nn.targetRef.name);\n if (targetTask) {\n canvas.addMarker(nn.id, targetTask.completed ? 'highlight' : 'highlight-todo');\n canvas.addMarker(\n nn.targetRef.id,\n targetTask.completed ? 'highlight' : 'highlight-todo',\n );\n }\n });\n }\n } else if (n.$type === 'bpmn:StartEvent') {\n n.outgoing?.forEach((nn: any) => {\n const completeTask = nodeData.find(m => m.key === nn.targetRef.name);\n if (completeTask) {\n canvas.addMarker(nn.id, 'highlight');\n canvas.addMarker(n.id, 'highlight');\n }\n });\n } else if (n.$type === 'bpmn:EndEvent') {\n if (endTask?.key === n.id && endTask.completed) {\n canvas.addMarker(n.id, 'highlight');\n }\n }\n });\n };\n onMounted(() => {\n watch(\n () => props.flowData,\n newVal => {\n if (!newVal || !newVal.xmlData) return;\n if (bpmnViewer.value) {\n bpmnViewer.value.destroy();\n }\n // if (flowCanvasRef.value) {\n bpmnViewer.value = new BpmnViewer({\n container: flowCanvasRef.value,\n height: props.height ? Number(props.height) : 'calc(100vh - 200px)',\n });\n loadFlowCanvas(newVal);\n // }\n },\n { immediate: true },\n );\n });\n\n // 组件卸载前清理\n onBeforeUnmount(() => {\n if (bpmnViewer.value) {\n bpmnViewer.value.destroy();\n }\n });\n\n return {\n flowCanvasRef,\n loading,\n fitViewport,\n zoomViewport,\n };\n },\n});\n</script>\n\n<style lang=\"scss\">\n@use '../style/flow-viewer' as *;\n</style>\n\n<style lang=\"scss\" scoped>\n.flow-viewer {\n background-color: #fff;\n}\n.canvas-wrapper {\n display: block;\n width: 100%;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n overflow: hidden;\n}\n</style>\n","<template>\n <div class=\"containers\">\n <a-layout style=\"align-items: stretch; height: 100%\">\n <a-layout-content class=\"flow-viewer\">\n <!-- 状态说明 -->\n <div class=\"process-status\">\n <span class=\"intro\">状态:</span>\n <span class=\"finish\">已办理</span>\n <span class=\"processing\">处理中</span>\n <span class=\"todo\">未进行</span>\n </div>\n\n <!-- 流程图容器 -->\n <a-spin\n :spinning=\"loading\"\n wrapperClassName=\"canvas-wrapper\"\n >\n <div\n ref=\"flowCanvasRef\"\n class=\"canvas\"\n ></div>\n </a-spin>\n\n <!-- 操作按钮组 -->\n <a-space\n class=\"button-group\"\n size=\"small\"\n >\n <a-tooltip title=\"适中\">\n <a-button\n @click=\"fitViewport\"\n size=\"small\"\n >\n <template #icon><DragOutlined /></template>\n </a-button>\n </a-tooltip>\n <a-tooltip title=\"放大\">\n <a-button\n @click=\"() => zoomViewport(true)\"\n size=\"small\"\n >\n <template #icon><ZoomInOutlined /></template>\n </a-button>\n </a-tooltip>\n <a-tooltip title=\"缩小\">\n <a-button\n @click=\"() => zoomViewport(false)\"\n size=\"small\"\n >\n <template #icon><ZoomOutOutlined /></template>\n </a-button>\n </a-tooltip>\n </a-space>\n </a-layout-content>\n </a-layout>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch, onBeforeUnmount, onMounted, nextTick } from 'vue';\nimport { message } from 'ant-design-vue';\nimport { DragOutlined, ZoomInOutlined, ZoomOutOutlined } from '@ant-design/icons-vue';\nimport { CustomViewer as BpmnViewer } from '@/components/Process/common';\n\nexport default defineComponent({\n name: 'BpmnViewer',\n props: {\n flowData: {\n type: Object,\n default: () => ({}),\n },\n procInsId: {\n type: String,\n default: '',\n },\n height: {\n type: Number,\n default: 0,\n },\n },\n components: {\n DragOutlined,\n ZoomInOutlined,\n ZoomOutOutlined,\n },\n setup(props) {\n const flowCanvasRef = ref<HTMLDivElement | null>(null);\n const bpmnViewer = ref<any>(null);\n const loading = ref(true);\n\n // 加载流程图\n const loadFlowCanvas = async (flowData: any) => {\n try {\n loading.value = true;\n await bpmnViewer.value.importXML(flowData.xmlData);\n await nextTick();\n await fitViewport();\n\n if (flowData.nodeData?.length > 0) {\n await fillColor(flowData.nodeData);\n }\n } catch (err: any) {\n console.error('BPMN 加载失败:', err.message, err.warnings);\n message.error('流程图加载失败');\n } finally {\n loading.value = false;\n }\n };\n\n // 适配视口\n const fitViewport = () => {\n if (!bpmnViewer.value) return;\n const canvas = bpmnViewer.value.get('canvas');\n canvas.zoom('fit-viewport', 'auto');\n };\n\n // 缩放\n const zoomViewport = (zoomIn = true) => {\n if (!bpmnViewer.value) return;\n const canvas = bpmnViewer.value.get('canvas');\n const currentZoom = canvas.zoom();\n const newZoom = zoomIn ? currentZoom + 0.1 : currentZoom - 0.1;\n if (newZoom >= 0.2) {\n canvas.zoom(newZoom);\n }\n };\n\n // 高亮节点\n const fillColor = (nodeData: any[]) => {\n if (!bpmnViewer.value) return;\n\n const canvas = bpmnViewer.value.get('canvas');\n const definitions = bpmnViewer.value.getDefinitions();\n const rootElements = definitions.rootElements;\n\n if (!rootElements?.[0]?.flowElements) return;\n\n rootElements[0].flowElements.forEach((n: any) => {\n const completeTask = nodeData.find(m => m.key === n.name); // 匹配name属性\n const todoTask = nodeData.find(m => !m.completed);\n const endTask = nodeData[nodeData.length - 1];\n if (n.$type === 'bpmn:UserTask') {\n if (completeTask) {\n canvas.addMarker(n.id, completeTask.completed ? 'highlight' : 'highlight-todo');\n n.outgoing?.forEach((nn: any) => {\n const targetTask = nodeData.find(m => m.key === nn.targetRef.name);\n if (targetTask) {\n if (todoTask && completeTask.key === todoTask.key && !todoTask.completed) {\n canvas.addMarker(nn.id, todoTask.completed ? 'highlight' : 'highlight-todo');\n canvas.addMarker(\n nn.targetRef.id,\n todoTask.completed ? 'highlight' : 'highlight-todo',\n );\n } else {\n canvas.addMarker(nn.id, targetTask.completed ? 'highlight' : 'highlight-todo');\n canvas.addMarker(\n nn.targetRef.id,\n targetTask.completed ? 'highlight' : 'highlight-todo',\n );\n }\n }\n });\n }\n } else if (n.$type === 'bpmn:ExclusiveGateway' || n.$type === 'bpmn:ParallelGateway') {\n if (completeTask) {\n canvas.addMarker(n.id, completeTask.completed ? 'highlight' : 'highlight-todo');\n n.outgoing?.forEach((nn: any) => {\n const targetTask = nodeData.find(m => m.key === nn.targetRef.name);\n if (targetTask) {\n canvas.addMarker(nn.id, targetTask.completed ? 'highlight' : 'highlight-todo');\n canvas.addMarker(\n nn.targetRef.id,\n targetTask.completed ? 'highlight' : 'highlight-todo',\n );\n }\n });\n }\n } else if (n.$type === 'bpmn:StartEvent') {\n n.outgoing?.forEach((nn: any) => {\n const completeTask = nodeData.find(m => m.key === nn.targetRef.name);\n if (completeTask) {\n canvas.addMarker(nn.id, 'highlight');\n canvas.addMarker(n.id, 'highlight');\n }\n });\n } else if (n.$type === 'bpmn:EndEvent') {\n if (endTask?.key === n.id && endTask.completed) {\n canvas.addMarker(n.id, 'highlight');\n }\n }\n });\n };\n onMounted(() => {\n watch(\n () => props.flowData,\n newVal => {\n if (!newVal || !newVal.xmlData) return;\n if (bpmnViewer.value) {\n bpmnViewer.value.destroy();\n }\n // if (flowCanvasRef.value) {\n bpmnViewer.value = new BpmnViewer({\n container: flowCanvasRef.value,\n height: props.height ? Number(props.height) : 'calc(100vh - 200px)',\n });\n loadFlowCanvas(newVal);\n // }\n },\n { immediate: true },\n );\n });\n\n // 组件卸载前清理\n onBeforeUnmount(() => {\n if (bpmnViewer.value) {\n bpmnViewer.value.destroy();\n }\n });\n\n return {\n flowCanvasRef,\n loading,\n fitViewport,\n zoomViewport,\n };\n },\n});\n</script>\n\n<style lang=\"scss\">\n@use '../style/flow-viewer' as *;\n</style>\n\n<style lang=\"scss\" scoped>\n.flow-viewer {\n background-color: #fff;\n}\n.canvas-wrapper {\n display: block;\n width: 100%;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n overflow: hidden;\n}\n</style>\n","<template>\n <div class=\"form-container\">\n <div class=\"header-container\">\n <div class=\"serial-number\">流程编码:{{ record?.number }}</div>\n <div class=\"article-title\">{{ approval_obj?.context }}({{ approval_obj?.flow_name }})</div>\n </div>\n <div\n class=\"form-body descriptions\"\n style=\"padding-bottom: 10px\"\n >\n <div\n class=\"xinxi-title\"\n style=\"margin-top: 0\"\n >\n 基本信息\n </div>\n <a-descriptions bordered>\n <a-descriptions-item label=\"发起人\">\n {{ approval_obj?.send_person__realname }}\n </a-descriptions-item>\n <a-descriptions-item label=\"切换组织\">\n {{ approval_obj?.form_data?.globalData?.cost_company?.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"切换部门\">\n {{ approval_obj?.form_data?.globalData?.cost_department?.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"员工职位\">\n {{ approval_obj?.form_data?.globalData?.person_position?.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"员工组织\">\n {{ approval_obj?.form_data?.globalData?.person_cost_company?.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"员工部门\">\n {{ approval_obj?.form_data?.globalData?.person_department?.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"发起时间\">\n {{ getDate(approval_obj?.start_time) }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"2\"\n label=\"结束时间\"\n >\n {{ getDate(approval_obj?.finish_time) }}\n </a-descriptions-item>\n <a-descriptions-item label=\"流程主题\">{{ approval_obj?.context }}</a-descriptions-item>\n </a-descriptions>\n <template\n v-for=\"(item, i) in data\"\n :key=\"i\"\n >\n <div class=\"xinxi-title\">\n {{ item?.group_name ? item.group_name : '审批信息' + (i + 1) }}\n </div>\n <a-descriptions\n bordered\n :column=\"item?.column ? item?.column : 3\"\n >\n <template\n v-for=\"(obj, j) in item.children\"\n :key=\"j\"\n >\n <template v-if=\"obj.type !== 'remotetablepro' && obj.type !== 'formtemplate'\">\n <template v-if=\"obj.type === 'textarea'\">\n <a-descriptions-item :label=\"obj.label\">\n <p style=\"white-space: pre-line; margin: 0; color: #909399\">{{ obj.value }}</p>\n </a-descriptions-item>\n </template>\n <template v-else-if=\"obj.type === 'upload'\">\n <a-descriptions-item :label=\"obj.label\">\n <template v-if=\"obj.value && obj.value?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in obj.value\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n {{ uploadItem.name }}\n </a-button>\n </template>\n </template>\n </a-descriptions-item>\n </template>\n <template v-else>\n <a-descriptions-item\n :label=\"obj.label\"\n :span=\"1\"\n >\n {{ obj.value }}\n </a-descriptions-item>\n </template>\n </template>\n </template>\n </a-descriptions>\n <a-descriptions\n bordered\n :column=\"item?.column ? item?.column : 3\"\n >\n <template\n v-for=\"(obj, j) in item.children\"\n :key=\"j\"\n >\n <template v-if=\"obj.type === 'remotetablepro'\">\n <a-descriptions-item\n :label=\"obj.label\"\n :span=\"3\"\n >\n <s-table\n :columns=\"getColumns(obj.children)\"\n :data-source=\"getDataSource(obj.children)\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :row-key=\"'index'\"\n bordered\n size=\"small\"\n stripe\n >\n <template #bodyCell=\"{ record, column, text, index }\">\n <template v-if=\"column.dataIndex.includes('upload')\">\n <template v-if=\"text && text?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in text\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n :title=\"uploadItem.name\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ uploadItem.name }}\n </span>\n </a-button>\n </template>\n </template>\n </template>\n <template v-else>{{ text }}</template>\n </template>\n </s-table>\n </a-descriptions-item>\n </template>\n <template v-if=\"obj.type === 'formtemplate'\">\n <a-descriptions-item\n :label=\"obj.label\"\n :span=\"3\"\n >\n <template\n v-for=\"(obj1, k) in obj.children\"\n :key=\"k\"\n >\n <a-descriptions\n bordered\n :column=\"obj?.column ? obj?.column : 3\"\n >\n <template\n v-for=\"(obj2, l) in obj1\"\n :key=\"l\"\n >\n <template\n v-if=\"obj2.type !== 'remotetablepro' && obj2.type !== 'formtemplate'\"\n >\n <template v-if=\"obj2.type === 'textarea' && !obj2.is_hide\">\n <a-descriptions-item :label=\"obj2.label\">\n <p style=\"white-space: pre-line; margin: 0; color: #909399\">\n {{ obj2.value }}\n </p>\n </a-descriptions-item>\n </template>\n <template v-else-if=\"obj2.type === 'upload' && !obj2.is_hide\">\n <a-descriptions-item :label=\"obj2.label\">\n <template v-if=\"obj2.value && obj2.value?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in obj2.value\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n {{ uploadItem.name }}\n </a-button>\n </template>\n </template>\n </a-descriptions-item>\n </template>\n <template v-else>\n <a-descriptions-item\n v-if=\"!obj2.is_hide\"\n :label=\"obj2.label\"\n >\n {{ obj2.value }}\n </a-descriptions-item>\n </template>\n </template>\n </template>\n </a-descriptions>\n <a-descriptions\n bordered\n :column=\"obj?.column ? obj?.column : 3\"\n >\n <template\n v-for=\"(obj2, l) in obj1\"\n :key=\"l\"\n >\n <template v-if=\"obj2.type === 'remotetablepro' && !obj2.is_hide\">\n <a-descriptions-item\n :label=\"obj2.label\"\n :span=\"3\"\n >\n <s-table\n :columns=\"getColumns(obj2.children)\"\n :data-source=\"getDataSource(obj2.children)\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :row-key=\"'index'\"\n bordered\n size=\"small\"\n stripe\n >\n <template #bodyCell=\"{ record, column, text, index }\">\n <template v-if=\"column.dataIndex.includes('upload')\">\n <template v-if=\"text && text?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in text\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n :title=\"uploadItem.name\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ uploadItem.name }}\n </span>\n </a-button>\n </template>\n </template>\n </template>\n <template v-else>{{ text }}</template>\n </template>\n </s-table>\n </a-descriptions-item>\n </template>\n <template v-if=\"obj2.type === 'formtemplate' && !obj2.is_hide\">\n <a-descriptions-item\n :label=\"obj2.label\"\n :span=\"3\"\n >\n <template\n v-for=\"(obj3, k) in obj2.children\"\n :key=\"k\"\n >\n <a-descriptions\n bordered\n :column=\"obj2?.column ? obj2?.column : 3\"\n >\n <template\n v-for=\"(obj4, l) in obj3\"\n :key=\"l\"\n >\n <template\n v-if=\"\n obj4.type !== 'remotetablepro' && obj4.type !== 'formtemplate'\n \"\n >\n <template v-if=\"obj4.type === 'textarea' && !obj4.is_hide\">\n <a-descriptions-item :label=\"obj4.label\">\n <p style=\"white-space: pre-line; margin: 0; color: #909399\">\n {{ obj4.value }}\n </p>\n </a-descriptions-item>\n </template>\n <template v-else-if=\"obj4.type === 'upload' && !obj4.is_hide\">\n <a-descriptions-item :label=\"obj4.label\">\n <template v-if=\"obj4.value && obj4.value?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in obj4.value\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n {{ uploadItem.name }}\n </a-button>\n </template>\n </template>\n </a-descriptions-item>\n </template>\n <template v-else>\n <a-descriptions-item\n v-if=\"!obj4.is_hide\"\n :label=\"obj4.label\"\n >\n {{ obj4.value }}\n </a-descriptions-item>\n </template>\n </template>\n </template>\n </a-descriptions>\n <a-descriptions\n bordered\n :column=\"obj2?.column ? obj2?.column : 3\"\n >\n <template\n v-for=\"(obj4, l) in obj3\"\n :key=\"l\"\n >\n <template v-if=\"obj4.type === 'remotetablepro'\">\n <a-descriptions-item\n :label=\"obj4.label\"\n :span=\"3\"\n >\n <s-table\n :columns=\"getColumns(obj4.children)\"\n :data-source=\"getDataSource(obj4.children)\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :row-key=\"'index'\"\n bordered\n size=\"small\"\n stripe\n >\n <template #bodyCell=\"{ record, column, text, index }\">\n <template v-if=\"column.dataIndex.includes('upload')\">\n <template v-if=\"text && text?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in text\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n :title=\"uploadItem.name\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ uploadItem.name }}\n </span>\n </a-button>\n </template>\n </template>\n </template>\n <template v-else>{{ text }}</template>\n </template>\n </s-table>\n </a-descriptions-item>\n </template>\n <template v-if=\"obj4.type === 'formtemplate'\">\n <a-descriptions-item\n :label=\"obj4.label\"\n :span=\"3\"\n >\n <template\n v-for=\"(obj5, k) in obj4.children\"\n :key=\"k\"\n >\n <a-descriptions\n bordered\n :column=\"obj4?.column ? obj4?.column : 3\"\n >\n <template\n v-for=\"(obj6, l) in obj5\"\n :key=\"l\"\n >\n <template\n v-if=\"\n obj6.type !== 'remotetablepro' &&\n obj6.type !== 'formtemplate'\n \"\n >\n <template\n v-if=\"obj6.type === 'textarea' && !obj6.is_hide\"\n >\n <a-descriptions-item :label=\"obj6.label\">\n <p\n style=\"\n white-space: pre-line;\n margin: 0;\n color: #909399;\n \"\n >\n {{ obj6.value }}\n </p>\n </a-descriptions-item>\n </template>\n <template\n v-else-if=\"obj6.type === 'upload' && !obj6.is_hide\"\n >\n <a-descriptions-item :label=\"obj6.label\">\n <template\n v-if=\"obj6.value && obj6.value?.length > 0\"\n >\n <template\n v-for=\"(uploadItem, m) in obj6.value\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n {{ uploadItem.name }}\n </a-button>\n </template>\n </template>\n </a-descriptions-item>\n </template>\n <template v-else>\n <a-descriptions-item\n v-if=\"!obj6.is_hide\"\n :label=\"obj6.label\"\n >\n {{ obj6.value }}\n </a-descriptions-item>\n </template>\n </template>\n </template>\n </a-descriptions>\n <a-descriptions\n bordered\n :column=\"obj4?.column ? obj4?.column : 3\"\n >\n <template\n v-for=\"(obj6, l) in obj5\"\n :key=\"l\"\n >\n <template v-if=\"obj6.type === 'remotetablepro'\">\n <a-descriptions-item\n :label=\"obj6.label\"\n :span=\"3\"\n >\n <s-table\n :columns=\"getColumns(obj6.children)\"\n :data-source=\"getDataSource(obj6.children)\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :row-key=\"'index'\"\n bordered\n size=\"small\"\n stripe\n >\n <template\n #bodyCell=\"{ record, column, text, index }\"\n >\n <template\n v-if=\"column.dataIndex.includes('upload')\"\n >\n <template v-if=\"text && text?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in text\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n :title=\"uploadItem.name\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ uploadItem.name }}\n </span>\n </a-button>\n </template>\n </template>\n </template>\n <template v-else>{{ text }}</template>\n </template>\n </s-table>\n </a-descriptions-item>\n </template>\n </template>\n </a-descriptions>\n </template>\n </a-descriptions-item>\n </template>\n </template>\n </a-descriptions>\n </template>\n </a-descriptions-item>\n </template>\n </template>\n </a-descriptions>\n </template>\n </a-descriptions-item>\n </template>\n </template>\n </a-descriptions>\n </template>\n <template v-if=\"task_data.length > 0\">\n <div class=\"xinxi-title\">审批记录</div>\n <s-table\n :columns=\"task_columns\"\n :data-source=\"task_data\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :scroll=\"{ y: 400 }\"\n :rowKey=\"'id'\"\n bordered\n size=\"small\"\n stripe\n >\n <template #bodyCell=\"{ column, index, text, record }\">\n <template v-if=\"column.dataIndex == 'index'\">\n {{ index + 1 }}\n </template>\n <template v-else>\n {{ text }}\n </template>\n </template>\n </s-table>\n </template>\n <template v-if=\"person_approve.length > 0\">\n <div class=\"xinxi-title\">步骤审批人信息</div>\n <s-table\n :columns=\"person_columns\"\n :data-source=\"person_approve\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :scroll=\"{ y: 400 }\"\n :rowKey=\"'id'\"\n bordered\n size=\"small\"\n stripe\n >\n <template #bodyCell=\"{ column, index, text, record }\">\n <template v-if=\"column.dataIndex == 'index'\">\n {{ index + 1 }}\n </template>\n <template v-else-if=\"column.dataIndex == 'jue_se'\">\n <a-tag\n v-if=\"record?.jue_se\"\n color=\"blue\"\n >\n {{ record?.jue_se || '' }}\n </a-tag>\n </template>\n <template v-else-if=\"column.dataIndex == 'list'\">\n <a-tag\n v-for=\"(obj, index) in record.list\"\n :key=\"index\"\n color=\"green\"\n >\n {{ obj.realname }}\n </a-tag>\n </template>\n <template v-else>\n {{ text }}\n </template>\n </template>\n </s-table>\n </template>\n <div style=\"height: 400px; margin-top: 10px\">\n <my-process-viewer\n :flowData=\"flowData\"\n :height=\"400\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, reactive, ref } from 'vue';\nimport { useGetApiData } from '../init-plugin';\nimport MyProcessViewer from './Process/viewer/index.vue';\n\ndefineOptions({\n name: 'ApprovalForDetails',\n});\n\nconst getApiData = useGetApiData();\n\nconst props = defineProps<{\n record: Record<string, any>;\n}>();\n\nconst data = ref([]);\nconst approval_obj: any = reactive({});\nconst flowData = ref({});\nconst task_columns = [\n {\n title: '序号',\n dataIndex: 'index',\n width: 50,\n ellipsis: true,\n fixed: 'left',\n },\n {\n title: '审批步骤',\n dataIndex: 'name',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '职位',\n dataIndex: 'approval_position__name',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '审批人',\n dataIndex: 'assignee__realname',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '操作',\n dataIndex: 'approval_result',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '审批意见',\n dataIndex: 'comment',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '时间',\n dataIndex: 'end_time',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n];\nconst person_columns = [\n {\n title: '序号',\n dataIndex: 'index',\n width: 50,\n ellipsis: true,\n fixed: 'left',\n },\n {\n title: '审批步骤',\n dataIndex: 'name',\n width: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '职位',\n dataIndex: 'jue_se',\n width: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '步骤审批人',\n dataIndex: 'list',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n];\nconst task_data = ref([]);\nconst isNotEmpty = value => {\n return value !== null && value !== undefined && value !== '';\n};\nconst getData = (list, loaddata, options) => {\n const displayList = [];\n // 递归处理 formtemplate 的子字段\n const processFormTemplate = (formTemplate, formData, formOptions) => {\n if (!formTemplate?.form?.dynamicFieldList) return [];\n return formTemplate.form.dynamicFieldList.flatMap(fieldGroup =>\n fieldGroup.children.map(child => {\n const childObj: any = {\n label: child.label,\n type: child.type,\n value: '',\n column: child?.column || 3,\n is_hide:\n formTemplate?.showType == 'table'\n ? child?.is_table_hide_column || false\n : child?.is_hide || false,\n };\n // 处理不同类型的字段\n if (child.type === 'formtemplate') {\n // 递归处理嵌套的 formtemplate\n if (formData?.[child.name]?.length > 0) {\n childObj.children = [];\n formData[child.name].forEach(item => {\n childObj.children.push(processFormTemplate(child, item, child.form.options));\n });\n }\n } else if (child.type === 'select' || child.type === 'radio') {\n if (isNotEmpty(formData?.[child.name])) {\n const option = formOptions?.[child.name]?.find(\n item => item.value == formData[child.name],\n );\n childObj.value = option?.name || '';\n }\n } else if (child.type === 'checkbox') {\n if (isNotEmpty(formData?.[child.name])) {\n const names = formOptions?.[child.name]\n ?.filter(item => formData[child.name].includes(item.value))\n ?.map(item => item.name)\n ?.filter(Boolean);\n childObj.value = names?.join(',') || '';\n }\n } else if (child.type === 'remoteselectpro') {\n if (isNotEmpty(formData?.[child.name + '.label'])) {\n childObj.value = formData[child.name + '.label'];\n }\n } else if (child.type === 'remotetablepro') {\n childObj.children = [];\n if (formData?.[child.name]?.length > 0) {\n formData[child.name].forEach(tableData => {\n const remotetableproList = [];\n if (child?.children?.length > 0) {\n child.children.forEach(child1 => {\n if (child1?.children?.length > 0) {\n child1.children.forEach(child2 => {\n const remotetableproObj = {\n label: child2.label,\n type: child2.type,\n value: '',\n };\n if (\n child2.type === 'select' ||\n child2.type === 'radio' ||\n child2.type === 'checkbox' ||\n child2.type === 'remoteselectpro'\n ) {\n remotetableproObj.value = tableData?.[child2.name2] || '';\n } else {\n remotetableproObj.value = tableData?.[child2.name] || '';\n }\n remotetableproList.push(remotetableproObj);\n });\n }\n });\n }\n childObj.children.push(remotetableproList);\n });\n }\n } else {\n childObj.value = formData?.[child.name] || '';\n }\n return childObj;\n }),\n );\n };\n\n list.forEach(item => {\n if (item?.children?.length > 0) {\n const obj = {\n group_name: item?.group_name || '',\n children: [],\n column: item?.column || 3,\n };\n\n item.children.forEach(child => {\n const childObj: any = {\n label: child.label,\n type: child.type,\n column: child?.column || 3,\n value: '',\n };\n\n // 处理不同类型的字段\n if (child.type === 'remoteselectpro') {\n if (isNotEmpty(loaddata?.[child.name + '.label'])) {\n childObj.value = loaddata?.[child.name + '.label'];\n }\n } else if (child.type === 'select' || child.type === 'radio') {\n if (isNotEmpty(loaddata?.[child.name])) {\n const option = options?.[child.name]?.find(item => item.value == loaddata[child.name]);\n childObj.value = option?.name || '';\n }\n } else if (child.type === 'checkbox') {\n if (isNotEmpty(loaddata?.[child.name])) {\n const names = options?.[child.name]\n ?.filter(item => loaddata[child.name].includes(item.value))\n ?.map(item => item.name)\n ?.filter(Boolean);\n childObj.value = names?.join(',') || '';\n }\n } else if (child.type === 'remotetablepro') {\n childObj.children = [];\n if (loaddata?.[child.name]?.length > 0) {\n loaddata[child.name].forEach(tableData => {\n const remotetableproList = [];\n if (child?.children?.length > 0) {\n child.children.forEach(child1 => {\n if (child1?.children?.length > 0) {\n child1.children.forEach(child2 => {\n const remotetableproObj = {\n label: child2.label,\n type: child2.type,\n value: '',\n };\n if (\n child2.type === 'select' ||\n child2.type === 'radio' ||\n child2.type === 'checkbox' ||\n child2.type === 'remoteselectpro'\n ) {\n remotetableproObj.value = tableData?.[child2.name2] || '';\n } else {\n remotetableproObj.value = tableData?.[child2.name] || '';\n }\n remotetableproList.push(remotetableproObj);\n });\n }\n });\n }\n childObj.children.push(remotetableproList);\n });\n }\n } else if (child.type === 'formtemplate') {\n // 处理 formtemplate 类型\n if (loaddata?.[child.name]?.length > 0) {\n childObj.children = [];\n loaddata[child.name].forEach(item => {\n childObj.children.push(processFormTemplate(child, item, child.form.options));\n });\n }\n } else {\n childObj.value = loaddata?.[child.name] || '';\n }\n obj.children.push(childObj);\n });\n displayList.push(obj);\n }\n });\n return displayList;\n};\nconst parseBpmnUserTask = (xmlStr: any) => {\n // 1. 创建DOMParser解析XML\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(xmlStr, 'text/xml');\n\n // 2. 获取所有userTask标签(处理命名空间)\n const userTasks = xmlDoc.getElementsByTagName('userTask');\n const result = [];\n\n // 3. 遍历每个userTask\n for (const task of userTasks) {\n // 提取name\n const name = task.getAttribute('name') || '';\n // 提取审批类型 userType\n const userType = task.getAttribute('flowable:userType') || '';\n // 根据类型提取对应的值\n let value = '';\n if (userType === 'candidateGroups') {\n value = task.getAttribute('flowable:candidateGroups') || '';\n }\n if (userType === 'assignee') {\n value = task.getAttribute('flowable:assignee') || '';\n }\n if (userType === 'candidateUsers') {\n value = task.getAttribute('flowable:candidateUsers') || '';\n }\n // 组装结果\n result.push({\n name: name,\n type: userType,\n value: value,\n });\n }\n return result;\n};\nconst person_approve = ref([]);\nonMounted(() => {\n getApiData(\n {\n approve_record_id: props.record.id,\n },\n '/approve/get_approve_record_info',\n ).then(async (res: any) => {\n data.value = getData(\n res.form_definition__data.dynamicFieldList,\n res.form_data,\n res.form_definition__data.options,\n );\n flowData.value = { xmlData: res.xml_data, nodeData: res.node_data };\n const person_list: any = await getApiData(\n {\n is_active: true,\n },\n '/sys/query_person_detail_list',\n );\n const approval_position_list: any = await getApiData(\n {\n is_active: true,\n column_fields: ['approvers_m2m_json', 'name'],\n },\n '/lyapprove/query_approval_position_list',\n );\n person_approve.value = parseBpmnUserTask(res.xml_data);\n person_approve.value = person_approve.value.map((item: any, index: number) => {\n return {\n ...item,\n id: index,\n value: item.value ? item.value.split(',').filter(Boolean).map(Number) : null,\n };\n });\n person_approve.value.forEach((item: any) => {\n if (item.value && item.value.length > 0) {\n item.list = [];\n if (item.type == 'assignee' || item.type == 'candidateUsers') {\n item.value.forEach((item2: any) => {\n person_list.data.forEach((item3: any) => {\n if (item2 == item3.id) {\n item.list.push({\n realname: item3.realname,\n });\n }\n });\n });\n }\n if (item.type == 'candidateGroups') {\n item.value.forEach((item2: any) => {\n approval_position_list.data.forEach((item3: any) => {\n if (item2 == item3.id) {\n item.jue_se = item3.name;\n item.list = item3.approvers_m2m_json;\n }\n });\n });\n }\n }\n });\n Object.assign(approval_obj, res);\n if (res.process_instance_id) {\n task_data.value.push({\n name: '开始',\n id: 0,\n approval_position__name: approval_obj?.form_data?.globalData?.person_position?.name\n ? approval_obj.form_data.globalData.person_position.name\n : '',\n assignee__realname: res.send_person__realname,\n approval_result: '发起',\n comment: '',\n end_time: res.start_time,\n });\n getApiData(\n {\n process_instance_id: res.process_instance_id,\n },\n '/lyapprove/query_task_list',\n ).then((task: any) => {\n if (task && task.data && task.data.length > 0) {\n task.data\n .sort((a: any, b: any) => {\n return a.id - b.id;\n })\n .forEach((item: any) => {\n if (item.status == '完成') {\n task_data.value.push({\n ...item,\n approval_result:\n item.approval_result === 'agree'\n ? '通过'\n : item.approval_result === 'refuse'\n ? '拒绝'\n : '',\n });\n }\n });\n }\n task_data.value = [].concat(task_data.value);\n });\n }\n });\n});\nconst uniqueByTitle = (arr: any) => {\n const seen = new Set();\n return arr.filter(item => !seen.has(item.title) && seen.add(item.title));\n};\nconst getColumns = (list: any) => {\n const columns = [];\n if (list && list.length > 0) {\n list[0].forEach((item: any, index: any) => {\n if (item.type === 'upload') {\n columns.push({\n title: item.label,\n dataIndex: 'upload_' + index,\n minWidth: 150,\n resizable: true,\n autoHeight: true,\n });\n } else {\n columns.push({\n title: item.label,\n dataIndex: 'value_' + index,\n resizable: true,\n autoHeight: true,\n });\n }\n });\n }\n return uniqueByTitle(columns);\n};\nconst getDataSource = (list: any) => {\n const data = [];\n if (list && list.length > 0) {\n list.forEach((item: any, index1: any) => {\n const obj: any = {};\n item.forEach((item1: any, index: any) => {\n if (item1.type === 'upload') {\n obj['upload_' + index] = item1.value;\n } else {\n obj['value_' + index] = item1.value;\n }\n });\n data.push({ ...obj, index: index1 });\n });\n }\n return data;\n};\nconst getDate = time => {\n if (time) {\n time = time.substring(0, 10);\n }\n return time;\n};\nconst look = (url: any) => {\n window.open(encodeURI(url), '_blank');\n};\n</script>\n<style lang=\"scss\" scoped>\n.flip-90 {\n transform: rotateY(90deg); /* 绕Y轴旋转90度,元素会垂直倒立 */\n}\n\n.form-container {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n padding: 4px;\n\n .form-header {\n display: flex;\n flex: 0 0 auto;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 4px;\n margin-right: 26px;\n\n .form-title {\n font-size: 15px;\n }\n\n .form-header-right {\n display: flex;\n flex-direction: column;\n }\n\n .right-item {\n padding: 4px;\n // border-left: 1px solid;\n // border-top: 1px solid;\n }\n\n .right-item:first {\n border-top: none;\n }\n }\n\n .form-body {\n flex: 1 1 auto;\n overflow: auto;\n overflow-x: hidden;\n padding: 4px;\n }\n\n .form-footer {\n flex: 0 0 auto;\n padding: 8px;\n border-top: 1px solid #e8e8e8;\n display: flex;\n justify-content: flex-end;\n }\n}\n\n.header-container {\n width: 100%;\n position: relative;\n min-height: 70px; /* 增加最小高度保证布局稳定性 */\n padding: 1px 0; /* 增加上下内边距 */\n}\n\n.serial-number {\n position: absolute;\n left: 0;\n top: 19px;\n transform: translateY(-50%); /* 垂直居中 */\n}\n\n.article-title {\n width: 100%;\n padding: 0 200px; /* 左右保留40px距离 */\n box-sizing: border-box; /* 盒模型计算包含内边距 */\n text-align: center; /* 文本整体居中 */\n font-weight: bold;\n font-size: 24px;\n word-wrap: break-word; /* 允许长单词换行 */\n line-height: 1.5; /* 增加行高提高可读性 */\n}\n\n.xinxi-title {\n width: 100%;\n background-color: #dcdcdc;\n padding: 10px 0 10px 20px;\n font-weight: bold;\n border-radius: 3px;\n color: #313131;\n margin: 8px 0 2px 0;\n}\n\n.descriptions {\n :deep(.ant-descriptions .ant-descriptions-row > td) {\n padding: 8px;\n }\n\n :deep(.ant-descriptions .ant-descriptions-row > th) {\n padding: 8px;\n width: 100px;\n }\n}\n</style>\n","<template>\n <div class=\"form-container\">\n <div class=\"header-container\">\n <div class=\"serial-number\">流程编码:{{ record?.number }}</div>\n <div class=\"article-title\">{{ approval_obj?.context }}({{ approval_obj?.flow_name }})</div>\n </div>\n <div\n class=\"form-body descriptions\"\n style=\"padding-bottom: 10px\"\n >\n <div\n class=\"xinxi-title\"\n style=\"margin-top: 0\"\n >\n 基本信息\n </div>\n <a-descriptions bordered>\n <a-descriptions-item label=\"发起人\">\n {{ approval_obj?.send_person__realname }}\n </a-descriptions-item>\n <a-descriptions-item label=\"切换组织\">\n {{ approval_obj?.form_data?.globalData?.cost_company?.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"切换部门\">\n {{ approval_obj?.form_data?.globalData?.cost_department?.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"员工职位\">\n {{ approval_obj?.form_data?.globalData?.person_position?.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"员工组织\">\n {{ approval_obj?.form_data?.globalData?.person_cost_company?.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"员工部门\">\n {{ approval_obj?.form_data?.globalData?.person_department?.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"发起时间\">\n {{ getDate(approval_obj?.start_time) }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"2\"\n label=\"结束时间\"\n >\n {{ getDate(approval_obj?.finish_time) }}\n </a-descriptions-item>\n <a-descriptions-item label=\"流程主题\">{{ approval_obj?.context }}</a-descriptions-item>\n </a-descriptions>\n <template\n v-for=\"(item, i) in data\"\n :key=\"i\"\n >\n <div class=\"xinxi-title\">\n {{ item?.group_name ? item.group_name : '审批信息' + (i + 1) }}\n </div>\n <a-descriptions\n bordered\n :column=\"item?.column ? item?.column : 3\"\n >\n <template\n v-for=\"(obj, j) in item.children\"\n :key=\"j\"\n >\n <template v-if=\"obj.type !== 'remotetablepro' && obj.type !== 'formtemplate'\">\n <template v-if=\"obj.type === 'textarea'\">\n <a-descriptions-item :label=\"obj.label\">\n <p style=\"white-space: pre-line; margin: 0; color: #909399\">{{ obj.value }}</p>\n </a-descriptions-item>\n </template>\n <template v-else-if=\"obj.type === 'upload'\">\n <a-descriptions-item :label=\"obj.label\">\n <template v-if=\"obj.value && obj.value?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in obj.value\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n {{ uploadItem.name }}\n </a-button>\n </template>\n </template>\n </a-descriptions-item>\n </template>\n <template v-else>\n <a-descriptions-item\n :label=\"obj.label\"\n :span=\"1\"\n >\n {{ obj.value }}\n </a-descriptions-item>\n </template>\n </template>\n </template>\n </a-descriptions>\n <a-descriptions\n bordered\n :column=\"item?.column ? item?.column : 3\"\n >\n <template\n v-for=\"(obj, j) in item.children\"\n :key=\"j\"\n >\n <template v-if=\"obj.type === 'remotetablepro'\">\n <a-descriptions-item\n :label=\"obj.label\"\n :span=\"3\"\n >\n <s-table\n :columns=\"getColumns(obj.children)\"\n :data-source=\"getDataSource(obj.children)\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :row-key=\"'index'\"\n bordered\n size=\"small\"\n stripe\n >\n <template #bodyCell=\"{ record, column, text, index }\">\n <template v-if=\"column.dataIndex.includes('upload')\">\n <template v-if=\"text && text?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in text\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n :title=\"uploadItem.name\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ uploadItem.name }}\n </span>\n </a-button>\n </template>\n </template>\n </template>\n <template v-else>{{ text }}</template>\n </template>\n </s-table>\n </a-descriptions-item>\n </template>\n <template v-if=\"obj.type === 'formtemplate'\">\n <a-descriptions-item\n :label=\"obj.label\"\n :span=\"3\"\n >\n <template\n v-for=\"(obj1, k) in obj.children\"\n :key=\"k\"\n >\n <a-descriptions\n bordered\n :column=\"obj?.column ? obj?.column : 3\"\n >\n <template\n v-for=\"(obj2, l) in obj1\"\n :key=\"l\"\n >\n <template\n v-if=\"obj2.type !== 'remotetablepro' && obj2.type !== 'formtemplate'\"\n >\n <template v-if=\"obj2.type === 'textarea' && !obj2.is_hide\">\n <a-descriptions-item :label=\"obj2.label\">\n <p style=\"white-space: pre-line; margin: 0; color: #909399\">\n {{ obj2.value }}\n </p>\n </a-descriptions-item>\n </template>\n <template v-else-if=\"obj2.type === 'upload' && !obj2.is_hide\">\n <a-descriptions-item :label=\"obj2.label\">\n <template v-if=\"obj2.value && obj2.value?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in obj2.value\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n {{ uploadItem.name }}\n </a-button>\n </template>\n </template>\n </a-descriptions-item>\n </template>\n <template v-else>\n <a-descriptions-item\n v-if=\"!obj2.is_hide\"\n :label=\"obj2.label\"\n >\n {{ obj2.value }}\n </a-descriptions-item>\n </template>\n </template>\n </template>\n </a-descriptions>\n <a-descriptions\n bordered\n :column=\"obj?.column ? obj?.column : 3\"\n >\n <template\n v-for=\"(obj2, l) in obj1\"\n :key=\"l\"\n >\n <template v-if=\"obj2.type === 'remotetablepro' && !obj2.is_hide\">\n <a-descriptions-item\n :label=\"obj2.label\"\n :span=\"3\"\n >\n <s-table\n :columns=\"getColumns(obj2.children)\"\n :data-source=\"getDataSource(obj2.children)\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :row-key=\"'index'\"\n bordered\n size=\"small\"\n stripe\n >\n <template #bodyCell=\"{ record, column, text, index }\">\n <template v-if=\"column.dataIndex.includes('upload')\">\n <template v-if=\"text && text?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in text\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n :title=\"uploadItem.name\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ uploadItem.name }}\n </span>\n </a-button>\n </template>\n </template>\n </template>\n <template v-else>{{ text }}</template>\n </template>\n </s-table>\n </a-descriptions-item>\n </template>\n <template v-if=\"obj2.type === 'formtemplate' && !obj2.is_hide\">\n <a-descriptions-item\n :label=\"obj2.label\"\n :span=\"3\"\n >\n <template\n v-for=\"(obj3, k) in obj2.children\"\n :key=\"k\"\n >\n <a-descriptions\n bordered\n :column=\"obj2?.column ? obj2?.column : 3\"\n >\n <template\n v-for=\"(obj4, l) in obj3\"\n :key=\"l\"\n >\n <template\n v-if=\"\n obj4.type !== 'remotetablepro' && obj4.type !== 'formtemplate'\n \"\n >\n <template v-if=\"obj4.type === 'textarea' && !obj4.is_hide\">\n <a-descriptions-item :label=\"obj4.label\">\n <p style=\"white-space: pre-line; margin: 0; color: #909399\">\n {{ obj4.value }}\n </p>\n </a-descriptions-item>\n </template>\n <template v-else-if=\"obj4.type === 'upload' && !obj4.is_hide\">\n <a-descriptions-item :label=\"obj4.label\">\n <template v-if=\"obj4.value && obj4.value?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in obj4.value\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n {{ uploadItem.name }}\n </a-button>\n </template>\n </template>\n </a-descriptions-item>\n </template>\n <template v-else>\n <a-descriptions-item\n v-if=\"!obj4.is_hide\"\n :label=\"obj4.label\"\n >\n {{ obj4.value }}\n </a-descriptions-item>\n </template>\n </template>\n </template>\n </a-descriptions>\n <a-descriptions\n bordered\n :column=\"obj2?.column ? obj2?.column : 3\"\n >\n <template\n v-for=\"(obj4, l) in obj3\"\n :key=\"l\"\n >\n <template v-if=\"obj4.type === 'remotetablepro'\">\n <a-descriptions-item\n :label=\"obj4.label\"\n :span=\"3\"\n >\n <s-table\n :columns=\"getColumns(obj4.children)\"\n :data-source=\"getDataSource(obj4.children)\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :row-key=\"'index'\"\n bordered\n size=\"small\"\n stripe\n >\n <template #bodyCell=\"{ record, column, text, index }\">\n <template v-if=\"column.dataIndex.includes('upload')\">\n <template v-if=\"text && text?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in text\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n :title=\"uploadItem.name\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ uploadItem.name }}\n </span>\n </a-button>\n </template>\n </template>\n </template>\n <template v-else>{{ text }}</template>\n </template>\n </s-table>\n </a-descriptions-item>\n </template>\n <template v-if=\"obj4.type === 'formtemplate'\">\n <a-descriptions-item\n :label=\"obj4.label\"\n :span=\"3\"\n >\n <template\n v-for=\"(obj5, k) in obj4.children\"\n :key=\"k\"\n >\n <a-descriptions\n bordered\n :column=\"obj4?.column ? obj4?.column : 3\"\n >\n <template\n v-for=\"(obj6, l) in obj5\"\n :key=\"l\"\n >\n <template\n v-if=\"\n obj6.type !== 'remotetablepro' &&\n obj6.type !== 'formtemplate'\n \"\n >\n <template\n v-if=\"obj6.type === 'textarea' && !obj6.is_hide\"\n >\n <a-descriptions-item :label=\"obj6.label\">\n <p\n style=\"\n white-space: pre-line;\n margin: 0;\n color: #909399;\n \"\n >\n {{ obj6.value }}\n </p>\n </a-descriptions-item>\n </template>\n <template\n v-else-if=\"obj6.type === 'upload' && !obj6.is_hide\"\n >\n <a-descriptions-item :label=\"obj6.label\">\n <template\n v-if=\"obj6.value && obj6.value?.length > 0\"\n >\n <template\n v-for=\"(uploadItem, m) in obj6.value\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n {{ uploadItem.name }}\n </a-button>\n </template>\n </template>\n </a-descriptions-item>\n </template>\n <template v-else>\n <a-descriptions-item\n v-if=\"!obj6.is_hide\"\n :label=\"obj6.label\"\n >\n {{ obj6.value }}\n </a-descriptions-item>\n </template>\n </template>\n </template>\n </a-descriptions>\n <a-descriptions\n bordered\n :column=\"obj4?.column ? obj4?.column : 3\"\n >\n <template\n v-for=\"(obj6, l) in obj5\"\n :key=\"l\"\n >\n <template v-if=\"obj6.type === 'remotetablepro'\">\n <a-descriptions-item\n :label=\"obj6.label\"\n :span=\"3\"\n >\n <s-table\n :columns=\"getColumns(obj6.children)\"\n :data-source=\"getDataSource(obj6.children)\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :row-key=\"'index'\"\n bordered\n size=\"small\"\n stripe\n >\n <template\n #bodyCell=\"{ record, column, text, index }\"\n >\n <template\n v-if=\"column.dataIndex.includes('upload')\"\n >\n <template v-if=\"text && text?.length > 0\">\n <template\n v-for=\"(uploadItem, m) in text\"\n :key=\"m\"\n >\n <br v-if=\"m > 0\" />\n <a-button\n :title=\"uploadItem.name\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"look(uploadItem.url)\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ uploadItem.name }}\n </span>\n </a-button>\n </template>\n </template>\n </template>\n <template v-else>{{ text }}</template>\n </template>\n </s-table>\n </a-descriptions-item>\n </template>\n </template>\n </a-descriptions>\n </template>\n </a-descriptions-item>\n </template>\n </template>\n </a-descriptions>\n </template>\n </a-descriptions-item>\n </template>\n </template>\n </a-descriptions>\n </template>\n </a-descriptions-item>\n </template>\n </template>\n </a-descriptions>\n </template>\n <template v-if=\"task_data.length > 0\">\n <div class=\"xinxi-title\">审批记录</div>\n <s-table\n :columns=\"task_columns\"\n :data-source=\"task_data\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :scroll=\"{ y: 400 }\"\n :rowKey=\"'id'\"\n bordered\n size=\"small\"\n stripe\n >\n <template #bodyCell=\"{ column, index, text, record }\">\n <template v-if=\"column.dataIndex == 'index'\">\n {{ index + 1 }}\n </template>\n <template v-else>\n {{ text }}\n </template>\n </template>\n </s-table>\n </template>\n <template v-if=\"person_approve.length > 0\">\n <div class=\"xinxi-title\">步骤审批人信息</div>\n <s-table\n :columns=\"person_columns\"\n :data-source=\"person_approve\"\n :pagination=\"false\"\n :rangeSelection=\"false\"\n :scroll=\"{ y: 400 }\"\n :rowKey=\"'id'\"\n bordered\n size=\"small\"\n stripe\n >\n <template #bodyCell=\"{ column, index, text, record }\">\n <template v-if=\"column.dataIndex == 'index'\">\n {{ index + 1 }}\n </template>\n <template v-else-if=\"column.dataIndex == 'jue_se'\">\n <a-tag\n v-if=\"record?.jue_se\"\n color=\"blue\"\n >\n {{ record?.jue_se || '' }}\n </a-tag>\n </template>\n <template v-else-if=\"column.dataIndex == 'list'\">\n <a-tag\n v-for=\"(obj, index) in record.list\"\n :key=\"index\"\n color=\"green\"\n >\n {{ obj.realname }}\n </a-tag>\n </template>\n <template v-else>\n {{ text }}\n </template>\n </template>\n </s-table>\n </template>\n <div style=\"height: 400px; margin-top: 10px\">\n <my-process-viewer\n :flowData=\"flowData\"\n :height=\"400\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, reactive, ref } from 'vue';\nimport { useGetApiData } from '../init-plugin';\nimport MyProcessViewer from './Process/viewer/index.vue';\n\ndefineOptions({\n name: 'ApprovalForDetails',\n});\n\nconst getApiData = useGetApiData();\n\nconst props = defineProps<{\n record: Record<string, any>;\n}>();\n\nconst data = ref([]);\nconst approval_obj: any = reactive({});\nconst flowData = ref({});\nconst task_columns = [\n {\n title: '序号',\n dataIndex: 'index',\n width: 50,\n ellipsis: true,\n fixed: 'left',\n },\n {\n title: '审批步骤',\n dataIndex: 'name',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '职位',\n dataIndex: 'approval_position__name',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '审批人',\n dataIndex: 'assignee__realname',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '操作',\n dataIndex: 'approval_result',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '审批意见',\n dataIndex: 'comment',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '时间',\n dataIndex: 'end_time',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n];\nconst person_columns = [\n {\n title: '序号',\n dataIndex: 'index',\n width: 50,\n ellipsis: true,\n fixed: 'left',\n },\n {\n title: '审批步骤',\n dataIndex: 'name',\n width: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '职位',\n dataIndex: 'jue_se',\n width: 150,\n ellipsis: true,\n resizable: true,\n },\n {\n title: '步骤审批人',\n dataIndex: 'list',\n minWidth: 150,\n ellipsis: true,\n resizable: true,\n },\n];\nconst task_data = ref([]);\nconst isNotEmpty = value => {\n return value !== null && value !== undefined && value !== '';\n};\nconst getData = (list, loaddata, options) => {\n const displayList = [];\n // 递归处理 formtemplate 的子字段\n const processFormTemplate = (formTemplate, formData, formOptions) => {\n if (!formTemplate?.form?.dynamicFieldList) return [];\n return formTemplate.form.dynamicFieldList.flatMap(fieldGroup =>\n fieldGroup.children.map(child => {\n const childObj: any = {\n label: child.label,\n type: child.type,\n value: '',\n column: child?.column || 3,\n is_hide:\n formTemplate?.showType == 'table'\n ? child?.is_table_hide_column || false\n : child?.is_hide || false,\n };\n // 处理不同类型的字段\n if (child.type === 'formtemplate') {\n // 递归处理嵌套的 formtemplate\n if (formData?.[child.name]?.length > 0) {\n childObj.children = [];\n formData[child.name].forEach(item => {\n childObj.children.push(processFormTemplate(child, item, child.form.options));\n });\n }\n } else if (child.type === 'select' || child.type === 'radio') {\n if (isNotEmpty(formData?.[child.name])) {\n const option = formOptions?.[child.name]?.find(\n item => item.value == formData[child.name],\n );\n childObj.value = option?.name || '';\n }\n } else if (child.type === 'checkbox') {\n if (isNotEmpty(formData?.[child.name])) {\n const names = formOptions?.[child.name]\n ?.filter(item => formData[child.name].includes(item.value))\n ?.map(item => item.name)\n ?.filter(Boolean);\n childObj.value = names?.join(',') || '';\n }\n } else if (child.type === 'remoteselectpro') {\n if (isNotEmpty(formData?.[child.name + '.label'])) {\n childObj.value = formData[child.name + '.label'];\n }\n } else if (child.type === 'remotetablepro') {\n childObj.children = [];\n if (formData?.[child.name]?.length > 0) {\n formData[child.name].forEach(tableData => {\n const remotetableproList = [];\n if (child?.children?.length > 0) {\n child.children.forEach(child1 => {\n if (child1?.children?.length > 0) {\n child1.children.forEach(child2 => {\n const remotetableproObj = {\n label: child2.label,\n type: child2.type,\n value: '',\n };\n if (\n child2.type === 'select' ||\n child2.type === 'radio' ||\n child2.type === 'checkbox' ||\n child2.type === 'remoteselectpro'\n ) {\n remotetableproObj.value = tableData?.[child2.name2] || '';\n } else {\n remotetableproObj.value = tableData?.[child2.name] || '';\n }\n remotetableproList.push(remotetableproObj);\n });\n }\n });\n }\n childObj.children.push(remotetableproList);\n });\n }\n } else {\n childObj.value = formData?.[child.name] || '';\n }\n return childObj;\n }),\n );\n };\n\n list.forEach(item => {\n if (item?.children?.length > 0) {\n const obj = {\n group_name: item?.group_name || '',\n children: [],\n column: item?.column || 3,\n };\n\n item.children.forEach(child => {\n const childObj: any = {\n label: child.label,\n type: child.type,\n column: child?.column || 3,\n value: '',\n };\n\n // 处理不同类型的字段\n if (child.type === 'remoteselectpro') {\n if (isNotEmpty(loaddata?.[child.name + '.label'])) {\n childObj.value = loaddata?.[child.name + '.label'];\n }\n } else if (child.type === 'select' || child.type === 'radio') {\n if (isNotEmpty(loaddata?.[child.name])) {\n const option = options?.[child.name]?.find(item => item.value == loaddata[child.name]);\n childObj.value = option?.name || '';\n }\n } else if (child.type === 'checkbox') {\n if (isNotEmpty(loaddata?.[child.name])) {\n const names = options?.[child.name]\n ?.filter(item => loaddata[child.name].includes(item.value))\n ?.map(item => item.name)\n ?.filter(Boolean);\n childObj.value = names?.join(',') || '';\n }\n } else if (child.type === 'remotetablepro') {\n childObj.children = [];\n if (loaddata?.[child.name]?.length > 0) {\n loaddata[child.name].forEach(tableData => {\n const remotetableproList = [];\n if (child?.children?.length > 0) {\n child.children.forEach(child1 => {\n if (child1?.children?.length > 0) {\n child1.children.forEach(child2 => {\n const remotetableproObj = {\n label: child2.label,\n type: child2.type,\n value: '',\n };\n if (\n child2.type === 'select' ||\n child2.type === 'radio' ||\n child2.type === 'checkbox' ||\n child2.type === 'remoteselectpro'\n ) {\n remotetableproObj.value = tableData?.[child2.name2] || '';\n } else {\n remotetableproObj.value = tableData?.[child2.name] || '';\n }\n remotetableproList.push(remotetableproObj);\n });\n }\n });\n }\n childObj.children.push(remotetableproList);\n });\n }\n } else if (child.type === 'formtemplate') {\n // 处理 formtemplate 类型\n if (loaddata?.[child.name]?.length > 0) {\n childObj.children = [];\n loaddata[child.name].forEach(item => {\n childObj.children.push(processFormTemplate(child, item, child.form.options));\n });\n }\n } else {\n childObj.value = loaddata?.[child.name] || '';\n }\n obj.children.push(childObj);\n });\n displayList.push(obj);\n }\n });\n return displayList;\n};\nconst parseBpmnUserTask = (xmlStr: any) => {\n // 1. 创建DOMParser解析XML\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(xmlStr, 'text/xml');\n\n // 2. 获取所有userTask标签(处理命名空间)\n const userTasks = xmlDoc.getElementsByTagName('userTask');\n const result = [];\n\n // 3. 遍历每个userTask\n for (const task of userTasks) {\n // 提取name\n const name = task.getAttribute('name') || '';\n // 提取审批类型 userType\n const userType = task.getAttribute('flowable:userType') || '';\n // 根据类型提取对应的值\n let value = '';\n if (userType === 'candidateGroups') {\n value = task.getAttribute('flowable:candidateGroups') || '';\n }\n if (userType === 'assignee') {\n value = task.getAttribute('flowable:assignee') || '';\n }\n if (userType === 'candidateUsers') {\n value = task.getAttribute('flowable:candidateUsers') || '';\n }\n // 组装结果\n result.push({\n name: name,\n type: userType,\n value: value,\n });\n }\n return result;\n};\nconst person_approve = ref([]);\nonMounted(() => {\n getApiData(\n {\n approve_record_id: props.record.id,\n },\n '/approve/get_approve_record_info',\n ).then(async (res: any) => {\n data.value = getData(\n res.form_definition__data.dynamicFieldList,\n res.form_data,\n res.form_definition__data.options,\n );\n flowData.value = { xmlData: res.xml_data, nodeData: res.node_data };\n const person_list: any = await getApiData(\n {\n is_active: true,\n },\n '/sys/query_person_detail_list',\n );\n const approval_position_list: any = await getApiData(\n {\n is_active: true,\n column_fields: ['approvers_m2m_json', 'name'],\n },\n '/lyapprove/query_approval_position_list',\n );\n person_approve.value = parseBpmnUserTask(res.xml_data);\n person_approve.value = person_approve.value.map((item: any, index: number) => {\n return {\n ...item,\n id: index,\n value: item.value ? item.value.split(',').filter(Boolean).map(Number) : null,\n };\n });\n person_approve.value.forEach((item: any) => {\n if (item.value && item.value.length > 0) {\n item.list = [];\n if (item.type == 'assignee' || item.type == 'candidateUsers') {\n item.value.forEach((item2: any) => {\n person_list.data.forEach((item3: any) => {\n if (item2 == item3.id) {\n item.list.push({\n realname: item3.realname,\n });\n }\n });\n });\n }\n if (item.type == 'candidateGroups') {\n item.value.forEach((item2: any) => {\n approval_position_list.data.forEach((item3: any) => {\n if (item2 == item3.id) {\n item.jue_se = item3.name;\n item.list = item3.approvers_m2m_json;\n }\n });\n });\n }\n }\n });\n Object.assign(approval_obj, res);\n if (res.process_instance_id) {\n task_data.value.push({\n name: '开始',\n id: 0,\n approval_position__name: approval_obj?.form_data?.globalData?.person_position?.name\n ? approval_obj.form_data.globalData.person_position.name\n : '',\n assignee__realname: res.send_person__realname,\n approval_result: '发起',\n comment: '',\n end_time: res.start_time,\n });\n getApiData(\n {\n process_instance_id: res.process_instance_id,\n },\n '/lyapprove/query_task_list',\n ).then((task: any) => {\n if (task && task.data && task.data.length > 0) {\n task.data\n .sort((a: any, b: any) => {\n return a.id - b.id;\n })\n .forEach((item: any) => {\n if (item.status == '完成') {\n task_data.value.push({\n ...item,\n approval_result:\n item.approval_result === 'agree'\n ? '通过'\n : item.approval_result === 'refuse'\n ? '拒绝'\n : '',\n });\n }\n });\n }\n task_data.value = [].concat(task_data.value);\n });\n }\n });\n});\nconst uniqueByTitle = (arr: any) => {\n const seen = new Set();\n return arr.filter(item => !seen.has(item.title) && seen.add(item.title));\n};\nconst getColumns = (list: any) => {\n const columns = [];\n if (list && list.length > 0) {\n list[0].forEach((item: any, index: any) => {\n if (item.type === 'upload') {\n columns.push({\n title: item.label,\n dataIndex: 'upload_' + index,\n minWidth: 150,\n resizable: true,\n autoHeight: true,\n });\n } else {\n columns.push({\n title: item.label,\n dataIndex: 'value_' + index,\n resizable: true,\n autoHeight: true,\n });\n }\n });\n }\n return uniqueByTitle(columns);\n};\nconst getDataSource = (list: any) => {\n const data = [];\n if (list && list.length > 0) {\n list.forEach((item: any, index1: any) => {\n const obj: any = {};\n item.forEach((item1: any, index: any) => {\n if (item1.type === 'upload') {\n obj['upload_' + index] = item1.value;\n } else {\n obj['value_' + index] = item1.value;\n }\n });\n data.push({ ...obj, index: index1 });\n });\n }\n return data;\n};\nconst getDate = time => {\n if (time) {\n time = time.substring(0, 10);\n }\n return time;\n};\nconst look = (url: any) => {\n window.open(encodeURI(url), '_blank');\n};\n</script>\n<style lang=\"scss\" scoped>\n.flip-90 {\n transform: rotateY(90deg); /* 绕Y轴旋转90度,元素会垂直倒立 */\n}\n\n.form-container {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n padding: 4px;\n\n .form-header {\n display: flex;\n flex: 0 0 auto;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 4px;\n margin-right: 26px;\n\n .form-title {\n font-size: 15px;\n }\n\n .form-header-right {\n display: flex;\n flex-direction: column;\n }\n\n .right-item {\n padding: 4px;\n // border-left: 1px solid;\n // border-top: 1px solid;\n }\n\n .right-item:first {\n border-top: none;\n }\n }\n\n .form-body {\n flex: 1 1 auto;\n overflow: auto;\n overflow-x: hidden;\n padding: 4px;\n }\n\n .form-footer {\n flex: 0 0 auto;\n padding: 8px;\n border-top: 1px solid #e8e8e8;\n display: flex;\n justify-content: flex-end;\n }\n}\n\n.header-container {\n width: 100%;\n position: relative;\n min-height: 70px; /* 增加最小高度保证布局稳定性 */\n padding: 1px 0; /* 增加上下内边距 */\n}\n\n.serial-number {\n position: absolute;\n left: 0;\n top: 19px;\n transform: translateY(-50%); /* 垂直居中 */\n}\n\n.article-title {\n width: 100%;\n padding: 0 200px; /* 左右保留40px距离 */\n box-sizing: border-box; /* 盒模型计算包含内边距 */\n text-align: center; /* 文本整体居中 */\n font-weight: bold;\n font-size: 24px;\n word-wrap: break-word; /* 允许长单词换行 */\n line-height: 1.5; /* 增加行高提高可读性 */\n}\n\n.xinxi-title {\n width: 100%;\n background-color: #dcdcdc;\n padding: 10px 0 10px 20px;\n font-weight: bold;\n border-radius: 3px;\n color: #313131;\n margin: 8px 0 2px 0;\n}\n\n.descriptions {\n :deep(.ant-descriptions .ant-descriptions-row > td) {\n padding: 8px;\n }\n\n :deep(.ant-descriptions .ant-descriptions-row > th) {\n padding: 8px;\n width: 100px;\n }\n}\n</style>\n","<template>\n <a-button\n :title=\"cmpObj.text\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"is_open()\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ cmpObj.text }}\n </span>\n </a-button>\n <a-drawer\n :body-style=\"{ padding: '10px 20px' }\"\n :footer=\"null\"\n :open=\"open\"\n :width=\"1120\"\n title=\"数据来源\"\n @close=\"onClose\"\n >\n <a-spin :spinning=\"loading\">\n <a-tabs v-model:activeKey=\"active_tab\">\n <a-tab-pane\n key=\"base\"\n tab=\"基础信息\"\n >\n <a-descriptions\n bordered\n :column=\"3\"\n size=\"small\"\n >\n <a-descriptions-item label=\"数据ID\">\n {{ excel_item.id }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"2\"\n label=\"文件名称\"\n >\n {{ excel_item.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"数据类型\">\n {{ excel_item.excel_type__name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"数据来源\">\n {{ excel_item.source_type_display }}\n </a-descriptions-item>\n <a-descriptions-item label=\"状态\">\n {{ excel_item.status_display }}\n </a-descriptions-item>\n <a-descriptions-item label=\"上传人\">\n {{ excel_item.real_name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"上传时间\">\n {{ excel_item.create_time }}\n </a-descriptions-item>\n <a-descriptions-item label=\"更新时间\">\n {{ excel_item.update_time }}\n </a-descriptions-item>\n <a-descriptions-item label=\"在用数据\">\n {{ excel_item.is_used ? '在用' : '禁用' }}\n </a-descriptions-item>\n <a-descriptions-item label=\"正确记录数\">\n {{ excel_item.good_record_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"错误记录数\">\n {{ excel_item.error_record_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"导入数量\">\n {{ excel_item.import_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"最大行号\">\n {{ excel_item.max_row_index }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"2\"\n label=\"备注\"\n >\n {{ excel_item.bz }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"3\"\n label=\"原始文件\"\n >\n <a-button\n v-if=\"excel_item.origin_file_url\"\n type=\"link\"\n @click=\"look(excel_item.origin_file_url)\"\n >\n 查看文件\n </a-button>\n </a-descriptions-item>\n </a-descriptions>\n </a-tab-pane>\n <a-tab-pane\n v-if=\"approve_record\"\n key=\"approve\"\n tab=\"审批单\"\n >\n <approval-for-details\n :key=\"approve_record.id\"\n :record=\"{ id: approve_record.id }\"\n />\n </a-tab-pane>\n </a-tabs>\n </a-spin>\n </a-drawer>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport ApprovalForDetails from './approval_for_details.vue';\nimport { useGetApiData, useUserStore } from '../init-plugin';\n\ndefineOptions({\n name: 'Cell_click_data_source',\n});\n\nconst props = defineProps<{\n cmpObj: Record<string, any>;\n}>();\n\nconst getApiData = useGetApiData();\nconst userStore = useUserStore();\nconst current_org = userStore?.current_org;\n\nconst open = ref(false);\nconst loading = ref(false);\nconst active_tab = ref('base');\nconst excel_item = ref<Record<string, any>>({});\nconst approve_record = ref<Record<string, any> | null>(null);\n\nconst is_open = async () => {\n open.value = true;\n loading.value = true;\n active_tab.value = 'base';\n excel_item.value = {};\n approve_record.value = null;\n try {\n const res: any = await getApiData(\n {\n org_id: current_org?.id,\n excel_item_id: props.cmpObj.text,\n },\n '/approve/get_excel_item_source_info',\n );\n excel_item.value = res?.excel_item || {};\n approve_record.value = res?.approve_record || null;\n } finally {\n loading.value = false;\n }\n};\nconst onClose = () => {\n open.value = false;\n};\nconst look = (url: string) => {\n window.open(encodeURI(url), '_blank');\n};\n</script>\n","<template>\n <a-button\n :title=\"cmpObj.text\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"is_open()\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ cmpObj.text }}\n </span>\n </a-button>\n <a-drawer\n :body-style=\"{ padding: '10px 20px' }\"\n :footer=\"null\"\n :open=\"open\"\n :width=\"1120\"\n title=\"数据来源\"\n @close=\"onClose\"\n >\n <a-spin :spinning=\"loading\">\n <a-tabs v-model:activeKey=\"active_tab\">\n <a-tab-pane\n key=\"base\"\n tab=\"基础信息\"\n >\n <a-descriptions\n bordered\n :column=\"3\"\n size=\"small\"\n >\n <a-descriptions-item label=\"数据ID\">\n {{ excel_item.id }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"2\"\n label=\"文件名称\"\n >\n {{ excel_item.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"数据类型\">\n {{ excel_item.excel_type__name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"数据来源\">\n {{ excel_item.source_type_display }}\n </a-descriptions-item>\n <a-descriptions-item label=\"状态\">\n {{ excel_item.status_display }}\n </a-descriptions-item>\n <a-descriptions-item label=\"上传人\">\n {{ excel_item.real_name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"上传时间\">\n {{ excel_item.create_time }}\n </a-descriptions-item>\n <a-descriptions-item label=\"更新时间\">\n {{ excel_item.update_time }}\n </a-descriptions-item>\n <a-descriptions-item label=\"在用数据\">\n {{ excel_item.is_used ? '在用' : '禁用' }}\n </a-descriptions-item>\n <a-descriptions-item label=\"正确记录数\">\n {{ excel_item.good_record_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"错误记录数\">\n {{ excel_item.error_record_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"导入数量\">\n {{ excel_item.import_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"最大行号\">\n {{ excel_item.max_row_index }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"2\"\n label=\"备注\"\n >\n {{ excel_item.bz }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"3\"\n label=\"原始文件\"\n >\n <a-button\n v-if=\"excel_item.origin_file_url\"\n type=\"link\"\n @click=\"look(excel_item.origin_file_url)\"\n >\n 查看文件\n </a-button>\n </a-descriptions-item>\n </a-descriptions>\n </a-tab-pane>\n <a-tab-pane\n v-if=\"approve_record\"\n key=\"approve\"\n tab=\"审批单\"\n >\n <approval-for-details\n :key=\"approve_record.id\"\n :record=\"{ id: approve_record.id }\"\n />\n </a-tab-pane>\n </a-tabs>\n </a-spin>\n </a-drawer>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport ApprovalForDetails from './approval_for_details.vue';\nimport { useGetApiData, useUserStore } from '../init-plugin';\n\ndefineOptions({\n name: 'Cell_click_data_source',\n});\n\nconst props = defineProps<{\n cmpObj: Record<string, any>;\n}>();\n\nconst getApiData = useGetApiData();\nconst userStore = useUserStore();\nconst current_org = userStore?.current_org;\n\nconst open = ref(false);\nconst loading = ref(false);\nconst active_tab = ref('base');\nconst excel_item = ref<Record<string, any>>({});\nconst approve_record = ref<Record<string, any> | null>(null);\n\nconst is_open = async () => {\n open.value = true;\n loading.value = true;\n active_tab.value = 'base';\n excel_item.value = {};\n approve_record.value = null;\n try {\n const res: any = await getApiData(\n {\n org_id: current_org?.id,\n excel_item_id: props.cmpObj.text,\n },\n '/approve/get_excel_item_source_info',\n );\n excel_item.value = res?.excel_item || {};\n approve_record.value = res?.approve_record || null;\n } finally {\n loading.value = false;\n }\n};\nconst onClose = () => {\n open.value = false;\n};\nconst look = (url: string) => {\n window.open(encodeURI(url), '_blank');\n};\n</script>\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,92],"mappings":"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EA84FA,OA74Fa;GACb;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,eACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,yBACA,kBACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,QAAQ;MACR,UAAU;MACV,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,UAAU;MACV,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,EACD;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,OACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,OACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,EACD;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,YACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,iBACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,WACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,SAAW;KACX,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,UACA;IACD,YAAY,CACX;KACC,MAAM;KACN,SAAW;KACX,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,SAAW;KACX,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,UACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,KAAK,EACJ,WAAW,YACX;KACD,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,UACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,UACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,UACA;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,QAAQ;MACR,aAAa;MACb,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,aAAa;MACb,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX;KACC,MAAM;KACN,SAAW;KACX,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,aAAa;MACb,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,EACD;KACC,MAAM;KACN,SAAW;KACX,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,YACA,kBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD,YAAY,CACX;KACC,MAAM;KACN,SAAW;KACX,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,QACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,QACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN,SAAW;MACX;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD,YAAY,CACX;KACC,MAAM;KACN,SAAW;KACX,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;IACD,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,SAAW;KACX,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,KAAK,EACJ,WAAW,YACX;KACD,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,EACD;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,EACD;KACC,MAAM;KACN,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,mBACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,WAAW;MACX,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,WAAW;MACX,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,WAAW;MACX,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,mBACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,WAAW;MACX,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,WAAW;MACX,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,WAAW;MACX,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,mBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,kBACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,eACA,mBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,SAAW;KACX,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,KAAK,EACJ,WAAW,YACX;KACD,EACD;KACC,MAAM;KACN,MAAM;KACN,KAAK,EACJ,WAAW,YACX;KACD,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,eACA,mBACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,oBACA,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,oBACA,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,mBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,mBACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,mBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,mBACA,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,gBACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,EACD;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;IACZ,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,KAAK,EACJ,WAAW,YACX;MACD;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,WAAW;MACX,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,WAAW;KACX,aAAa;KACb,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,WAAW;KACX,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,mBACA,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX;KACC,MAAM;KACN,SAAW;KACX,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,SAAW;KACX,QAAQ;KACR,MAAM;KACN,CACD;IACD,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,WACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,SAAW;MACX,QAAQ;MACR;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,uBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,wBACA,wBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,uBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,iBACA,wBACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,eACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,WACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,EACD;KACC,MAAM;KACN,SAAW;KACX,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,WACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,WACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,EACD;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,WAAW;KACX,aAAa;KACb,EACD;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,WACA;IACD,YAAY;KACX;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,OACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;KACX;KACA;KACA;KACA;IACD,YAAY,CACX;KACC,MAAM;KACN,SAAW;KACX,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,sBACA;IACD,YAAY;KACX;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,SAAW;MACX,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,sBACA;IACD,YAAY;KACX;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,YACA,kBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,YACA,kBACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,OACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,OACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,OACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,OACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,aACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,EACD;KACC,MAAM;KACN,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,KAAK,EACJ,WAAW,YACX;KACD,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,CACD;IACD,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,KAAK,EACJ,WAAW,YACX;KACD,CACD;IACD,YAAY,CACX,cACA;IACD;GACD;IACC,MAAM;IACN,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX,cACA;IACD,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,SAAW;MACX,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;IACD;GACD;EA8IA,cA7IoB;GACpB;IACC,MAAM;IACN,eAAe;KACd,EACC,MAAM,QACN;KACD,EACC,MAAM,UACN;KACD,EACC,MAAM,WACN;KACD;IACD;GACD;IACC,MAAM;IACN,eAAe;KACd,EACC,MAAM,eACN;KACD,EACC,MAAM,cACN;KACD,EACC,MAAM,aACN;KACD,EACC,MAAM,SACN;KACD;IACD;GACD;IACC,MAAM;IACN,eAAe,CACd,EACC,MAAM,YACN,EACD,EACC,MAAM,aACN,CACD;IACD;GACD;IACC,MAAM;IACN,eAAe;KACd,EACC,MAAM,QACN;KACD,EACC,MAAM,WACN;KACD,EACC,MAAM,YACN;KACD,EACC,MAAM,QACN;KACD;IACD;GACD;IACC,MAAM;IACN,eAAe,CACd,EACC,MAAM,YACN,EACD,EACC,MAAM,eACN,CACD;IACD;GACD;IACC,MAAM;IACN,eAAe;KACd,EACC,MAAM,QACN;KACD,EACC,MAAM,YACN;KACD,EACC,MAAM,2BACN;KACD,EACC,MAAM,yBACN;KACD;IACD;GACD;IACC,MAAM;IACN,eAAe;KACd,EACC,MAAM,QACN;KACD,EACC,MAAM,OACN;KACD,EACC,MAAM,QACN;KACD;IACD;GACD;IACC,MAAM;IACN,eAAe;KACd,EACC,MAAM,QACN;KACD,EACC,MAAM,OACN;KACD,EACC,MAAM,OACN;KACD,EACC,MAAM,WACN;KACD;IACD;GACD;IACC,MAAM;IACN,eAAe,CACd,EACC,MAAM,YACN,EACD,EACC,MAAM,cACN,CACD;IACD;GACD;EAYA,KAXW;GACX,UAAU;GACV,YAAY;GACZ;EASA;CAiqBC,QA/dkB;EACnB,MAjMY;EAkMZ,KAjMW;EAkMX,QAjMc;EAkMd,OAjMa;GACb;IACC,MAAM;IACN,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,WAAW;KACX,EACD;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,CACD;IACD,YAAY,CACX,aACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,aAAa;KACb,MAAM;KACN,WAAW;KACX,CACD;IACD,YAAY,CACX,WACA;IACD;GACD;IACC,MAAM;IACN,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,aAAa;MACb,MAAM;MACN,WAAW;MACX;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,aAAa;MACb;KACD;IACD,YAAY,CACX,kBACA;IACD;GACD;IACC,MAAM;IACN,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,aAAa;MACb,MAAM;MACN,WAAW;MACX;KACD;MACC,MAAM;MACN,QAAQ;MACR,aAAa;MACb,MAAM;MACN,WAAW;MACX;KACD;MACC,MAAM;MACN,QAAQ;MACR,aAAa;MACb,MAAM;MACN,WAAW;MACX;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR,SAAW;MACX;KACD;IACD,YAAY,CACX,iBACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,QAAQ;KACR,aAAa;KACb,WAAW;KACX,CACD;IACD,YAAY,CACX,WACA;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,CACD;IACD,YAAY,CACX,WACA;IACD;GACD;EA4CA,cA3CoB,CACpB;GACC,MAAM;GACN,eAAe;IACd,EACC,MAAM,kBACN;IACD,EACC,MAAM,qBACN;IACD,EACC,MAAM,qBACN;IACD,EACC,MAAM,sBACN;IACD,EACC,MAAM,yBACN;IACD,EACC,MAAM,yBACN;IACD;GACD,EACD;GACC,MAAM;GACN,eAAe,CACd,EACC,MAAM,cACN,EACD,EACC,MAAM,kBACN,CACD;GACD,CACD;EASA,cARoB,EACpB;EAQA;CAydC,IArXc;EACf,MAnGY;EAoGZ,KAnGW;EAoGX,QAnGc;EAoGd,OAnGa;GACb,EACC,MAAM,WACN;GACD,EACC,MAAM,WACN;GACD,EACC,MAAM,QACN;GACD,EACC,MAAM,UACN;GACD;IACC,MAAM;IACN,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,SAAW;KACX,QAAQ;KACR,EACD;KACC,MAAM;KACN,MAAM;KACN,SAAW;KACX,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,SAAW;MACX,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,SAAW;MACX,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;MACC,MAAM;MACN,MAAM;MACN,QAAQ;MACR;KACD;IACD;GACD;EAQA,cAPoB,EACpB;EAOA;CAgXC,IAjIc;EACf,MA9OY;EA+OZ,KA9OW;EA+OX,QA9Oc;EA+Od,OA9Oa;GACb;IACC,MAAM;IACN,YAAY;IACZ,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,YAAY;MACZ,WAAW;MACX,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,YAAY;MACZ,WAAW;MACX,aAAa;MACb;KACD;MACC,MAAM;MACN,YAAY;MACZ,WAAW;MACX,aAAa;MACb,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,YAAY;MACZ,WAAW;MACX,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,YAAY;MACZ,QAAQ;MACR,WAAW;MACX;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,iBACA;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,iBACA;IACD,YAAY;KACX;MACC,MAAM;MACN,MAAM;MACN,YAAY;MACZ,WAAW;MACX,aAAa;MACb;KACD;MACC,MAAM;MACN,MAAM;MACN,YAAY;MACZ,WAAW;MACX,aAAa;MACb;KACD;MACC,MAAM;MACN,UAAU;MACV,QAAQ;MACR,MAAM;MACN,KAAK,EACJ,WAAW,YACX;MACD;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY;KACX;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,YAAY;MACZ,WAAW;MACX;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,QAAQ;MACR,MAAM;MACN;KACD;MACC,MAAM;MACN,MAAM;MACN,YAAY;MACZ,QAAQ;MACR,WAAW;MACX;KACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,OACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,OACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,mBAAmB;KACnB,QAAQ;KACR,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,OACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,YAAY;KACZ,mBAAmB;KACnB,QAAQ;KACR,WAAW;KACX,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,QACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,YAAY;KACZ,mBAAmB;KACnB,QAAQ;KACR,WAAW;KACX,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX,OACA;IACD,YAAY,CACX;KACC,MAAM;KACN,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY;IACZ,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;EAWA,cAVoB,EACpB;EAUA,KATS,EACT,UAAU,aACV;EAQA;CA2HC,MA5EgB;EACjB,MA9CY;EA+CZ,KA9CW;EA+CX,QA9Cc;EA+Cd,OA9Ca,CACb;GACC,MAAM;GACN,SAAW,CACV,mBACA;GACD,YAAY,CACX;IACC,MAAM;IACN,QAAQ;IACR,MAAM;IACN,EACD;IACC,MAAM;IACN,QAAQ;IACR,MAAM;IACN,CACD;GACD,EACD;GACC,MAAM;GACN,SAAW,CACV,kBACA;GACD,YAAY,CACX;IACC,MAAM;IACN,QAAQ;IACR,MAAM;IACN,EACD;IACC,MAAM;IACN,QAAQ;IACR,MAAM;IACN,CACD;GACD,CACD;EAUA,cAToB,EACpB;EASA,cARoB,EACpB;EAQA;CAsEC,OAfuB;EACxB,MAtDU;EAuDV,KAtDS;EAuDT,QAtDY;EAuDZ,OAtDW;GACX;IACC,MAAM;IACN,SAAW,CACV,mBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,SAAW,CACV,mBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,EACD;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;IACC,MAAM;IACN,SAAW,CACV,kBACA;IACD,YAAY,CACX;KACC,MAAM;KACN,QAAQ;KACR,MAAM;KACN,CACD;IACD;GACD;EAUA,cATkB,EAClB;EASA,cARkB,EA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"}
|