@dpuse/dpuse-tool-d3-visualiser 0.0.45 → 0.0.47
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/array-Cv4-2llb.js +0 -2
- package/dist/axis-DjmZ9QYe.js +0 -2
- package/dist/{band-C1twWuW2.js → band-BFcwtSdG.js} +2 -4
- package/dist/{band-C1twWuW2.js.map → band-BFcwtSdG.js.map} +1 -1
- package/dist/{billboardJs-DS82ViEw.js → billboardJs-oaee80Fh.js} +85 -72
- package/dist/{billboardJs-DS82ViEw.js.map → billboardJs-oaee80Fh.js.map} +1 -1
- package/dist/{chordDiagram-Cz0sVVgD.js → chordDiagram-CTDXv74T.js} +35 -29
- package/dist/{chordDiagram-Cz0sVVgD.js.map → chordDiagram-CTDXv74T.js.map} +1 -1
- package/dist/{d3BarChart-DIN2KQsU.js → d3BarChart-BQCPo1ub.js} +3 -5
- package/dist/{d3BarChart-DIN2KQsU.js.map → d3BarChart-BQCPo1ub.js.map} +1 -1
- package/dist/dpuse-tool-d3-visualiser.css +1 -1
- package/dist/dpuse-tool-d3-visualiser.es.js +14 -16
- package/dist/dpuse-tool-d3-visualiser.es.js.map +1 -1
- package/dist/drag-DfL4uwqz.js +0 -2
- package/dist/{erdDiagram-Ds1hsQDD.js → erdDiagram-C_Hobpls.js} +8 -8
- package/dist/{erdDiagram-Ds1hsQDD.js.map → erdDiagram-C_Hobpls.js.map} +1 -1
- package/dist/hierarchy-CDFAetye.js +0 -2
- package/dist/{linear-BnhqTvdX.js → linear-C-jur735.js} +4 -5
- package/dist/{linear-BnhqTvdX.js.map → linear-C-jur735.js.map} +1 -1
- package/dist/{link-D-9z7kEr.js → link-DRDgTeij.js} +1 -3
- package/dist/{link-D-9z7kEr.js.map → link-DRDgTeij.js.map} +1 -1
- package/dist/math-C5EhTgJw.js +0 -2
- package/dist/max-CPVNm4tn.js +0 -2
- package/dist/{networkDiagram-yraPhqxN.js → networkDiagram-CcQxxJMB.js} +10 -10
- package/dist/{networkDiagram-yraPhqxN.js.map → networkDiagram-CcQxxJMB.js.map} +1 -1
- package/dist/nodrag-Dq2tlBbe.js +0 -2
- package/dist/{observablePlot-C7764aFq.js → observablePlot-BE2I-5e2.js} +46 -38
- package/dist/{observablePlot-C7764aFq.js.map → observablePlot-BE2I-5e2.js.map} +1 -1
- package/dist/{ordinal-uZdoVxAx.js → ordinal-CDNZetSD.js} +1 -3
- package/dist/{ordinal-uZdoVxAx.js.map → ordinal-CDNZetSD.js.map} +1 -1
- package/dist/palette-BuTjISrV.js +0 -2
- package/dist/{path-6kmCrmEz.js → path-BoJ8LMXE.js} +6 -6
- package/dist/{path-6kmCrmEz.js.map → path-BoJ8LMXE.js.map} +1 -1
- package/dist/{point-6cHftmvM.js → point-GXxVI808.js} +1 -3
- package/dist/{point-6cHftmvM.js.map → point-GXxVI808.js.map} +1 -1
- package/dist/{pow-BFDPqS3s.js → pow-CxQV96gC.js} +1 -3
- package/dist/{pow-BFDPqS3s.js.map → pow-CxQV96gC.js.map} +1 -1
- package/dist/{sankeyDiagram-BT2RCRpi.js → sankeyDiagram-DOF6arSJ.js} +1 -3
- package/dist/{sankeyDiagram-BT2RCRpi.js.map → sankeyDiagram-DOF6arSJ.js.map} +1 -1
- package/dist/select-BIuoFcZG.js +0 -2
- package/dist/{src-Xlr4CcSw.js → src-Dl4_vNYa.js} +5 -5
- package/dist/{src-Xlr4CcSw.js.map → src-Dl4_vNYa.js.map} +1 -1
- package/dist/src-WDualLFV.js +0 -2
- package/dist/src-yL3ZdoR1.js +0 -2
- package/dist/{step-DgCcZZ3W.js → step-C2rRFtYO.js} +4 -4
- package/dist/{step-DgCcZZ3W.js.map → step-C2rRFtYO.js.map} +1 -1
- package/dist/string-CnCj7THX.js +0 -2
- package/dist/sum-CNP0Xric.js +0 -2
- package/dist/{tanStackCharts-DCMs4Y_D.js → tanStackCharts-CqP0qIAr.js} +303 -287
- package/dist/tanStackCharts-CqP0qIAr.js.map +1 -0
- package/dist/{treeDiagram-DsHUD8ou.js → treeDiagram-FUVkkblR.js} +1 -3
- package/dist/{treeDiagram-DsHUD8ou.js.map → treeDiagram-FUVkkblR.js.map} +1 -1
- package/dist/types/src/index.d.ts +1 -2
- package/dist/types/src/tanStackCharts.d.ts +1 -2
- package/package.json +10 -11
- package/dist/tanStackCharts-DCMs4Y_D.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chordDiagram-Cz0sVVgD.js","names":["abs","node","slice","abs","node","slice","removeLabel","unitless","asTemplateStringsArr","templateStringsArr","hashString","getRegisteredStyles","merge","getRegisteredStyles","merge","cache","throttle","clone","max","constant","halfPi","abs","tau","cos","sin","pi","constant","curveLinear","x","pointX","y","pointY","array","constant","curveLinear","pointX","pointY","array","line","identity","descending","constant","tau","array","curveLinear","area","roundNode","ResizeObserver","select","variables","interrupt","select","curveBasis","curveBasisClosed","curveBasisOpen","curveBundle","curveCardinal","curveCardinalClosed","curveCardinalOpen","curveCatmullRom","curveCatmullRomClosed","curveCatmullRomOpen","curveLinear","curveLinearClosed","curveMonotoneX","curveMonotoneY","curveNatural","curveStep","curveStepAfter","curveStepBefore","interpolate","select","pie","constant","ribbon","areaRadial","select","arc","scalePow","partition","style"],"sources":["../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Parser.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@emotion/css/create-instance/dist/emotion-css-create-instance.esm.js","../node_modules/@emotion/css/dist/emotion-css.esm.js","../node_modules/throttle-debounce/esm/index.js","../node_modules/@unovis/ts/utils/data.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/area.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/pie.js","../node_modules/d3-shape/src/curve/radial.js","../node_modules/d3-shape/src/lineRadial.js","../node_modules/d3-shape/src/areaRadial.js","../node_modules/d3-hierarchy/src/treemap/round.js","../node_modules/d3-hierarchy/src/treemap/dice.js","../node_modules/d3-hierarchy/src/partition.js","../node_modules/@unovis/ts/types/component.js","../node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js","../node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js","../node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js","../node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js","../node_modules/@juggle/resize-observer/lib/utils/freeze.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverSize.js","../node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js","../node_modules/@juggle/resize-observer/lib/utils/element.js","../node_modules/@juggle/resize-observer/lib/utils/global.js","../node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js","../node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js","../node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js","../node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js","../node_modules/@juggle/resize-observer/lib/utils/process.js","../node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js","../node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js","../node_modules/@juggle/resize-observer/lib/utils/scheduler.js","../node_modules/@juggle/resize-observer/lib/ResizeObservation.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverController.js","../node_modules/@juggle/resize-observer/lib/ResizeObserver.js","../node_modules/@unovis/ts/utils/resize-observer.js","../node_modules/@unovis/ts/core/container/config.js","../node_modules/@unovis/ts/core/container/index.js","../node_modules/@unovis/ts/utils/to-px.js","../node_modules/@unovis/ts/utils/misc.js","../node_modules/@unovis/ts/utils/theme.js","../node_modules/@unovis/ts/styles/colors.js","../node_modules/@unovis/ts/styles/patterns.js","../node_modules/@unovis/ts/styles/index.js","../node_modules/@unovis/ts/utils/d3.js","../node_modules/@unovis/ts/containers/single-container/config.js","../node_modules/@unovis/ts/containers/single-container/index.js","../node_modules/@unovis/ts/data-models/core.js","../node_modules/@unovis/ts/core/component/config.js","../node_modules/@unovis/ts/core/component/index.js","../node_modules/d3-interpolate-path/build/d3-interpolate-path.mjs","../node_modules/@unovis/ts/utils/color.js","../node_modules/@unovis/ts/types/curve.js","../node_modules/@unovis/ts/utils/path.js","../node_modules/@unovis/ts/types/text.js","../node_modules/striptags/src/striptags.js","../node_modules/@unovis/ts/utils/text.js","../node_modules/@unovis/ts/components/chord-diagram/types.js","../node_modules/@unovis/ts/data-models/graph.js","../node_modules/@unovis/ts/components/chord-diagram/config.js","../node_modules/@unovis/ts/components/chord-diagram/modules/node.js","../node_modules/@unovis/ts/components/chord-diagram/style.js","../node_modules/@unovis/ts/components/chord-diagram/modules/label.js","../node_modules/@unovis/ts/components/chord-diagram/modules/layout.js","../node_modules/d3-chord/src/math.js","../node_modules/d3-chord/src/array.js","../node_modules/d3-chord/src/constant.js","../node_modules/d3-chord/src/ribbon.js","../node_modules/@unovis/ts/components/chord-diagram/modules/link.js","../node_modules/@unovis/ts/components/chord-diagram/index.js","../src/chordDiagram.ts"],"sourcesContent":["var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n return document.styleSheets[i];\n }\n } // this function should always return with a value\n // TS can't understand it though so we make it stop complaining here\n\n\n return undefined;\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n this.tags.forEach(function (tag) {\n var _tag$parentNode;\n\n return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value;\n var parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport { createCache as default };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n var componentSelector = interpolation;\n\n if (componentSelector.__emotion_styles !== undefined) {\n\n return componentSelector;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n var keyframes = interpolation;\n\n if (keyframes.anim === 1) {\n cursor = {\n name: keyframes.name,\n styles: keyframes.styles,\n next: cursor\n };\n return keyframes.name;\n }\n\n var serializedStyles = interpolation;\n\n if (serializedStyles.styles !== undefined) {\n var next = serializedStyles.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = serializedStyles.styles + \";\";\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n }\n\n break;\n }\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString = interpolation;\n\n if (registered == null) {\n return asString;\n }\n\n var cached = registered[asString];\n return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var key in obj) {\n var value = obj[key];\n\n if (typeof value !== 'object') {\n var asString = value;\n\n if (registered != null && registered[asString] !== undefined) {\n string += key + \"{\" + registered[asString] + \"}\";\n } else if (isProcessableValue(asString)) {\n string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n\n string += key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n var asTemplateStringsArr = strings;\n\n styles += asTemplateStringsArr[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n var templateStringsArr = strings;\n\n styles += templateStringsArr[i];\n }\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n}\n\nexport { serializeStyles };\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else if (className) {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","import createCache from '@emotion/cache';\nimport { serializeStyles } from '@emotion/serialize';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\n\nfunction insertWithoutScoping(cache, serialized) {\n if (cache.inserted[serialized.name] === undefined) {\n return cache.insert('', serialized, cache.sheet, true);\n }\n}\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar createEmotion = function createEmotion(options) {\n var cache = createCache(options);\n\n cache.sheet.speedy = function (value) {\n\n this.isSpeedy = value;\n };\n\n cache.compat = true;\n\n var css = function css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered, undefined);\n insertStyles(cache, serialized, false);\n return cache.key + \"-\" + serialized.name;\n };\n\n var keyframes = function keyframes() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n var animation = \"animation-\" + serialized.name;\n insertWithoutScoping(cache, {\n name: serialized.name,\n styles: \"@keyframes \" + animation + \"{\" + serialized.styles + \"}\"\n });\n return animation;\n };\n\n var injectGlobal = function injectGlobal() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n insertWithoutScoping(cache, serialized);\n };\n\n var cx = function cx() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n return {\n css: css,\n cx: cx,\n injectGlobal: injectGlobal,\n keyframes: keyframes,\n hydrate: function hydrate(ids) {\n ids.forEach(function (key) {\n cache.inserted[key] = true;\n });\n },\n flush: function flush() {\n cache.registered = {};\n cache.inserted = {};\n cache.sheet.flush();\n },\n sheet: cache.sheet,\n cache: cache,\n getRegisteredStyles: getRegisteredStyles.bind(null, cache.registered),\n merge: merge.bind(null, cache.registered, css)\n };\n};\n\nvar classnames = function classnames(args) {\n var cls = '';\n\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nexport { createEmotion as default };\n","import createEmotion from '../create-instance/dist/emotion-css-create-instance.esm.js';\nimport '@emotion/cache';\nimport '@emotion/serialize';\nimport '@emotion/utils';\n\nvar _createEmotion = createEmotion({\n key: 'css'\n}),\n flush = _createEmotion.flush,\n hydrate = _createEmotion.hydrate,\n cx = _createEmotion.cx,\n merge = _createEmotion.merge,\n getRegisteredStyles = _createEmotion.getRegisteredStyles,\n injectGlobal = _createEmotion.injectGlobal,\n keyframes = _createEmotion.keyframes,\n css = _createEmotion.css,\n sheet = _createEmotion.sheet,\n cache = _createEmotion.cache;\n\nexport { cache, css, cx, flush, getRegisteredStyles, hydrate, injectGlobal, keyframes, merge, sheet };\n","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher)\n * are most useful.\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through,\n * as-is, to `callback` when the throttled-function is executed.\n * @param {object} [options] - An object to configure options.\n * @param {boolean} [options.noTrailing] - Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds\n * while the throttled-function is being called. If noTrailing is false or unspecified, callback will be executed\n * one final time after the last throttled-function call. (After the throttled-function has not been called for\n * `delay` milliseconds, the internal counter is reset).\n * @param {boolean} [options.noLeading] - Optional, defaults to false. If noLeading is false, the first throttled-function call will execute callback\n * immediately. If noLeading is true, the first the callback execution will be skipped. It should be noted that\n * callback will never executed if both noLeading = true and noTrailing = true.\n * @param {boolean} [options.debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is\n * false (at end), schedule `callback` to execute after `delay` ms.\n *\n * @returns {Function} A new, throttled, function.\n */\nfunction throttle (delay, callback, options) {\n var _ref = options || {},\n _ref$noTrailing = _ref.noTrailing,\n noTrailing = _ref$noTrailing === void 0 ? false : _ref$noTrailing,\n _ref$noLeading = _ref.noLeading,\n noLeading = _ref$noLeading === void 0 ? false : _ref$noLeading,\n _ref$debounceMode = _ref.debounceMode,\n debounceMode = _ref$debounceMode === void 0 ? undefined : _ref$debounceMode;\n /*\n * After wrapper has stopped being called, this timeout ensures that\n * `callback` is executed at the proper times in `throttle` and `end`\n * debounce modes.\n */\n var timeoutID;\n var cancelled = false;\n\n // Keep track of the last time `callback` was executed.\n var lastExec = 0;\n\n // Function to clear existing timeout\n function clearExistingTimeout() {\n if (timeoutID) {\n clearTimeout(timeoutID);\n }\n }\n\n // Function to cancel next exec\n function cancel(options) {\n var _ref2 = options || {},\n _ref2$upcomingOnly = _ref2.upcomingOnly,\n upcomingOnly = _ref2$upcomingOnly === void 0 ? false : _ref2$upcomingOnly;\n clearExistingTimeout();\n cancelled = !upcomingOnly;\n }\n\n /*\n * The `wrapper` function encapsulates all of the throttling / debouncing\n * functionality and when executed will limit the rate at which `callback`\n * is executed.\n */\n function wrapper() {\n for (var _len = arguments.length, arguments_ = new Array(_len), _key = 0; _key < _len; _key++) {\n arguments_[_key] = arguments[_key];\n }\n var self = this;\n var elapsed = Date.now() - lastExec;\n if (cancelled) {\n return;\n }\n\n // Execute `callback` and update the `lastExec` timestamp.\n function exec() {\n lastExec = Date.now();\n callback.apply(self, arguments_);\n }\n\n /*\n * If `debounceMode` is true (at begin) this is used to clear the flag\n * to allow future `callback` executions.\n */\n function clear() {\n timeoutID = undefined;\n }\n if (!noLeading && debounceMode && !timeoutID) {\n /*\n * Since `wrapper` is being called for the first time and\n * `debounceMode` is true (at begin), execute `callback`\n * and noLeading != true.\n */\n exec();\n }\n clearExistingTimeout();\n if (debounceMode === undefined && elapsed > delay) {\n if (noLeading) {\n /*\n * In throttle mode with noLeading, if `delay` time has\n * been exceeded, update `lastExec` and schedule `callback`\n * to execute after `delay` ms.\n */\n lastExec = Date.now();\n if (!noTrailing) {\n timeoutID = setTimeout(debounceMode ? clear : exec, delay);\n }\n } else {\n /*\n * In throttle mode without noLeading, if `delay` time has been exceeded, execute\n * `callback`.\n */\n exec();\n }\n } else if (noTrailing !== true) {\n /*\n * In trailing throttle mode, since `delay` time has not been\n * exceeded, schedule `callback` to execute `delay` ms after most\n * recent execution.\n *\n * If `debounceMode` is true (at begin), schedule `clear` to execute\n * after `delay` ms.\n *\n * If `debounceMode` is false (at end), schedule `callback` to\n * execute after `delay` ms.\n */\n timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n }\n }\n wrapper.cancel = cancel;\n\n // Return the wrapper function.\n return wrapper;\n}\n\n/* eslint-disable no-undefined */\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n * @param {object} [options] - An object to configure options.\n * @param {boolean} [options.atBegin] - Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n *\n * @returns {Function} A new, debounced function.\n */\nfunction debounce (delay, callback, options) {\n var _ref = options || {},\n _ref$atBegin = _ref.atBegin,\n atBegin = _ref$atBegin === void 0 ? false : _ref$atBegin;\n return throttle(delay, callback, {\n debounceMode: atBegin !== false\n });\n}\n\nexport { debounce, throttle };\n//# sourceMappingURL=index.js.map\n","import { mean, min, max, bisectLeft, bisectRight } from 'd3-array';\nimport { throttle as throttle$1 } from 'throttle-debounce';\nimport { FindNearestDirection } from '../types/data.js';\n\nconst isNumber = (a) => typeof a === 'number';\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nconst isFunction = (a) => typeof a === 'function';\r\nconst isUndefined = (a) => a === undefined;\r\nconst isNil = (a) => a == null;\r\nconst isString = (a) => typeof a === 'string';\r\nconst isArray = (a) => Array.isArray(a);\r\nconst isObject = (a) => (a instanceof Object);\r\nconst isAClassInstance = (a) => a.constructor.name !== 'Function' && a.constructor.name !== 'Object';\r\nconst isPlainObject = (a) => isObject(a) && !isArray(a) && !isFunction(a) && !isAClassInstance(a);\r\nconst isEmpty = (obj) => {\r\n return [Object, Array].includes((obj || {}).constructor) &&\r\n !Object.entries((obj || {})).length;\r\n};\r\n// Based on https://github.com/maplibre/maplibre-gl-js/blob/e78ad7944ef768e67416daa4af86b0464bd0f617/src/style-spec/util/deep_equal.ts, 3-Clause BSD license\r\nconst isEqual = (a, b, skipKeys = [], visited = new Set()) => {\r\n if (Array.isArray(a)) {\r\n if (!Array.isArray(b) || a.length !== b.length)\r\n return false;\r\n if (visited.has(a))\r\n return true;\r\n else\r\n visited.add(a);\r\n for (let i = 0; i < a.length; i++) {\r\n if (!isEqual(a[i], b[i], skipKeys, visited))\r\n return false;\r\n }\r\n return true;\r\n }\r\n if (a instanceof Date && b instanceof Date) {\r\n return a.getTime() === b.getTime();\r\n }\r\n if (typeof a === 'object' && a !== null && b !== null) {\r\n if (!(typeof b === 'object'))\r\n return false;\r\n if (a === b)\r\n return true;\r\n const keysA = Object.keys(a).filter(key => !skipKeys.includes(key));\r\n const keysB = Object.keys(b).filter(key => !skipKeys.includes(key));\r\n if (keysA.length !== keysB.length)\r\n return false;\r\n if (visited.has(a))\r\n return true;\r\n else\r\n visited.add(a);\r\n for (const key of keysA) {\r\n if (!isEqual(a[key], b[key], skipKeys, visited))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return a === b;\r\n};\r\nconst without = (arr, ...args) => arr.filter(item => !args.includes(item));\r\nconst flatten = (arr) => arr.flat();\r\nconst cloneDeep = (obj, stack = new Map()) => {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return obj;\r\n }\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime());\r\n }\r\n if (obj instanceof Array) {\r\n const clone = [];\r\n stack.set(obj, clone);\r\n for (const item of obj) {\r\n clone.push(stack.has(item) ? stack.get(item) : cloneDeep(item, stack));\r\n }\r\n return clone;\r\n }\r\n // Class instances will be copied without cloning\r\n if (isAClassInstance(obj)) {\r\n const clone = obj;\r\n return clone;\r\n }\r\n if (obj instanceof Object) {\r\n const clone = {};\r\n stack.set(obj, clone);\r\n const objAsRecord = obj;\r\n Object.keys(obj)\r\n .reduce((newObj, key) => {\r\n newObj[key] = stack.has(objAsRecord[key]) ? stack.get(objAsRecord[key]) : cloneDeep(objAsRecord[key], stack);\r\n return newObj;\r\n }, clone);\r\n return clone;\r\n }\r\n return obj;\r\n};\r\nconst merge = (obj1, obj2, visited = new Map()) => {\r\n if (!obj1 || !obj2)\r\n return obj1;\r\n if (obj1 === obj2)\r\n return obj1;\r\n const newObj = (isAClassInstance(obj1) ? obj1 : cloneDeep(obj1));\r\n // Taking care of recursive structures\r\n if (visited.has(obj2))\r\n return visited.get(obj2);\r\n else\r\n visited.set(obj2, newObj);\r\n Object.keys(obj2).forEach(key => {\r\n // Preventing prototype pollution\r\n if (key === '__proto__' || key === 'constructor')\r\n return;\r\n if (isPlainObject(obj1[key]) && isPlainObject(obj2[key])) {\r\n newObj[key] = merge(obj1[key], obj2[key], visited);\r\n }\r\n else if (isAClassInstance(obj2)) {\r\n newObj[key] = obj2;\r\n }\r\n else {\r\n newObj[key] = cloneDeep(obj2[key]);\r\n }\r\n });\r\n return newObj;\r\n};\r\nconst omit = (obj, props) => {\r\n obj = Object.assign({}, obj);\r\n props.forEach(prop => delete obj[prop]);\r\n return obj;\r\n};\r\nconst groupBy = (arr, accessor) => {\r\n return arr.reduce((grouped, v, i, a, k = accessor(v, i)) => (((grouped[k] || (grouped[k] = [])).push(v), grouped)), {});\r\n};\r\nconst sortBy = (arr, accessor) => {\r\n return arr.concat() // The native sort method modifies the array in place. We use `.concat()` to copy the array first\r\n .sort((a, b) => {\r\n return (accessor(a) > accessor(b)) ? 1 : ((accessor(b) > accessor(a)) ? -1 : 0);\r\n });\r\n};\r\nconst throttle = (f, delay, options) => throttle$1(delay, f, options);\r\nfunction getValue(d, accessor, index) {\r\n // eslint-disable-next-line @typescript-eslint/ban-types\r\n if (isFunction(accessor))\r\n return accessor(d, index);\r\n else\r\n return accessor;\r\n}\r\nfunction getString(d, accessor, i) {\r\n return getValue(d, accessor, i);\r\n}\r\nfunction getNumber(d, accessor, i) {\r\n return getValue(d, accessor, i);\r\n}\r\nfunction getBoolean(d, accessor, i) {\r\n return getValue(d, accessor, i);\r\n}\r\nfunction clean(data) {\r\n return data.filter(d => d && !isNumber(d));\r\n}\r\nfunction clamp(d, min, max) {\r\n return Math.min(Math.max(d, min), max);\r\n}\r\nfunction unique(array) {\r\n return Array.from(new Set(array));\r\n}\r\nfunction countUnique(array, accessor = (d) => d) {\r\n return new Set(array.map(d => accessor(d))).size;\r\n}\r\nfunction arrayOfIndices(n) {\r\n return [...Array(n).keys()];\r\n}\r\nfunction shallowDiff(o1 = {}, o2 = {}) {\r\n return Object.keys(o2).reduce((diff, key) => {\r\n if (o1[key] === o2[key])\r\n return diff;\r\n return Object.assign(Object.assign({}, diff), { [key]: o2[key] });\r\n }, {});\r\n}\r\nfunction getStackedExtent(data, ...acs) {\r\n if (!data)\r\n return [undefined, undefined];\r\n if (isArray(acs)) {\r\n let minValue = 0;\r\n let maxValue = 0;\r\n data.forEach((d, i) => {\r\n let positiveStack = 0;\r\n let negativeStack = 0;\r\n for (const a of acs) {\r\n const value = getNumber(d, a, i) || 0;\r\n if (value >= 0)\r\n positiveStack += value;\r\n else\r\n negativeStack += value;\r\n }\r\n if (positiveStack > maxValue)\r\n maxValue = positiveStack;\r\n if (negativeStack < minValue)\r\n minValue = negativeStack;\r\n });\r\n return [minValue, maxValue];\r\n }\r\n}\r\nfunction getStackedValues(d, index, ...acs) {\r\n const values = [];\r\n let positiveStack = 0;\r\n let negativeStack = 0;\r\n for (const a of acs) {\r\n const value = getNumber(d, a, index) || 0;\r\n if (value >= 0) {\r\n values.push(positiveStack += value);\r\n }\r\n else {\r\n values.push(negativeStack += value);\r\n }\r\n }\r\n return values;\r\n}\r\nfunction getStackedData(data, baseline, acs, prevNegative // to help guessing the stack direction (positive/negative) when the values are 0 or null\r\n) {\r\n const baselineValues = data.map((d, i) => getNumber(d, baseline, i) || 0);\r\n const isNegativeStack = acs.map((a, j) => {\r\n const average = mean(data, (d, i) => getNumber(d, a, i) || 0);\r\n return (average === 0 && Array.isArray(prevNegative)) ? prevNegative[j] : average < 0;\r\n });\r\n const stackedData = acs.map(() => []);\r\n data.forEach((d, i) => {\r\n let positiveStack = baselineValues[i];\r\n let negativeStack = baselineValues[i];\r\n acs.forEach((a, j) => {\r\n const value = getNumber(d, a, i) || 0;\r\n if (value >= 0) {\r\n stackedData[j].push([positiveStack, positiveStack += value]);\r\n }\r\n else {\r\n stackedData[j].push([negativeStack, negativeStack += value]);\r\n }\r\n });\r\n });\r\n // Fill in additional stack information\r\n stackedData.forEach((stack, i) => {\r\n stack.isMostlyNegative = isNegativeStack[i];\r\n });\r\n return stackedData;\r\n}\r\nfunction getMin(data, ...acs) {\r\n if (!data)\r\n return undefined;\r\n const minValue = min(data, (d, i) => min(acs, a => getNumber(d, a, i)));\r\n return minValue;\r\n}\r\nfunction getMax(data, ...acs) {\r\n if (!data)\r\n return undefined;\r\n const maxValue = max(data, (d, i) => max(acs, a => getNumber(d, a, i)));\r\n return maxValue;\r\n}\r\nfunction getExtent(data, ...acs) {\r\n return [getMin(data, ...acs), getMax(data, ...acs)];\r\n}\r\nfunction getNearest(data, value, accessor, direction = FindNearestDirection.Auto) {\r\n if (data.length <= 1)\r\n return data[0];\r\n const dataWithIndex = data.map((d, i) => ([d, i]));\r\n const dataWithIndexSorted = dataWithIndex\r\n .sort(([a, i], [b, j]) => getNumber(a, accessor, i) - getNumber(b, accessor, j));\r\n const values = dataWithIndexSorted.map(([d, i]) => getNumber(d, accessor, i));\r\n const index = direction === FindNearestDirection.Right\r\n ? bisectLeft(values, value, 0, data.length - 1)\r\n : bisectRight(values, value, 1, data.length);\r\n if (direction === FindNearestDirection.Right) {\r\n return dataWithIndexSorted[index][0];\r\n }\r\n else if (direction === FindNearestDirection.Left) {\r\n return dataWithIndexSorted[index - 1][0];\r\n }\r\n // By default (`FindNearestDirection.Auto`) return the nearest value\r\n return value - values[index - 1] > values[index] - value ? dataWithIndexSorted[index][0] : dataWithIndexSorted[index - 1][0];\r\n}\r\nfunction filterDataByRange(data, range, accessor, includeNeighbors = false) {\r\n if (!accessor)\r\n return [];\r\n const filteredData = data.filter((d, i) => {\r\n const value = getNumber(d, accessor, i);\r\n return (value >= range[0]) && (value <= range[1]);\r\n });\r\n if (includeNeighbors) {\r\n // If `filteredData` is empty and `includeNeighbors` is true, try to find nearest points\r\n if (filteredData.length === 0) {\r\n const nearestLeft = getNearest(data, range[0], accessor, FindNearestDirection.Left);\r\n const nearestRight = getNearest(data, range[1], accessor, FindNearestDirection.Right);\r\n return [nearestLeft, nearestRight].filter(Boolean);\r\n }\r\n // Find indices of first and last filtered points in original data\r\n const firstFilteredItem = filteredData[0];\r\n const lastFilteredItem = filteredData[filteredData.length - 1];\r\n const firstFilteredIndex = data.findIndex((d) => d === firstFilteredItem);\r\n const lastFilteredIndex = data.findIndex((d) => d === lastFilteredItem);\r\n // Include neighbors (if they exist)\r\n const startIndex = Math.max(0, firstFilteredIndex - 1);\r\n const endIndex = Math.min(data.length - 1, lastFilteredIndex + 1);\r\n // Return data from startIndex to endIndex (inclusive)\r\n return data.slice(startIndex, endIndex + 1);\r\n }\r\n return filteredData;\r\n}\r\nfunction isNumberWithinRange(value, range) {\r\n return (value >= range[0] && value <= range[1]) || (value >= range[1] && value <= range[0]);\r\n}\r\nconst ensureArray = (value) => {\r\n if (value === null || value === undefined) {\r\n return [];\r\n }\r\n if (Array.isArray(value)) {\r\n return value;\r\n }\r\n return [value];\r\n};\n\nexport { arrayOfIndices, clamp, clean, cloneDeep, countUnique, ensureArray, filterDataByRange, flatten, getBoolean, getExtent, getMax, getMin, getNearest, getNumber, getStackedData, getStackedExtent, getStackedValues, getString, getValue, groupBy, isAClassInstance, isArray, isEmpty, isEqual, isFunction, isNil, isNumber, isNumberWithinRange, isObject, isPlainObject, isString, isUndefined, merge, omit, shallowDiff, sortBy, throttle, unique, without };\n//# sourceMappingURL=data.js.map\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","import curveLinear from \"./linear.js\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport line from \"./line.js\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport area from \"./area.js\";\nimport {lineRadial} from \"./lineRadial.js\";\n\nexport default function() {\n var a = area().curve(curveRadialLinear),\n c = a.curve,\n x0 = a.lineX0,\n x1 = a.lineX1,\n y0 = a.lineY0,\n y1 = a.lineY1;\n\n a.angle = a.x, delete a.x;\n a.startAngle = a.x0, delete a.x0;\n a.endAngle = a.x1, delete a.x1;\n a.radius = a.y, delete a.y;\n a.innerRadius = a.y0, delete a.y0;\n a.outerRadius = a.y1, delete a.y1;\n a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n a.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return a;\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","var ComponentType;\r\n(function (ComponentType) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n ComponentType[ComponentType[\"SVG\"] = 0] = \"SVG\";\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n ComponentType[ComponentType[\"HTML\"] = 1] = \"HTML\";\r\n})(ComponentType || (ComponentType = {}));\r\nvar Sizing;\r\n(function (Sizing) {\r\n Sizing[\"Fit\"] = \"fit\";\r\n Sizing[\"Extend\"] = \"extend\";\r\n Sizing[\"FitWidth\"] = \"fit_width\";\r\n})(Sizing || (Sizing = {}));\n\nexport { ComponentType, Sizing };\n//# sourceMappingURL=component.js.map\n","var resizeObservers = [];\nexport { resizeObservers };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasActiveObservations = function () {\n return resizeObservers.some(function (ro) { return ro.activeTargets.length > 0; });\n};\nexport { hasActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasSkippedObservations = function () {\n return resizeObservers.some(function (ro) { return ro.skippedTargets.length > 0; });\n};\nexport { hasSkippedObservations };\n","var msg = 'ResizeObserver loop completed with undelivered notifications.';\nvar deliverResizeLoopError = function () {\n var event;\n if (typeof ErrorEvent === 'function') {\n event = new ErrorEvent('error', {\n message: msg\n });\n }\n else {\n event = document.createEvent('Event');\n event.initEvent('error', false, false);\n event.message = msg;\n }\n window.dispatchEvent(event);\n};\nexport { deliverResizeLoopError };\n","var ResizeObserverBoxOptions;\n(function (ResizeObserverBoxOptions) {\n ResizeObserverBoxOptions[\"BORDER_BOX\"] = \"border-box\";\n ResizeObserverBoxOptions[\"CONTENT_BOX\"] = \"content-box\";\n ResizeObserverBoxOptions[\"DEVICE_PIXEL_CONTENT_BOX\"] = \"device-pixel-content-box\";\n})(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));\nexport { ResizeObserverBoxOptions };\n","export var freeze = function (obj) { return Object.freeze(obj); };\n","import { freeze } from './utils/freeze';\nvar ResizeObserverSize = (function () {\n function ResizeObserverSize(inlineSize, blockSize) {\n this.inlineSize = inlineSize;\n this.blockSize = blockSize;\n freeze(this);\n }\n return ResizeObserverSize;\n}());\nexport { ResizeObserverSize };\n","import { freeze } from './utils/freeze';\nvar DOMRectReadOnly = (function () {\n function DOMRectReadOnly(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.top = this.y;\n this.left = this.x;\n this.bottom = this.top + this.height;\n this.right = this.left + this.width;\n return freeze(this);\n }\n DOMRectReadOnly.prototype.toJSON = function () {\n var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;\n return { x: x, y: y, top: top, right: right, bottom: bottom, left: left, width: width, height: height };\n };\n DOMRectReadOnly.fromRect = function (rectangle) {\n return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n };\n return DOMRectReadOnly;\n}());\nexport { DOMRectReadOnly };\n","var isSVG = function (target) { return target instanceof SVGElement && 'getBBox' in target; };\nvar isHidden = function (target) {\n if (isSVG(target)) {\n var _a = target.getBBox(), width = _a.width, height = _a.height;\n return !width && !height;\n }\n var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;\n return !(offsetWidth || offsetHeight || target.getClientRects().length);\n};\nvar isElement = function (obj) {\n var _a;\n if (obj instanceof Element) {\n return true;\n }\n var scope = (_a = obj === null || obj === void 0 ? void 0 : obj.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;\n return !!(scope && obj instanceof scope.Element);\n};\nvar isReplacedElement = function (target) {\n switch (target.tagName) {\n case 'INPUT':\n if (target.type !== 'image') {\n break;\n }\n case 'VIDEO':\n case 'AUDIO':\n case 'EMBED':\n case 'OBJECT':\n case 'CANVAS':\n case 'IFRAME':\n case 'IMG':\n return true;\n }\n return false;\n};\nexport { isSVG, isHidden, isElement, isReplacedElement };\n","export var global = typeof window !== 'undefined' ? window : {};\n","import { ResizeObserverBoxOptions } from '../ResizeObserverBoxOptions';\nimport { ResizeObserverSize } from '../ResizeObserverSize';\nimport { DOMRectReadOnly } from '../DOMRectReadOnly';\nimport { isSVG, isHidden } from '../utils/element';\nimport { freeze } from '../utils/freeze';\nimport { global } from '../utils/global';\nvar cache = new WeakMap();\nvar scrollRegexp = /auto|scroll/;\nvar verticalRegexp = /^tb|vertical/;\nvar IE = (/msie|trident/i).test(global.navigator && global.navigator.userAgent);\nvar parseDimension = function (pixel) { return parseFloat(pixel || '0'); };\nvar size = function (inlineSize, blockSize, switchSizes) {\n if (inlineSize === void 0) { inlineSize = 0; }\n if (blockSize === void 0) { blockSize = 0; }\n if (switchSizes === void 0) { switchSizes = false; }\n return new ResizeObserverSize((switchSizes ? blockSize : inlineSize) || 0, (switchSizes ? inlineSize : blockSize) || 0);\n};\nvar zeroBoxes = freeze({\n devicePixelContentBoxSize: size(),\n borderBoxSize: size(),\n contentBoxSize: size(),\n contentRect: new DOMRectReadOnly(0, 0, 0, 0)\n});\nvar calculateBoxSizes = function (target, forceRecalculation) {\n if (forceRecalculation === void 0) { forceRecalculation = false; }\n if (cache.has(target) && !forceRecalculation) {\n return cache.get(target);\n }\n if (isHidden(target)) {\n cache.set(target, zeroBoxes);\n return zeroBoxes;\n }\n var cs = getComputedStyle(target);\n var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();\n var removePadding = !IE && cs.boxSizing === 'border-box';\n var switchSizes = verticalRegexp.test(cs.writingMode || '');\n var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || '');\n var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || '');\n var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);\n var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);\n var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);\n var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);\n var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);\n var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);\n var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);\n var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);\n var horizontalPadding = paddingLeft + paddingRight;\n var verticalPadding = paddingTop + paddingBottom;\n var horizontalBorderArea = borderLeft + borderRight;\n var verticalBorderArea = borderTop + borderBottom;\n var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;\n var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;\n var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;\n var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;\n var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;\n var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;\n var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;\n var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;\n var boxes = freeze({\n devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),\n borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),\n contentBoxSize: size(contentWidth, contentHeight, switchSizes),\n contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)\n });\n cache.set(target, boxes);\n return boxes;\n};\nvar calculateBoxSize = function (target, observedBox, forceRecalculation) {\n var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;\n switch (observedBox) {\n case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:\n return devicePixelContentBoxSize;\n case ResizeObserverBoxOptions.BORDER_BOX:\n return borderBoxSize;\n default:\n return contentBoxSize;\n }\n};\nexport { calculateBoxSize, calculateBoxSizes };\n","import { calculateBoxSizes } from './algorithms/calculateBoxSize';\nimport { freeze } from './utils/freeze';\nvar ResizeObserverEntry = (function () {\n function ResizeObserverEntry(target) {\n var boxes = calculateBoxSizes(target);\n this.target = target;\n this.contentRect = boxes.contentRect;\n this.borderBoxSize = freeze([boxes.borderBoxSize]);\n this.contentBoxSize = freeze([boxes.contentBoxSize]);\n this.devicePixelContentBoxSize = freeze([boxes.devicePixelContentBoxSize]);\n }\n return ResizeObserverEntry;\n}());\nexport { ResizeObserverEntry };\n","import { isHidden } from '../utils/element';\nvar calculateDepthForNode = function (node) {\n if (isHidden(node)) {\n return Infinity;\n }\n var depth = 0;\n var parent = node.parentNode;\n while (parent) {\n depth += 1;\n parent = parent.parentNode;\n }\n return depth;\n};\nexport { calculateDepthForNode };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { ResizeObserverEntry } from '../ResizeObserverEntry';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nimport { calculateBoxSize } from './calculateBoxSize';\nvar broadcastActiveObservations = function () {\n var shallowestDepth = Infinity;\n var callbacks = [];\n resizeObservers.forEach(function processObserver(ro) {\n if (ro.activeTargets.length === 0) {\n return;\n }\n var entries = [];\n ro.activeTargets.forEach(function processTarget(ot) {\n var entry = new ResizeObserverEntry(ot.target);\n var targetDepth = calculateDepthForNode(ot.target);\n entries.push(entry);\n ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);\n if (targetDepth < shallowestDepth) {\n shallowestDepth = targetDepth;\n }\n });\n callbacks.push(function resizeObserverCallback() {\n ro.callback.call(ro.observer, entries, ro.observer);\n });\n ro.activeTargets.splice(0, ro.activeTargets.length);\n });\n for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {\n var callback = callbacks_1[_i];\n callback();\n }\n return shallowestDepth;\n};\nexport { broadcastActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nvar gatherActiveObservationsAtDepth = function (depth) {\n resizeObservers.forEach(function processObserver(ro) {\n ro.activeTargets.splice(0, ro.activeTargets.length);\n ro.skippedTargets.splice(0, ro.skippedTargets.length);\n ro.observationTargets.forEach(function processTarget(ot) {\n if (ot.isActive()) {\n if (calculateDepthForNode(ot.target) > depth) {\n ro.activeTargets.push(ot);\n }\n else {\n ro.skippedTargets.push(ot);\n }\n }\n });\n });\n};\nexport { gatherActiveObservationsAtDepth };\n","import { hasActiveObservations } from '../algorithms/hasActiveObservations';\nimport { hasSkippedObservations } from '../algorithms/hasSkippedObservations';\nimport { deliverResizeLoopError } from '../algorithms/deliverResizeLoopError';\nimport { broadcastActiveObservations } from '../algorithms/broadcastActiveObservations';\nimport { gatherActiveObservationsAtDepth } from '../algorithms/gatherActiveObservationsAtDepth';\nvar process = function () {\n var depth = 0;\n gatherActiveObservationsAtDepth(depth);\n while (hasActiveObservations()) {\n depth = broadcastActiveObservations();\n gatherActiveObservationsAtDepth(depth);\n }\n if (hasSkippedObservations()) {\n deliverResizeLoopError();\n }\n return depth > 0;\n};\nexport { process };\n","var trigger;\nvar callbacks = [];\nvar notify = function () { return callbacks.splice(0).forEach(function (cb) { return cb(); }); };\nvar queueMicroTask = function (callback) {\n if (!trigger) {\n var toggle_1 = 0;\n var el_1 = document.createTextNode('');\n var config = { characterData: true };\n new MutationObserver(function () { return notify(); }).observe(el_1, config);\n trigger = function () { el_1.textContent = \"\".concat(toggle_1 ? toggle_1-- : toggle_1++); };\n }\n callbacks.push(callback);\n trigger();\n};\nexport { queueMicroTask };\n","import { queueMicroTask } from './queueMicroTask';\nvar queueResizeObserver = function (cb) {\n queueMicroTask(function ResizeObserver() {\n requestAnimationFrame(cb);\n });\n};\nexport { queueResizeObserver };\n","import { process } from './process';\nimport { global } from './global';\nimport { queueResizeObserver } from './queueResizeObserver';\nvar watching = 0;\nvar isWatching = function () { return !!watching; };\nvar CATCH_PERIOD = 250;\nvar observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };\nvar events = [\n 'resize',\n 'load',\n 'transitionend',\n 'animationend',\n 'animationstart',\n 'animationiteration',\n 'keyup',\n 'keydown',\n 'mouseup',\n 'mousedown',\n 'mouseover',\n 'mouseout',\n 'blur',\n 'focus'\n];\nvar time = function (timeout) {\n if (timeout === void 0) { timeout = 0; }\n return Date.now() + timeout;\n};\nvar scheduled = false;\nvar Scheduler = (function () {\n function Scheduler() {\n var _this = this;\n this.stopped = true;\n this.listener = function () { return _this.schedule(); };\n }\n Scheduler.prototype.run = function (timeout) {\n var _this = this;\n if (timeout === void 0) { timeout = CATCH_PERIOD; }\n if (scheduled) {\n return;\n }\n scheduled = true;\n var until = time(timeout);\n queueResizeObserver(function () {\n var elementsHaveResized = false;\n try {\n elementsHaveResized = process();\n }\n finally {\n scheduled = false;\n timeout = until - time();\n if (!isWatching()) {\n return;\n }\n if (elementsHaveResized) {\n _this.run(1000);\n }\n else if (timeout > 0) {\n _this.run(timeout);\n }\n else {\n _this.start();\n }\n }\n });\n };\n Scheduler.prototype.schedule = function () {\n this.stop();\n this.run();\n };\n Scheduler.prototype.observe = function () {\n var _this = this;\n var cb = function () { return _this.observer && _this.observer.observe(document.body, observerConfig); };\n document.body ? cb() : global.addEventListener('DOMContentLoaded', cb);\n };\n Scheduler.prototype.start = function () {\n var _this = this;\n if (this.stopped) {\n this.stopped = false;\n this.observer = new MutationObserver(this.listener);\n this.observe();\n events.forEach(function (name) { return global.addEventListener(name, _this.listener, true); });\n }\n };\n Scheduler.prototype.stop = function () {\n var _this = this;\n if (!this.stopped) {\n this.observer && this.observer.disconnect();\n events.forEach(function (name) { return global.removeEventListener(name, _this.listener, true); });\n this.stopped = true;\n }\n };\n return Scheduler;\n}());\nvar scheduler = new Scheduler();\nvar updateCount = function (n) {\n !watching && n > 0 && scheduler.start();\n watching += n;\n !watching && scheduler.stop();\n};\nexport { scheduler, updateCount };\n","import { ResizeObserverBoxOptions } from './ResizeObserverBoxOptions';\nimport { calculateBoxSize } from './algorithms/calculateBoxSize';\nimport { isSVG, isReplacedElement } from './utils/element';\nvar skipNotifyOnElement = function (target) {\n return !isSVG(target)\n && !isReplacedElement(target)\n && getComputedStyle(target).display === 'inline';\n};\nvar ResizeObservation = (function () {\n function ResizeObservation(target, observedBox) {\n this.target = target;\n this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;\n this.lastReportedSize = {\n inlineSize: 0,\n blockSize: 0\n };\n }\n ResizeObservation.prototype.isActive = function () {\n var size = calculateBoxSize(this.target, this.observedBox, true);\n if (skipNotifyOnElement(this.target)) {\n this.lastReportedSize = size;\n }\n if (this.lastReportedSize.inlineSize !== size.inlineSize\n || this.lastReportedSize.blockSize !== size.blockSize) {\n return true;\n }\n return false;\n };\n return ResizeObservation;\n}());\nexport { ResizeObservation };\n","var ResizeObserverDetail = (function () {\n function ResizeObserverDetail(resizeObserver, callback) {\n this.activeTargets = [];\n this.skippedTargets = [];\n this.observationTargets = [];\n this.observer = resizeObserver;\n this.callback = callback;\n }\n return ResizeObserverDetail;\n}());\nexport { ResizeObserverDetail };\n","import { scheduler, updateCount } from './utils/scheduler';\nimport { ResizeObservation } from './ResizeObservation';\nimport { ResizeObserverDetail } from './ResizeObserverDetail';\nimport { resizeObservers } from './utils/resizeObservers';\nvar observerMap = new WeakMap();\nvar getObservationIndex = function (observationTargets, target) {\n for (var i = 0; i < observationTargets.length; i += 1) {\n if (observationTargets[i].target === target) {\n return i;\n }\n }\n return -1;\n};\nvar ResizeObserverController = (function () {\n function ResizeObserverController() {\n }\n ResizeObserverController.connect = function (resizeObserver, callback) {\n var detail = new ResizeObserverDetail(resizeObserver, callback);\n observerMap.set(resizeObserver, detail);\n };\n ResizeObserverController.observe = function (resizeObserver, target, options) {\n var detail = observerMap.get(resizeObserver);\n var firstObservation = detail.observationTargets.length === 0;\n if (getObservationIndex(detail.observationTargets, target) < 0) {\n firstObservation && resizeObservers.push(detail);\n detail.observationTargets.push(new ResizeObservation(target, options && options.box));\n updateCount(1);\n scheduler.schedule();\n }\n };\n ResizeObserverController.unobserve = function (resizeObserver, target) {\n var detail = observerMap.get(resizeObserver);\n var index = getObservationIndex(detail.observationTargets, target);\n var lastObservation = detail.observationTargets.length === 1;\n if (index >= 0) {\n lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);\n detail.observationTargets.splice(index, 1);\n updateCount(-1);\n }\n };\n ResizeObserverController.disconnect = function (resizeObserver) {\n var _this = this;\n var detail = observerMap.get(resizeObserver);\n detail.observationTargets.slice().forEach(function (ot) { return _this.unobserve(resizeObserver, ot.target); });\n detail.activeTargets.splice(0, detail.activeTargets.length);\n };\n return ResizeObserverController;\n}());\nexport { ResizeObserverController };\n","import { ResizeObserverController } from './ResizeObserverController';\nimport { isElement } from './utils/element';\nvar ResizeObserver = (function () {\n function ResizeObserver(callback) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (typeof callback !== 'function') {\n throw new TypeError(\"Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.\");\n }\n ResizeObserverController.connect(this, callback);\n }\n ResizeObserver.prototype.observe = function (target, options) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (!isElement(target)) {\n throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n }\n ResizeObserverController.observe(this, target, options);\n };\n ResizeObserver.prototype.unobserve = function (target) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (!isElement(target)) {\n throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n }\n ResizeObserverController.unobserve(this, target);\n };\n ResizeObserver.prototype.disconnect = function () {\n ResizeObserverController.disconnect(this);\n };\n ResizeObserver.toString = function () {\n return 'function ResizeObserver () { [polyfill code] }';\n };\n return ResizeObserver;\n}());\nexport { ResizeObserver };\n","import { ResizeObserver as ResizeObserver$1 } from '@juggle/resize-observer';\n\nconst ResizeObserver = globalThis.ResizeObserver || ResizeObserver$1;\n\nexport { ResizeObserver };\n//# sourceMappingURL=resize-observer.js.map\n","import { Sizing } from '../../types/component.js';\n\n// Core\r\nconst ContainerDefaultConfig = {\r\n duration: undefined,\r\n margin: {\r\n top: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n },\r\n padding: {\r\n top: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n },\r\n sizing: Sizing.Fit,\r\n width: undefined,\r\n height: undefined,\r\n svgDefs: undefined,\r\n ariaLabel: undefined,\r\n};\n\nexport { ContainerDefaultConfig };\n//# sourceMappingURL=config.js.map\n","import { select } from 'd3-selection';\nimport { Sizing } from '../../types/component.js';\nimport { merge, clamp, isEqual } from '../../utils/data.js';\nimport { ResizeObserver } from '../../utils/resize-observer.js';\nimport { ContainerDefaultConfig } from './config.js';\n\nclass ContainerCore {\r\n constructor(element) {\r\n this._defaultConfig = ContainerDefaultConfig;\r\n this._isFirstRender = true;\r\n this._renderAnimationFrameId = null;\r\n this._container = element;\r\n // Setting `role` attribute to `image` to make the container accessible\r\n const container = select(this._container);\r\n container.attr('role', 'figure');\r\n // Create SVG element for visualizations\r\n this.svg = container.append('svg')\r\n // We set `display` to `block` because inline elements have an invisible\r\n // inline space that adds 4px to the height of the container\r\n .style('display', 'block')\r\n .attr('xmlns', 'http://www.w3.org/2000/svg')\r\n .attr('height', ContainerCore.DEFAULT_CONTAINER_HEIGHT) // Overriding default SVG height of 150\r\n .attr('aria-hidden', true);\r\n this._svgDefs = this.svg.append('defs');\r\n this._svgDefsExternal = this.svg.append('defs');\r\n this.element = this.svg.node();\r\n }\r\n updateContainer(config) {\r\n var _a;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.prevConfig = this.config;\r\n this.config = merge(this._defaultConfig, config);\r\n // Add `svgDefs` if provided in the config\r\n if ((config === null || config === void 0 ? void 0 : config.svgDefs) !== ((_a = this.prevConfig) === null || _a === void 0 ? void 0 : _a.svgDefs)) {\r\n this._svgDefsExternal.selectAll('*').remove();\r\n this._svgDefsExternal.html(config.svgDefs);\r\n }\r\n }\r\n // The `_preRender` step should be used to perform some actions before rendering.\r\n // For example, calculating scales, setting component sizes, etc ...\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n _preRender() { }\r\n // The `_render` step should be used to perform the actual rendering\r\n _render(duration) {\r\n const { config } = this;\r\n // Apply the `aria-label` attribute\r\n select(this._container)\r\n .attr('aria-label', config.ariaLabel);\r\n this._isFirstRender = false;\r\n }\r\n // Warning: Some Containers (i.e. Single Container) may override this method, so if you introduce any changes here,\r\n // make sure to check that other containers didn't break after them.\r\n render(duration = this.config.duration) {\r\n const width = this.config.width || this.containerWidth;\r\n const height = this.config.height || this.containerHeight;\r\n // We set SVG size in `render()` instead of `_render()`, because the size values in pixels will become\r\n // available only in the next animation when being accessed via `element.clientWidth` and `element.clientHeight`,\r\n // and we rely on those values when setting width and size of the components.\r\n this.svg\r\n .attr('width', width)\r\n .attr('height', height);\r\n // Set up Resize Observer. We do it in `render()` to capture container size change if it happened\r\n // in the next animation frame after the initial `render` was called.\r\n if (!this._resizeObserver)\r\n this._setUpResizeObserver();\r\n // Schedule the actual rendering in the next frame\r\n cancelAnimationFrame(this._renderAnimationFrameId);\r\n this._renderAnimationFrameId = requestAnimationFrame(() => {\r\n this._preRender();\r\n this._render(duration);\r\n });\r\n }\r\n get containerWidth() {\r\n return this.config.width\r\n ? this.element.clientWidth\r\n : (this._container.clientWidth || this._container.getBoundingClientRect().width);\r\n }\r\n get containerHeight() {\r\n return this.config.height\r\n ? this.element.clientHeight\r\n : (this._container.clientHeight || this._container.getBoundingClientRect().height || ContainerCore.DEFAULT_CONTAINER_HEIGHT);\r\n }\r\n get width() {\r\n return clamp(this.containerWidth - this.config.margin.left - this.config.margin.right, 0, Number.POSITIVE_INFINITY);\r\n }\r\n get height() {\r\n return clamp(this.containerHeight - this.config.margin.top - this.config.margin.bottom, 0, Number.POSITIVE_INFINITY);\r\n }\r\n _removeAllChildren() {\r\n while (this.element.firstChild) {\r\n this.element.removeChild(this.element.firstChild);\r\n }\r\n }\r\n _onResize() {\r\n const { config } = this;\r\n const redrawOnResize = config.sizing === Sizing.Fit || config.sizing === Sizing.FitWidth;\r\n if (redrawOnResize)\r\n this.render(0);\r\n }\r\n _setUpResizeObserver() {\r\n if (this._resizeObserver)\r\n return;\r\n const containerRect = this._container.getBoundingClientRect();\r\n this._containerSize = { width: containerRect.width, height: containerRect.height };\r\n this._resizeObserver = new ResizeObserver((entries, observer) => {\r\n // Using request animation frame to avoid multiple resize events when scrollbars appear/disappear\r\n // See more: https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver#observation_errors\r\n cancelAnimationFrame(this._resizeObserverAnimationFrameId);\r\n this._resizeObserverAnimationFrameId = requestAnimationFrame(() => {\r\n const resizedContainerRect = this._container.getBoundingClientRect();\r\n const resizedContainerSize = { width: resizedContainerRect.width, height: resizedContainerRect.height };\r\n const hasSizeChanged = !isEqual(this._containerSize, resizedContainerSize);\r\n // Do resize only if element is attached to the DOM\r\n // will come in useful when some ancestor of container becomes detached\r\n if (hasSizeChanged && resizedContainerSize.width && resizedContainerSize.height) {\r\n this._containerSize = resizedContainerSize;\r\n this._onResize();\r\n }\r\n });\r\n });\r\n this._resizeObserver.observe(this._container);\r\n }\r\n destroy() {\r\n var _a;\r\n cancelAnimationFrame(this._renderAnimationFrameId);\r\n cancelAnimationFrame(this._resizeObserverAnimationFrameId);\r\n (_a = this._resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\r\n this.svg.remove();\r\n }\r\n}\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nContainerCore.DEFAULT_CONTAINER_HEIGHT = 300;\n\nexport { ContainerCore };\n//# sourceMappingURL=index.js.map\n","// SSR-safe port of https://github.com/mikolalysenko/to-px\r\nfunction parseUnit(str) {\r\n var _a;\r\n str = String(str);\r\n const num = parseFloat(str);\r\n const unit = ((_a = str.match(/[\\d.\\-+]*\\s*(.*)/)) === null || _a === void 0 ? void 0 : _a[1]) || '';\r\n return [num, unit];\r\n}\r\nfunction isBrowser() {\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n}\r\nfunction getPropertyInPX(element, prop) {\r\n var _a;\r\n const parts = parseUnit(getComputedStyle(element).getPropertyValue(prop));\r\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\r\n return parts[0] * ((_a = toPx(parts[1], element)) !== null && _a !== void 0 ? _a : 1);\r\n}\r\nfunction getSizeBrutal(unit, element) {\r\n const testDIV = document.createElement('div');\r\n testDIV.style.height = `128${unit}`;\r\n element.appendChild(testDIV);\r\n const size = getPropertyInPX(testDIV, 'height') / 128;\r\n element.removeChild(testDIV);\r\n return size;\r\n}\r\nlet cachedPPI = null;\r\nfunction getPixelsPerInch() {\r\n if (!isBrowser())\r\n return 96; // Standard default\r\n if (cachedPPI === null)\r\n cachedPPI = getSizeBrutal('in', document.body);\r\n return cachedPPI;\r\n}\r\nfunction toPx(str, element) {\r\n var _a;\r\n if (!str && str !== 0)\r\n return null;\r\n // SSR guard\r\n if (!isBrowser()) {\r\n // Return sensible defaults for SSR\r\n const parts = parseUnit(String(str));\r\n if (!isNaN(parts[0])) {\r\n const unit = ((_a = parts[1]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || 'px';\r\n if (unit === 'px' || unit === '')\r\n return parts[0];\r\n if (unit === 'em' || unit === 'rem')\r\n return parts[0] * 16; // Assume 16px base\r\n if (unit === 'in')\r\n return parts[0] * 96;\r\n if (unit === 'cm')\r\n return parts[0] * (96 / 2.54);\r\n if (unit === 'mm')\r\n return parts[0] * (96 / 25.4);\r\n if (unit === 'pt')\r\n return parts[0] * (96 / 72);\r\n if (unit === 'pc')\r\n return parts[0] * (96 / 6);\r\n }\r\n return null;\r\n }\r\n let el = document.body;\r\n if (element && element !== window && element !== document) {\r\n el = element;\r\n }\r\n const s = (String(str) || 'px').trim().toLowerCase();\r\n switch (s) {\r\n case '%':\r\n return el.clientHeight / 100.0;\r\n case 'ch':\r\n case 'ex':\r\n return getSizeBrutal(s, el);\r\n case 'em':\r\n return getPropertyInPX(el, 'font-size');\r\n case 'rem':\r\n return getPropertyInPX(document.body, 'font-size');\r\n case 'vw':\r\n return window.innerWidth / 100;\r\n case 'vh':\r\n return window.innerHeight / 100;\r\n case 'vmin':\r\n return Math.min(window.innerWidth, window.innerHeight) / 100;\r\n case 'vmax':\r\n return Math.max(window.innerWidth, window.innerHeight) / 100;\r\n case 'in':\r\n return getPixelsPerInch();\r\n case 'cm':\r\n return getPixelsPerInch() / 2.54;\r\n case 'mm':\r\n return getPixelsPerInch() / 25.4;\r\n case 'pt':\r\n return getPixelsPerInch() / 72;\r\n case 'pc':\r\n return getPixelsPerInch() / 6;\r\n case 'px':\r\n return 1;\r\n }\r\n // Detect number + units (e.g., \"12px\", \"2em\")\r\n const parts = parseUnit(s);\r\n if (!isNaN(parts[0])) {\r\n if (parts[1]) {\r\n const px = toPx(parts[1], el);\r\n return typeof px === 'number' ? parts[0] * px : null;\r\n }\r\n return parts[0];\r\n }\r\n return null;\r\n}\n\nexport { toPx };\n//# sourceMappingURL=to-px.js.map\n","import { isString, getString } from './data.js';\nimport { toPx } from './to-px.js';\n\nfunction guid() {\r\n const s4 = () => Math.floor((1 + crypto.getRandomValues(new Uint32Array(1))[0]) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n return `${s4() + s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`;\r\n}\r\nfunction stringToHtmlId(str) {\r\n return (str || '').replace(/\\W/g, '_');\r\n}\r\nfunction isStringCSSVariable(s) {\r\n return isString(s) ? (s.substring(0, 6) === 'var(--') : false;\r\n}\r\nconst cssVariableCache = new WeakMap();\r\nfunction getCSSVariableValue(s, context) {\r\n if (!isString(s))\r\n return '';\r\n const variableName = s.substr(4, s.length - 5);\r\n let elementCache = cssVariableCache.get(context);\r\n if (!elementCache) {\r\n elementCache = new Map();\r\n cssVariableCache.set(context, elementCache);\r\n }\r\n if (elementCache.has(variableName)) {\r\n return elementCache.get(variableName);\r\n }\r\n const value = getComputedStyle(context).getPropertyValue(variableName);\r\n elementCache.set(variableName, value);\r\n return value;\r\n}\r\nfunction getCSSVariableValueInPixels(s, context) {\r\n const val = getCSSVariableValue(s, context);\r\n return toPx(val);\r\n}\r\nfunction getPixelValue(v) {\r\n return typeof v === 'number' ? v : toPx(v);\r\n}\r\nfunction rectIntersect(rect1, rect2, tolerancePx = 0) {\r\n const [left1, top1, right1, bottom1] = [\r\n rect1.x + tolerancePx,\r\n rect1.y + rect1.height - 2 * tolerancePx,\r\n rect1.x + rect1.width - 2 * tolerancePx,\r\n rect1.y + tolerancePx,\r\n ];\r\n const [left2, top2, right2, bottom2] = [\r\n rect2.x + tolerancePx,\r\n rect2.y + rect2.height - 2 * tolerancePx,\r\n rect2.x + rect2.width - 2 * tolerancePx,\r\n rect2.y + tolerancePx,\r\n ];\r\n return !(top1 < bottom2 || top2 < bottom1 || right1 < left2 || right2 < left1);\r\n}\r\nfunction getHref(d, identifier) {\r\n const id = getString(d, identifier);\r\n return id ? `url(#${id})` : null;\r\n}\r\nfunction evaluateSimpleExpression(expr) {\r\n // Handle multiplication and division first (higher precedence)\r\n // Keep applying until no more operations are found\r\n while (/(-?\\d+(?:\\.\\d+)?)\\s*([*/])\\s*(-?\\d+(?:\\.\\d+)?)/.test(expr)) {\r\n expr = expr.replace(/(-?\\d+(?:\\.\\d+)?)\\s*([*/])\\s*(-?\\d+(?:\\.\\d+)?)/, (_, a, op, b) => {\r\n const numA = parseFloat(a);\r\n const numB = parseFloat(b);\r\n return String(op === '*' ? numA * numB : numA / numB);\r\n });\r\n }\r\n // Handle addition and subtraction (lower precedence)\r\n // Keep applying until no more operations are found\r\n while (/(-?\\d+(?:\\.\\d+)?)\\s*([+-])\\s*(-?\\d+(?:\\.\\d+)?)/.test(expr)) {\r\n expr = expr.replace(/(-?\\d+(?:\\.\\d+)?)\\s*([+-])\\s*(-?\\d+(?:\\.\\d+)?)/, (_, a, op, b) => {\r\n const numA = parseFloat(a);\r\n const numB = parseFloat(b);\r\n return String(op === '+' ? numA + numB : numA - numB);\r\n });\r\n }\r\n const result = parseFloat(expr);\r\n if (isNaN(result))\r\n throw new Error(`Invalid expression: ${expr}`);\r\n return result;\r\n}\r\nfunction evaluateCalcExpression(expression, basis) {\r\n try {\r\n // Replace percentages and pixels with resolved values\r\n let expr = expression\r\n .replace(/(\\d+(?:\\.\\d+)?)%/g, (_, num) => String((basis * parseFloat(num)) / 100))\r\n .replace(/(\\d+(?:\\.\\d+)?)px/g, '$1')\r\n .replace(/\\s+/g, '');\r\n // Validate parentheses pairs before processing\r\n let parenCount = 0;\r\n for (const char of expr) {\r\n if (char === '(')\r\n parenCount++;\r\n else if (char === ')')\r\n parenCount--;\r\n if (parenCount < 0)\r\n throw new Error('Mismatched parentheses: closing parenthesis without opening');\r\n }\r\n if (parenCount !== 0)\r\n throw new Error('Mismatched parentheses: unclosed opening parenthesis');\r\n // Check for invalid characters (only allow numbers, operators, decimal points, and parentheses)\r\n if (!/^[0-9+\\-*/.() ]+$/.test(expr))\r\n throw new Error('Invalid characters in expression');\r\n // Check for empty parentheses\r\n if (/\\(\\s*\\)/.test(expr))\r\n throw new Error('Empty parentheses not allowed');\r\n // Simple regex-based evaluation for basic expressions\r\n // Handles: number, number+number, number-number, number*number, number/number\r\n // And simple parentheses: (expression)\r\n // Evaluate parentheses first\r\n let iterations = 0;\r\n const maxIterations = 100; // Prevent infinite loops\r\n while (expr.includes('(') && iterations < maxIterations) {\r\n const prevExpr = expr;\r\n expr = expr.replace(/\\(([^()]+)\\)/g, (_, inner) => String(evaluateSimpleExpression(inner)));\r\n if (expr === prevExpr)\r\n throw new Error('Unable to resolve parentheses');\r\n iterations++;\r\n }\r\n if (iterations >= maxIterations)\r\n throw new Error('Expression too complex or contains infinite recursion');\r\n if (expr.includes('(') || expr.includes(')'))\r\n throw new Error('Unresolved parentheses remain');\r\n return evaluateSimpleExpression(expr);\r\n }\r\n catch (error) {\r\n console.warn(`Failed to evaluate calc() expression: ${expression}`, error);\r\n return 0;\r\n }\r\n}\r\nfunction parseUnit(value, basis = 0) {\r\n if (!value)\r\n return 0;\r\n else if (typeof value === 'number')\r\n return value;\r\n else if (typeof value === 'string' && value.startsWith('calc(') && value.endsWith(')')) {\r\n // Parse calc() expression\r\n const expression = value.slice(5, -1).trim(); // Remove 'calc(' and ')'\r\n return evaluateCalcExpression(expression, basis);\r\n }\r\n else if (value.endsWith('%'))\r\n return basis * parseFloat(value) / 100;\r\n else if (value.endsWith('px'))\r\n return parseFloat(value);\r\n else\r\n return parseFloat(value) || 0;\r\n}\n\nexport { getCSSVariableValue, getCSSVariableValueInPixels, getHref, getPixelValue, guid, isStringCSSVariable, parseUnit, rectIntersect, stringToHtmlId };\n//# sourceMappingURL=misc.js.map\n","const darkThemeCssSelectors = 'html[data-theme=\"dark\"],html.dark-theme,body.dark-theme,html.theme-dark,body.theme-dark';\n\nexport { darkThemeCssSelectors };\n//# sourceMappingURL=theme.js.map\n","import { hsl } from 'd3-color';\nimport { isNumber } from '../utils/data.js';\n\n/** Array of default colors */\r\nconst colors = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_COLORS) || ['#4D8CFD', '#FF6B7E', '#F4B83E', '#A6CC74', '#00C19A', '#6859BE'];\r\nconst colorsDark = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_COLORS_DARK) || ['#4D8CFD', '#FF6B7E', '#FFC16D', '#A6CC74', '#00C19A', '#7887E0'];\r\n/** Return a CSS Variable name for a given color index or string */\r\nconst getCSSColorVariable = (suffix) => {\r\n return `--vis-${isNumber(suffix) ? `color${suffix % colors.length}` : suffix}`;\r\n};\r\nfunction getLighterColor(hex, percentage = 0.4) {\r\n const c = hsl(hex);\r\n c.l = c.l * (1 + percentage);\r\n return c.formatHex();\r\n}\r\nfunction getDarkerColor(hex, percentageL = 0.4, percentageS = 0.6) {\r\n const c = hsl(hex);\r\n c.s = c.s * (1 - percentageS);\r\n c.l = c.l * (1 - percentageL);\r\n return c.formatHex();\r\n}\n\nexport { colors, colorsDark, getCSSColorVariable, getDarkerColor, getLighterColor };\n//# sourceMappingURL=colors.js.map\n","import { getCSSColorVariable } from './colors.js';\n\nconst PATTERN_SIZE_PX = 10;\r\nconst fills = [\r\n { id: 'stripes-diagonal', svg: '<path d=\"M-1,1 l2,-2 M0,10 l10,-10 M9,11 l2,-2\" stroke=\"#000\"/>' },\r\n { id: 'dots', svg: '<path d=\"m0-1.5a1 1 0 010 3m10-3a1 1 0 000 3M5 3.5a1 1 0 010 3 1 1 0 010-3M0 8.5 a1 1 0 010 3m10-3a1 1 0 000 3\" fill\"#000\"/>' },\r\n { id: 'stripes-vertical', svg: '<path d=\"M 5,-1 L5,11\" stroke=\"#000\"/>' },\r\n { id: 'crosshatch', svg: '<path d=\"M0 0L10 10ZM10 0L0 10Z\" stroke=\"#000\"/>' },\r\n { id: 'waves', svg: '<path d=\"M0 4Q2.5 1 5 4 7.5 7 10 4v2Q7.5 9 5 6 2.5 3 0 6Z\" fill=\"#000\"/>' },\r\n { id: 'circles', svg: '<circle cx=\"5\" cy=\"5\" r=\"3\" stroke=\"#000\" fill=\"#fff\"/>' },\r\n];\r\nconst lines = [\r\n { id: 'circle', marker: '<circle cx=\"5\" cy=\"5\" r=\"5\"/>', dashArray: [] },\r\n { id: 'triangle', marker: '<path d=\"M5,0 L10,9 L0,9Z\">', dashArray: [9, 1] },\r\n { id: 'diamond', marker: '<path d=\"M 0 5 L5 0 L 10 5 L 5 10 L 0 5Z\">', dashArray: [2] },\r\n { id: 'arrow', marker: '<path d=\"M4 0 0 0 6 5 0 10 4 10 10 5Z\">', dashArray: [2, 3, 8, 3] },\r\n { id: 'square', marker: '<rect x=\"1\" y=\"1\" width=\"8\" height=\"8\"/>', dashArray: [6] },\r\n { id: 'star', marker: '<path d=\"m2 9 3-9 3 9L0 3h10Z\"/>', dashArray: [1, 6] },\r\n];\r\nfunction getPatternVariable(p) {\r\n return `vis-${`pattern-${p.svg ? 'fill' : 'marker'}`}-${p.id}`;\r\n}\r\nconst maskDef = (p) => `<mask id=\"${getPatternVariable(p)}\">\n <pattern id=\"${p.id}\" viewBox=\"0 0 10 10\" width=\"${PATTERN_SIZE_PX}\" height=\"${PATTERN_SIZE_PX}\" patternUnits=\"userSpaceOnUse\">\n <rect width=\"100%\" height=\"100%\" fill=\"#fff\"/>\n ${p.svg}\n </pattern>\n <rect x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" fill=\"url(#${p.id})\"/>\n </mask>`;\r\nconst markerDef = (p, i) => `<marker id=\"${getPatternVariable(p)}\"\n fill=\"var(${getCSSColorVariable(i)})\"\n markerUnits=\"userSpaceOnUse\"\n refX=\"5\"\n refY=\"5\"\n markerWidth=\"${PATTERN_SIZE_PX}\"\n markerHeight=\"${PATTERN_SIZE_PX}\">\n ${p.marker}\n </marker>`;\r\n// // Injecting SVG defs as a single SVG element on the page\r\nfunction injectSVGDefs() {\r\n const svgDefs = fills.map(maskDef).concat(lines.map(markerDef)).join('');\r\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n svg.setAttribute('height', '100%');\r\n svg.setAttribute('width', '100%');\r\n svg.style.position = 'fixed';\r\n svg.style.zIndex = '-99999999';\r\n svg.innerHTML = `<defs>${svgDefs}</defs>`;\r\n document.body.appendChild(svg);\r\n}\r\nif (typeof window !== 'undefined')\r\n injectSVGDefs();\n\nexport { PATTERN_SIZE_PX, fills, getPatternVariable, lines };\n//# sourceMappingURL=patterns.js.map\n","import { injectGlobal } from '@emotion/css';\nimport { getCSSVariableValue } from '../utils/misc.js';\nimport { darkThemeCssSelectors } from '../utils/theme.js';\nimport { getCSSColorVariable, getLighterColor, colors, getDarkerColor, colorsDark } from './colors.js';\nimport { fills, getPatternVariable, lines } from './patterns.js';\n\nconst UNOVIS_ICON_FONT_FAMILY_DEFAULT = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_ICON_FONT_FAMILY) || 'FontAwesome';\r\nconst UNOVIS_FONT_WH_RATIO_DEFAULT = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_FONT_W2H_RATIO_DEFAULT) || 0.5;\r\nconst UNOVIS_TEXT_SEPARATOR_DEFAULT = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_TEXT_SEPARATOR_DEFAULT) || [' ', '-', '.', ','];\r\nconst UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT) || '-';\r\nconst UNOVIS_TEXT_DEFAULT = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_TEXT_DEFAULT) || {\r\n // If you change these defaults, don't forget to update the values in the `UnovisText` type in `types/text.ts`\r\n text: '',\r\n fontSize: 12,\r\n fontFamily: 'var(--vis-font-family)',\r\n lineHeight: 1.25,\r\n marginTop: 0,\r\n marginBottom: 0,\r\n};\r\nconst variables = injectGlobal `\n :root {\n label: vis-root-styles;\n --vis-font-family: Inter, Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n --vis-font-wh-ratio: ${UNOVIS_FONT_WH_RATIO_DEFAULT};\n --vis-color-main: var(${getCSSColorVariable(0)});\n --vis-color-main-light: ${getLighterColor(colors[0])};\n --vis-color-main-dark: ${getDarkerColor(colors[0])};\n --vis-color-grey: #2a2a2a;\n ${colors.map((c, i) => `${getCSSColorVariable(i)}: ${c};`)}\n ${colorsDark.map((c, i) => `--vis-dark-color${i}: ${c};`)}\n ${fills.map((p, i) => `\n --${getPatternVariable(p)}: url(#${getPatternVariable(p)});\n --vis-pattern-fill${i}: var(--${getPatternVariable(p)});\n `)}\n ${lines.map((p, i) => {\r\n var _a;\r\n return `\n --${getPatternVariable(p)}: url(#${getPatternVariable(p)});\n --vis-pattern-marker${i}: var(--${getPatternVariable(p)});\n --vis-pattern-dasharray${i}: ${(_a = p.dashArray) === null || _a === void 0 ? void 0 : _a.join(' ')};\n `;\r\n})}\n\n ${darkThemeCssSelectors} {\n ${colors.map((c, i) => `${getCSSColorVariable(i)}: var(--vis-dark-color${i});`)}\n }\n\n body.theme-patterns {\n ${fills.map((_, i) => `path[style*=\"fill: var(${getCSSColorVariable(i)})\"] {\n mask: var(--vis-pattern-fill${i});\n }`)}\n ${lines.map((_, i) => `\n path[stroke=\"var(${getCSSColorVariable(i)})\"]:not([style*=\"fill\"]),\n path[style*=\"stroke: var(${getCSSColorVariable(i)})\"]:not([style*=\"fill\"]) {\n marker: var(--vis-pattern-marker${i});\n stroke-dasharray: var(--vis-pattern-dasharray${i});\n }\n `)}\n}\n`;\r\nfunction getFontWidthToHeightRatio(context = window === null || window === void 0 ? void 0 : window.document.body) {\r\n return context ? +getCSSVariableValue('var(--vis-font-wh-ratio)', context) : UNOVIS_FONT_WH_RATIO_DEFAULT;\r\n}\n\nexport { UNOVIS_FONT_WH_RATIO_DEFAULT, UNOVIS_ICON_FONT_FAMILY_DEFAULT, UNOVIS_TEXT_DEFAULT, UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT, UNOVIS_TEXT_SEPARATOR_DEFAULT, getFontWidthToHeightRatio, variables };\n//# sourceMappingURL=index.js.map\n","import { interrupt } from 'd3-transition';\n\nfunction smartTransition(selection, duration, easing) {\r\n selection.nodes().forEach(node => interrupt(node)); // Interrupt active transitions if any\r\n if (duration) {\r\n const transition = selection.transition().duration(duration);\r\n if (easing)\r\n transition.ease(easing);\r\n return transition;\r\n }\r\n else\r\n return selection;\r\n}\n\nexport { smartTransition };\n//# sourceMappingURL=d3.js.map\n","import { ContainerDefaultConfig } from '../../core/container/config.js';\n\n// Core\r\nconst SingleContainerDefaultConfig = Object.assign(Object.assign({}, ContainerDefaultConfig), { tooltip: undefined, annotations: undefined });\n\nexport { SingleContainerDefaultConfig };\n//# sourceMappingURL=config.js.map\n","import '../../styles/index.js';\nimport { ContainerCore } from '../../core/container/index.js';\nimport { smartTransition } from '../../utils/d3.js';\nimport { Sizing } from '../../types/component.js';\nimport { SingleContainerDefaultConfig } from './config.js';\n\n// Global CSS variables (side effects import)\r\nclass SingleContainer extends ContainerCore {\r\n constructor(element, config, data) {\r\n var _a;\r\n super(element);\r\n this._defaultConfig = SingleContainerDefaultConfig;\r\n this.config = this._defaultConfig;\r\n if (config) {\r\n this.updateContainer(config, true);\r\n this.component = config.component;\r\n }\r\n if (data) {\r\n this.setData(data, true);\r\n }\r\n // Render if component exists and has data\r\n if ((_a = this.component) === null || _a === void 0 ? void 0 : _a.datamodel.data)\r\n this.render();\r\n }\r\n setData(data, preventRender) {\r\n var _a;\r\n const { config } = this;\r\n if (this.component)\r\n this.component.setData(data);\r\n if (!preventRender)\r\n this.render();\r\n (_a = config.tooltip) === null || _a === void 0 ? void 0 : _a.hide();\r\n }\r\n updateContainer(containerConfig, preventRender) {\r\n super.updateContainer(containerConfig);\r\n this._removeAllChildren();\r\n this.component = containerConfig.component;\r\n if (containerConfig.sizing)\r\n this.component.sizing = containerConfig.sizing;\r\n this.element.appendChild(this.component.element);\r\n const tooltip = containerConfig.tooltip;\r\n if (tooltip) {\r\n if (!tooltip.hasContainer())\r\n tooltip.setContainer(this._container);\r\n tooltip.setComponents([this.component]);\r\n }\r\n const annotations = containerConfig.annotations;\r\n if (annotations) {\r\n this.element.appendChild(annotations.element);\r\n }\r\n // Defs\r\n this.element.appendChild(this._svgDefs.node());\r\n this.element.appendChild(this._svgDefsExternal.node());\r\n if (!preventRender)\r\n this.render();\r\n }\r\n updateComponent(componentConfig, preventRender) {\r\n this.component.setConfig(componentConfig);\r\n if (!preventRender)\r\n this.render();\r\n }\r\n update(containerConfig, componentConfig, data) {\r\n if (containerConfig)\r\n this.updateContainer(containerConfig, true);\r\n if (componentConfig)\r\n this.updateComponent(componentConfig, true);\r\n if (data)\r\n this.setData(data, true);\r\n this.render();\r\n }\r\n getFitWidthScale() {\r\n const { config, component } = this;\r\n const extendedSizeComponent = component;\r\n if (!extendedSizeComponent.getWidth)\r\n return 1;\r\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right;\r\n return this.width / componentWidth;\r\n }\r\n _preRender() {\r\n var _a, _b;\r\n super._preRender();\r\n this.component.setSize(this.width, this.height, this.containerWidth, this.containerHeight);\r\n this.component.setContainerMargin(this.config.margin);\r\n (_a = this.config.annotations) === null || _a === void 0 ? void 0 : _a.setSize(this.width, this.height, this.containerWidth, this.containerHeight);\r\n (_b = this.config.annotations) === null || _b === void 0 ? void 0 : _b.setContainerMargin(this.config.margin);\r\n }\r\n _render(duration) {\r\n var _a, _b;\r\n const { config, component } = this;\r\n super._render(duration);\r\n component.g.attr('transform', `translate(${config.margin.left},${config.margin.top})`);\r\n component.render(duration);\r\n (_a = config.annotations) === null || _a === void 0 ? void 0 : _a.render(duration);\r\n if (config.tooltip)\r\n config.tooltip.update();\r\n (_b = config.onRenderComplete) === null || _b === void 0 ? void 0 : _b.call(config, this.svg.node(), config.margin, this.containerWidth, this.containerHeight, this.width, this.height);\r\n }\r\n // Re-defining the `render()` function to handle different sizing techniques (`Sizing.Extend` and `Sizing.FitWidth`)\r\n // Not calling `super.render()` because we don't want it to interfere with setting the SVG size here.\r\n render(duration = this.config.duration) {\r\n const { config, component } = this;\r\n if (config.sizing === Sizing.Extend || config.sizing === Sizing.FitWidth) {\r\n const fitToWidth = config.sizing === Sizing.FitWidth;\r\n const extendedSizeComponent = component;\r\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right;\r\n const componentHeight = extendedSizeComponent.getHeight() + config.margin.top + config.margin.bottom;\r\n const scale = fitToWidth ? this.getFitWidthScale() : 1;\r\n const currentWidth = this.svg.attr('width');\r\n const currentHeight = this.svg.attr('height');\r\n const scaledWidth = componentWidth * scale;\r\n const scaledHeight = componentHeight * scale;\r\n const animated = currentWidth || currentHeight;\r\n smartTransition(this.svg, animated ? duration : 0)\r\n .attr('width', scaledWidth)\r\n .attr('height', scaledHeight)\r\n .attr('viewBox', `${0} ${0} ${componentWidth} ${fitToWidth ? scaledHeight : componentHeight}`)\r\n .attr('preserveAspectRatio', 'xMinYMin');\r\n }\r\n else {\r\n this.svg\r\n .attr('width', this.config.width || this.containerWidth)\r\n .attr('height', this.config.height || this.containerHeight);\r\n }\r\n // Set up Resize Observer\r\n if (!this._resizeObserver)\r\n this._setUpResizeObserver();\r\n // Schedule the actual rendering in the next frame\r\n cancelAnimationFrame(this._renderAnimationFrameId);\r\n this._renderAnimationFrameId = requestAnimationFrame(() => {\r\n this._preRender();\r\n this._render(duration);\r\n });\r\n }\r\n _onResize() {\r\n var _a;\r\n const { config } = this;\r\n super._onResize();\r\n (_a = config.tooltip) === null || _a === void 0 ? void 0 : _a.hide();\r\n }\r\n destroy() {\r\n var _a, _b;\r\n const { component, config } = this;\r\n super.destroy();\r\n component === null || component === void 0 ? void 0 : component.destroy();\r\n (_a = config.tooltip) === null || _a === void 0 ? void 0 : _a.destroy();\r\n (_b = config.annotations) === null || _b === void 0 ? void 0 : _b.destroy();\r\n }\r\n}\n\nexport { SingleContainer };\n//# sourceMappingURL=index.js.map\n","class CoreDataModel {\r\n constructor(data) {\r\n this.data = data;\r\n }\r\n get data() {\r\n return this._data;\r\n }\r\n set data(value) {\r\n this._data = value;\r\n }\r\n}\n\nexport { CoreDataModel };\n//# sourceMappingURL=core.js.map\n","const ComponentDefaultConfig = {\r\n duration: 600,\r\n events: {},\r\n attributes: {},\r\n};\n\nexport { ComponentDefaultConfig };\n//# sourceMappingURL=config.js.map\n","import { select } from 'd3-selection';\nimport { CoreDataModel } from '../../data-models/core.js';\nimport { throttle, merge } from '../../utils/data.js';\nimport { guid } from '../../utils/misc.js';\nimport { ComponentType, Sizing } from '../../types/component.js';\nimport { ComponentDefaultConfig } from './config.js';\n\nclass ComponentCore {\r\n constructor(type = ComponentType.SVG) {\r\n var _a, _b;\r\n this.type = ComponentType.SVG;\r\n this.datamodel = new CoreDataModel();\r\n this.sizing = Sizing.Fit; // Supported by SingleContainer and a subset of components only (Sankey)\r\n this.events = {};\r\n /** Default configuration */\r\n this._defaultConfig = ComponentDefaultConfig;\r\n /** Component width in pixels. This property is set automatically by the container. */\r\n this._width = 400;\r\n /** Component height in pixels. This property is set automatically by the container. */\r\n this._height = 200;\r\n /** Container width in pixels. This property is set automatically by the container. */\r\n this._containerWidth = undefined;\r\n /** Container height in pixels. This property is set automatically by the container. */\r\n this._containerHeight = undefined;\r\n /** Container margin in pixels. This property is set automatically by the container. */\r\n this._containerMargin = { top: 0, bottom: 0, left: 0, right: 0 };\r\n this._setUpComponentEventsThrottled = throttle(this._setUpComponentEvents, 500);\r\n this._setCustomAttributesThrottled = throttle(this._setCustomAttributes, 500);\r\n if (type === ComponentType.SVG) {\r\n this.element = document.createElementNS('http://www.w3.org/2000/svg', 'g');\r\n }\r\n else {\r\n this.element = document.createElement('div');\r\n }\r\n this.uid = guid();\r\n this.g = select(this.element);\r\n // Setting the root class if available\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n // eslint-disable-next-line dot-notation\r\n const rootClass = (_b = (_a = this.constructor) === null || _a === void 0 ? void 0 : _a['selectors']) === null || _b === void 0 ? void 0 : _b.root;\r\n if (rootClass)\r\n this.g.attr('class', rootClass);\r\n }\r\n /** Set the container margin. Called automatically by containers. */\r\n setContainerMargin(margin) {\r\n this._containerMargin = margin;\r\n }\r\n setConfig(config) {\r\n this.prevConfig = this.config; // Store the previous config instance\r\n this.config = merge(this._defaultConfig, config);\r\n }\r\n setData(data) {\r\n this.datamodel.data = data;\r\n }\r\n setSize(width, height, containerWidth, containerHeight) {\r\n if (isFinite(width))\r\n this._width = width;\r\n if (isFinite(height))\r\n this._height = height;\r\n if (isFinite(containerWidth))\r\n this._containerWidth = containerWidth;\r\n if (isFinite(containerHeight))\r\n this._containerHeight = containerHeight;\r\n }\r\n render(duration = this.config.duration) {\r\n this._render(duration);\r\n // While transition is in progress, we add the 'animating' attribute to the component's SVG group\r\n const ANIMATING_ATTR = 'animating';\r\n if (duration) {\r\n this.g.attr(ANIMATING_ATTR, '');\r\n const transition = this.g\r\n .transition(ANIMATING_ATTR)\r\n .duration(duration);\r\n transition.on('end interrupt', () => {\r\n this.g.attr(ANIMATING_ATTR, null);\r\n });\r\n }\r\n this._setUpComponentEventsThrottled();\r\n this._setCustomAttributesThrottled();\r\n }\r\n get bleed() {\r\n return { top: 0, bottom: 0, left: 0, right: 0 };\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n _render(duration = this.config.duration) {\r\n }\r\n _setCustomAttributes() {\r\n const attributeMap = this.config.attributes;\r\n Object.keys(attributeMap).forEach(className => {\r\n Object.keys(attributeMap[className]).forEach(attr => {\r\n const selection = this.g\r\n .selectAll(`.${className}`);\r\n selection.attr(attr, attributeMap[className][attr]);\r\n });\r\n });\r\n }\r\n _setUpComponentEvents() {\r\n // Set up default events\r\n this._bindEvents(this.events);\r\n // Set up user-defined events\r\n this._bindEvents(this.config.events, '.user');\r\n }\r\n // Sometimes we don't want to pass the original data and/or index to the event handler.\r\n // This method can be overridden by components to implement a custom mapping.\r\n // See Stacked Bar and Scatter for examples.\r\n _mapEventDatum(datum, index) {\r\n return { datum, index };\r\n }\r\n _bindEvents(events = this.events, suffix = '') {\r\n Object.keys(events).forEach(className => {\r\n Object.keys(events[className]).forEach(eventType => {\r\n const selection = this.g\r\n .selectAll(`.${className}`);\r\n selection.on(eventType + suffix, (event, d) => {\r\n const els = selection.nodes();\r\n const i = els.indexOf(event.currentTarget);\r\n const eventFunction = events[className][eventType];\r\n const { datum, index } = this._mapEventDatum(d, i);\r\n return eventFunction === null || eventFunction === void 0 ? void 0 : eventFunction(datum, event, index, els);\r\n });\r\n });\r\n });\r\n }\r\n destroy() {\r\n var _a;\r\n (_a = this.g) === null || _a === void 0 ? void 0 : _a.remove();\r\n this.element = undefined;\r\n }\r\n isDestroyed() {\r\n return !this.element;\r\n }\r\n}\n\nexport { ComponentCore };\n//# sourceMappingURL=index.js.map\n","function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function () {};\n\n return {\n s: F,\n n: function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function (e) {\n throw e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function () {\n it = it.call(o);\n },\n n: function () {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function (e) {\n didErr = true;\n err = e;\n },\n f: function () {\n try {\n if (!normalCompletion && it.return != null) it.return();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\n/**\n * de Casteljau's algorithm for drawing and splitting bezier curves.\n * Inspired by https://pomax.github.io/bezierinfo/\n *\n * @param {Number[][]} points Array of [x,y] points: [start, control1, control2, ..., end]\n * The original segment to split.\n * @param {Number} t Where to split the curve (value between [0, 1])\n * @return {Object} An object { left, right } where left is the segment from 0..t and\n * right is the segment from t..1.\n */\nfunction decasteljau(points, t) {\n var left = [];\n var right = [];\n\n function decasteljauRecurse(points, t) {\n if (points.length === 1) {\n left.push(points[0]);\n right.push(points[0]);\n } else {\n var newPoints = Array(points.length - 1);\n\n for (var i = 0; i < newPoints.length; i++) {\n if (i === 0) {\n left.push(points[0]);\n }\n\n if (i === newPoints.length - 1) {\n right.push(points[i + 1]);\n }\n\n newPoints[i] = [(1 - t) * points[i][0] + t * points[i + 1][0], (1 - t) * points[i][1] + t * points[i + 1][1]];\n }\n\n decasteljauRecurse(newPoints, t);\n }\n }\n\n if (points.length) {\n decasteljauRecurse(points, t);\n }\n\n return {\n left: left,\n right: right.reverse()\n };\n}\n/**\n * Convert segments represented as points back into a command object\n *\n * @param {Number[][]} points Array of [x,y] points: [start, control1, control2, ..., end]\n * Represents a segment\n * @return {Object} A command object representing the segment.\n */\n\n\nfunction pointsToCommand(points) {\n var command = {};\n\n if (points.length === 4) {\n command.x2 = points[2][0];\n command.y2 = points[2][1];\n }\n\n if (points.length >= 3) {\n command.x1 = points[1][0];\n command.y1 = points[1][1];\n }\n\n command.x = points[points.length - 1][0];\n command.y = points[points.length - 1][1];\n\n if (points.length === 4) {\n // start, control1, control2, end\n command.type = 'C';\n } else if (points.length === 3) {\n // start, control, end\n command.type = 'Q';\n } else {\n // start, end\n command.type = 'L';\n }\n\n return command;\n}\n/**\n * Runs de Casteljau's algorithm enough times to produce the desired number of segments.\n *\n * @param {Number[][]} points Array of [x,y] points for de Casteljau (the initial segment to split)\n * @param {Number} segmentCount Number of segments to split the original into\n * @return {Number[][][]} Array of segments\n */\n\n\nfunction splitCurveAsPoints(points, segmentCount) {\n segmentCount = segmentCount || 2;\n var segments = [];\n var remainingCurve = points;\n var tIncrement = 1 / segmentCount; // x-----x-----x-----x\n // t= 0.33 0.66 1\n // x-----o-----------x\n // r= 0.33\n // x-----o-----x\n // r= 0.5 (0.33 / (1 - 0.33)) === tIncrement / (1 - (tIncrement * (i - 1))\n // x-----x-----x-----x----x\n // t= 0.25 0.5 0.75 1\n // x-----o----------------x\n // r= 0.25\n // x-----o----------x\n // r= 0.33 (0.25 / (1 - 0.25))\n // x-----o----x\n // r= 0.5 (0.25 / (1 - 0.5))\n\n for (var i = 0; i < segmentCount - 1; i++) {\n var tRelative = tIncrement / (1 - tIncrement * i);\n var split = decasteljau(remainingCurve, tRelative);\n segments.push(split.left);\n remainingCurve = split.right;\n } // last segment is just to the end from the last point\n\n\n segments.push(remainingCurve);\n return segments;\n}\n/**\n * Convert command objects to arrays of points, run de Casteljau's algorithm on it\n * to split into to the desired number of segments.\n *\n * @param {Object} commandStart The start command object\n * @param {Object} commandEnd The end command object\n * @param {Number} segmentCount The number of segments to create\n * @return {Object[]} An array of commands representing the segments in sequence\n */\n\n\nfunction splitCurve(commandStart, commandEnd, segmentCount) {\n var points = [[commandStart.x, commandStart.y]];\n\n if (commandEnd.x1 != null) {\n points.push([commandEnd.x1, commandEnd.y1]);\n }\n\n if (commandEnd.x2 != null) {\n points.push([commandEnd.x2, commandEnd.y2]);\n }\n\n points.push([commandEnd.x, commandEnd.y]);\n return splitCurveAsPoints(points, segmentCount).map(pointsToCommand);\n}\n\nvar commandTokenRegex = /[MLCSTQAHVZmlcstqahv]|-?[\\d.e+-]+/g;\n/**\n * List of params for each command type in a path `d` attribute\n */\n\nvar typeMap = {\n M: ['x', 'y'],\n L: ['x', 'y'],\n H: ['x'],\n V: ['y'],\n C: ['x1', 'y1', 'x2', 'y2', 'x', 'y'],\n S: ['x2', 'y2', 'x', 'y'],\n Q: ['x1', 'y1', 'x', 'y'],\n T: ['x', 'y'],\n A: ['rx', 'ry', 'xAxisRotation', 'largeArcFlag', 'sweepFlag', 'x', 'y'],\n Z: []\n}; // Add lower case entries too matching uppercase (e.g. 'm' == 'M')\n\nObject.keys(typeMap).forEach(function (key) {\n typeMap[key.toLowerCase()] = typeMap[key];\n});\n\nfunction arrayOfLength(length, value) {\n var array = Array(length);\n\n for (var i = 0; i < length; i++) {\n array[i] = value;\n }\n\n return array;\n}\n/**\n * Converts a command object to a string to be used in a `d` attribute\n * @param {Object} command A command object\n * @return {String} The string for the `d` attribute\n */\n\n\nfunction commandToString(command) {\n return \"\".concat(command.type).concat(typeMap[command.type].map(function (p) {\n return command[p];\n }).join(','));\n}\n/**\n * Converts command A to have the same type as command B.\n *\n * e.g., L0,5 -> C0,5,0,5,0,5\n *\n * Uses these rules:\n * x1 <- x\n * x2 <- x\n * y1 <- y\n * y2 <- y\n * rx <- 0\n * ry <- 0\n * xAxisRotation <- read from B\n * largeArcFlag <- read from B\n * sweepflag <- read from B\n *\n * @param {Object} aCommand Command object from path `d` attribute\n * @param {Object} bCommand Command object from path `d` attribute to match against\n * @return {Object} aCommand converted to type of bCommand\n */\n\n\nfunction convertToSameType(aCommand, bCommand) {\n var conversionMap = {\n x1: 'x',\n y1: 'y',\n x2: 'x',\n y2: 'y'\n };\n var readFromBKeys = ['xAxisRotation', 'largeArcFlag', 'sweepFlag']; // convert (but ignore M types)\n\n if (aCommand.type !== bCommand.type && bCommand.type.toUpperCase() !== 'M') {\n var aConverted = {};\n Object.keys(bCommand).forEach(function (bKey) {\n var bValue = bCommand[bKey]; // first read from the A command\n\n var aValue = aCommand[bKey]; // if it is one of these values, read from B no matter what\n\n if (aValue === undefined) {\n if (readFromBKeys.includes(bKey)) {\n aValue = bValue;\n } else {\n // if it wasn't in the A command, see if an equivalent was\n if (aValue === undefined && conversionMap[bKey]) {\n aValue = aCommand[conversionMap[bKey]];\n } // if it doesn't have a converted value, use 0\n\n\n if (aValue === undefined) {\n aValue = 0;\n }\n }\n }\n\n aConverted[bKey] = aValue;\n }); // update the type to match B\n\n aConverted.type = bCommand.type;\n aCommand = aConverted;\n }\n\n return aCommand;\n}\n/**\n * Interpolate between command objects commandStart and commandEnd segmentCount times.\n * If the types are L, Q, or C then the curves are split as per de Casteljau's algorithm.\n * Otherwise we just copy commandStart segmentCount - 1 times, finally ending with commandEnd.\n *\n * @param {Object} commandStart Command object at the beginning of the segment\n * @param {Object} commandEnd Command object at the end of the segment\n * @param {Number} segmentCount The number of segments to split this into. If only 1\n * Then [commandEnd] is returned.\n * @return {Object[]} Array of ~segmentCount command objects between commandStart and\n * commandEnd. (Can be segmentCount+1 objects if commandStart is type M).\n */\n\n\nfunction splitSegment(commandStart, commandEnd, segmentCount) {\n var segments = []; // line, quadratic bezier, or cubic bezier\n\n if (commandEnd.type === 'L' || commandEnd.type === 'Q' || commandEnd.type === 'C') {\n segments = segments.concat(splitCurve(commandStart, commandEnd, segmentCount)); // general case - just copy the same point\n } else {\n var copyCommand = _extends({}, commandStart); // convert M to L\n\n\n if (copyCommand.type === 'M') {\n copyCommand.type = 'L';\n }\n\n segments = segments.concat(arrayOfLength(segmentCount - 1).map(function () {\n return copyCommand;\n }));\n segments.push(commandEnd);\n }\n\n return segments;\n}\n/**\n * Extends an array of commandsToExtend to the length of the referenceCommands by\n * splitting segments until the number of commands match. Ensures all the actual\n * points of commandsToExtend are in the extended array.\n *\n * @param {Object[]} commandsToExtend The command object array to extend\n * @param {Object[]} referenceCommands The command object array to match in length\n * @param {Function} excludeSegment a function that takes a start command object and\n * end command object and returns true if the segment should be excluded from splitting.\n * @return {Object[]} The extended commandsToExtend array\n */\n\n\nfunction extend(commandsToExtend, referenceCommands, excludeSegment) {\n // compute insertion points:\n // number of segments in the path to extend\n var numSegmentsToExtend = commandsToExtend.length - 1; // number of segments in the reference path.\n\n var numReferenceSegments = referenceCommands.length - 1; // this value is always between [0, 1].\n\n var segmentRatio = numSegmentsToExtend / numReferenceSegments; // create a map, mapping segments in referenceCommands to how many points\n // should be added in that segment (should always be >= 1 since we need each\n // point itself).\n // 0 = segment 0-1, 1 = segment 1-2, n-1 = last vertex\n\n var countPointsPerSegment = arrayOfLength(numReferenceSegments).reduce(function (accum, d, i) {\n var insertIndex = Math.floor(segmentRatio * i); // handle excluding segments\n\n if (excludeSegment && insertIndex < commandsToExtend.length - 1 && excludeSegment(commandsToExtend[insertIndex], commandsToExtend[insertIndex + 1])) {\n // set the insertIndex to the segment that this point should be added to:\n // round the insertIndex essentially so we split half and half on\n // neighbouring segments. hence the segmentRatio * i < 0.5\n var addToPriorSegment = segmentRatio * i % 1 < 0.5; // only skip segment if we already have 1 point in it (can't entirely remove a segment)\n\n if (accum[insertIndex]) {\n // TODO - Note this is a naive algorithm that should work for most d3-area use cases\n // but if two adjacent segments are supposed to be skipped, this will not perform as\n // expected. Could be updated to search for nearest segment to place the point in, but\n // will only do that if necessary.\n // add to the prior segment\n if (addToPriorSegment) {\n if (insertIndex > 0) {\n insertIndex -= 1; // not possible to add to previous so adding to next\n } else if (insertIndex < commandsToExtend.length - 1) {\n insertIndex += 1;\n } // add to next segment\n\n } else if (insertIndex < commandsToExtend.length - 1) {\n insertIndex += 1; // not possible to add to next so adding to previous\n } else if (insertIndex > 0) {\n insertIndex -= 1;\n }\n }\n }\n\n accum[insertIndex] = (accum[insertIndex] || 0) + 1;\n return accum;\n }, []); // extend each segment to have the correct number of points for a smooth interpolation\n\n var extended = countPointsPerSegment.reduce(function (extended, segmentCount, i) {\n // if last command, just add `segmentCount` number of times\n if (i === commandsToExtend.length - 1) {\n var lastCommandCopies = arrayOfLength(segmentCount, _extends({}, commandsToExtend[commandsToExtend.length - 1])); // convert M to L\n\n if (lastCommandCopies[0].type === 'M') {\n lastCommandCopies.forEach(function (d) {\n d.type = 'L';\n });\n }\n\n return extended.concat(lastCommandCopies);\n } // otherwise, split the segment segmentCount times.\n\n\n return extended.concat(splitSegment(commandsToExtend[i], commandsToExtend[i + 1], segmentCount));\n }, []); // add in the very first point since splitSegment only adds in the ones after it\n\n extended.unshift(commandsToExtend[0]);\n return extended;\n}\n/**\n * Takes a path `d` string and converts it into an array of command\n * objects. Drops the `Z` character.\n *\n * @param {String|null} d A path `d` string\n */\n\n\nfunction pathCommandsFromString(d) {\n // split into valid tokens\n var tokens = (d || '').match(commandTokenRegex) || [];\n var commands = [];\n var commandArgs;\n var command; // iterate over each token, checking if we are at a new command\n // by presence in the typeMap\n\n for (var i = 0; i < tokens.length; ++i) {\n commandArgs = typeMap[tokens[i]]; // new command found:\n\n if (commandArgs) {\n command = {\n type: tokens[i]\n }; // add each of the expected args for this command:\n\n for (var a = 0; a < commandArgs.length; ++a) {\n command[commandArgs[a]] = +tokens[i + a + 1];\n } // need to increment our token index appropriately since\n // we consumed token args\n\n\n i += commandArgs.length;\n commands.push(command);\n }\n }\n\n return commands;\n}\n/**\n * Interpolate from A to B by extending A and B during interpolation to have\n * the same number of points. This allows for a smooth transition when they\n * have a different number of points.\n *\n * Ignores the `Z` command in paths unless both A and B end with it.\n *\n * This function works directly with arrays of command objects instead of with\n * path `d` strings (see interpolatePath for working with `d` strings).\n *\n * @param {Object[]} aCommandsInput Array of path commands\n * @param {Object[]} bCommandsInput Array of path commands\n * @param {(Function|Object)} interpolateOptions\n * @param {Function} interpolateOptions.excludeSegment a function that takes a start command object and\n * end command object and returns true if the segment should be excluded from splitting.\n * @param {Boolean} interpolateOptions.snapEndsToInput a boolean indicating whether end of input should\n * be sourced from input argument or computed.\n * @returns {Function} Interpolation function that maps t ([0, 1]) to an array of path commands.\n */\n\nfunction interpolatePathCommands(aCommandsInput, bCommandsInput, interpolateOptions) {\n // make a copy so we don't mess with the input arrays\n var aCommands = aCommandsInput == null ? [] : aCommandsInput.slice();\n var bCommands = bCommandsInput == null ? [] : bCommandsInput.slice();\n\n var _ref = _typeof(interpolateOptions) === 'object' ? interpolateOptions : {\n excludeSegment: interpolateOptions,\n snapEndsToInput: true\n },\n excludeSegment = _ref.excludeSegment,\n snapEndsToInput = _ref.snapEndsToInput; // both input sets are empty, so we don't interpolate\n\n\n if (!aCommands.length && !bCommands.length) {\n return function nullInterpolator() {\n return [];\n };\n } // do we add Z during interpolation? yes if both have it. (we'd expect both to have it or not)\n\n\n var addZ = (aCommands.length === 0 || aCommands[aCommands.length - 1].type === 'Z') && (bCommands.length === 0 || bCommands[bCommands.length - 1].type === 'Z'); // we temporarily remove Z\n\n if (aCommands.length > 0 && aCommands[aCommands.length - 1].type === 'Z') {\n aCommands.pop();\n }\n\n if (bCommands.length > 0 && bCommands[bCommands.length - 1].type === 'Z') {\n bCommands.pop();\n } // if A is empty, treat it as if it used to contain just the first point\n // of B. This makes it so the line extends out of from that first point.\n\n\n if (!aCommands.length) {\n aCommands.push(bCommands[0]); // otherwise if B is empty, treat it as if it contains the first point\n // of A. This makes it so the line retracts into the first point.\n } else if (!bCommands.length) {\n bCommands.push(aCommands[0]);\n } // extend to match equal size\n\n\n var numPointsToExtend = Math.abs(bCommands.length - aCommands.length);\n\n if (numPointsToExtend !== 0) {\n // B has more points than A, so add points to A before interpolating\n if (bCommands.length > aCommands.length) {\n aCommands = extend(aCommands, bCommands, excludeSegment); // else if A has more points than B, add more points to B\n } else if (bCommands.length < aCommands.length) {\n bCommands = extend(bCommands, aCommands, excludeSegment);\n }\n } // commands have same length now.\n // convert commands in A to the same type as those in B\n\n\n aCommands = aCommands.map(function (aCommand, i) {\n return convertToSameType(aCommand, bCommands[i]);\n }); // create mutable interpolated command objects\n\n var interpolatedCommands = aCommands.map(function (aCommand) {\n return _objectSpread2({}, aCommand);\n });\n\n if (addZ) {\n interpolatedCommands.push({\n type: 'Z'\n });\n aCommands.push({\n type: 'Z'\n }); // required for when returning at t == 0\n }\n\n return function pathCommandInterpolator(t) {\n // at 1 return the final value without the extensions used during interpolation\n if (t === 1 && snapEndsToInput) {\n return bCommandsInput == null ? [] : bCommandsInput;\n } // work with aCommands directly since interpolatedCommands are mutated\n\n\n if (t === 0) {\n return aCommands;\n } // interpolate the commands using the mutable interpolated command objs\n\n\n for (var i = 0; i < interpolatedCommands.length; ++i) {\n // if (interpolatedCommands[i].type === 'Z') continue;\n var aCommand = aCommands[i];\n var bCommand = bCommands[i];\n var interpolatedCommand = interpolatedCommands[i];\n\n var _iterator = _createForOfIteratorHelper(typeMap[interpolatedCommand.type]),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var arg = _step.value;\n interpolatedCommand[arg] = (1 - t) * aCommand[arg] + t * bCommand[arg]; // do not use floats for flags (#27), round to integer\n\n if (arg === 'largeArcFlag' || arg === 'sweepFlag') {\n interpolatedCommand[arg] = Math.round(interpolatedCommand[arg]);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n return interpolatedCommands;\n };\n}\n/** @typedef InterpolateOptions */\n\n/**\n * Interpolate from A to B by extending A and B during interpolation to have\n * the same number of points. This allows for a smooth transition when they\n * have a different number of points.\n *\n * Ignores the `Z` character in paths unless both A and B end with it.\n *\n * @param {String} a The `d` attribute for a path\n * @param {String} b The `d` attribute for a path\n * @param {((command1, command2) => boolean|{\n * excludeSegment?: (command1, command2) => boolean;\n * snapEndsToInput?: boolean\n * })} interpolateOptions The excludeSegment function or an options object\n * - interpolateOptions.excludeSegment a function that takes a start command object and\n * end command object and returns true if the segment should be excluded from splitting.\n * - interpolateOptions.snapEndsToInput a boolean indicating whether end of input should\n * be sourced from input argument or computed.\n * @returns {Function} Interpolation function that maps t ([0, 1]) to a path `d` string.\n */\n\nfunction interpolatePath(a, b, interpolateOptions) {\n var aCommands = pathCommandsFromString(a);\n var bCommands = pathCommandsFromString(b);\n\n var _ref2 = _typeof(interpolateOptions) === 'object' ? interpolateOptions : {\n excludeSegment: interpolateOptions,\n snapEndsToInput: true\n },\n excludeSegment = _ref2.excludeSegment,\n snapEndsToInput = _ref2.snapEndsToInput;\n\n if (!aCommands.length && !bCommands.length) {\n return function nullInterpolator() {\n return '';\n };\n }\n\n var commandInterpolator = interpolatePathCommands(aCommands, bCommands, {\n excludeSegment: excludeSegment,\n snapEndsToInput: snapEndsToInput\n });\n return function pathStringInterpolator(t) {\n // at 1 return the final value without the extensions used during interpolation\n if (t === 1 && snapEndsToInput) {\n return b == null ? '' : b;\n }\n\n var interpolatedCommands = commandInterpolator(t); // convert to a string (fastest concat: https://jsperf.com/join-concat/150)\n\n var interpolatedString = '';\n\n var _iterator2 = _createForOfIteratorHelper(interpolatedCommands),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var interpolatedCommand = _step2.value;\n interpolatedString += commandToString(interpolatedCommand);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return interpolatedString;\n };\n}\n\nexport { interpolatePath, interpolatePathCommands, pathCommandsFromString };\n","import { color, hcl } from 'd3-color';\nimport { getCSSColorVariable } from '../styles/colors.js';\nimport { getString, isNumber } from './data.js';\nimport { isStringCSSVariable, getCSSVariableValue } from './misc.js';\n\n/** Retrieves color from the data if provided, fallbacks to CSS variables if the index was passed */\r\nfunction getColor(d, accessor, index, dontFallbackToCssVar) {\r\n if (Array.isArray(accessor) && isFinite(index))\r\n return accessor[index % accessor.length];\r\n const value = getString(d, accessor, index);\r\n return (value || ((isNumber(index) && !dontFallbackToCssVar) ? `var(${getCSSColorVariable(index)})` : null));\r\n}\r\nfunction hexToRgb(hex) {\r\n const parsed = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return parsed ? {\r\n r: parseInt(parsed[1], 16),\r\n g: parseInt(parsed[2], 16),\r\n b: parseInt(parsed[3], 16),\r\n } : { r: 0, g: 0, b: 0 };\r\n}\r\nfunction rgbToBrightness(rgb) {\r\n return (0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b) / 255;\r\n}\r\nfunction hexToBrightness(hex) {\r\n const rgb = hexToRgb(hex);\r\n return rgbToBrightness(rgb);\r\n}\r\nfunction getHexValue(s, context) {\r\n var _a;\r\n const hex = isStringCSSVariable(s) ? getCSSVariableValue(s, context) : s;\r\n return (_a = color(hex)) === null || _a === void 0 ? void 0 : _a.formatHex();\r\n}\r\nfunction rgbaToRgb(rgba, backgroundColor) {\r\n var _a;\r\n const rgb = (_a = color(rgba)) === null || _a === void 0 ? void 0 : _a.rgb();\r\n if (!rgb || rgb.opacity === 1)\r\n return rgb;\r\n const alpha = 1 - rgb.opacity;\r\n const bg = color(backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : '#fff').rgb();\r\n return {\r\n r: Math.round((rgb.opacity * (rgb.r / 255) + (alpha * (bg.r / 255))) * 255),\r\n g: Math.round((rgb.opacity * (rgb.g / 255) + (alpha * (bg.g / 255))) * 255),\r\n b: Math.round((rgb.opacity * (rgb.b / 255) + (alpha * (bg.b / 255))) * 255),\r\n };\r\n}\r\n/**\r\n * Makes a color brighter by a certain amount\r\n * @param inputColor - The color to brighten (hex, rgb, or rgba)\r\n * @param amount - Amount to brighten by (0-1)\r\n * @returns The brightened color in hex format\r\n */\r\nfunction brighter(inputColor, amount) {\r\n const c = hcl(inputColor);\r\n if (!c)\r\n return inputColor;\r\n return c.brighter(amount).formatHex();\r\n}\r\nfunction isColorDark(color, threshold = 0.55) {\r\n const hex = getHexValue(color, document.body);\r\n if (!hex)\r\n return false;\r\n return hexToBrightness(hex) < threshold;\r\n}\n\nexport { brighter, getColor, getHexValue, hexToBrightness, hexToRgb, isColorDark, rgbToBrightness, rgbaToRgb };\n//# sourceMappingURL=color.js.map\n","import { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalClosed, curveCardinalOpen, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore } from 'd3-shape';\n\nvar CurveType;\r\n(function (CurveType) {\r\n CurveType[\"Basis\"] = \"basis\";\r\n CurveType[\"BasisClosed\"] = \"basisClosed\";\r\n CurveType[\"BasisOpen\"] = \"basisOpen\";\r\n CurveType[\"Bundle\"] = \"bundle\";\r\n CurveType[\"Cardinal\"] = \"cardinal\";\r\n CurveType[\"CardinalClosed\"] = \"cardinalClosed\";\r\n CurveType[\"CardinalOpen\"] = \"cardinalOpen\";\r\n CurveType[\"CatmullRom\"] = \"catmullRom\";\r\n CurveType[\"CatmullRomClosed\"] = \"catmullRomClosed\";\r\n CurveType[\"CatmullRomOpen\"] = \"catmullRomOpen\";\r\n CurveType[\"Linear\"] = \"linear\";\r\n CurveType[\"LinearClosed\"] = \"linearClosed\";\r\n CurveType[\"MonotoneX\"] = \"monotoneX\";\r\n CurveType[\"MonotoneY\"] = \"monotoneY\";\r\n CurveType[\"Natural\"] = \"natural\";\r\n CurveType[\"Step\"] = \"step\";\r\n CurveType[\"StepAfter\"] = \"stepAfter\";\r\n CurveType[\"StepBefore\"] = \"stepBefore\";\r\n})(CurveType || (CurveType = {}));\r\nconst Curve = {\r\n [CurveType.Basis]: curveBasis,\r\n [CurveType.BasisClosed]: curveBasisClosed,\r\n [CurveType.BasisOpen]: curveBasisOpen,\r\n [CurveType.Bundle]: curveBundle,\r\n [CurveType.Cardinal]: curveCardinal,\r\n [CurveType.CardinalClosed]: curveCardinalClosed,\r\n [CurveType.CardinalOpen]: curveCardinalOpen,\r\n [CurveType.CatmullRom]: curveCatmullRom,\r\n [CurveType.CatmullRomClosed]: curveCatmullRomClosed,\r\n [CurveType.CatmullRomOpen]: curveCatmullRomOpen,\r\n [CurveType.Linear]: curveLinear,\r\n [CurveType.LinearClosed]: curveLinearClosed,\r\n [CurveType.MonotoneX]: curveMonotoneX,\r\n [CurveType.MonotoneY]: curveMonotoneY,\r\n [CurveType.Natural]: curveNatural,\r\n [CurveType.Step]: curveStep,\r\n [CurveType.StepAfter]: curveStepAfter,\r\n [CurveType.StepBefore]: curveStepBefore,\r\n};\n\nexport { Curve, CurveType };\n//# sourceMappingURL=curve.js.map\n","import { range, min, max } from 'd3-array';\nimport { line, curveCardinal, curveCardinalClosed } from 'd3-shape';\nimport { clamp } from './data.js';\n\n/*\r\n * Generate SVG path for rectangle with rounded corners\r\n *\r\n * @param {Object} props - Configuration object\r\n * @param {Number} props.x - Rect top left X coordinate\r\n * @param {Number} props.y - Rect top left Y coordinate\r\n * @param {Number} props.w - Rect width\r\n * @param {Number} props.h - Rect height\r\n * @param {Bool} [props.tl=false] - Round top left corner\r\n * @param {Bool} [props.tr=false] - Round top right corner\r\n * @param {Bool} [props.bl=false] - Round bottom left corner\r\n * @param {Bool} [props.br=false] - Round bottom right corner\r\n * @param {Number} [props.r=0] - Corner Radius\r\n * @return {String} Path string for the `d` attribute\r\n */\r\nfunction roundedRectPath({ x, y, w, h, tl = false, tr = false, bl = false, br = false, r = 0, }) {\r\n let path;\r\n path = `M${x + r},${y}h${w - 2 * r}`;\r\n let roundedR = tr ? r : 0;\r\n let angularR = tr ? 0 : r;\r\n path += `a${roundedR},${roundedR} 0 0 1 ${roundedR},${roundedR}`;\r\n path += `h${angularR}v${angularR}`;\r\n path += `v${h - 2 * r}`;\r\n roundedR = br ? r : 0;\r\n angularR = br ? 0 : r;\r\n path += `a${roundedR},${roundedR} 0 0 1 ${-roundedR},${roundedR}`;\r\n path += `v${angularR}h${-angularR}`;\r\n path += `h${2 * r - w}`;\r\n roundedR = bl ? r : 0;\r\n angularR = bl ? 0 : r;\r\n path += `a${roundedR},${roundedR} 0 0 1 ${-roundedR},${-roundedR}`;\r\n path += `h${-angularR}v${-angularR}`;\r\n path += `v${2 * r - h}`;\r\n roundedR = tl ? r : 0;\r\n angularR = tl ? 0 : r;\r\n path += `a${roundedR},${roundedR} 0 0 1 ${roundedR},${-roundedR}`;\r\n path += `v${-angularR}h${angularR}`;\r\n path += 'z';\r\n return path;\r\n}\r\nfunction polygon(size, n = 6, endAngle = 2 * Math.PI, open = false) {\r\n const r = n === 4 ? Math.sqrt(0.5) * size : size / 3.6 * 2;\r\n const deltaAngle = n === 4 ? Math.PI / 4 : 0; // rotate to 45 grads if shape is a rectangle\r\n const shiftedEndAngle = endAngle - deltaAngle;\r\n const completion = (shiftedEndAngle < 0 ? endAngle : shiftedEndAngle) / (2 * Math.PI);\r\n const nSegments = Math.ceil(n * completion);\r\n const centerAngle = 1 / n * Math.PI * 2; // /\\\r\n const baseAngle = (Math.PI - centerAngle) / 2; // /__\\\r\n const data = range(nSegments + (shiftedEndAngle >= 0 ? 1 : 0))\r\n .map((d, i) => {\r\n const isLastSegment = i === nSegments || (nSegments === 1 && shiftedEndAngle < 0);\r\n let mult = isLastSegment ? ((completion * n) % 1 || 1) : 1; // Handle partial shape\r\n if (shiftedEndAngle < 0) {\r\n mult += 0.5;\r\n }\r\n const angle = centerAngle * (i - 1 + mult);\r\n let radius;\r\n if (isLastSegment) {\r\n const thirdAngle = Math.PI - baseAngle - centerAngle * mult;\r\n radius = r * Math.sin(baseAngle) / Math.sin(thirdAngle); // Law of sines\r\n }\r\n else {\r\n radius = r;\r\n }\r\n return {\r\n x: Math.sin(angle + deltaAngle) * radius,\r\n y: -Math.cos(angle + deltaAngle) * radius,\r\n };\r\n });\r\n if (n === 4) {\r\n const angle = centerAngle * (-1 + 0.5);\r\n const thirdAngle = Math.PI * 0.5;\r\n const radius = r * Math.sin(baseAngle) / Math.sin(thirdAngle); // Law of sines\r\n data.unshift({\r\n x: Math.sin(angle + deltaAngle) * radius,\r\n y: -Math.cos(angle + deltaAngle) * radius,\r\n });\r\n }\r\n const path = line()\r\n /* eslint-disable-next-line dot-notation */\r\n .x(d => d['x'])\r\n /* eslint-disable-next-line dot-notation */\r\n .y(d => d['y'])\r\n .curve((open ? curveCardinal : curveCardinalClosed).tension(0.95));\r\n return path(data);\r\n}\r\nfunction circlePath(cx, cy, r) {\r\n return `\n M ${cx} ${cy}\n m ${-r}, 0\n a ${r},${r} 0 1,1 ${r * 2},0\n a ${r},${r} 0 1,1 ${-r * 2},0`;\r\n}\r\nfunction scoreRectPath({ x, y, w, h, r = 0, score = 1 }) {\r\n let path;\r\n const side = 1 / 4;\r\n const halfSide = side / 2;\r\n let part = score;\r\n // 8 1\r\n // - -\r\n // 7 | | 2\r\n // 6 | | 3\r\n // - -\r\n // 5 4\r\n // 1\r\n const hLength = min([w * 0.5 * (part / halfSide) + r, w * 0.5 - r]);\r\n path = `M${x + w * 0.5},${y}h${hLength}`;\r\n // 2, 3\r\n part = score - 1 / 8;\r\n if (part > 0) {\r\n path += `a${r},${r} 0 0 1 ${r},${r}`;\r\n const vLength = clamp(h * (part / side) - r, 0, h - 2 * r);\r\n path += `v${vLength}`;\r\n }\r\n // 4, 5\r\n part = score - 3 / 8;\r\n if (part > 0) {\r\n path += `a${r},${r} 0 0 1 ${-r},${r}`;\r\n const hLength = clamp(r - w * (part / side), 2 * r - w, 0);\r\n path += `h${hLength}`;\r\n }\r\n // 6, 7\r\n part = score - 5 / 8;\r\n if (part > 0) {\r\n path += `a${r},${r} 0 0 1 ${-r},${-r}`;\r\n const vLength = clamp(r - h * (part / side), 2 * r - h, 0);\r\n path += `v${vLength}`;\r\n }\r\n // 8\r\n part = score - 7 / 8;\r\n if (part > 0) {\r\n path += `a${r},${r} 0 0 1 ${r},${-r}`;\r\n const hLength = max([w * 0.5 * (part / halfSide) - r, 0]);\r\n path += `h${hLength}`;\r\n }\r\n return path;\r\n}\r\n/*\r\n * Replace L path command with arc with specified radius\r\n * @param {String} path - the path string\r\n * @param {number} r - radius in pixels\r\n * @returns {String} new path string\r\n */\r\nfunction convertLineToArc(path, r) {\r\n return path.toString().replace(/L(?<x>-?\\d*\\.?\\d*),(?<y>-?\\d+\\.?\\d*)/gm, (_, x, y) => `A ${r} ${r} 0 0 0 ${x} ${y}`);\r\n}\r\n/**\r\n * Generate an SVG path string for an arrow that follows a polyline path.\r\n * The arrow is composed of line segments between points and a triangular arrowhead at the end.\r\n *\r\n * @param opts - ArrowPolylinePathOptions object containing array of points and optional head dimensions.\r\n * @returns SVG path string for the arrow.\r\n */\r\nfunction arrowPolylinePath(points, arrowHeadLength = 8, arrowHeadWidth = 6, smoothing = 5) {\r\n if (points.length < 2)\r\n return '';\r\n // Calculate total path length\r\n let totalLength = 0;\r\n for (let i = 0; i < points.length - 1; i++) {\r\n const [x1, y1] = points[i];\r\n const [x2, y2] = points[i + 1];\r\n totalLength += Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n }\r\n // If the total length is zero or nearly zero, don't draw anything\r\n if (totalLength === 0)\r\n return '';\r\n // Let the default values be modifiable based on the line length\r\n let headLength = arrowHeadLength;\r\n let headWidth = arrowHeadWidth;\r\n // If the line is very short, scale down the arrow head dimensions\r\n const threshold = arrowHeadLength * 2;\r\n if (totalLength < threshold) {\r\n const scale = totalLength / threshold;\r\n headLength *= scale;\r\n headWidth *= scale;\r\n }\r\n // Ensure the arrow head length is never longer than the line itself\r\n headLength = Math.min(headLength / 2, totalLength);\r\n // Get the last two points for arrowhead calculation\r\n const [lastX, lastY] = points[points.length - 1];\r\n const [prevX, prevY] = points[points.length - 2];\r\n // Calculate direction vector for the last segment\r\n const dx = lastX - prevX;\r\n const dy = lastY - prevY;\r\n const segmentLength = Math.sqrt(dx * dx + dy * dy);\r\n const ux = dx / segmentLength;\r\n const uy = dy / segmentLength;\r\n // Tail point of the arrow (where the arrowhead starts)\r\n const tailX = lastX - headLength * ux;\r\n const tailY = lastY - headLength * uy;\r\n // Perpendicular vector for arrowhead width calculation\r\n const perpX = -uy;\r\n const perpY = ux;\r\n // Calculate the two base points of the arrowhead triangle\r\n const leftX = tailX + (headWidth / 2) * perpX;\r\n const leftY = tailY + (headWidth / 2) * perpY;\r\n const rightX = tailX - (headWidth / 2) * perpX;\r\n const rightY = tailY - (headWidth / 2) * perpY;\r\n // Build the path\r\n const pathParts = [];\r\n if (points.length === 2) {\r\n // For a single segment, create a curved path\r\n const [startX, startY] = points[0];\r\n // Adjust smoothing based on segment length\r\n const adjustedSmoothing = Math.min(smoothing, segmentLength / 3);\r\n // Calculate control points for a cubic Bézier curve with adjusted smoothing\r\n const cp1x = startX + ux * adjustedSmoothing;\r\n const cp1y = startY + uy * adjustedSmoothing + perpY * adjustedSmoothing * 0.5;\r\n const cp2x = tailX - ux * adjustedSmoothing;\r\n const cp2y = tailY - uy * adjustedSmoothing + perpY * adjustedSmoothing * 0.5;\r\n // Start path and add cubic Bézier curve\r\n pathParts.push(`M${startX},${startY}`);\r\n pathParts.push(`C${cp1x},${cp1y} ${cp2x},${cp2y} ${lastX},${lastY}`);\r\n }\r\n else {\r\n // For multiple segments, use smooth Bézier corners with absolute smoothing\r\n pathParts.push(`M${points[0][0]},${points[0][1]}`);\r\n for (let i = 0; i < points.length - 2; i++) {\r\n const [x1, y1] = points[i];\r\n const [x2, y2] = points[i + 1];\r\n const [x3, y3] = points[i + 2];\r\n // Calculate vectors for the current and next segment\r\n const v1x = x2 - x1;\r\n const v1y = y2 - y1;\r\n const v2x = x3 - x2;\r\n const v2y = y3 - y2;\r\n // Calculate lengths of segments\r\n const len1 = Math.sqrt(v1x * v1x + v1y * v1y);\r\n const len2 = Math.sqrt(v2x * v2x + v2y * v2y);\r\n // Calculate unit vectors\r\n const u1x = v1x / len1;\r\n const u1y = v1y / len1;\r\n const u2x = v2x / len2;\r\n const u2y = v2y / len2;\r\n // Adjust smoothing based on the minimum segment length\r\n const minSegmentLength = Math.min(len1, len2);\r\n const adjustedSmoothing = Math.min(smoothing, minSegmentLength / 3);\r\n // Calculate the corner points and control points with adjusted smoothing\r\n const corner1x = x2 - u1x * adjustedSmoothing;\r\n const corner1y = y2 - u1y * adjustedSmoothing;\r\n const corner2x = x2 + u2x * adjustedSmoothing;\r\n const corner2y = y2 + u2y * adjustedSmoothing;\r\n // Add line to approach point\r\n pathParts.push(`L${corner1x},${corner1y}`);\r\n // Add cubic Bézier curve for the corner\r\n pathParts.push(`C${x2},${y2} ${x2},${y2} ${corner2x},${corner2y}`);\r\n }\r\n // Add the final line segment to the tail point\r\n pathParts.push(`L${lastX},${lastY}`);\r\n }\r\n // Add the arrowhead\r\n pathParts.push(`M${leftX},${leftY} L${lastX},${lastY} L${rightX},${rightY}`);\r\n return pathParts.join(' ');\r\n}\n\nexport { arrowPolylinePath, circlePath, convertLineToArc, polygon, roundedRectPath, scoreRectPath };\n//# sourceMappingURL=path.js.map\n","var TrimMode;\r\n(function (TrimMode) {\r\n TrimMode[\"Start\"] = \"start\";\r\n TrimMode[\"Middle\"] = \"middle\";\r\n TrimMode[\"End\"] = \"end\";\r\n})(TrimMode || (TrimMode = {}));\r\nvar VerticalAlign;\r\n(function (VerticalAlign) {\r\n VerticalAlign[\"Top\"] = \"top\";\r\n VerticalAlign[\"Middle\"] = \"middle\";\r\n VerticalAlign[\"Bottom\"] = \"bottom\";\r\n})(VerticalAlign || (VerticalAlign = {}));\r\nvar FitMode;\r\n(function (FitMode) {\r\n FitMode[\"Wrap\"] = \"wrap\";\r\n FitMode[\"Trim\"] = \"trim\";\r\n})(FitMode || (FitMode = {}));\r\nvar TextAlign;\r\n(function (TextAlign) {\r\n TextAlign[\"Left\"] = \"left\";\r\n TextAlign[\"Center\"] = \"center\";\r\n TextAlign[\"Right\"] = \"right\";\r\n})(TextAlign || (TextAlign = {}));\n\nexport { FitMode, TextAlign, TrimMode, VerticalAlign };\n//# sourceMappingURL=text.js.map\n","'use strict';\n\n(function (global) {\n\n // minimal symbol polyfill for IE11 and others\n if (typeof Symbol !== 'function') {\n var Symbol = function(name) {\n return name;\n }\n\n Symbol.nonNative = true;\n }\n\n const STATE_PLAINTEXT = Symbol('plaintext');\n const STATE_HTML = Symbol('html');\n const STATE_COMMENT = Symbol('comment');\n\n const ALLOWED_TAGS_REGEX = /<(\\w*)>/g;\n const NORMALIZE_TAG_REGEX = /<\\/?([^\\s\\/>]+)/;\n\n function striptags(html, allowable_tags, tag_replacement) {\n html = html || '';\n allowable_tags = allowable_tags || [];\n tag_replacement = tag_replacement || '';\n\n let context = init_context(allowable_tags, tag_replacement);\n\n return striptags_internal(html, context);\n }\n\n function init_striptags_stream(allowable_tags, tag_replacement) {\n allowable_tags = allowable_tags || [];\n tag_replacement = tag_replacement || '';\n\n let context = init_context(allowable_tags, tag_replacement);\n\n return function striptags_stream(html) {\n return striptags_internal(html || '', context);\n };\n }\n\n striptags.init_streaming_mode = init_striptags_stream;\n\n function init_context(allowable_tags, tag_replacement) {\n allowable_tags = parse_allowable_tags(allowable_tags);\n\n return {\n allowable_tags : allowable_tags,\n tag_replacement: tag_replacement,\n\n state : STATE_PLAINTEXT,\n tag_buffer : '',\n depth : 0,\n in_quote_char : ''\n };\n }\n\n function striptags_internal(html, context) {\n if (typeof html != \"string\") {\n throw new TypeError(\"'html' parameter must be a string\");\n }\n\n let allowable_tags = context.allowable_tags;\n let tag_replacement = context.tag_replacement;\n\n let state = context.state;\n let tag_buffer = context.tag_buffer;\n let depth = context.depth;\n let in_quote_char = context.in_quote_char;\n let output = '';\n\n for (let idx = 0, length = html.length; idx < length; idx++) {\n let char = html[idx];\n\n if (state === STATE_PLAINTEXT) {\n switch (char) {\n case '<':\n state = STATE_HTML;\n tag_buffer += char;\n break;\n\n default:\n output += char;\n break;\n }\n }\n\n else if (state === STATE_HTML) {\n switch (char) {\n case '<':\n // ignore '<' if inside a quote\n if (in_quote_char) {\n break;\n }\n\n // we're seeing a nested '<'\n depth++;\n break;\n\n case '>':\n // ignore '>' if inside a quote\n if (in_quote_char) {\n break;\n }\n\n // something like this is happening: '<<>>'\n if (depth) {\n depth--;\n\n break;\n }\n\n // this is closing the tag in tag_buffer\n in_quote_char = '';\n state = STATE_PLAINTEXT;\n tag_buffer += '>';\n\n if (allowable_tags.has(normalize_tag(tag_buffer))) {\n output += tag_buffer;\n } else {\n output += tag_replacement;\n }\n\n tag_buffer = '';\n break;\n\n case '\"':\n case '\\'':\n // catch both single and double quotes\n\n if (char === in_quote_char) {\n in_quote_char = '';\n } else {\n in_quote_char = in_quote_char || char;\n }\n\n tag_buffer += char;\n break;\n\n case '-':\n if (tag_buffer === '<!-') {\n state = STATE_COMMENT;\n }\n\n tag_buffer += char;\n break;\n\n case ' ':\n case '\\n':\n if (tag_buffer === '<') {\n state = STATE_PLAINTEXT;\n output += '< ';\n tag_buffer = '';\n\n break;\n }\n\n tag_buffer += char;\n break;\n\n default:\n tag_buffer += char;\n break;\n }\n }\n\n else if (state === STATE_COMMENT) {\n switch (char) {\n case '>':\n if (tag_buffer.slice(-2) == '--') {\n // close the comment\n state = STATE_PLAINTEXT;\n }\n\n tag_buffer = '';\n break;\n\n default:\n tag_buffer += char;\n break;\n }\n }\n }\n\n // save the context for future iterations\n context.state = state;\n context.tag_buffer = tag_buffer;\n context.depth = depth;\n context.in_quote_char = in_quote_char;\n\n return output;\n }\n\n function parse_allowable_tags(allowable_tags) {\n let tag_set = new Set();\n\n if (typeof allowable_tags === 'string') {\n let match;\n\n while ((match = ALLOWED_TAGS_REGEX.exec(allowable_tags))) {\n tag_set.add(match[1]);\n }\n }\n\n else if (!Symbol.nonNative &&\n typeof allowable_tags[Symbol.iterator] === 'function') {\n\n tag_set = new Set(allowable_tags);\n }\n\n else if (typeof allowable_tags.forEach === 'function') {\n // IE11 compatible\n allowable_tags.forEach(tag_set.add, tag_set);\n }\n\n return tag_set;\n }\n\n function normalize_tag(tag_buffer) {\n let match = NORMALIZE_TAG_REGEX.exec(tag_buffer);\n\n return match ? match[1].toLowerCase() : null;\n }\n\n if (typeof define === 'function' && define.amd) {\n // AMD\n define(function module_factory() { return striptags; });\n }\n\n else if (typeof module === 'object' && module.exports) {\n // Node\n module.exports = striptags;\n }\n\n else {\n // Browser\n global.striptags = striptags;\n }\n}(this));\n","import { sum } from 'd3-array';\nimport striptags from 'striptags';\nimport { TextAlign, TrimMode, VerticalAlign } from '../types/text.js';\nimport { flatten, isArray, merge } from './data.js';\nimport { getTextAnchorFromTextAlign } from '../types/svg.js';\nimport { toPx } from './to-px.js';\nimport { UNOVIS_TEXT_DEFAULT, getFontWidthToHeightRatio, UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT, UNOVIS_TEXT_SEPARATOR_DEFAULT } from '../styles/index.js';\n\nconst textAlignToAnchor = (textAlign) => {\r\n switch (textAlign) {\r\n case TextAlign.Left: return 'start';\r\n case TextAlign.Right: return 'end';\r\n case TextAlign.Center: return 'middle';\r\n default: return null;\r\n }\r\n};\r\n/**\r\n * Converts a kebab-case string to camelCase.\r\n *\r\n * @param {string} str - The kebab-case string to be converted.\r\n * @returns {string} The resulting camelCase string.\r\n */\r\nfunction kebabCaseToCamel(str) {\r\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\r\n}\r\n/**\r\n * Converts a given string to kebab-case.\r\n * @param {string} str - The input string to be converted to kebab-case.\r\n * @returns {string} - The kebab-cased string.\r\n */\r\nfunction kebabCase(str) {\r\n var _a;\r\n return (_a = str.match(/[A-Z]{2,}(?=[A-Z][a-z0-9]*|\\b)|[A-Z]?[a-z0-9]*|[A-Z]|[0-9]+/g)) === null || _a === void 0 ? void 0 : _a.filter(Boolean).map(x => x.toLowerCase()).join('-');\r\n}\r\nfunction escapeStringKeepHash(str) {\r\n return str\r\n .replace(/['\"]/g, ''') // Escapes quotes with '\r\n // eslint-disable-next-line no-control-regex\r\n .replace(/\\u0000/g, '\\\\0') // Escapes null characters\r\n .replace(/\\n/g, '\\\\n') // Escapes new lines\r\n .replace(/\\r/g, '\\\\r') // Escapes carriage returns\r\n .replace(/\\v/g, '\\\\v') // Escapes vertical tabs\r\n .replace(/\\t/g, '\\\\t') // Escapes horizontal tabs\r\n .replace(/\\f/g, '\\\\f'); // Escapes form feeds\r\n}\r\n/**\r\n * Trims the input string from the start, leaving only the specified maximum length.\r\n * @param {string} str - The input string to be trimmed.\r\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\r\n * @returns {string} - The trimmed string.\r\n */\r\nfunction trimStringStart(str, maxLength = 15) {\r\n if (!str)\r\n return '';\r\n return str.length > maxLength ? `…${str.substr(str.length - maxLength, maxLength)}` : str;\r\n}\r\n/**\r\n * Trims the input string from the middle, leaving only the specified maximum length.\r\n * @param {string} str - The input string to be trimmed.\r\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\r\n * @returns {string} - The trimmed string.\r\n */\r\nfunction trimStringMiddle(str, maxLength = 15) {\r\n if (!str)\r\n return '';\r\n const dist = Math.floor((maxLength - 3) / 2);\r\n return str.length > maxLength ? `${str.substr(0, dist)}…${str.substr(-dist, dist)}` : str;\r\n}\r\n/**\r\n * Trims the input string from the end, leaving only the specified maximum length.\r\n * @param {string} str - The input string to be trimmed.\r\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\r\n * @returns {string} - The trimmed string.\r\n */\r\nfunction trimStringEnd(str, maxLength = 15) {\r\n if (!str)\r\n return '';\r\n return str.length > maxLength ? `${str.substr(0, maxLength)}…` : str;\r\n}\r\n/**\r\n * Trims the input string according to the specified trim mode.\r\n * @param {string} str - The input string to be trimmed.\r\n * @param {number} [length=15] - The maximum allowed length of the trimmed string.\r\n * @param {TrimMode} [type=TrimMode.Middle] - The trim mode to be applied.\r\n * @returns {string} - The trimmed string.\r\n */\r\nfunction trimString(str, length = 15, type = TrimMode.Middle) {\r\n if (!str)\r\n return '';\r\n let result = trimStringEnd(str, length);\r\n if (type === TrimMode.Start)\r\n result = trimStringStart(str, length);\r\n else if (type === TrimMode.Middle)\r\n result = trimStringMiddle(str, length);\r\n return result;\r\n}\r\n/**\r\n * Splits the input string according to the specified separators.\r\n * @param {string} text - The input string to be split.\r\n * @param {string[]} [separators=[' ']] - The array of separators to be used for splitting.\r\n * @returns {string[]} - The array of split words.\r\n */\r\nfunction splitString(text, separators = [' ']) {\r\n let result = [text];\r\n for (let i = 0; i < separators.length; i++) {\r\n const sep = separators[i];\r\n result.forEach((d, index) => {\r\n const separated = d.split(sep);\r\n const words = separated.map((word, j) => `${word}${j === separated.length - 1 ? '' : sep}`);\r\n result[index] = words;\r\n });\r\n result = flatten(result);\r\n }\r\n return result;\r\n}\r\n/**\r\n * Wraps an SVG text element to fit within the specified width.\r\n * @param {Selection<SVGTextElement, any, SVGElement, any>} textElement - The SVG text element to be wrapped.\r\n * @param {number} width - The maximum allowed width for the text element.\r\n * @param {(string | string[])} [separator=[' ', '-', '.', ',']] - The separator(s) to be used for wrapping.\r\n */\r\nfunction wrapSVGText(textElement, width, separator = [' ', '-', '.', ',']) {\r\n const text = textElement.text();\r\n if (!text)\r\n return;\r\n // Wrap\r\n const separators = (isArray(separator) ? separator : [separator]);\r\n const words = splitString(text, separators);\r\n const x = parseFloat(textElement.attr('x')) || 0;\r\n textElement.text('');\r\n let tspan = textElement.append('tspan').attr('x', x);\r\n let tspanContent = `${words[0]}`;\r\n tspan.text(tspanContent);\r\n words.forEach((word, i) => {\r\n if (i === 0)\r\n return;\r\n const tspanText = `${tspanContent}${word}`;\r\n tspan.text(tspanText);\r\n const tspanWidth = tspan.node().getComputedTextLength();\r\n if (tspanWidth > width) {\r\n tspan.text(tspanContent.trim());\r\n tspan = textElement.append('tspan')\r\n .attr('x', x)\r\n .attr('dy', '1.2em')\r\n .text(word);\r\n tspanContent = word;\r\n }\r\n else\r\n tspanContent += word;\r\n });\r\n}\r\n// TODO: When we calculate `maxCharacters` we don't take into account that the ellipsis character is wider than the regular characters,\r\n// which sometimes leads to labels getting cut off. We should rethink the tolerance value and maybe subtract a few characters from `maxCharacters`,\r\n// but this can be a breaking change and should be done carefully testing all components that use `trimSVGText`\r\n/**\r\n * Trims an SVG text element based on the specified max width, trim type, and other options.\r\n * @param {Selection<SVGTextElement, any, SVGElement, any>} svgTextSelection - The D3 selection of the SVG text element to be trimmed.\r\n * @param {number} [maxWidth=50] - The maximum width of the text element.\r\n * @param {TrimMode} [trimType=TrimMode.Middle] - The type of trim (start, middle, or end).\r\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method for text length calculation.\r\n * @param {number} [fontSize=0] - The font size of the text.\r\n * @param {number} [fontWidthToHeightRatio=getFontWidthToHeightRatio()] - The font width to height ratio.\r\n * @returns {boolean} True if the text was trimmed, false otherwise.\r\n */\r\nfunction trimSVGText(svgTextSelection, maxWidth, trimType, fastMode, fontSize, fontWidthToHeightRatio) {\r\n var _a;\r\n if (maxWidth === void 0) { maxWidth = 50; }\r\n if (trimType === void 0) { trimType = TrimMode.Middle; }\r\n if (fastMode === void 0) { fastMode = true; }\r\n if (fontSize === void 0) { fontSize = toPx(((_a = window.getComputedStyle(svgTextSelection.node())) === null || _a === void 0 ? void 0 : _a.fontSize) || UNOVIS_TEXT_DEFAULT.fontSize); }\r\n if (fontWidthToHeightRatio === void 0) { fontWidthToHeightRatio = getFontWidthToHeightRatio(); }\r\n const text = svgTextSelection.text() || '';\r\n const textLength = text.length;\r\n const textWidth = fastMode ? fontSize * textLength * fontWidthToHeightRatio : svgTextSelection.node().getComputedTextLength();\r\n const tolerance = 1.1;\r\n const maxCharacters = Math.ceil(textLength * maxWidth / (tolerance * textWidth));\r\n if (maxCharacters < textLength) {\r\n svgTextSelection.text(trimString(text, maxCharacters, trimType));\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Estimates the length of a string in pixels.\r\n * @param {string} str - The string to be measured.\r\n * @param {number} fontSize - The font size of the string.\r\n * @param {number} [fontWidthToHeightRatio=getFontWidthToHeightRatio()] - The font width to height ratio.\r\n * @returns {number} The estimated length of the string in pixels.\r\n */\r\nfunction estimateStringPixelLength(str, fontSize, fontWidthToHeightRatio = getFontWidthToHeightRatio()) {\r\n return str.length * fontSize * fontWidthToHeightRatio || 0;\r\n}\r\n/**\r\n * Calculates the precise length of a string in pixels.\r\n * @param {string} str - The string to be measured.\r\n * @param {string} [fontFamily] - The font family of the string.\r\n * @param {(string | number)} [fontSize] - The font size of the string.\r\n * @returns {number} The precise length of the string in pixels.\r\n */\r\nfunction getPreciseStringLengthPx(str, fontFamily, fontSize) {\r\n const svgNS = 'http://www.w3.org/2000/svg';\r\n const svg = document.createElementNS(svgNS, 'svg');\r\n const text = document.createElementNS(svgNS, 'text');\r\n text.textContent = str;\r\n text.setAttribute('font-size', `${fontSize}`);\r\n text.setAttribute('font-family', fontFamily);\r\n svg.appendChild(text);\r\n document.body.appendChild(svg);\r\n const length = text.getComputedTextLength();\r\n document.body.removeChild(svg);\r\n return length;\r\n}\r\n/**\r\n * Estimates the dimensions of an SVG text element.\r\n *\r\n * @export\r\n * @param {Selection<SVGTextElement, any, SVGElement, any>} svgTextSelection - The D3 selection of the SVG text element.\r\n * @param {number} fontSize - The font size.\r\n * @param {number} [dy=0.32] - The line height scaling factor.\r\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\r\n * @param {number} [fontWidthToHeightRatio] - The font width-to-height ratio.\r\n * @returns {{width: number, height: number}} - The estimated dimensions of the text element.\r\n */\r\nfunction estimateTextSize(svgTextSelection, fontSize, dy = 0.32, fastMode = true, fontWidthToHeightRatio) {\r\n fontWidthToHeightRatio = fontWidthToHeightRatio || getFontWidthToHeightRatio();\r\n const tspanSelection = svgTextSelection.selectAll('tspan');\r\n const lines = tspanSelection.size() || 1;\r\n const height = svgTextSelection.text() ? 0.85 * fontSize * lines * (1 + dy) - dy : 0;\r\n let width = 0;\r\n if (tspanSelection.empty()) {\r\n const textLength = svgTextSelection.text().length;\r\n width = fastMode ? fontSize * textLength * fontWidthToHeightRatio : svgTextSelection.node().getComputedTextLength();\r\n }\r\n else {\r\n for (const tspan of tspanSelection.nodes()) {\r\n const tspanTextLength = tspan.textContent.length;\r\n const w = fastMode ? fontSize * tspanTextLength * fontWidthToHeightRatio : tspan.getComputedTextLength();\r\n if (w > width)\r\n width = w;\r\n }\r\n }\r\n return { width, height };\r\n}\r\n/**\r\n * Breaks a text block into lines based on the specified width.\r\n *\r\n * @param {UnovisText} textBlock - The text block to break into lines.\r\n * @param {number | undefined} [width=undefined] - The maximum width of a line in pixels.\r\n * @param {(number | undefined)} [height=undefined] - The height limit for the wrapped text in pixels.\r\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\r\n * @param {string | string[]} [separator] - The word separators.\r\n * @returns {string[]} - The text split into lines.\r\n */\r\nfunction breakTextIntoLines(textBlock, width = undefined, fastMode = true, separator = UNOVIS_TEXT_SEPARATOR_DEFAULT, wordBreak = false) {\r\n var _a, _b, _c;\r\n const text = `${textBlock.text}`;\r\n if (!text)\r\n return [];\r\n const fontSize = (_a = textBlock.fontSize) !== null && _a !== void 0 ? _a : UNOVIS_TEXT_DEFAULT.fontSize;\r\n const fontFamily = (_b = textBlock.fontFamily) !== null && _b !== void 0 ? _b : UNOVIS_TEXT_DEFAULT.fontFamily;\r\n const fontWidthToHeightRatio = (_c = textBlock.fontWidthToHeightRatio) !== null && _c !== void 0 ? _c : UNOVIS_TEXT_DEFAULT.fontWidthToHeightRatio;\r\n const separators = Array.isArray(separator) ? separator : [separator];\r\n const splitByNewLine = text.split('\\n');\r\n return splitByNewLine.map((str) => {\r\n const lines = [];\r\n if (!width)\r\n return [str];\r\n const words = splitString(str, separators);\r\n let line = '';\r\n for (let i = 0; i < words.length; i += 1) {\r\n const textLengthPx = fastMode\r\n ? estimateStringPixelLength(line + words[i], fontSize, fontWidthToHeightRatio)\r\n : getPreciseStringLengthPx(line + words[i], fontFamily, fontSize);\r\n if (textLengthPx < width || i === 0) {\r\n line += words[i];\r\n }\r\n else {\r\n lines.push(line.trim());\r\n line = words[i];\r\n }\r\n // Word break functionality\r\n const minCharactersOnLine = 2;\r\n if (wordBreak) {\r\n while (line.trim().length > minCharactersOnLine) {\r\n const subLineLengthPx = fastMode\r\n ? estimateStringPixelLength(line, fontSize, fontWidthToHeightRatio)\r\n : getPreciseStringLengthPx(line, fontFamily, fontSize);\r\n if (subLineLengthPx > width) {\r\n let breakIndex = (line.trim()).length - minCharactersOnLine; // Place at least `minCharactersOnLine` characters onto the next line\r\n while (breakIndex > 0) {\r\n const subLine = `${line.substring(0, breakIndex)}${UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT}`; // Use hyphen when force breaking words\r\n const subLinePx = fastMode\r\n ? estimateStringPixelLength(subLine, fontSize, fontWidthToHeightRatio)\r\n : getPreciseStringLengthPx(subLine, fontFamily, fontSize);\r\n // If the subline is less than the width, or just one character left, break the line\r\n if (subLinePx <= width || breakIndex === 1) {\r\n lines.push(subLine.trim());\r\n line = line.substring(breakIndex);\r\n break;\r\n }\r\n breakIndex--;\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n // Adding the final line after the loop\r\n if (line)\r\n lines.push(line.trim());\r\n return lines;\r\n }).flat();\r\n}\r\n/**\r\n * Wraps a text or array of texts to fit within specified width and height, if provided.\r\n *\r\n * @export\r\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to wrap.\r\n * @param {number | undefined} [width=undefined] - The maximum width of a line in pixels.\r\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\r\n * @param {string | string[]} [separator] - The word separators.\r\n * @returns {UnovisWrappedText[]} - The wrapped texts.\r\n */\r\nfunction getWrappedText(text, width = undefined, height = undefined, fastMode = true, separator = UNOVIS_TEXT_SEPARATOR_DEFAULT, wordBreak = false) {\r\n // Merge input text with default values and convert it to an array if it's not already\r\n const textArrays = Array.isArray(text) ? text.map(t => merge(UNOVIS_TEXT_DEFAULT, t)) : [merge(UNOVIS_TEXT_DEFAULT, text)];\r\n // Break input text into lines based on width and separator\r\n const textWrapped = textArrays.map(block => breakTextIntoLines(block, width, fastMode, separator, wordBreak));\r\n const firstBlock = textArrays[0];\r\n let h = -firstBlock.fontSize * (firstBlock.lineHeight - 1);\r\n const blocks = [];\r\n // Process each text block and its lines based on height limit\r\n textArrays.forEach((text, i) => {\r\n var _a;\r\n let lines = textWrapped[i];\r\n const prevBlock = i > 0 ? blocks[i - 1] : undefined;\r\n const prevBlockMarginBottomPx = prevBlock ? prevBlock.marginBottom : 0;\r\n const marginTopPx = text.marginTop;\r\n const effectiveMarginPx = Math.max(prevBlockMarginBottomPx, marginTopPx);\r\n h += effectiveMarginPx;\r\n const dh = text.fontSize * text.lineHeight;\r\n let maxWidth = 0;\r\n // Iterate over lines and handle text overflow based on the height limit if provided\r\n for (let k = 0; k < lines.length; k += 1) {\r\n let line = lines[k];\r\n h += dh;\r\n const lineWithEllipsis = `${line} …`;\r\n const textLengthPx = fastMode\r\n ? estimateStringPixelLength(lineWithEllipsis, text.fontSize, text.fontWidthToHeightRatio)\r\n : getPreciseStringLengthPx(lineWithEllipsis, text.fontFamily, text.fontSize);\r\n maxWidth = Math.max(textLengthPx, maxWidth);\r\n if (height && (h + dh) > height && (k !== lines.length - 1)) {\r\n // Remove hyphen character from the end of the line if it's there\r\n const lastCharacter = line.charAt(line.length - 1);\r\n if (lastCharacter === UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT) {\r\n line = line.substr(0, lines[k].length - 1);\r\n }\r\n if (textLengthPx < width) {\r\n lines[k] = lineWithEllipsis;\r\n }\r\n else {\r\n lines[k] = `${lines[k].substr(0, lines[k].length - 2)}…`;\r\n }\r\n lines = lines.slice(0, k + 1);\r\n break;\r\n }\r\n }\r\n // Create wrapped text block with its calculated properties\r\n blocks.push(Object.assign(Object.assign({}, text), { _lines: lines, _estimatedHeight: h - ((prevBlock === null || prevBlock === void 0 ? void 0 : prevBlock._estimatedHeight) || 0), _maxWidth: Math.max(maxWidth, (_a = prevBlock === null || prevBlock === void 0 ? void 0 : prevBlock._maxWidth) !== null && _a !== void 0 ? _a : 0) }));\r\n });\r\n return blocks;\r\n}\r\n/**\r\n * Renders a text or array of texts to SVG tspan strings.\r\n *\r\n * @param {UnovisWrappedText[]} blocks - The wrapped text blocks.\r\n * @param {number} [x=0] - The x-coordinate for the tspan elements.\r\n * @param {number} [y] - The y-coordinate for the tspan elements.\r\n * @returns {string[]} - The SVG tspan strings.\r\n */\r\nfunction renderTextToTspanStrings(blocks, x = 0, y, dominantBaseline) {\r\n return blocks.map((b, i) => {\r\n const prevBlock = i > 0 ? blocks[i - 1] : undefined;\r\n const prevBlockMarginBottomEm = prevBlock ? prevBlock.marginBottom / prevBlock.fontSize : 0;\r\n const marginTopEm = b.marginTop / b.fontSize;\r\n const marginEm = Math.max(prevBlockMarginBottomEm, marginTopEm);\r\n const attributes = {\r\n fontSize: b.fontSize,\r\n fontFamily: b.fontFamily,\r\n fontWeight: b.fontWeight,\r\n fill: b.color,\r\n y: (i === 0) && y,\r\n };\r\n const attributesString = Object.entries(attributes)\r\n .filter(([_, value]) => value)\r\n .map(([key, value]) => `${kebabCase(key)}=\"${escapeStringKeepHash(value.toString())}\"`)\r\n .join(' ');\r\n return `<tspan xmlns=\"http://www.w3.org/2000/svg\" ${attributesString}>${b._lines.map((line, k) => {\r\n let dy;\r\n if (i === 0 && k === 0)\r\n dy = marginEm;\r\n else if (k === 0)\r\n dy = marginEm + b.lineHeight;\r\n else\r\n dy = b.lineHeight;\r\n return `<tspan x=\"${x}\" dy=\"${dy}em\" dominant-baseline=\"${dominantBaseline !== null && dominantBaseline !== void 0 ? dominantBaseline : 'auto'}\">${line.length ? line : ' '}</tspan>`;\r\n }).join('')}</tspan>`;\r\n });\r\n}\r\n/**\r\n * Estimates the height of wrapped text blocks.\r\n *\r\n * @export\r\n * @param {UnovisWrappedText[]} blocks - The wrapped text blocks.\r\n * @returns {number} - The estimated height of the wrapped text blocks.\r\n */\r\nfunction estimateWrappedTextHeight(blocks) {\r\n return sum(blocks, b => b._estimatedHeight);\r\n}\r\nconst allowedSvgTextTags = ['text', 'tspan', 'textPath', 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'glyphRef', 'textRef', 'textArea'];\r\n/**\r\n * Renders a text or array of texts to an SVG text element.\r\n * Calling this function will replace the contents of the specified SVG text element.\r\n *\r\n * @export\r\n * @param {SVGTextElement} textElement - The SVG text element to render the text into.\r\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to render.\r\n * @param {UnovisTextOptions} options - The text options.\r\n */\r\nfunction renderTextToSvgTextElement(textElement, text, options, \r\n// Dominant baseline sets alignment for a line of text, whereas\r\n// the `options.verticalAlign` property sets alignment for the entire text block\r\n// shifting it vertically, irrespective of the dominant baseline.\r\ndominantBaseline) {\r\n var _a, _b;\r\n const wrappedText = getWrappedText(text, options.width, undefined, options.fastMode, options.separator, options.wordBreak);\r\n const textElementX = (_a = options.x) !== null && _a !== void 0 ? _a : +textElement.getAttribute('x');\r\n const textElementY = (_b = options.y) !== null && _b !== void 0 ? _b : +textElement.getAttribute('y');\r\n const x = textElementX !== null && textElementX !== void 0 ? textElementX : 0;\r\n let y = textElementY !== null && textElementY !== void 0 ? textElementY : 0;\r\n if (options.textAlign) {\r\n textElement.setAttribute('text-anchor', getTextAnchorFromTextAlign(options.textAlign));\r\n }\r\n if (options.verticalAlign && options.verticalAlign !== VerticalAlign.Top) {\r\n const height = estimateWrappedTextHeight(wrappedText);\r\n const dy = options.verticalAlign === VerticalAlign.Middle ? -height / 2\r\n : options.verticalAlign === VerticalAlign.Bottom ? -height : 0;\r\n y += dy;\r\n }\r\n if (options.textRotationAngle) {\r\n textElement.setAttribute('transform', `rotate(${(options.textRotationAngle === 0 || options.textRotationAngle) ? options.textRotationAngle : 0} ${x} ${y})`);\r\n }\r\n else {\r\n textElement.removeAttribute('transform');\r\n }\r\n const parser = new DOMParser();\r\n textElement.textContent = '';\r\n wrappedText.forEach(block => {\r\n const svgCode = renderTextToTspanStrings([block], x, y, dominantBaseline).join('');\r\n const svgCodeSanitized = striptags(svgCode, allowedSvgTextTags);\r\n const parsedSvgCode = parser.parseFromString(svgCodeSanitized, 'image/svg+xml').firstChild;\r\n textElement.appendChild(parsedSvgCode);\r\n });\r\n}\r\n/**\r\n * Renders a text or array of texts into a frame.\r\n * Calling this function will replace the contents of the specified SVG group.\r\n *\r\n * @export\r\n * @param {SVGGElement} group - The SVG group element to render the text into.\r\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to render.\r\n * @param {UnovisTextFrameOptions} frameOptions - The text frame options.\r\n */\r\nfunction renderTextIntoFrame(group, text, frameOptions) {\r\n var _a, _b;\r\n const wrappedText = getWrappedText(text, frameOptions.width, frameOptions.height, frameOptions.fastMode, frameOptions.separator, frameOptions.wordBreak);\r\n const x = frameOptions.textAlign === TextAlign.Center ? frameOptions.width / 2\r\n : frameOptions.textAlign === TextAlign.Right ? frameOptions.width : 0;\r\n let y = 0;\r\n const height = estimateWrappedTextHeight(wrappedText);\r\n // If the frame has height, the text will be vertically aligned within the frame.\r\n // If not, the text will be aligned against the `y` position of the frame.\r\n const dh = frameOptions.height - height;\r\n y = frameOptions.verticalAlign === VerticalAlign.Middle ? dh / 2\r\n : frameOptions.verticalAlign === VerticalAlign.Bottom ? dh : 0;\r\n const translate = (frameOptions.x || frameOptions.y)\r\n ? `transform=\"translate(${(_a = frameOptions.x) !== null && _a !== void 0 ? _a : 0},${(_b = frameOptions.y) !== null && _b !== void 0 ? _b : 0})\"`\r\n : '';\r\n const svgCode = `<text\n xmlns=\"http://www.w3.org/2000/svg\"\n text-anchor=\"${getTextAnchorFromTextAlign(frameOptions.textAlign)}\"\n ${translate}\n >\n ${renderTextToTspanStrings(wrappedText, x, y, 'hanging').join('')}\n </text>`;\r\n const parser = new DOMParser();\r\n const svgCodeSanitized = striptags(svgCode, allowedSvgTextTags);\r\n const parsedSvgCode = parser.parseFromString(svgCodeSanitized, 'image/svg+xml').firstChild;\r\n group.textContent = '';\r\n group.appendChild(parsedSvgCode);\r\n}\n\nexport { allowedSvgTextTags, escapeStringKeepHash, estimateStringPixelLength, estimateTextSize, estimateWrappedTextHeight, getPreciseStringLengthPx, getWrappedText, kebabCase, kebabCaseToCamel, renderTextIntoFrame, renderTextToSvgTextElement, splitString, textAlignToAnchor, trimSVGText, trimString, trimStringEnd, trimStringMiddle, trimStringStart, wrapSVGText };\n//# sourceMappingURL=text.js.map\n","var ChordLabelAlignment;\r\n(function (ChordLabelAlignment) {\r\n ChordLabelAlignment[\"Along\"] = \"along\";\r\n ChordLabelAlignment[\"Perpendicular\"] = \"perpendicular\";\r\n})(ChordLabelAlignment || (ChordLabelAlignment = {}));\n\nexport { ChordLabelAlignment };\n//# sourceMappingURL=types.js.map\n","import { isString, cloneDeep, isFunction, isUndefined, without, isNumber, isObject, isEqual } from '../utils/data.js';\nimport { CoreDataModel } from './core.js';\n\nclass GraphDataModel extends CoreDataModel {\r\n constructor() {\r\n super(...arguments);\r\n this._nodes = [];\r\n this._links = [];\r\n this._inputNodesMap = new Map();\r\n this._nodesMap = new Map();\r\n // Model configuration\r\n this.nodeId = n => (isString(n.id) || isFinite(n.id)) ? `${n.id}` : undefined;\r\n this.linkId = l => (isString(l.id) || isFinite(l.id)) ? `${l.id}` : undefined;\r\n }\r\n getNodeById(id) {\r\n return this._nodesMap.get(id);\r\n }\r\n get data() {\r\n return this._data;\r\n }\r\n set data(inputData) {\r\n var _a, _b;\r\n if (!inputData)\r\n return;\r\n this._data = inputData;\r\n const prevNodes = this.nodes;\r\n const prevLinks = this.links;\r\n this._inputNodesMap.clear();\r\n this._nodesMap.clear();\r\n // Todo: Figure out why TypeScript complains about types\r\n const nodes = cloneDeep((_a = inputData === null || inputData === void 0 ? void 0 : inputData.nodes) !== null && _a !== void 0 ? _a : []);\r\n const links = cloneDeep((_b = inputData === null || inputData === void 0 ? void 0 : inputData.links) !== null && _b !== void 0 ? _b : []);\r\n // Every node or link can have a private state used for rendering needs\r\n // On data update we transfer state between objects with same ids\r\n this.transferState(nodes, prevNodes, this.nodeId);\r\n this.transferState(links, prevLinks, this.linkId);\r\n // Set node `_id` and `_index`\r\n nodes.forEach((node, i) => {\r\n node._index = i;\r\n node._id = this.nodeId(node) || `${i}`;\r\n this._inputNodesMap.set(node, inputData.nodes[i]);\r\n this._nodesMap.set(node._id, node);\r\n });\r\n // Sort nodes\r\n if (isFunction(this.nodeSort))\r\n nodes.sort(this.nodeSort);\r\n // Fill link source and target\r\n links.forEach((link, i) => {\r\n link._indexGlobal = i;\r\n link.source = this.findNode(nodes, link.source);\r\n link.target = this.findNode(nodes, link.target);\r\n });\r\n // Set link index for multiple link rendering\r\n links.forEach((link, i) => {\r\n if (!isUndefined(link._index) && !isUndefined(link._neighbours))\r\n return;\r\n const linksFiltered = links.filter(l => ((link.source === l.source) && (link.target === l.target)) ||\r\n ((link.source === l.target) && (link.target === l.source)));\r\n linksFiltered.forEach((l, i) => {\r\n var _a, _b;\r\n l._index = i;\r\n l._id = this.linkId(l) || `${(_a = l.source) === null || _a === void 0 ? void 0 : _a._id}-${(_b = l.target) === null || _b === void 0 ? void 0 : _b._id}-${i}`;\r\n l._neighbours = linksFiltered.length;\r\n l._direction = ((link.source === l.source) && (link.target === l.target)) ? 1 : -1;\r\n });\r\n });\r\n nodes.forEach(d => {\r\n // Determine if a node is connected or not and store it as a property\r\n d.links = links.filter(l => (l.source === d) || (l.target === d));\r\n d._isConnected = d.links.length !== 0;\r\n });\r\n this._nonConnectedNodes = nodes.filter(d => !d._isConnected);\r\n this._connectedNodes = without(nodes, ...this._nonConnectedNodes);\r\n this._nodes = nodes;\r\n this._links = links.filter(l => {\r\n if (l.source === l.target) {\r\n console.warn(`Unovis | Graph Data Model: Skipping link ${l._id} because it has the same source and target`);\r\n return false;\r\n }\r\n return l.source && l.target;\r\n });\r\n }\r\n get nodes() {\r\n return this._nodes;\r\n }\r\n get links() {\r\n return this._links;\r\n }\r\n get connectedNodes() {\r\n return this._connectedNodes;\r\n }\r\n get nonConnectedNodes() {\r\n return this._nonConnectedNodes;\r\n }\r\n findNode(nodes, nodeIdentifier) {\r\n let foundNode;\r\n if (isNumber(nodeIdentifier))\r\n foundNode = nodes[nodeIdentifier];\r\n else if (isString(nodeIdentifier))\r\n foundNode = nodes.find(node => this.nodeId(node) === nodeIdentifier);\r\n else if (isObject(nodeIdentifier))\r\n foundNode = nodes.find(node => isEqual(this._inputNodesMap.get(node), nodeIdentifier));\r\n if (!foundNode) {\r\n console.warn(`Unovis | Graph Data Model: Node ${nodeIdentifier} is missing from the nodes list`);\r\n }\r\n return foundNode;\r\n }\r\n transferState(items, itemsPrev, getId) {\r\n for (const item of items) {\r\n const dPrev = itemsPrev.find((dp) => getId(dp) === getId(item));\r\n if (dPrev)\r\n item._state = Object.assign({}, dPrev._state);\r\n else\r\n item._state = {};\r\n }\r\n }\r\n setNodeStateById(id, state) {\r\n const node = this.getNodeById(id);\r\n if (!node) {\r\n console.warn(`Unovis | Graph Data Model: Node ${id} not found`);\r\n return;\r\n }\r\n node._state = state;\r\n }\r\n}\n\nexport { GraphDataModel };\n//# sourceMappingURL=graph.js.map\n","import { ComponentDefaultConfig } from '../../core/component/config.js';\nimport { ChordLabelAlignment } from './types.js';\n\n// Core\r\nconst ChordDiagramDefaultConfig = Object.assign(Object.assign({}, ComponentDefaultConfig), { duration: 800, highlightedNodeId: undefined, highlightedLinkIds: [], linkColor: undefined, linkValue: (d) => d.value, nodeLevels: [], nodeWidth: 15, nodeColor: (d) => d.color, nodeLabel: (d) => { var _a; return (_a = d.label) !== null && _a !== void 0 ? _a : d.key; }, nodeLabelColor: undefined, nodeLabelAlignment: ChordLabelAlignment.Along, padAngle: 0.02, cornerRadius: 2, angleRange: [0, 2 * Math.PI], radiusScaleExponent: 2 });\n\nexport { ChordDiagramDefaultConfig };\n//# sourceMappingURL=config.js.map\n","import { interpolate } from 'd3-interpolate';\nimport { getColor } from '../../../utils/color.js';\nimport { smartTransition } from '../../../utils/d3.js';\n\nfunction createNode(selection) {\r\n selection\r\n .style('opacity', 0)\r\n .each((d, i, els) => {\r\n const arcNode = els[i];\r\n const angleCenter = (d.x0 + d.x1) / 2;\r\n const angleHalfWidth = (d.x1 - d.x0) / 2;\r\n arcNode._animState = {\r\n x0: angleCenter - angleHalfWidth * 0.8,\r\n x1: angleCenter + angleHalfWidth * 0.8,\r\n y0: d.y0,\r\n y1: d.y1,\r\n };\r\n });\r\n}\r\nfunction updateNode(selection, config, arcGen, duration) {\r\n const nodeColor = (d) => getColor(d.data, config.nodeColor, d.height);\r\n selection\r\n .attr('id', d => d.uid)\r\n .style('transition', `fill ${duration}ms`) // Animate color with CSS because we're using CSS-variables\r\n .style('fill', nodeColor)\r\n .style('stroke', nodeColor);\r\n if (duration) {\r\n const transition = smartTransition(selection, duration)\r\n .style('opacity', 1);\r\n transition.attrTween('d', (d, i, els) => {\r\n const arcNode = els[i];\r\n const nextAnimState = { x0: d.x0, x1: d.x1, y0: d.y0, y1: d.y1 };\r\n const datum = interpolate(arcNode._animState, nextAnimState);\r\n return (t) => {\r\n arcNode._animState = datum(t);\r\n return arcGen(arcNode._animState);\r\n };\r\n });\r\n }\r\n else {\r\n selection.attr('d', d => arcGen(d))\r\n .style('opacity', 1);\r\n }\r\n}\r\nfunction removeNode(selection, duration) {\r\n smartTransition(selection, duration)\r\n .style('opacity', 0)\r\n .remove();\r\n}\n\nexport { createNode, removeNode, updateNode };\n//# sourceMappingURL=node.js.map\n","import { css, injectGlobal } from '@emotion/css';\nimport { darkThemeCssSelectors } from '../../utils/theme.js';\n\nconst root = css `\n label: chord-diagram-component;\n`;\r\nconst variables = injectGlobal `\n :root {\n --vis-chord-diagram-link-fill-color: #cad5f6;\n --vis-chord-diagram-link-stroke-color: #777777;\n --vis-chord-diagram-link-opacity: 0.5;\n --vis-chord-diagram-link-stroke-opacity: 0.15;\n --vis-chord-diagram-link-highlighted-opacity: 0.9;\n --vis-chord-diagram-link-dimmed-opacity: 0.25;\n\n --vis-chord-diagram-node-highlighted-opacity: 0.9;\n --vis-chord-diagram-node-dimmed-opacity: 0.25;\n\n --vis-chord-diagram-label-text-fill-color-bright: #ffffff;\n --vis-chord-diagram-label-text-fill-color-dark: #a5abb2;\n --vis-chord-diagram-label-text-font-size: 1em;\n\n --vis-dark-chord-diagram-link-fill-color: #575c65;\n }\n\n ${darkThemeCssSelectors} ${`.${root}`} {\n --vis-chord-diagram-link-fill-color: var(--vis-dark-chord-diagram-link-fill-color);\n }\n`;\r\nconst background = css `\n label: background;\n`;\r\nconst nodes = css `\n label: nodes;\n`;\r\nconst links = css `\n label: links;\n`;\r\nconst labels = css `\n label: labels;\n`;\r\nconst node = css `\n label: node;\n stroke-width: 0;\n fill: var(--vis-color-main);\n stroke: var(--vis-color-main);\n transition: .1s fill-opacity;\n`;\r\nconst highlightedNode = css `\n label: highlighted;\n fill-opacity: var(--vis-chord-diagram-node-highlighted-opacity);\n stroke-width: 1.5;\n`;\r\nconst label = css `\n label: label;\n`;\r\nconst labelText = css `\n label: label-text;\n\n dominant-baseline: middle;\n user-select: none;\n font-size: var(--vis-chord-diagram-label-text-font-size);\n\n > textPath {\n dominant-baseline: central;\n }\n`;\r\nconst labelExit = css `\n label: label-exit;\n`;\r\nconst link = css `\n label: link;\n\n fill: var(--vis-chord-diagram-link-fill-color);\n fill-opacity: var(--vis-chord-diagram-link-opacity);\n stroke: var(--vis-chord-diagram-link-stroke-color);\n stroke-opacity: var(--vis-chord-diagram-link-stroke-opacity);\n transition: .1s fill-opacity;\n`;\r\nconst highlightedLink = css `\n label: highlighted;\n fill-opacity: var(--vis-chord-diagram-link-highlighted-opacity);\n`;\r\nconst transparent = css `\n label: transparent;\n\n ${`.${link}`}:not(${`.${highlightedLink}`}) {\n fill-opacity: var(--vis-chord-diagram-link-dimmed-opacity);\n }\n\n ${`.${node}`}:not(${`.${highlightedNode}`}) {\n fill-opacity: var(--vis-chord-diagram-node-dimmed-opacity);\n }\n`;\n\nexport { background, highlightedLink, highlightedNode, label, labelExit, labelText, labels, link, links, node, nodes, root, transparent, variables };\n//# sourceMappingURL=style.js.map\n","import { select } from 'd3-selection';\nimport { color } from 'd3-color';\nimport { trimSVGText } from '../../../utils/text.js';\nimport { smartTransition } from '../../../utils/d3.js';\nimport { getValue, getString, getNumber } from '../../../utils/data.js';\nimport { getColor, hexToBrightness } from '../../../utils/color.js';\nimport { ChordLabelAlignment } from '../types.js';\nimport { labelText } from '../style.js';\n\nconst LABEL_PADDING = 3;\r\nfunction getLabelFillColor(d, config) {\r\n var _a;\r\n const nodeLabelAlignment = (_a = getValue(d.data, config.nodeLabelAlignment)) !== null && _a !== void 0 ? _a : ChordLabelAlignment.Along;\r\n switch (nodeLabelAlignment) {\r\n case ChordLabelAlignment.Perpendicular: {\r\n return getColor(d.data, config.nodeColor, d.height);\r\n }\r\n case ChordLabelAlignment.Along: {\r\n const c = getColor(d.data, config.nodeColor, d.height);\r\n const colorParsed = color(c);\r\n const brightness = colorParsed ? hexToBrightness(colorParsed.hex()) : 0;\r\n return brightness > 0.65 ? 'var(--vis-chord-diagram-label-text-fill-color-dark)' : 'var(--vis-chord-diagram-label-text-fill-color-bright)';\r\n }\r\n }\r\n}\r\nfunction getLabelTextAnchor(d, config) {\r\n var _a;\r\n const nodeLabelAlignment = (_a = getValue(d.data, config.nodeLabelAlignment)) !== null && _a !== void 0 ? _a : ChordLabelAlignment.Along;\r\n switch (nodeLabelAlignment) {\r\n case ChordLabelAlignment.Perpendicular: {\r\n const angleCenter = (d.x0 + d.x1) / 2;\r\n const angleDegree = angleCenter * 180 / Math.PI;\r\n return angleDegree < 180 ? 'start' : 'end';\r\n }\r\n case ChordLabelAlignment.Along: {\r\n return null;\r\n }\r\n }\r\n}\r\nfunction getLabelTransform(d, config, radiusScale) {\r\n var _a;\r\n const nodeLabelAlignment = (_a = getValue(d.data, config.nodeLabelAlignment)) !== null && _a !== void 0 ? _a : ChordLabelAlignment.Along;\r\n switch (nodeLabelAlignment) {\r\n case ChordLabelAlignment.Perpendicular: {\r\n const r = radiusScale(d.y1) + LABEL_PADDING;\r\n const angleCenter = (d.x0 + d.x1) / 2;\r\n const angle = angleCenter - Math.PI / 2;\r\n const x = r * Math.cos(angle);\r\n const y = r * Math.sin(angle);\r\n return `translate(${x}, ${y})`;\r\n }\r\n case ChordLabelAlignment.Along:\r\n return null;\r\n }\r\n}\r\nfunction createLabel(selection, config, radiusScale) {\r\n selection.style('opacity', 0)\r\n .attr('transform', d => getLabelTransform(d, config, radiusScale));\r\n selection.append('text')\r\n .attr('class', labelText)\r\n .style('fill', d => getColor(d.data, config.nodeColor, d.height));\r\n}\r\nfunction updateLabel(selection, config, width, radiusScale, duration) {\r\n const { nodeLabel, nodeLabelColor, nodeWidth } = config;\r\n smartTransition(selection, duration)\r\n .attr('transform', d => getLabelTransform(d, config, radiusScale))\r\n .style('opacity', 1);\r\n const label = selection.select(`.${labelText}`);\r\n label.selectAll('textPath').remove();\r\n label.text(d => getString(d.data, nodeLabel))\r\n .style('transition', `fill ${duration}ms`)\r\n .style('fill', d => { var _a; return (_a = getColor(d.data, nodeLabelColor)) !== null && _a !== void 0 ? _a : getLabelFillColor(d, config); })\r\n .style('text-anchor', d => getLabelTextAnchor(d, config))\r\n .each((d, i, elements) => {\r\n var _a;\r\n const nodeLabelAlignment = (_a = getValue(d.data, config.nodeLabelAlignment)) !== null && _a !== void 0 ? _a : ChordLabelAlignment.Along;\r\n const radianArcLength = d.x1 - d.x0 - getNumber(d.data, config.padAngle) * 2;\r\n const radius = radiusScale(d.y1) - getNumber(d, config.nodeWidth) / 2;\r\n const arcLength = radius * radianArcLength;\r\n const maxWidth = (nodeLabelAlignment === ChordLabelAlignment.Along ? arcLength : width - LABEL_PADDING * 2);\r\n const textElement = select(elements[i])\r\n .call(trimSVGText, maxWidth)\r\n .attr('dx', nodeLabelAlignment === ChordLabelAlignment.Along ? LABEL_PADDING : null)\r\n .attr('dy', nodeLabelAlignment === ChordLabelAlignment.Along ? getNumber(d.data, nodeWidth) / 2 : null);\r\n const textWidth = textElement.node().getComputedTextLength();\r\n const labelText = textElement.text();\r\n if (nodeLabelAlignment === ChordLabelAlignment.Along) {\r\n textElement.text('');\r\n if (textWidth <= maxWidth) {\r\n textElement.append('textPath')\r\n .attr('href', `#${d.uid}`)\r\n .text(labelText);\r\n }\r\n }\r\n });\r\n smartTransition(label, duration)\r\n .attr('transform', d => {\r\n const nodeLabelAlignment = getValue(d.data, config.nodeLabelAlignment);\r\n if (nodeLabelAlignment !== ChordLabelAlignment.Perpendicular)\r\n return null;\r\n const angleCenter = (d.x0 + d.x1) / 2;\r\n const angleDegree = angleCenter * 180 / Math.PI;\r\n return `rotate(${angleDegree < 180 ? angleDegree - 90 : angleDegree + 90})`;\r\n });\r\n}\r\nfunction removeLabel(selection, duration) {\r\n smartTransition(selection, duration)\r\n .style('opacity', 0)\r\n .remove();\r\n}\n\nexport { LABEL_PADDING, createLabel, removeLabel, updateLabel };\n//# sourceMappingURL=label.js.map\n","import { group, index } from 'd3-array';\nimport { hierarchy } from 'd3-hierarchy';\nimport { pie } from 'd3-shape';\nimport { getNumber, groupBy } from '../../../utils/data.js';\n\nfunction transformData(node) {\r\n const { height, depth } = node;\r\n if (height > 0) {\r\n const d = node.data;\r\n const n = node;\r\n n.data = { key: d[0], values: d[1], depth, height, ancestors: n.ancestors().map(d => d.data.key) };\r\n }\r\n}\r\nfunction getHierarchyNodes(data, value, levels = []) {\r\n const nodeLevels = levels.map(level => (d) => d[level]);\r\n const nestedData = levels.length ? group(data, ...nodeLevels) : { key: 'root', children: data };\r\n const root = hierarchy(nestedData)\r\n .sum(d => getNumber(d, value))\r\n .each(transformData);\r\n return root;\r\n}\r\nfunction positionChildren(node, padding, scalingCoeff = 0.95) {\r\n if (!node.children)\r\n return;\r\n // We need to ensure levels with empty links still take up full space\r\n const containsLinks = node.value > 0;\r\n const length = node.x1 - node.x0;\r\n const scaledLength = length * (node.y0 === 0 ? 1 : scalingCoeff);\r\n const delta = length - scaledLength;\r\n const padAngle = containsLinks ? padding : scaledLength / node.children.length;\r\n const positions = pie()\r\n .startAngle(node.x0 + delta / 2)\r\n .endAngle(node.x1 - delta / 2)\r\n .padAngle(padAngle)\r\n .value(d => containsLinks ? d.value : 1)\r\n .sort((a, b) => node.children.indexOf(a) - node.children.indexOf(b))(node.children);\r\n node.children.forEach((child, i) => {\r\n const x0 = positions[i].startAngle;\r\n const x1 = positions[i].endAngle;\r\n const childDelta = (x1 - x0) * (1 - scalingCoeff);\r\n const xmid = (x0 + x1) / 2;\r\n child.x0 = containsLinks ? x0 + childDelta / 2 : xmid - padding / 2;\r\n child.x1 = containsLinks ? x1 - childDelta / 2 : xmid + padding / 2;\r\n });\r\n}\r\nfunction getRibbons(data, links, padding) {\r\n const groupedBySource = groupBy(links, d => d.source._id);\r\n const groupedByTarget = groupBy(links, d => d.target._id);\r\n const leafNodes = data.leaves();\r\n const leafNodesById = index(leafNodes, d => d.data._id);\r\n const getNodesInRibbon = (source, target, partitionHeight, nodes = []) => {\r\n nodes[source.height] = source;\r\n nodes[partitionHeight * 2 - target.height] = target;\r\n if (source.parent && target.parent)\r\n getNodesInRibbon(source.parent, target.parent, partitionHeight, nodes);\r\n return nodes;\r\n };\r\n const calculatePoints = (links, type, depth, maxDepth) => {\r\n links.forEach(link => {\r\n var _a;\r\n if (!link._state.points)\r\n link._state.points = [];\r\n const sourceLeaf = leafNodesById.get(link.source._id);\r\n const targetLeaf = leafNodesById.get(link.target._id);\r\n const nodesInRibbon = getNodesInRibbon(type === 'out' ? sourceLeaf : targetLeaf, type === 'out' ? targetLeaf : sourceLeaf, maxDepth);\r\n const currNode = nodesInRibbon[depth];\r\n const len = currNode.x1 - currNode.x0 - padding;\r\n const x0 = (_a = currNode._prevX1) !== null && _a !== void 0 ? _a : (currNode.x0 + padding / 2);\r\n const x1 = x0 + len * link._state.value / currNode.value;\r\n currNode._prevX1 = x1;\r\n const pointIdx = type === 'out' ? depth : maxDepth * 2 - 1 - depth;\r\n link._state.points[pointIdx] = { a0: x0, a1: x1, r: currNode.y1 };\r\n });\r\n };\r\n leafNodes.forEach(leafNode => {\r\n const outLinks = groupedBySource[leafNode.data._id] || [];\r\n const inLinks = groupedByTarget[leafNode.data._id] || [];\r\n for (let depth = 0; depth < leafNode.depth; depth += 1) {\r\n calculatePoints(outLinks, 'out', depth, leafNode.depth);\r\n calculatePoints(inLinks, 'in', depth, leafNode.depth);\r\n }\r\n });\r\n return links.map(l => ({\r\n source: leafNodesById.get(l.source._id),\r\n target: leafNodesById.get(l.target._id),\r\n data: l,\r\n points: l._state.points,\r\n _state: {},\r\n }));\r\n}\n\nexport { getHierarchyNodes, getRibbons, positionChildren };\n//# sourceMappingURL=layout.js.map\n","export var abs = Math.abs;\nexport var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\nexport var epsilon = 1e-12;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport {abs, cos, epsilon, halfPi, sin} from \"./math.js\";\n\nfunction defaultSource(d) {\n return d.source;\n}\n\nfunction defaultTarget(d) {\n return d.target;\n}\n\nfunction defaultRadius(d) {\n return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n return d.endAngle;\n}\n\nfunction defaultPadAngle() {\n return 0;\n}\n\nfunction defaultArrowheadRadius() {\n return 10;\n}\n\nfunction ribbon(headRadius) {\n var source = defaultSource,\n target = defaultTarget,\n sourceRadius = defaultRadius,\n targetRadius = defaultRadius,\n startAngle = defaultStartAngle,\n endAngle = defaultEndAngle,\n padAngle = defaultPadAngle,\n context = null;\n\n function ribbon() {\n var buffer,\n s = source.apply(this, arguments),\n t = target.apply(this, arguments),\n ap = padAngle.apply(this, arguments) / 2,\n argv = slice.call(arguments),\n sr = +sourceRadius.apply(this, (argv[0] = s, argv)),\n sa0 = startAngle.apply(this, argv) - halfPi,\n sa1 = endAngle.apply(this, argv) - halfPi,\n tr = +targetRadius.apply(this, (argv[0] = t, argv)),\n ta0 = startAngle.apply(this, argv) - halfPi,\n ta1 = endAngle.apply(this, argv) - halfPi;\n\n if (!context) context = buffer = path();\n\n if (ap > epsilon) {\n if (abs(sa1 - sa0) > ap * 2 + epsilon) sa1 > sa0 ? (sa0 += ap, sa1 -= ap) : (sa0 -= ap, sa1 += ap);\n else sa0 = sa1 = (sa0 + sa1) / 2;\n if (abs(ta1 - ta0) > ap * 2 + epsilon) ta1 > ta0 ? (ta0 += ap, ta1 -= ap) : (ta0 -= ap, ta1 += ap);\n else ta0 = ta1 = (ta0 + ta1) / 2;\n }\n\n context.moveTo(sr * cos(sa0), sr * sin(sa0));\n context.arc(0, 0, sr, sa0, sa1);\n if (sa0 !== ta0 || sa1 !== ta1) {\n if (headRadius) {\n var hr = +headRadius.apply(this, arguments), tr2 = tr - hr, ta2 = (ta0 + ta1) / 2;\n context.quadraticCurveTo(0, 0, tr2 * cos(ta0), tr2 * sin(ta0));\n context.lineTo(tr * cos(ta2), tr * sin(ta2));\n context.lineTo(tr2 * cos(ta1), tr2 * sin(ta1));\n } else {\n context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n context.arc(0, 0, tr, ta0, ta1);\n }\n }\n context.quadraticCurveTo(0, 0, sr * cos(sa0), sr * sin(sa0));\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n if (headRadius) ribbon.headRadius = function(_) {\n return arguments.length ? (headRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : headRadius;\n };\n\n ribbon.radius = function(_) {\n return arguments.length ? (sourceRadius = targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n };\n\n ribbon.sourceRadius = function(_) {\n return arguments.length ? (sourceRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n };\n\n ribbon.targetRadius = function(_) {\n return arguments.length ? (targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : targetRadius;\n };\n\n ribbon.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : startAngle;\n };\n\n ribbon.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : endAngle;\n };\n\n ribbon.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : padAngle;\n };\n\n ribbon.source = function(_) {\n return arguments.length ? (source = _, ribbon) : source;\n };\n\n ribbon.target = function(_) {\n return arguments.length ? (target = _, ribbon) : target;\n };\n\n ribbon.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n };\n\n return ribbon;\n}\n\nexport default function() {\n return ribbon();\n}\n\nexport function ribbonArrow() {\n return ribbon(defaultArrowheadRadius);\n}\n","import { select } from 'd3-selection';\nimport { ribbon } from 'd3-chord';\nimport { areaRadial } from 'd3-shape';\nimport { interpolatePath } from 'd3-interpolate-path';\nimport { Curve } from '../../../types/curve.js';\nimport { getColor } from '../../../utils/color.js';\nimport { smartTransition } from '../../../utils/d3.js';\nimport { convertLineToArc } from '../../../utils/path.js';\n\n// Generators\r\nfunction emptyPath() {\r\n return 'M0,0 L0,0';\r\n}\r\n// Generators\r\nconst ribbonGen = ribbon()\r\n .source(d => d[0])\r\n .target(d => d[d.length - 1])\r\n .startAngle(d => d.a0)\r\n .endAngle(d => d.a1);\r\nconst areaGen = areaRadial()\r\n .curve(Curve.catmullRom.alpha(0.5))\r\n .startAngle((d, i, points) => i < points.length / 2 ? d.a1 : d.a0)\r\n .endAngle((d, i, points) => i < points.length / 2 ? d.a0 : d.a1);\r\n// Creates a path from set of points\r\nfunction linkGen(points, radiusScale) {\r\n var _a;\r\n const link = (points.length === 2 ? ribbonGen : areaGen);\r\n link.radius(d => radiusScale(d.r));\r\n const linkPath = link(points);\r\n if (points.length === 2)\r\n return linkPath;\r\n // Replace closePath with line to starting point\r\n const area = linkPath.slice(0, -1);\r\n const path = area.concat(`L${(_a = area.match(/M-?\\d*\\.?\\d*[,\\s*]-?\\d*\\.?\\d*/)) === null || _a === void 0 ? void 0 : _a[0].slice(1)}`);\r\n // Convert line edges to arcs\r\n const radius = Math.max(radiusScale(points[0].r), 0);\r\n return convertLineToArc(path, radius);\r\n}\r\nfunction createLink(selection, radiusScale) {\r\n selection\r\n .attr('d', d => linkGen(d.points, radiusScale) || emptyPath())\r\n .style('opacity', 0);\r\n}\r\nfunction updateLink(selection, config, radiusScale, duration) {\r\n selection\r\n .style('transition', `fill ${duration}ms`)\r\n .style('fill', d => getColor(d.data, config.linkColor))\r\n .style('stroke', d => getColor(d.data, config.linkColor));\r\n const transition = smartTransition(selection, duration)\r\n .style('opacity', 1);\r\n if (duration) {\r\n transition.attrTween('d', (d, i, el) => {\r\n const previous = select(el[i]).attr('d');\r\n const next = linkGen(d.points, radiusScale) || emptyPath();\r\n return interpolatePath(previous, next);\r\n });\r\n }\r\n else {\r\n transition.attr('d', d => linkGen(d.points, radiusScale) || emptyPath());\r\n }\r\n}\r\nfunction removeLink(selection, duration) {\r\n smartTransition(selection, duration)\r\n .style('opacity', 0)\r\n .remove();\r\n}\n\nexport { createLink, emptyPath, removeLink, updateLink };\n//# sourceMappingURL=link.js.map\n","import { max } from 'd3-array';\nimport { partition } from 'd3-hierarchy';\nimport { scalePow } from 'd3-scale';\nimport { arc } from 'd3-shape';\nimport { ComponentCore } from '../../core/component/index.js';\nimport { GraphDataModel } from '../../data-models/graph.js';\nimport { getValue, getString, getNumber, isNumber } from '../../utils/data.js';\nimport { estimateStringPixelLength } from '../../utils/text.js';\nimport { getCSSVariableValueInPixels } from '../../utils/misc.js';\nimport { ChordLabelAlignment } from './types.js';\nimport { ChordDiagramDefaultConfig } from './config.js';\nimport { createNode, updateNode, removeNode } from './modules/node.js';\nimport { LABEL_PADDING, createLabel, updateLabel, removeLabel } from './modules/label.js';\nimport { getHierarchyNodes, positionChildren, getRibbons } from './modules/layout.js';\nimport { createLink, updateLink, removeLink } from './modules/link.js';\nimport * as style from './style.js';\nimport { background, links, nodes, labels, transparent, link, highlightedLink, node, highlightedNode, label, labelExit } from './style.js';\n\nclass ChordDiagram extends ComponentCore {\r\n constructor(config) {\r\n super();\r\n this._defaultConfig = ChordDiagramDefaultConfig;\r\n this.config = this._defaultConfig;\r\n this.datamodel = new GraphDataModel();\r\n this.arcGen = arc();\r\n this.radiusScale = scalePow();\r\n this.events = {\r\n [ChordDiagram.selectors.node]: {\r\n mouseover: this._onNodeMouseOver.bind(this),\r\n mouseout: this._onNodeMouseOut.bind(this),\r\n },\r\n [ChordDiagram.selectors.link]: {\r\n mouseover: this._onLinkMouseOver.bind(this),\r\n mouseout: this._onLinkMouseOut.bind(this),\r\n },\r\n [ChordDiagram.selectors.label]: {\r\n mouseover: this._onNodeMouseOver.bind(this),\r\n mouseout: this._onNodeMouseOut.bind(this),\r\n },\r\n };\r\n this._nodes = [];\r\n this._links = [];\r\n if (config)\r\n this.setConfig(config);\r\n this.background = this.g.append('rect').attr('class', background);\r\n this.linkGroup = this.g.append('g').attr('class', links);\r\n this.nodeGroup = this.g.append('g').attr('class', nodes);\r\n this.labelGroup = this.g.append('g').attr('class', labels);\r\n }\r\n get _forceHighlight() {\r\n var _a;\r\n return this.config.highlightedNodeId !== undefined || ((_a = this.config.highlightedLinkIds) === null || _a === void 0 ? void 0 : _a.length) > 0;\r\n }\r\n get bleed() {\r\n const { config } = this;\r\n const padding = LABEL_PADDING * 2;\r\n let top = 0;\r\n let bottom = 0;\r\n let right = 0;\r\n let left = 0;\r\n this._nodes.forEach(n => {\r\n var _a;\r\n const nodeLabelAlignment = getValue(n.data, config.nodeLabelAlignment);\r\n if (n.height === 0 && nodeLabelAlignment === ChordLabelAlignment.Perpendicular) {\r\n const label = (_a = getString(n.data, config.nodeLabel)) !== null && _a !== void 0 ? _a : '';\r\n const fontSize = getCSSVariableValueInPixels('var(--vis-chord-diagram-label-text-font-size)', this.element);\r\n const labelWidth = estimateStringPixelLength(label, fontSize);\r\n const [x, y] = this.arcGen.centroid(n);\r\n if (x < 0)\r\n left = Math.max(left, labelWidth);\r\n else\r\n right = Math.max(right, labelWidth);\r\n if (y < 0)\r\n top = Math.max(top, labelWidth);\r\n else\r\n bottom = Math.max(bottom, labelWidth);\r\n }\r\n });\r\n left += padding;\r\n right += padding;\r\n bottom += padding;\r\n top += padding;\r\n return { top, bottom, left, right };\r\n }\r\n setSize(width, height, containerWidth, containerHeight) {\r\n super.setSize(width, height, containerWidth, containerHeight);\r\n // Setting radius for initial bleed calculation. This ensures the correct radius is set when render is called\r\n this.radiusScale\r\n .exponent(this.config.radiusScaleExponent)\r\n .range([0, Math.min(width, height) / 2]);\r\n }\r\n setData(data) {\r\n super.setData(data);\r\n this._layoutData();\r\n }\r\n _layoutData() {\r\n const { nodes } = this.datamodel;\r\n let { links } = this.datamodel;\r\n const { padAngle, linkValue, nodeLevels } = this.config;\r\n nodes.forEach(n => { delete n._state.value; });\r\n links.forEach(l => {\r\n delete l._state.points;\r\n l._state.value = getNumber(l, linkValue);\r\n l.source._state.value = (l.source._state.value || 0) + getNumber(l, linkValue);\r\n l.target._state.value = (l.target._state.value || 0) + getNumber(l, linkValue);\r\n });\r\n links = links.filter(d => d._state.value);\r\n const root = getHierarchyNodes(nodes, d => { var _a; return (_a = d._state) === null || _a === void 0 ? void 0 : _a.value; }, nodeLevels);\r\n const partitionData = partition().size([this.config.angleRange[1], 1])(root);\r\n partitionData.each((n, i) => {\r\n positionChildren(n, padAngle);\r\n n.uid = `${this.uid.substr(0, 4)}-${i}`;\r\n n.x0 = Number.isNaN(n.x0) ? 0 : n.x0;\r\n n.x1 = Number.isNaN(n.x1) ? 0 : n.x1;\r\n n._state = {};\r\n });\r\n const partitionDataWithRoot = partitionData.descendants();\r\n this._rootNode = partitionDataWithRoot.find(d => d.depth === 0);\r\n this._nodes = partitionDataWithRoot.filter(d => d.depth !== 0); // Filter out the root node\r\n this._links = getRibbons(partitionData, links, padAngle);\r\n }\r\n _render(customDuration) {\r\n var _a;\r\n super._render(customDuration);\r\n const { config, bleed } = this;\r\n this._layoutData();\r\n const duration = isNumber(customDuration) ? customDuration : config.duration;\r\n const size = Math.min(this._width, this._height);\r\n const radius = size / 2 - max([bleed.top, bleed.bottom, bleed.left, bleed.right]);\r\n const numLevels = 1 + ((_a = config.nodeLevels) === null || _a === void 0 ? void 0 : _a.length);\r\n const maxSpace = config.nodeWidth * numLevels;\r\n const nodeWidth = radius > maxSpace ? config.nodeWidth : Math.max(radius / numLevels, 0);\r\n this.radiusScale.range([0, Math.max(radius, 0)]);\r\n this.arcGen\r\n .startAngle(d => d.x0 + config.padAngle / 2 - (d.value ? 0 : Math.PI / 360))\r\n .endAngle(d => d.x1 - config.padAngle / 2 + (d.value ? 0 : Math.PI / 360))\r\n .cornerRadius(d => getNumber(d.data, config.cornerRadius))\r\n .innerRadius(d => Math.max(this.radiusScale(d.y1) - nodeWidth, 0))\r\n .outerRadius(d => this.radiusScale(d.y1));\r\n this.g.classed(transparent, this._forceHighlight);\r\n this.background\r\n .attr('width', this._width)\r\n .attr('height', this._height)\r\n .style('opacity', 0);\r\n // Center the view\r\n this.nodeGroup.attr('transform', `translate(${this._width / 2},${this._height / 2})`);\r\n this.labelGroup.attr('transform', `translate(${this._width / 2},${this._height / 2})`);\r\n this.linkGroup.attr('transform', `translate(${this._width / 2},${this._height / 2})`);\r\n // Links\r\n const linksSelection = this.linkGroup\r\n .selectAll(`.${link}`)\r\n .data(this._links, d => String(d.data._id));\r\n const linksEnter = linksSelection.enter().append('path')\r\n .attr('class', link)\r\n .call(createLink, this.radiusScale);\r\n const linksMerged = linksSelection\r\n .merge(linksEnter)\r\n .classed(highlightedLink, l => {\r\n var _a, _b;\r\n const linkId = (_a = l.data.id) !== null && _a !== void 0 ? _a : l.data._indexGlobal;\r\n return (_b = config.highlightedLinkIds) === null || _b === void 0 ? void 0 : _b.includes(linkId);\r\n });\r\n linksMerged.call(updateLink, config, this.radiusScale, duration);\r\n linksSelection.exit()\r\n .call(removeLink, duration);\r\n // Nodes\r\n const nodesSelection = this.nodeGroup\r\n .selectAll(`.${node}`)\r\n .data(this._nodes, d => String(d.uid));\r\n const nodesEnter = nodesSelection.enter().append('path')\r\n .attr('class', node)\r\n .call(createNode, config);\r\n const nodesMerged = nodesSelection\r\n .merge(nodesEnter)\r\n .classed(highlightedNode, d => config.highlightedNodeId === d.data._id);\r\n nodesMerged.call(updateNode, config, this.arcGen, duration, this.bleed);\r\n nodesSelection.exit()\r\n .call(removeNode, duration);\r\n // Labels\r\n const labelWidth = size - radius;\r\n const labels = this.labelGroup\r\n .selectAll(`.${label}`)\r\n .data(this._nodes, d => String(d.uid));\r\n const labelEnter = labels.enter().append('g')\r\n .attr('class', label)\r\n .call(createLabel, config, this.radiusScale);\r\n const labelsMerged = labels.merge(labelEnter);\r\n labelsMerged.call(updateLabel, config, labelWidth, this.radiusScale, duration);\r\n labels.exit()\r\n .attr('class', labelExit)\r\n .call(removeLabel, duration);\r\n }\r\n _onNodeMouseOver(d) {\r\n let ribbons;\r\n if (d.children) {\r\n const leaves = d.leaves();\r\n ribbons = this._links.filter(l => leaves.find(leaf => l.source.data.id === leaf.data.id || l.target.data.id === leaf.data.id));\r\n }\r\n else {\r\n const leaf = d;\r\n ribbons = this._links.filter(l => l.source.data.id === leaf.data.id || l.target.data.id === leaf.data.id);\r\n }\r\n // Nodes without links should still be highlighted\r\n if (!ribbons.length)\r\n d._state.hovered = true;\r\n this._highlightOnHover(ribbons);\r\n }\r\n _onNodeMouseOut() {\r\n this._highlightOnHover();\r\n }\r\n _onLinkMouseOver(d) {\r\n this._highlightOnHover([d]);\r\n }\r\n _onLinkMouseOut() {\r\n this._highlightOnHover();\r\n }\r\n _highlightOnHover(links) {\r\n if (this._forceHighlight)\r\n return;\r\n if (links) {\r\n links.forEach(l => {\r\n l._state.hovered = true;\r\n const sourcePath = l.source.path(this._rootNode);\r\n const targetPath = l.target.path(this._rootNode);\r\n sourcePath.forEach(n => { if (n.depth)\r\n n._state.hovered = true; });\r\n targetPath.forEach(n => { if (n.depth)\r\n n._state.hovered = true; });\r\n });\r\n }\r\n else {\r\n this._nodes.forEach(n => { delete n._state.hovered; });\r\n this._links.forEach(l => { delete l._state.hovered; });\r\n }\r\n this.nodeGroup.selectAll(`.${node}`)\r\n .classed(highlightedNode, d => d._state.hovered);\r\n this.linkGroup.selectAll(`.${link}`)\r\n .classed(highlightedLink, d => d._state.hovered);\r\n this.g.classed(transparent, !!links);\r\n }\r\n}\r\nChordDiagram.selectors = style;\n\nexport { ChordDiagram };\n//# sourceMappingURL=index.js.map\n","// ── External Dependencies & Registrations\nimport { ChordDiagram, type ChordInputLink, type ChordInputNode, type GraphData, SingleContainer } from '@unovis/ts';\n\n// ── Local\nimport { categoricalColor, type ColorModeId, INK } from '@/palette';\n\n// ── Types ────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport interface ChordDiagramNode extends ChordInputNode {\n id: string;\n label: string;\n}\n\nexport interface ChordDiagramLink extends ChordInputLink {\n source: string;\n target: string;\n value: number;\n}\n\nexport interface ChordDiagramData {\n links: ChordDiagramLink[];\n nodes: ChordDiagramNode[];\n}\n\nexport interface ChordDiagramOptions {\n colorModeId?: ColorModeId;\n nodeWidth?: number;\n padAngle?: number;\n}\n\nexport interface ChordDiagramRenderHandle {\n resize: () => void;\n svg: SVGSVGElement;\n}\n\n// ── Constants ────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nconst DEFAULT_NODE_WIDTH = 16;\nconst DEFAULT_PAD_ANGLE = 0.02;\n\n// ── Actions ──────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport function renderChordDiagram(data: ChordDiagramData, renderTo: HTMLElement, options: ChordDiagramOptions = {}): ChordDiagramRenderHandle {\n const colorModeId = options.colorModeId ?? 'light';\n const ink = INK[colorModeId];\n\n const chordDiagram = new ChordDiagram<ChordDiagramNode, ChordDiagramLink>({\n linkColor: (link) => categoricalColor(data.nodes.findIndex((node) => node.id === link.source), colorModeId),\n nodeColor: (_node, index) => categoricalColor(index, colorModeId),\n nodeLabel: (node) => ('label' in node ? node.label : node.key),\n nodeLabelColor: ink.primary,\n nodeWidth: options.nodeWidth ?? DEFAULT_NODE_WIDTH,\n padAngle: options.padAngle ?? DEFAULT_PAD_ANGLE\n });\n\n const graphData: GraphData<ChordDiagramNode, ChordDiagramLink> = { links: data.links, nodes: data.nodes };\n const container = new SingleContainer<GraphData<ChordDiagramNode, ChordDiagramLink>>(renderTo, { component: chordDiagram }, graphData);\n\n return {\n resize: () => {\n container.render();\n },\n get svg() {\n return container.element;\n }\n };\n}\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],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chordDiagram-CTDXv74T.js","names":["abs","node","slice","abs","node","slice","removeLabel","unitless","asTemplateStringsArr","templateStringsArr","hashString","getRegisteredStyles","merge","getRegisteredStyles","merge","cache","throttle","clone","max","constant","halfPi","abs","tau","cos","sin","pi","constant","curveLinear","x","pointX","y","pointY","array","constant","curveLinear","pointX","pointY","array","line","identity","descending","constant","tau","array","curveLinear","area","roundNode","ResizeObserver","select","variables","interrupt","select","curveBasis","curveBasisClosed","curveBasisOpen","curveBundle","curveCardinal","curveCardinalClosed","curveCardinalOpen","curveCatmullRom","curveCatmullRomClosed","curveCatmullRomOpen","curveLinear","curveLinearClosed","curveMonotoneX","curveMonotoneY","curveNatural","curveStep","curveStepAfter","curveStepBefore","interpolate","select","pie","constant","ribbon","areaRadial","select","arc","scalePow","partition","style"],"sources":["../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Parser.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@emotion/css/create-instance/dist/emotion-css-create-instance.esm.js","../node_modules/@emotion/css/dist/emotion-css.esm.js","../node_modules/throttle-debounce/esm/index.js","../node_modules/@unovis/ts/utils/data.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/area.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/pie.js","../node_modules/d3-shape/src/curve/radial.js","../node_modules/d3-shape/src/lineRadial.js","../node_modules/d3-shape/src/areaRadial.js","../node_modules/d3-hierarchy/src/treemap/round.js","../node_modules/d3-hierarchy/src/treemap/dice.js","../node_modules/d3-hierarchy/src/partition.js","../node_modules/@unovis/ts/types/component.js","../node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js","../node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js","../node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js","../node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js","../node_modules/@juggle/resize-observer/lib/utils/freeze.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverSize.js","../node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js","../node_modules/@juggle/resize-observer/lib/utils/element.js","../node_modules/@juggle/resize-observer/lib/utils/global.js","../node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js","../node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js","../node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js","../node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js","../node_modules/@juggle/resize-observer/lib/utils/process.js","../node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js","../node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js","../node_modules/@juggle/resize-observer/lib/utils/scheduler.js","../node_modules/@juggle/resize-observer/lib/ResizeObservation.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverController.js","../node_modules/@juggle/resize-observer/lib/ResizeObserver.js","../node_modules/@unovis/ts/utils/resize-observer.js","../node_modules/@unovis/ts/core/container/config.js","../node_modules/@unovis/ts/core/container/index.js","../node_modules/@unovis/ts/utils/to-px.js","../node_modules/@unovis/ts/utils/misc.js","../node_modules/@unovis/ts/utils/theme.js","../node_modules/@unovis/ts/styles/colors.js","../node_modules/@unovis/ts/styles/patterns.js","../node_modules/@unovis/ts/styles/index.js","../node_modules/@unovis/ts/utils/d3.js","../node_modules/@unovis/ts/containers/single-container/config.js","../node_modules/@unovis/ts/containers/single-container/index.js","../node_modules/@unovis/ts/data-models/core.js","../node_modules/@unovis/ts/core/component/config.js","../node_modules/@unovis/ts/core/component/index.js","../node_modules/d3-interpolate-path/build/d3-interpolate-path.mjs","../node_modules/@unovis/ts/utils/color.js","../node_modules/@unovis/ts/types/curve.js","../node_modules/@unovis/ts/utils/path.js","../node_modules/@unovis/ts/types/text.js","../node_modules/striptags/src/striptags.js","../node_modules/@unovis/ts/utils/text.js","../node_modules/@unovis/ts/components/chord-diagram/types.js","../node_modules/@unovis/ts/data-models/graph.js","../node_modules/@unovis/ts/components/chord-diagram/config.js","../node_modules/@unovis/ts/components/chord-diagram/modules/node.js","../node_modules/@unovis/ts/components/chord-diagram/style.js","../node_modules/@unovis/ts/components/chord-diagram/modules/label.js","../node_modules/@unovis/ts/components/chord-diagram/modules/layout.js","../node_modules/d3-chord/src/math.js","../node_modules/d3-chord/src/array.js","../node_modules/d3-chord/src/constant.js","../node_modules/d3-chord/src/ribbon.js","../node_modules/@unovis/ts/components/chord-diagram/modules/link.js","../node_modules/@unovis/ts/components/chord-diagram/index.js","../src/chordDiagram.ts"],"sourcesContent":["var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n return document.styleSheets[i];\n }\n } // this function should always return with a value\n // TS can't understand it though so we make it stop complaining here\n\n\n return undefined;\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n this.tags.forEach(function (tag) {\n var _tag$parentNode;\n\n return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value;\n var parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport { createCache as default };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n var componentSelector = interpolation;\n\n if (componentSelector.__emotion_styles !== undefined) {\n\n return componentSelector;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n var keyframes = interpolation;\n\n if (keyframes.anim === 1) {\n cursor = {\n name: keyframes.name,\n styles: keyframes.styles,\n next: cursor\n };\n return keyframes.name;\n }\n\n var serializedStyles = interpolation;\n\n if (serializedStyles.styles !== undefined) {\n var next = serializedStyles.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = serializedStyles.styles + \";\";\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n }\n\n break;\n }\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString = interpolation;\n\n if (registered == null) {\n return asString;\n }\n\n var cached = registered[asString];\n return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var key in obj) {\n var value = obj[key];\n\n if (typeof value !== 'object') {\n var asString = value;\n\n if (registered != null && registered[asString] !== undefined) {\n string += key + \"{\" + registered[asString] + \"}\";\n } else if (isProcessableValue(asString)) {\n string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n\n string += key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n var asTemplateStringsArr = strings;\n\n styles += asTemplateStringsArr[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n var templateStringsArr = strings;\n\n styles += templateStringsArr[i];\n }\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n}\n\nexport { serializeStyles };\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else if (className) {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","import createCache from '@emotion/cache';\nimport { serializeStyles } from '@emotion/serialize';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\n\nfunction insertWithoutScoping(cache, serialized) {\n if (cache.inserted[serialized.name] === undefined) {\n return cache.insert('', serialized, cache.sheet, true);\n }\n}\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar createEmotion = function createEmotion(options) {\n var cache = createCache(options);\n\n cache.sheet.speedy = function (value) {\n\n this.isSpeedy = value;\n };\n\n cache.compat = true;\n\n var css = function css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered, undefined);\n insertStyles(cache, serialized, false);\n return cache.key + \"-\" + serialized.name;\n };\n\n var keyframes = function keyframes() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n var animation = \"animation-\" + serialized.name;\n insertWithoutScoping(cache, {\n name: serialized.name,\n styles: \"@keyframes \" + animation + \"{\" + serialized.styles + \"}\"\n });\n return animation;\n };\n\n var injectGlobal = function injectGlobal() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n insertWithoutScoping(cache, serialized);\n };\n\n var cx = function cx() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n return {\n css: css,\n cx: cx,\n injectGlobal: injectGlobal,\n keyframes: keyframes,\n hydrate: function hydrate(ids) {\n ids.forEach(function (key) {\n cache.inserted[key] = true;\n });\n },\n flush: function flush() {\n cache.registered = {};\n cache.inserted = {};\n cache.sheet.flush();\n },\n sheet: cache.sheet,\n cache: cache,\n getRegisteredStyles: getRegisteredStyles.bind(null, cache.registered),\n merge: merge.bind(null, cache.registered, css)\n };\n};\n\nvar classnames = function classnames(args) {\n var cls = '';\n\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nexport { createEmotion as default };\n","import createEmotion from '../create-instance/dist/emotion-css-create-instance.esm.js';\nimport '@emotion/cache';\nimport '@emotion/serialize';\nimport '@emotion/utils';\n\nvar _createEmotion = createEmotion({\n key: 'css'\n}),\n flush = _createEmotion.flush,\n hydrate = _createEmotion.hydrate,\n cx = _createEmotion.cx,\n merge = _createEmotion.merge,\n getRegisteredStyles = _createEmotion.getRegisteredStyles,\n injectGlobal = _createEmotion.injectGlobal,\n keyframes = _createEmotion.keyframes,\n css = _createEmotion.css,\n sheet = _createEmotion.sheet,\n cache = _createEmotion.cache;\n\nexport { cache, css, cx, flush, getRegisteredStyles, hydrate, injectGlobal, keyframes, merge, sheet };\n","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher)\n * are most useful.\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through,\n * as-is, to `callback` when the throttled-function is executed.\n * @param {object} [options] - An object to configure options.\n * @param {boolean} [options.noTrailing] - Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds\n * while the throttled-function is being called. If noTrailing is false or unspecified, callback will be executed\n * one final time after the last throttled-function call. (After the throttled-function has not been called for\n * `delay` milliseconds, the internal counter is reset).\n * @param {boolean} [options.noLeading] - Optional, defaults to false. If noLeading is false, the first throttled-function call will execute callback\n * immediately. If noLeading is true, the first the callback execution will be skipped. It should be noted that\n * callback will never executed if both noLeading = true and noTrailing = true.\n * @param {boolean} [options.debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is\n * false (at end), schedule `callback` to execute after `delay` ms.\n *\n * @returns {Function} A new, throttled, function.\n */\nfunction throttle (delay, callback, options) {\n var _ref = options || {},\n _ref$noTrailing = _ref.noTrailing,\n noTrailing = _ref$noTrailing === void 0 ? false : _ref$noTrailing,\n _ref$noLeading = _ref.noLeading,\n noLeading = _ref$noLeading === void 0 ? false : _ref$noLeading,\n _ref$debounceMode = _ref.debounceMode,\n debounceMode = _ref$debounceMode === void 0 ? undefined : _ref$debounceMode;\n /*\n * After wrapper has stopped being called, this timeout ensures that\n * `callback` is executed at the proper times in `throttle` and `end`\n * debounce modes.\n */\n var timeoutID;\n var cancelled = false;\n\n // Keep track of the last time `callback` was executed.\n var lastExec = 0;\n\n // Function to clear existing timeout\n function clearExistingTimeout() {\n if (timeoutID) {\n clearTimeout(timeoutID);\n }\n }\n\n // Function to cancel next exec\n function cancel(options) {\n var _ref2 = options || {},\n _ref2$upcomingOnly = _ref2.upcomingOnly,\n upcomingOnly = _ref2$upcomingOnly === void 0 ? false : _ref2$upcomingOnly;\n clearExistingTimeout();\n cancelled = !upcomingOnly;\n }\n\n /*\n * The `wrapper` function encapsulates all of the throttling / debouncing\n * functionality and when executed will limit the rate at which `callback`\n * is executed.\n */\n function wrapper() {\n for (var _len = arguments.length, arguments_ = new Array(_len), _key = 0; _key < _len; _key++) {\n arguments_[_key] = arguments[_key];\n }\n var self = this;\n var elapsed = Date.now() - lastExec;\n if (cancelled) {\n return;\n }\n\n // Execute `callback` and update the `lastExec` timestamp.\n function exec() {\n lastExec = Date.now();\n callback.apply(self, arguments_);\n }\n\n /*\n * If `debounceMode` is true (at begin) this is used to clear the flag\n * to allow future `callback` executions.\n */\n function clear() {\n timeoutID = undefined;\n }\n if (!noLeading && debounceMode && !timeoutID) {\n /*\n * Since `wrapper` is being called for the first time and\n * `debounceMode` is true (at begin), execute `callback`\n * and noLeading != true.\n */\n exec();\n }\n clearExistingTimeout();\n if (debounceMode === undefined && elapsed > delay) {\n if (noLeading) {\n /*\n * In throttle mode with noLeading, if `delay` time has\n * been exceeded, update `lastExec` and schedule `callback`\n * to execute after `delay` ms.\n */\n lastExec = Date.now();\n if (!noTrailing) {\n timeoutID = setTimeout(debounceMode ? clear : exec, delay);\n }\n } else {\n /*\n * In throttle mode without noLeading, if `delay` time has been exceeded, execute\n * `callback`.\n */\n exec();\n }\n } else if (noTrailing !== true) {\n /*\n * In trailing throttle mode, since `delay` time has not been\n * exceeded, schedule `callback` to execute `delay` ms after most\n * recent execution.\n *\n * If `debounceMode` is true (at begin), schedule `clear` to execute\n * after `delay` ms.\n *\n * If `debounceMode` is false (at end), schedule `callback` to\n * execute after `delay` ms.\n */\n timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n }\n }\n wrapper.cancel = cancel;\n\n // Return the wrapper function.\n return wrapper;\n}\n\n/* eslint-disable no-undefined */\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n * @param {object} [options] - An object to configure options.\n * @param {boolean} [options.atBegin] - Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n *\n * @returns {Function} A new, debounced function.\n */\nfunction debounce (delay, callback, options) {\n var _ref = options || {},\n _ref$atBegin = _ref.atBegin,\n atBegin = _ref$atBegin === void 0 ? false : _ref$atBegin;\n return throttle(delay, callback, {\n debounceMode: atBegin !== false\n });\n}\n\nexport { debounce, throttle };\n//# sourceMappingURL=index.js.map\n","import { mean, min, max, bisectLeft, bisectRight } from 'd3-array';\nimport { throttle as throttle$1 } from 'throttle-debounce';\nimport { FindNearestDirection } from '../types/data.js';\n\nconst isNumber = (a) => typeof a === 'number';\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nconst isFunction = (a) => typeof a === 'function';\r\nconst isUndefined = (a) => a === undefined;\r\nconst isNil = (a) => a == null;\r\nconst isString = (a) => typeof a === 'string';\r\nconst isArray = (a) => Array.isArray(a);\r\nconst isObject = (a) => (a instanceof Object);\r\nconst isAClassInstance = (a) => a.constructor.name !== 'Function' && a.constructor.name !== 'Object';\r\nconst isPlainObject = (a) => isObject(a) && !isArray(a) && !isFunction(a) && !isAClassInstance(a);\r\nconst isEmpty = (obj) => {\r\n return [Object, Array].includes((obj || {}).constructor) &&\r\n !Object.entries((obj || {})).length;\r\n};\r\n// Based on https://github.com/maplibre/maplibre-gl-js/blob/e78ad7944ef768e67416daa4af86b0464bd0f617/src/style-spec/util/deep_equal.ts, 3-Clause BSD license\r\nconst isEqual = (a, b, skipKeys = [], visited = new Set()) => {\r\n if (Array.isArray(a)) {\r\n if (!Array.isArray(b) || a.length !== b.length)\r\n return false;\r\n if (visited.has(a))\r\n return true;\r\n else\r\n visited.add(a);\r\n for (let i = 0; i < a.length; i++) {\r\n if (!isEqual(a[i], b[i], skipKeys, visited))\r\n return false;\r\n }\r\n return true;\r\n }\r\n if (a instanceof Date && b instanceof Date) {\r\n return a.getTime() === b.getTime();\r\n }\r\n if (typeof a === 'object' && a !== null && b !== null) {\r\n if (!(typeof b === 'object'))\r\n return false;\r\n if (a === b)\r\n return true;\r\n const keysA = Object.keys(a).filter(key => !skipKeys.includes(key));\r\n const keysB = Object.keys(b).filter(key => !skipKeys.includes(key));\r\n if (keysA.length !== keysB.length)\r\n return false;\r\n if (visited.has(a))\r\n return true;\r\n else\r\n visited.add(a);\r\n for (const key of keysA) {\r\n if (!isEqual(a[key], b[key], skipKeys, visited))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return a === b;\r\n};\r\nconst without = (arr, ...args) => arr.filter(item => !args.includes(item));\r\nconst flatten = (arr) => arr.flat();\r\nconst cloneDeep = (obj, stack = new Map()) => {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return obj;\r\n }\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime());\r\n }\r\n if (obj instanceof Array) {\r\n const clone = [];\r\n stack.set(obj, clone);\r\n for (const item of obj) {\r\n clone.push(stack.has(item) ? stack.get(item) : cloneDeep(item, stack));\r\n }\r\n return clone;\r\n }\r\n // Class instances will be copied without cloning\r\n if (isAClassInstance(obj)) {\r\n const clone = obj;\r\n return clone;\r\n }\r\n if (obj instanceof Object) {\r\n const clone = {};\r\n stack.set(obj, clone);\r\n const objAsRecord = obj;\r\n Object.keys(obj)\r\n .reduce((newObj, key) => {\r\n newObj[key] = stack.has(objAsRecord[key]) ? stack.get(objAsRecord[key]) : cloneDeep(objAsRecord[key], stack);\r\n return newObj;\r\n }, clone);\r\n return clone;\r\n }\r\n return obj;\r\n};\r\nconst merge = (obj1, obj2, visited = new Map()) => {\r\n if (!obj1 || !obj2)\r\n return obj1;\r\n if (obj1 === obj2)\r\n return obj1;\r\n const newObj = (isAClassInstance(obj1) ? obj1 : cloneDeep(obj1));\r\n // Taking care of recursive structures\r\n if (visited.has(obj2))\r\n return visited.get(obj2);\r\n else\r\n visited.set(obj2, newObj);\r\n Object.keys(obj2).forEach(key => {\r\n // Preventing prototype pollution\r\n if (key === '__proto__' || key === 'constructor')\r\n return;\r\n if (isPlainObject(obj1[key]) && isPlainObject(obj2[key])) {\r\n newObj[key] = merge(obj1[key], obj2[key], visited);\r\n }\r\n else if (isAClassInstance(obj2)) {\r\n newObj[key] = obj2;\r\n }\r\n else {\r\n newObj[key] = cloneDeep(obj2[key]);\r\n }\r\n });\r\n return newObj;\r\n};\r\nconst omit = (obj, props) => {\r\n obj = Object.assign({}, obj);\r\n props.forEach(prop => delete obj[prop]);\r\n return obj;\r\n};\r\nconst groupBy = (arr, accessor) => {\r\n return arr.reduce((grouped, v, i, a, k = accessor(v, i)) => (((grouped[k] || (grouped[k] = [])).push(v), grouped)), {});\r\n};\r\nconst sortBy = (arr, accessor) => {\r\n return arr.concat() // The native sort method modifies the array in place. We use `.concat()` to copy the array first\r\n .sort((a, b) => {\r\n return (accessor(a) > accessor(b)) ? 1 : ((accessor(b) > accessor(a)) ? -1 : 0);\r\n });\r\n};\r\nconst throttle = (f, delay, options) => throttle$1(delay, f, options);\r\nfunction getValue(d, accessor, index) {\r\n // eslint-disable-next-line @typescript-eslint/ban-types\r\n if (isFunction(accessor))\r\n return accessor(d, index);\r\n else\r\n return accessor;\r\n}\r\nfunction getString(d, accessor, i) {\r\n return getValue(d, accessor, i);\r\n}\r\nfunction getNumber(d, accessor, i) {\r\n return getValue(d, accessor, i);\r\n}\r\nfunction getBoolean(d, accessor, i) {\r\n return getValue(d, accessor, i);\r\n}\r\nfunction clean(data) {\r\n return data.filter(d => d && !isNumber(d));\r\n}\r\nfunction clamp(d, min, max) {\r\n return Math.min(Math.max(d, min), max);\r\n}\r\nfunction unique(array) {\r\n return Array.from(new Set(array));\r\n}\r\nfunction countUnique(array, accessor = (d) => d) {\r\n return new Set(array.map(d => accessor(d))).size;\r\n}\r\nfunction arrayOfIndices(n) {\r\n return [...Array(n).keys()];\r\n}\r\nfunction shallowDiff(o1 = {}, o2 = {}) {\r\n return Object.keys(o2).reduce((diff, key) => {\r\n if (o1[key] === o2[key])\r\n return diff;\r\n return Object.assign(Object.assign({}, diff), { [key]: o2[key] });\r\n }, {});\r\n}\r\nfunction getStackedExtent(data, ...acs) {\r\n if (!data)\r\n return [undefined, undefined];\r\n if (isArray(acs)) {\r\n let minValue = 0;\r\n let maxValue = 0;\r\n data.forEach((d, i) => {\r\n let positiveStack = 0;\r\n let negativeStack = 0;\r\n for (const a of acs) {\r\n const value = getNumber(d, a, i) || 0;\r\n if (value >= 0)\r\n positiveStack += value;\r\n else\r\n negativeStack += value;\r\n }\r\n if (positiveStack > maxValue)\r\n maxValue = positiveStack;\r\n if (negativeStack < minValue)\r\n minValue = negativeStack;\r\n });\r\n return [minValue, maxValue];\r\n }\r\n}\r\nfunction getStackedValues(d, index, ...acs) {\r\n const values = [];\r\n let positiveStack = 0;\r\n let negativeStack = 0;\r\n for (const a of acs) {\r\n const value = getNumber(d, a, index) || 0;\r\n if (value >= 0) {\r\n values.push(positiveStack += value);\r\n }\r\n else {\r\n values.push(negativeStack += value);\r\n }\r\n }\r\n return values;\r\n}\r\nfunction getStackedData(data, baseline, acs, prevNegative // to help guessing the stack direction (positive/negative) when the values are 0 or null\r\n) {\r\n const baselineValues = data.map((d, i) => getNumber(d, baseline, i) || 0);\r\n const isNegativeStack = acs.map((a, j) => {\r\n const average = mean(data, (d, i) => getNumber(d, a, i) || 0);\r\n return (average === 0 && Array.isArray(prevNegative)) ? prevNegative[j] : average < 0;\r\n });\r\n const stackedData = acs.map(() => []);\r\n data.forEach((d, i) => {\r\n let positiveStack = baselineValues[i];\r\n let negativeStack = baselineValues[i];\r\n acs.forEach((a, j) => {\r\n const value = getNumber(d, a, i) || 0;\r\n if (value >= 0) {\r\n stackedData[j].push([positiveStack, positiveStack += value]);\r\n }\r\n else {\r\n stackedData[j].push([negativeStack, negativeStack += value]);\r\n }\r\n });\r\n });\r\n // Fill in additional stack information\r\n stackedData.forEach((stack, i) => {\r\n stack.isMostlyNegative = isNegativeStack[i];\r\n });\r\n return stackedData;\r\n}\r\nfunction getMin(data, ...acs) {\r\n if (!data)\r\n return undefined;\r\n const minValue = min(data, (d, i) => min(acs, a => getNumber(d, a, i)));\r\n return minValue;\r\n}\r\nfunction getMax(data, ...acs) {\r\n if (!data)\r\n return undefined;\r\n const maxValue = max(data, (d, i) => max(acs, a => getNumber(d, a, i)));\r\n return maxValue;\r\n}\r\nfunction getExtent(data, ...acs) {\r\n return [getMin(data, ...acs), getMax(data, ...acs)];\r\n}\r\nfunction getNearest(data, value, accessor, direction = FindNearestDirection.Auto) {\r\n if (data.length <= 1)\r\n return data[0];\r\n const dataWithIndex = data.map((d, i) => ([d, i]));\r\n const dataWithIndexSorted = dataWithIndex\r\n .sort(([a, i], [b, j]) => getNumber(a, accessor, i) - getNumber(b, accessor, j));\r\n const values = dataWithIndexSorted.map(([d, i]) => getNumber(d, accessor, i));\r\n const index = direction === FindNearestDirection.Right\r\n ? bisectLeft(values, value, 0, data.length - 1)\r\n : bisectRight(values, value, 1, data.length);\r\n if (direction === FindNearestDirection.Right) {\r\n return dataWithIndexSorted[index][0];\r\n }\r\n else if (direction === FindNearestDirection.Left) {\r\n return dataWithIndexSorted[index - 1][0];\r\n }\r\n // By default (`FindNearestDirection.Auto`) return the nearest value\r\n return value - values[index - 1] > values[index] - value ? dataWithIndexSorted[index][0] : dataWithIndexSorted[index - 1][0];\r\n}\r\nfunction filterDataByRange(data, range, accessor, includeNeighbors = false) {\r\n if (!accessor)\r\n return [];\r\n const filteredData = data.filter((d, i) => {\r\n const value = getNumber(d, accessor, i);\r\n return (value >= range[0]) && (value <= range[1]);\r\n });\r\n if (includeNeighbors) {\r\n // If `filteredData` is empty and `includeNeighbors` is true, try to find nearest points\r\n if (filteredData.length === 0) {\r\n const nearestLeft = getNearest(data, range[0], accessor, FindNearestDirection.Left);\r\n const nearestRight = getNearest(data, range[1], accessor, FindNearestDirection.Right);\r\n return [nearestLeft, nearestRight].filter(Boolean);\r\n }\r\n // Find indices of first and last filtered points in original data\r\n const firstFilteredItem = filteredData[0];\r\n const lastFilteredItem = filteredData[filteredData.length - 1];\r\n const firstFilteredIndex = data.findIndex((d) => d === firstFilteredItem);\r\n const lastFilteredIndex = data.findIndex((d) => d === lastFilteredItem);\r\n // Include neighbors (if they exist)\r\n const startIndex = Math.max(0, firstFilteredIndex - 1);\r\n const endIndex = Math.min(data.length - 1, lastFilteredIndex + 1);\r\n // Return data from startIndex to endIndex (inclusive)\r\n return data.slice(startIndex, endIndex + 1);\r\n }\r\n return filteredData;\r\n}\r\nfunction isNumberWithinRange(value, range) {\r\n return (value >= range[0] && value <= range[1]) || (value >= range[1] && value <= range[0]);\r\n}\r\nconst ensureArray = (value) => {\r\n if (value === null || value === undefined) {\r\n return [];\r\n }\r\n if (Array.isArray(value)) {\r\n return value;\r\n }\r\n return [value];\r\n};\n\nexport { arrayOfIndices, clamp, clean, cloneDeep, countUnique, ensureArray, filterDataByRange, flatten, getBoolean, getExtent, getMax, getMin, getNearest, getNumber, getStackedData, getStackedExtent, getStackedValues, getString, getValue, groupBy, isAClassInstance, isArray, isEmpty, isEqual, isFunction, isNil, isNumber, isNumberWithinRange, isObject, isPlainObject, isString, isUndefined, merge, omit, shallowDiff, sortBy, throttle, unique, without };\n//# sourceMappingURL=data.js.map\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","import curveLinear from \"./linear.js\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport line from \"./line.js\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport area from \"./area.js\";\nimport {lineRadial} from \"./lineRadial.js\";\n\nexport default function() {\n var a = area().curve(curveRadialLinear),\n c = a.curve,\n x0 = a.lineX0,\n x1 = a.lineX1,\n y0 = a.lineY0,\n y1 = a.lineY1;\n\n a.angle = a.x, delete a.x;\n a.startAngle = a.x0, delete a.x0;\n a.endAngle = a.x1, delete a.x1;\n a.radius = a.y, delete a.y;\n a.innerRadius = a.y0, delete a.y0;\n a.outerRadius = a.y1, delete a.y1;\n a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n a.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return a;\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","var ComponentType;\r\n(function (ComponentType) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n ComponentType[ComponentType[\"SVG\"] = 0] = \"SVG\";\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n ComponentType[ComponentType[\"HTML\"] = 1] = \"HTML\";\r\n})(ComponentType || (ComponentType = {}));\r\nvar Sizing;\r\n(function (Sizing) {\r\n Sizing[\"Fit\"] = \"fit\";\r\n Sizing[\"Extend\"] = \"extend\";\r\n Sizing[\"FitWidth\"] = \"fit_width\";\r\n})(Sizing || (Sizing = {}));\n\nexport { ComponentType, Sizing };\n//# sourceMappingURL=component.js.map\n","var resizeObservers = [];\nexport { resizeObservers };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasActiveObservations = function () {\n return resizeObservers.some(function (ro) { return ro.activeTargets.length > 0; });\n};\nexport { hasActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasSkippedObservations = function () {\n return resizeObservers.some(function (ro) { return ro.skippedTargets.length > 0; });\n};\nexport { hasSkippedObservations };\n","var msg = 'ResizeObserver loop completed with undelivered notifications.';\nvar deliverResizeLoopError = function () {\n var event;\n if (typeof ErrorEvent === 'function') {\n event = new ErrorEvent('error', {\n message: msg\n });\n }\n else {\n event = document.createEvent('Event');\n event.initEvent('error', false, false);\n event.message = msg;\n }\n window.dispatchEvent(event);\n};\nexport { deliverResizeLoopError };\n","var ResizeObserverBoxOptions;\n(function (ResizeObserverBoxOptions) {\n ResizeObserverBoxOptions[\"BORDER_BOX\"] = \"border-box\";\n ResizeObserverBoxOptions[\"CONTENT_BOX\"] = \"content-box\";\n ResizeObserverBoxOptions[\"DEVICE_PIXEL_CONTENT_BOX\"] = \"device-pixel-content-box\";\n})(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));\nexport { ResizeObserverBoxOptions };\n","export var freeze = function (obj) { return Object.freeze(obj); };\n","import { freeze } from './utils/freeze';\nvar ResizeObserverSize = (function () {\n function ResizeObserverSize(inlineSize, blockSize) {\n this.inlineSize = inlineSize;\n this.blockSize = blockSize;\n freeze(this);\n }\n return ResizeObserverSize;\n}());\nexport { ResizeObserverSize };\n","import { freeze } from './utils/freeze';\nvar DOMRectReadOnly = (function () {\n function DOMRectReadOnly(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.top = this.y;\n this.left = this.x;\n this.bottom = this.top + this.height;\n this.right = this.left + this.width;\n return freeze(this);\n }\n DOMRectReadOnly.prototype.toJSON = function () {\n var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;\n return { x: x, y: y, top: top, right: right, bottom: bottom, left: left, width: width, height: height };\n };\n DOMRectReadOnly.fromRect = function (rectangle) {\n return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n };\n return DOMRectReadOnly;\n}());\nexport { DOMRectReadOnly };\n","var isSVG = function (target) { return target instanceof SVGElement && 'getBBox' in target; };\nvar isHidden = function (target) {\n if (isSVG(target)) {\n var _a = target.getBBox(), width = _a.width, height = _a.height;\n return !width && !height;\n }\n var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;\n return !(offsetWidth || offsetHeight || target.getClientRects().length);\n};\nvar isElement = function (obj) {\n var _a;\n if (obj instanceof Element) {\n return true;\n }\n var scope = (_a = obj === null || obj === void 0 ? void 0 : obj.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;\n return !!(scope && obj instanceof scope.Element);\n};\nvar isReplacedElement = function (target) {\n switch (target.tagName) {\n case 'INPUT':\n if (target.type !== 'image') {\n break;\n }\n case 'VIDEO':\n case 'AUDIO':\n case 'EMBED':\n case 'OBJECT':\n case 'CANVAS':\n case 'IFRAME':\n case 'IMG':\n return true;\n }\n return false;\n};\nexport { isSVG, isHidden, isElement, isReplacedElement };\n","export var global = typeof window !== 'undefined' ? window : {};\n","import { ResizeObserverBoxOptions } from '../ResizeObserverBoxOptions';\nimport { ResizeObserverSize } from '../ResizeObserverSize';\nimport { DOMRectReadOnly } from '../DOMRectReadOnly';\nimport { isSVG, isHidden } from '../utils/element';\nimport { freeze } from '../utils/freeze';\nimport { global } from '../utils/global';\nvar cache = new WeakMap();\nvar scrollRegexp = /auto|scroll/;\nvar verticalRegexp = /^tb|vertical/;\nvar IE = (/msie|trident/i).test(global.navigator && global.navigator.userAgent);\nvar parseDimension = function (pixel) { return parseFloat(pixel || '0'); };\nvar size = function (inlineSize, blockSize, switchSizes) {\n if (inlineSize === void 0) { inlineSize = 0; }\n if (blockSize === void 0) { blockSize = 0; }\n if (switchSizes === void 0) { switchSizes = false; }\n return new ResizeObserverSize((switchSizes ? blockSize : inlineSize) || 0, (switchSizes ? inlineSize : blockSize) || 0);\n};\nvar zeroBoxes = freeze({\n devicePixelContentBoxSize: size(),\n borderBoxSize: size(),\n contentBoxSize: size(),\n contentRect: new DOMRectReadOnly(0, 0, 0, 0)\n});\nvar calculateBoxSizes = function (target, forceRecalculation) {\n if (forceRecalculation === void 0) { forceRecalculation = false; }\n if (cache.has(target) && !forceRecalculation) {\n return cache.get(target);\n }\n if (isHidden(target)) {\n cache.set(target, zeroBoxes);\n return zeroBoxes;\n }\n var cs = getComputedStyle(target);\n var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();\n var removePadding = !IE && cs.boxSizing === 'border-box';\n var switchSizes = verticalRegexp.test(cs.writingMode || '');\n var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || '');\n var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || '');\n var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);\n var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);\n var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);\n var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);\n var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);\n var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);\n var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);\n var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);\n var horizontalPadding = paddingLeft + paddingRight;\n var verticalPadding = paddingTop + paddingBottom;\n var horizontalBorderArea = borderLeft + borderRight;\n var verticalBorderArea = borderTop + borderBottom;\n var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;\n var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;\n var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;\n var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;\n var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;\n var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;\n var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;\n var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;\n var boxes = freeze({\n devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),\n borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),\n contentBoxSize: size(contentWidth, contentHeight, switchSizes),\n contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)\n });\n cache.set(target, boxes);\n return boxes;\n};\nvar calculateBoxSize = function (target, observedBox, forceRecalculation) {\n var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;\n switch (observedBox) {\n case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:\n return devicePixelContentBoxSize;\n case ResizeObserverBoxOptions.BORDER_BOX:\n return borderBoxSize;\n default:\n return contentBoxSize;\n }\n};\nexport { calculateBoxSize, calculateBoxSizes };\n","import { calculateBoxSizes } from './algorithms/calculateBoxSize';\nimport { freeze } from './utils/freeze';\nvar ResizeObserverEntry = (function () {\n function ResizeObserverEntry(target) {\n var boxes = calculateBoxSizes(target);\n this.target = target;\n this.contentRect = boxes.contentRect;\n this.borderBoxSize = freeze([boxes.borderBoxSize]);\n this.contentBoxSize = freeze([boxes.contentBoxSize]);\n this.devicePixelContentBoxSize = freeze([boxes.devicePixelContentBoxSize]);\n }\n return ResizeObserverEntry;\n}());\nexport { ResizeObserverEntry };\n","import { isHidden } from '../utils/element';\nvar calculateDepthForNode = function (node) {\n if (isHidden(node)) {\n return Infinity;\n }\n var depth = 0;\n var parent = node.parentNode;\n while (parent) {\n depth += 1;\n parent = parent.parentNode;\n }\n return depth;\n};\nexport { calculateDepthForNode };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { ResizeObserverEntry } from '../ResizeObserverEntry';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nimport { calculateBoxSize } from './calculateBoxSize';\nvar broadcastActiveObservations = function () {\n var shallowestDepth = Infinity;\n var callbacks = [];\n resizeObservers.forEach(function processObserver(ro) {\n if (ro.activeTargets.length === 0) {\n return;\n }\n var entries = [];\n ro.activeTargets.forEach(function processTarget(ot) {\n var entry = new ResizeObserverEntry(ot.target);\n var targetDepth = calculateDepthForNode(ot.target);\n entries.push(entry);\n ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);\n if (targetDepth < shallowestDepth) {\n shallowestDepth = targetDepth;\n }\n });\n callbacks.push(function resizeObserverCallback() {\n ro.callback.call(ro.observer, entries, ro.observer);\n });\n ro.activeTargets.splice(0, ro.activeTargets.length);\n });\n for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {\n var callback = callbacks_1[_i];\n callback();\n }\n return shallowestDepth;\n};\nexport { broadcastActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nvar gatherActiveObservationsAtDepth = function (depth) {\n resizeObservers.forEach(function processObserver(ro) {\n ro.activeTargets.splice(0, ro.activeTargets.length);\n ro.skippedTargets.splice(0, ro.skippedTargets.length);\n ro.observationTargets.forEach(function processTarget(ot) {\n if (ot.isActive()) {\n if (calculateDepthForNode(ot.target) > depth) {\n ro.activeTargets.push(ot);\n }\n else {\n ro.skippedTargets.push(ot);\n }\n }\n });\n });\n};\nexport { gatherActiveObservationsAtDepth };\n","import { hasActiveObservations } from '../algorithms/hasActiveObservations';\nimport { hasSkippedObservations } from '../algorithms/hasSkippedObservations';\nimport { deliverResizeLoopError } from '../algorithms/deliverResizeLoopError';\nimport { broadcastActiveObservations } from '../algorithms/broadcastActiveObservations';\nimport { gatherActiveObservationsAtDepth } from '../algorithms/gatherActiveObservationsAtDepth';\nvar process = function () {\n var depth = 0;\n gatherActiveObservationsAtDepth(depth);\n while (hasActiveObservations()) {\n depth = broadcastActiveObservations();\n gatherActiveObservationsAtDepth(depth);\n }\n if (hasSkippedObservations()) {\n deliverResizeLoopError();\n }\n return depth > 0;\n};\nexport { process };\n","var trigger;\nvar callbacks = [];\nvar notify = function () { return callbacks.splice(0).forEach(function (cb) { return cb(); }); };\nvar queueMicroTask = function (callback) {\n if (!trigger) {\n var toggle_1 = 0;\n var el_1 = document.createTextNode('');\n var config = { characterData: true };\n new MutationObserver(function () { return notify(); }).observe(el_1, config);\n trigger = function () { el_1.textContent = \"\".concat(toggle_1 ? toggle_1-- : toggle_1++); };\n }\n callbacks.push(callback);\n trigger();\n};\nexport { queueMicroTask };\n","import { queueMicroTask } from './queueMicroTask';\nvar queueResizeObserver = function (cb) {\n queueMicroTask(function ResizeObserver() {\n requestAnimationFrame(cb);\n });\n};\nexport { queueResizeObserver };\n","import { process } from './process';\nimport { global } from './global';\nimport { queueResizeObserver } from './queueResizeObserver';\nvar watching = 0;\nvar isWatching = function () { return !!watching; };\nvar CATCH_PERIOD = 250;\nvar observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };\nvar events = [\n 'resize',\n 'load',\n 'transitionend',\n 'animationend',\n 'animationstart',\n 'animationiteration',\n 'keyup',\n 'keydown',\n 'mouseup',\n 'mousedown',\n 'mouseover',\n 'mouseout',\n 'blur',\n 'focus'\n];\nvar time = function (timeout) {\n if (timeout === void 0) { timeout = 0; }\n return Date.now() + timeout;\n};\nvar scheduled = false;\nvar Scheduler = (function () {\n function Scheduler() {\n var _this = this;\n this.stopped = true;\n this.listener = function () { return _this.schedule(); };\n }\n Scheduler.prototype.run = function (timeout) {\n var _this = this;\n if (timeout === void 0) { timeout = CATCH_PERIOD; }\n if (scheduled) {\n return;\n }\n scheduled = true;\n var until = time(timeout);\n queueResizeObserver(function () {\n var elementsHaveResized = false;\n try {\n elementsHaveResized = process();\n }\n finally {\n scheduled = false;\n timeout = until - time();\n if (!isWatching()) {\n return;\n }\n if (elementsHaveResized) {\n _this.run(1000);\n }\n else if (timeout > 0) {\n _this.run(timeout);\n }\n else {\n _this.start();\n }\n }\n });\n };\n Scheduler.prototype.schedule = function () {\n this.stop();\n this.run();\n };\n Scheduler.prototype.observe = function () {\n var _this = this;\n var cb = function () { return _this.observer && _this.observer.observe(document.body, observerConfig); };\n document.body ? cb() : global.addEventListener('DOMContentLoaded', cb);\n };\n Scheduler.prototype.start = function () {\n var _this = this;\n if (this.stopped) {\n this.stopped = false;\n this.observer = new MutationObserver(this.listener);\n this.observe();\n events.forEach(function (name) { return global.addEventListener(name, _this.listener, true); });\n }\n };\n Scheduler.prototype.stop = function () {\n var _this = this;\n if (!this.stopped) {\n this.observer && this.observer.disconnect();\n events.forEach(function (name) { return global.removeEventListener(name, _this.listener, true); });\n this.stopped = true;\n }\n };\n return Scheduler;\n}());\nvar scheduler = new Scheduler();\nvar updateCount = function (n) {\n !watching && n > 0 && scheduler.start();\n watching += n;\n !watching && scheduler.stop();\n};\nexport { scheduler, updateCount };\n","import { ResizeObserverBoxOptions } from './ResizeObserverBoxOptions';\nimport { calculateBoxSize } from './algorithms/calculateBoxSize';\nimport { isSVG, isReplacedElement } from './utils/element';\nvar skipNotifyOnElement = function (target) {\n return !isSVG(target)\n && !isReplacedElement(target)\n && getComputedStyle(target).display === 'inline';\n};\nvar ResizeObservation = (function () {\n function ResizeObservation(target, observedBox) {\n this.target = target;\n this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;\n this.lastReportedSize = {\n inlineSize: 0,\n blockSize: 0\n };\n }\n ResizeObservation.prototype.isActive = function () {\n var size = calculateBoxSize(this.target, this.observedBox, true);\n if (skipNotifyOnElement(this.target)) {\n this.lastReportedSize = size;\n }\n if (this.lastReportedSize.inlineSize !== size.inlineSize\n || this.lastReportedSize.blockSize !== size.blockSize) {\n return true;\n }\n return false;\n };\n return ResizeObservation;\n}());\nexport { ResizeObservation };\n","var ResizeObserverDetail = (function () {\n function ResizeObserverDetail(resizeObserver, callback) {\n this.activeTargets = [];\n this.skippedTargets = [];\n this.observationTargets = [];\n this.observer = resizeObserver;\n this.callback = callback;\n }\n return ResizeObserverDetail;\n}());\nexport { ResizeObserverDetail };\n","import { scheduler, updateCount } from './utils/scheduler';\nimport { ResizeObservation } from './ResizeObservation';\nimport { ResizeObserverDetail } from './ResizeObserverDetail';\nimport { resizeObservers } from './utils/resizeObservers';\nvar observerMap = new WeakMap();\nvar getObservationIndex = function (observationTargets, target) {\n for (var i = 0; i < observationTargets.length; i += 1) {\n if (observationTargets[i].target === target) {\n return i;\n }\n }\n return -1;\n};\nvar ResizeObserverController = (function () {\n function ResizeObserverController() {\n }\n ResizeObserverController.connect = function (resizeObserver, callback) {\n var detail = new ResizeObserverDetail(resizeObserver, callback);\n observerMap.set(resizeObserver, detail);\n };\n ResizeObserverController.observe = function (resizeObserver, target, options) {\n var detail = observerMap.get(resizeObserver);\n var firstObservation = detail.observationTargets.length === 0;\n if (getObservationIndex(detail.observationTargets, target) < 0) {\n firstObservation && resizeObservers.push(detail);\n detail.observationTargets.push(new ResizeObservation(target, options && options.box));\n updateCount(1);\n scheduler.schedule();\n }\n };\n ResizeObserverController.unobserve = function (resizeObserver, target) {\n var detail = observerMap.get(resizeObserver);\n var index = getObservationIndex(detail.observationTargets, target);\n var lastObservation = detail.observationTargets.length === 1;\n if (index >= 0) {\n lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);\n detail.observationTargets.splice(index, 1);\n updateCount(-1);\n }\n };\n ResizeObserverController.disconnect = function (resizeObserver) {\n var _this = this;\n var detail = observerMap.get(resizeObserver);\n detail.observationTargets.slice().forEach(function (ot) { return _this.unobserve(resizeObserver, ot.target); });\n detail.activeTargets.splice(0, detail.activeTargets.length);\n };\n return ResizeObserverController;\n}());\nexport { ResizeObserverController };\n","import { ResizeObserverController } from './ResizeObserverController';\nimport { isElement } from './utils/element';\nvar ResizeObserver = (function () {\n function ResizeObserver(callback) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (typeof callback !== 'function') {\n throw new TypeError(\"Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.\");\n }\n ResizeObserverController.connect(this, callback);\n }\n ResizeObserver.prototype.observe = function (target, options) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (!isElement(target)) {\n throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n }\n ResizeObserverController.observe(this, target, options);\n };\n ResizeObserver.prototype.unobserve = function (target) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (!isElement(target)) {\n throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n }\n ResizeObserverController.unobserve(this, target);\n };\n ResizeObserver.prototype.disconnect = function () {\n ResizeObserverController.disconnect(this);\n };\n ResizeObserver.toString = function () {\n return 'function ResizeObserver () { [polyfill code] }';\n };\n return ResizeObserver;\n}());\nexport { ResizeObserver };\n","import { ResizeObserver as ResizeObserver$1 } from '@juggle/resize-observer';\n\nconst ResizeObserver = globalThis.ResizeObserver || ResizeObserver$1;\n\nexport { ResizeObserver };\n//# sourceMappingURL=resize-observer.js.map\n","import { Sizing } from '../../types/component.js';\n\n// Core\r\nconst ContainerDefaultConfig = {\r\n duration: undefined,\r\n margin: {\r\n top: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n },\r\n padding: {\r\n top: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n },\r\n sizing: Sizing.Fit,\r\n width: undefined,\r\n height: undefined,\r\n svgDefs: undefined,\r\n ariaLabel: undefined,\r\n};\n\nexport { ContainerDefaultConfig };\n//# sourceMappingURL=config.js.map\n","import { select } from 'd3-selection';\nimport { Sizing } from '../../types/component.js';\nimport { merge, clamp, isEqual } from '../../utils/data.js';\nimport { ResizeObserver } from '../../utils/resize-observer.js';\nimport { ContainerDefaultConfig } from './config.js';\n\nclass ContainerCore {\r\n constructor(element) {\r\n this._defaultConfig = ContainerDefaultConfig;\r\n this._isFirstRender = true;\r\n this._renderAnimationFrameId = null;\r\n this._container = element;\r\n // Setting `role` attribute to `image` to make the container accessible\r\n const container = select(this._container);\r\n container.attr('role', 'figure');\r\n // Create SVG element for visualizations\r\n this.svg = container.append('svg')\r\n // We set `display` to `block` because inline elements have an invisible\r\n // inline space that adds 4px to the height of the container\r\n .style('display', 'block')\r\n .attr('xmlns', 'http://www.w3.org/2000/svg')\r\n .attr('height', ContainerCore.DEFAULT_CONTAINER_HEIGHT) // Overriding default SVG height of 150\r\n .attr('aria-hidden', true);\r\n this._svgDefs = this.svg.append('defs');\r\n this._svgDefsExternal = this.svg.append('defs');\r\n this.element = this.svg.node();\r\n }\r\n updateContainer(config) {\r\n var _a;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.prevConfig = this.config;\r\n this.config = merge(this._defaultConfig, config);\r\n // Add `svgDefs` if provided in the config\r\n if ((config === null || config === void 0 ? void 0 : config.svgDefs) !== ((_a = this.prevConfig) === null || _a === void 0 ? void 0 : _a.svgDefs)) {\r\n this._svgDefsExternal.selectAll('*').remove();\r\n this._svgDefsExternal.html(config.svgDefs);\r\n }\r\n }\r\n // The `_preRender` step should be used to perform some actions before rendering.\r\n // For example, calculating scales, setting component sizes, etc ...\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n _preRender() { }\r\n // The `_render` step should be used to perform the actual rendering\r\n _render(duration) {\r\n const { config } = this;\r\n // Apply the `aria-label` attribute\r\n select(this._container)\r\n .attr('aria-label', config.ariaLabel);\r\n this._isFirstRender = false;\r\n }\r\n // Warning: Some Containers (i.e. Single Container) may override this method, so if you introduce any changes here,\r\n // make sure to check that other containers didn't break after them.\r\n render(duration = this.config.duration) {\r\n const width = this.config.width || this.containerWidth;\r\n const height = this.config.height || this.containerHeight;\r\n // We set SVG size in `render()` instead of `_render()`, because the size values in pixels will become\r\n // available only in the next animation when being accessed via `element.clientWidth` and `element.clientHeight`,\r\n // and we rely on those values when setting width and size of the components.\r\n this.svg\r\n .attr('width', width)\r\n .attr('height', height);\r\n // Set up Resize Observer. We do it in `render()` to capture container size change if it happened\r\n // in the next animation frame after the initial `render` was called.\r\n if (!this._resizeObserver)\r\n this._setUpResizeObserver();\r\n // Schedule the actual rendering in the next frame\r\n cancelAnimationFrame(this._renderAnimationFrameId);\r\n this._renderAnimationFrameId = requestAnimationFrame(() => {\r\n this._preRender();\r\n this._render(duration);\r\n });\r\n }\r\n get containerWidth() {\r\n return this.config.width\r\n ? this.element.clientWidth\r\n : (this._container.clientWidth || this._container.getBoundingClientRect().width);\r\n }\r\n get containerHeight() {\r\n return this.config.height\r\n ? this.element.clientHeight\r\n : (this._container.clientHeight || this._container.getBoundingClientRect().height || ContainerCore.DEFAULT_CONTAINER_HEIGHT);\r\n }\r\n get width() {\r\n return clamp(this.containerWidth - this.config.margin.left - this.config.margin.right, 0, Number.POSITIVE_INFINITY);\r\n }\r\n get height() {\r\n return clamp(this.containerHeight - this.config.margin.top - this.config.margin.bottom, 0, Number.POSITIVE_INFINITY);\r\n }\r\n _removeAllChildren() {\r\n while (this.element.firstChild) {\r\n this.element.removeChild(this.element.firstChild);\r\n }\r\n }\r\n _onResize() {\r\n const { config } = this;\r\n const redrawOnResize = config.sizing === Sizing.Fit || config.sizing === Sizing.FitWidth;\r\n if (redrawOnResize)\r\n this.render(0);\r\n }\r\n _setUpResizeObserver() {\r\n if (this._resizeObserver)\r\n return;\r\n const containerRect = this._container.getBoundingClientRect();\r\n this._containerSize = { width: containerRect.width, height: containerRect.height };\r\n this._resizeObserver = new ResizeObserver((entries, observer) => {\r\n // Using request animation frame to avoid multiple resize events when scrollbars appear/disappear\r\n // See more: https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver#observation_errors\r\n cancelAnimationFrame(this._resizeObserverAnimationFrameId);\r\n this._resizeObserverAnimationFrameId = requestAnimationFrame(() => {\r\n const resizedContainerRect = this._container.getBoundingClientRect();\r\n const resizedContainerSize = { width: resizedContainerRect.width, height: resizedContainerRect.height };\r\n const hasSizeChanged = !isEqual(this._containerSize, resizedContainerSize);\r\n // Do resize only if element is attached to the DOM\r\n // will come in useful when some ancestor of container becomes detached\r\n if (hasSizeChanged && resizedContainerSize.width && resizedContainerSize.height) {\r\n this._containerSize = resizedContainerSize;\r\n this._onResize();\r\n }\r\n });\r\n });\r\n this._resizeObserver.observe(this._container);\r\n }\r\n destroy() {\r\n var _a;\r\n cancelAnimationFrame(this._renderAnimationFrameId);\r\n cancelAnimationFrame(this._resizeObserverAnimationFrameId);\r\n (_a = this._resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\r\n this.svg.remove();\r\n }\r\n}\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nContainerCore.DEFAULT_CONTAINER_HEIGHT = 300;\n\nexport { ContainerCore };\n//# sourceMappingURL=index.js.map\n","// SSR-safe port of https://github.com/mikolalysenko/to-px\r\nfunction parseUnit(str) {\r\n var _a;\r\n str = String(str);\r\n const num = parseFloat(str);\r\n const unit = ((_a = str.match(/[\\d.\\-+]*\\s*(.*)/)) === null || _a === void 0 ? void 0 : _a[1]) || '';\r\n return [num, unit];\r\n}\r\nfunction isBrowser() {\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n}\r\nfunction getPropertyInPX(element, prop) {\r\n var _a;\r\n const parts = parseUnit(getComputedStyle(element).getPropertyValue(prop));\r\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\r\n return parts[0] * ((_a = toPx(parts[1], element)) !== null && _a !== void 0 ? _a : 1);\r\n}\r\nfunction getSizeBrutal(unit, element) {\r\n const testDIV = document.createElement('div');\r\n testDIV.style.height = `128${unit}`;\r\n element.appendChild(testDIV);\r\n const size = getPropertyInPX(testDIV, 'height') / 128;\r\n element.removeChild(testDIV);\r\n return size;\r\n}\r\nlet cachedPPI = null;\r\nfunction getPixelsPerInch() {\r\n if (!isBrowser())\r\n return 96; // Standard default\r\n if (cachedPPI === null)\r\n cachedPPI = getSizeBrutal('in', document.body);\r\n return cachedPPI;\r\n}\r\nfunction toPx(str, element) {\r\n var _a;\r\n if (!str && str !== 0)\r\n return null;\r\n // SSR guard\r\n if (!isBrowser()) {\r\n // Return sensible defaults for SSR\r\n const parts = parseUnit(String(str));\r\n if (!isNaN(parts[0])) {\r\n const unit = ((_a = parts[1]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || 'px';\r\n if (unit === 'px' || unit === '')\r\n return parts[0];\r\n if (unit === 'em' || unit === 'rem')\r\n return parts[0] * 16; // Assume 16px base\r\n if (unit === 'in')\r\n return parts[0] * 96;\r\n if (unit === 'cm')\r\n return parts[0] * (96 / 2.54);\r\n if (unit === 'mm')\r\n return parts[0] * (96 / 25.4);\r\n if (unit === 'pt')\r\n return parts[0] * (96 / 72);\r\n if (unit === 'pc')\r\n return parts[0] * (96 / 6);\r\n }\r\n return null;\r\n }\r\n let el = document.body;\r\n if (element && element !== window && element !== document) {\r\n el = element;\r\n }\r\n const s = (String(str) || 'px').trim().toLowerCase();\r\n switch (s) {\r\n case '%':\r\n return el.clientHeight / 100.0;\r\n case 'ch':\r\n case 'ex':\r\n return getSizeBrutal(s, el);\r\n case 'em':\r\n return getPropertyInPX(el, 'font-size');\r\n case 'rem':\r\n return getPropertyInPX(document.body, 'font-size');\r\n case 'vw':\r\n return window.innerWidth / 100;\r\n case 'vh':\r\n return window.innerHeight / 100;\r\n case 'vmin':\r\n return Math.min(window.innerWidth, window.innerHeight) / 100;\r\n case 'vmax':\r\n return Math.max(window.innerWidth, window.innerHeight) / 100;\r\n case 'in':\r\n return getPixelsPerInch();\r\n case 'cm':\r\n return getPixelsPerInch() / 2.54;\r\n case 'mm':\r\n return getPixelsPerInch() / 25.4;\r\n case 'pt':\r\n return getPixelsPerInch() / 72;\r\n case 'pc':\r\n return getPixelsPerInch() / 6;\r\n case 'px':\r\n return 1;\r\n }\r\n // Detect number + units (e.g., \"12px\", \"2em\")\r\n const parts = parseUnit(s);\r\n if (!isNaN(parts[0])) {\r\n if (parts[1]) {\r\n const px = toPx(parts[1], el);\r\n return typeof px === 'number' ? parts[0] * px : null;\r\n }\r\n return parts[0];\r\n }\r\n return null;\r\n}\n\nexport { toPx };\n//# sourceMappingURL=to-px.js.map\n","import { isString, getString } from './data.js';\nimport { toPx } from './to-px.js';\n\nfunction guid() {\r\n const s4 = () => Math.floor((1 + crypto.getRandomValues(new Uint32Array(1))[0]) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n return `${s4() + s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`;\r\n}\r\nfunction stringToHtmlId(str) {\r\n return (str || '').replace(/\\W/g, '_');\r\n}\r\nfunction isStringCSSVariable(s) {\r\n return isString(s) ? (s.substring(0, 6) === 'var(--') : false;\r\n}\r\nconst cssVariableCache = new WeakMap();\r\nfunction getCSSVariableValue(s, context) {\r\n if (!isString(s))\r\n return '';\r\n const variableName = s.substr(4, s.length - 5);\r\n let elementCache = cssVariableCache.get(context);\r\n if (!elementCache) {\r\n elementCache = new Map();\r\n cssVariableCache.set(context, elementCache);\r\n }\r\n if (elementCache.has(variableName)) {\r\n return elementCache.get(variableName);\r\n }\r\n const value = getComputedStyle(context).getPropertyValue(variableName);\r\n elementCache.set(variableName, value);\r\n return value;\r\n}\r\nfunction getCSSVariableValueInPixels(s, context) {\r\n const val = getCSSVariableValue(s, context);\r\n return toPx(val);\r\n}\r\nfunction getPixelValue(v) {\r\n return typeof v === 'number' ? v : toPx(v);\r\n}\r\nfunction rectIntersect(rect1, rect2, tolerancePx = 0) {\r\n const [left1, top1, right1, bottom1] = [\r\n rect1.x + tolerancePx,\r\n rect1.y + rect1.height - 2 * tolerancePx,\r\n rect1.x + rect1.width - 2 * tolerancePx,\r\n rect1.y + tolerancePx,\r\n ];\r\n const [left2, top2, right2, bottom2] = [\r\n rect2.x + tolerancePx,\r\n rect2.y + rect2.height - 2 * tolerancePx,\r\n rect2.x + rect2.width - 2 * tolerancePx,\r\n rect2.y + tolerancePx,\r\n ];\r\n return !(top1 < bottom2 || top2 < bottom1 || right1 < left2 || right2 < left1);\r\n}\r\nfunction getHref(d, identifier) {\r\n const id = getString(d, identifier);\r\n return id ? `url(#${id})` : null;\r\n}\r\nfunction evaluateSimpleExpression(expr) {\r\n // Handle multiplication and division first (higher precedence)\r\n // Keep applying until no more operations are found\r\n while (/(-?\\d+(?:\\.\\d+)?)\\s*([*/])\\s*(-?\\d+(?:\\.\\d+)?)/.test(expr)) {\r\n expr = expr.replace(/(-?\\d+(?:\\.\\d+)?)\\s*([*/])\\s*(-?\\d+(?:\\.\\d+)?)/, (_, a, op, b) => {\r\n const numA = parseFloat(a);\r\n const numB = parseFloat(b);\r\n return String(op === '*' ? numA * numB : numA / numB);\r\n });\r\n }\r\n // Handle addition and subtraction (lower precedence)\r\n // Keep applying until no more operations are found\r\n while (/(-?\\d+(?:\\.\\d+)?)\\s*([+-])\\s*(-?\\d+(?:\\.\\d+)?)/.test(expr)) {\r\n expr = expr.replace(/(-?\\d+(?:\\.\\d+)?)\\s*([+-])\\s*(-?\\d+(?:\\.\\d+)?)/, (_, a, op, b) => {\r\n const numA = parseFloat(a);\r\n const numB = parseFloat(b);\r\n return String(op === '+' ? numA + numB : numA - numB);\r\n });\r\n }\r\n const result = parseFloat(expr);\r\n if (isNaN(result))\r\n throw new Error(`Invalid expression: ${expr}`);\r\n return result;\r\n}\r\nfunction evaluateCalcExpression(expression, basis) {\r\n try {\r\n // Replace percentages and pixels with resolved values\r\n let expr = expression\r\n .replace(/(\\d+(?:\\.\\d+)?)%/g, (_, num) => String((basis * parseFloat(num)) / 100))\r\n .replace(/(\\d+(?:\\.\\d+)?)px/g, '$1')\r\n .replace(/\\s+/g, '');\r\n // Validate parentheses pairs before processing\r\n let parenCount = 0;\r\n for (const char of expr) {\r\n if (char === '(')\r\n parenCount++;\r\n else if (char === ')')\r\n parenCount--;\r\n if (parenCount < 0)\r\n throw new Error('Mismatched parentheses: closing parenthesis without opening');\r\n }\r\n if (parenCount !== 0)\r\n throw new Error('Mismatched parentheses: unclosed opening parenthesis');\r\n // Check for invalid characters (only allow numbers, operators, decimal points, and parentheses)\r\n if (!/^[0-9+\\-*/.() ]+$/.test(expr))\r\n throw new Error('Invalid characters in expression');\r\n // Check for empty parentheses\r\n if (/\\(\\s*\\)/.test(expr))\r\n throw new Error('Empty parentheses not allowed');\r\n // Simple regex-based evaluation for basic expressions\r\n // Handles: number, number+number, number-number, number*number, number/number\r\n // And simple parentheses: (expression)\r\n // Evaluate parentheses first\r\n let iterations = 0;\r\n const maxIterations = 100; // Prevent infinite loops\r\n while (expr.includes('(') && iterations < maxIterations) {\r\n const prevExpr = expr;\r\n expr = expr.replace(/\\(([^()]+)\\)/g, (_, inner) => String(evaluateSimpleExpression(inner)));\r\n if (expr === prevExpr)\r\n throw new Error('Unable to resolve parentheses');\r\n iterations++;\r\n }\r\n if (iterations >= maxIterations)\r\n throw new Error('Expression too complex or contains infinite recursion');\r\n if (expr.includes('(') || expr.includes(')'))\r\n throw new Error('Unresolved parentheses remain');\r\n return evaluateSimpleExpression(expr);\r\n }\r\n catch (error) {\r\n console.warn(`Failed to evaluate calc() expression: ${expression}`, error);\r\n return 0;\r\n }\r\n}\r\nfunction parseUnit(value, basis = 0) {\r\n if (!value)\r\n return 0;\r\n else if (typeof value === 'number')\r\n return value;\r\n else if (typeof value === 'string' && value.startsWith('calc(') && value.endsWith(')')) {\r\n // Parse calc() expression\r\n const expression = value.slice(5, -1).trim(); // Remove 'calc(' and ')'\r\n return evaluateCalcExpression(expression, basis);\r\n }\r\n else if (value.endsWith('%'))\r\n return basis * parseFloat(value) / 100;\r\n else if (value.endsWith('px'))\r\n return parseFloat(value);\r\n else\r\n return parseFloat(value) || 0;\r\n}\n\nexport { getCSSVariableValue, getCSSVariableValueInPixels, getHref, getPixelValue, guid, isStringCSSVariable, parseUnit, rectIntersect, stringToHtmlId };\n//# sourceMappingURL=misc.js.map\n","const darkThemeCssSelectors = 'html[data-theme=\"dark\"],html.dark-theme,body.dark-theme,html.theme-dark,body.theme-dark';\n\nexport { darkThemeCssSelectors };\n//# sourceMappingURL=theme.js.map\n","import { hsl } from 'd3-color';\nimport { isNumber } from '../utils/data.js';\n\n/** Array of default colors */\r\nconst colors = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_COLORS) || ['#4D8CFD', '#FF6B7E', '#F4B83E', '#A6CC74', '#00C19A', '#6859BE'];\r\nconst colorsDark = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_COLORS_DARK) || ['#4D8CFD', '#FF6B7E', '#FFC16D', '#A6CC74', '#00C19A', '#7887E0'];\r\n/** Return a CSS Variable name for a given color index or string */\r\nconst getCSSColorVariable = (suffix) => {\r\n return `--vis-${isNumber(suffix) ? `color${suffix % colors.length}` : suffix}`;\r\n};\r\nfunction getLighterColor(hex, percentage = 0.4) {\r\n const c = hsl(hex);\r\n c.l = c.l * (1 + percentage);\r\n return c.formatHex();\r\n}\r\nfunction getDarkerColor(hex, percentageL = 0.4, percentageS = 0.6) {\r\n const c = hsl(hex);\r\n c.s = c.s * (1 - percentageS);\r\n c.l = c.l * (1 - percentageL);\r\n return c.formatHex();\r\n}\n\nexport { colors, colorsDark, getCSSColorVariable, getDarkerColor, getLighterColor };\n//# sourceMappingURL=colors.js.map\n","import { getCSSColorVariable } from './colors.js';\n\nconst PATTERN_SIZE_PX = 10;\r\nconst fills = [\r\n { id: 'stripes-diagonal', svg: '<path d=\"M-1,1 l2,-2 M0,10 l10,-10 M9,11 l2,-2\" stroke=\"#000\"/>' },\r\n { id: 'dots', svg: '<path d=\"m0-1.5a1 1 0 010 3m10-3a1 1 0 000 3M5 3.5a1 1 0 010 3 1 1 0 010-3M0 8.5 a1 1 0 010 3m10-3a1 1 0 000 3\" fill\"#000\"/>' },\r\n { id: 'stripes-vertical', svg: '<path d=\"M 5,-1 L5,11\" stroke=\"#000\"/>' },\r\n { id: 'crosshatch', svg: '<path d=\"M0 0L10 10ZM10 0L0 10Z\" stroke=\"#000\"/>' },\r\n { id: 'waves', svg: '<path d=\"M0 4Q2.5 1 5 4 7.5 7 10 4v2Q7.5 9 5 6 2.5 3 0 6Z\" fill=\"#000\"/>' },\r\n { id: 'circles', svg: '<circle cx=\"5\" cy=\"5\" r=\"3\" stroke=\"#000\" fill=\"#fff\"/>' },\r\n];\r\nconst lines = [\r\n { id: 'circle', marker: '<circle cx=\"5\" cy=\"5\" r=\"5\"/>', dashArray: [] },\r\n { id: 'triangle', marker: '<path d=\"M5,0 L10,9 L0,9Z\">', dashArray: [9, 1] },\r\n { id: 'diamond', marker: '<path d=\"M 0 5 L5 0 L 10 5 L 5 10 L 0 5Z\">', dashArray: [2] },\r\n { id: 'arrow', marker: '<path d=\"M4 0 0 0 6 5 0 10 4 10 10 5Z\">', dashArray: [2, 3, 8, 3] },\r\n { id: 'square', marker: '<rect x=\"1\" y=\"1\" width=\"8\" height=\"8\"/>', dashArray: [6] },\r\n { id: 'star', marker: '<path d=\"m2 9 3-9 3 9L0 3h10Z\"/>', dashArray: [1, 6] },\r\n];\r\nfunction getPatternVariable(p) {\r\n return `vis-${`pattern-${p.svg ? 'fill' : 'marker'}`}-${p.id}`;\r\n}\r\nconst maskDef = (p) => `<mask id=\"${getPatternVariable(p)}\">\n <pattern id=\"${p.id}\" viewBox=\"0 0 10 10\" width=\"${PATTERN_SIZE_PX}\" height=\"${PATTERN_SIZE_PX}\" patternUnits=\"userSpaceOnUse\">\n <rect width=\"100%\" height=\"100%\" fill=\"#fff\"/>\n ${p.svg}\n </pattern>\n <rect x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" fill=\"url(#${p.id})\"/>\n </mask>`;\r\nconst markerDef = (p, i) => `<marker id=\"${getPatternVariable(p)}\"\n fill=\"var(${getCSSColorVariable(i)})\"\n markerUnits=\"userSpaceOnUse\"\n refX=\"5\"\n refY=\"5\"\n markerWidth=\"${PATTERN_SIZE_PX}\"\n markerHeight=\"${PATTERN_SIZE_PX}\">\n ${p.marker}\n </marker>`;\r\n// // Injecting SVG defs as a single SVG element on the page\r\nfunction injectSVGDefs() {\r\n const svgDefs = fills.map(maskDef).concat(lines.map(markerDef)).join('');\r\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n svg.setAttribute('height', '100%');\r\n svg.setAttribute('width', '100%');\r\n svg.style.position = 'fixed';\r\n svg.style.zIndex = '-99999999';\r\n svg.innerHTML = `<defs>${svgDefs}</defs>`;\r\n document.body.appendChild(svg);\r\n}\r\nif (typeof window !== 'undefined')\r\n injectSVGDefs();\n\nexport { PATTERN_SIZE_PX, fills, getPatternVariable, lines };\n//# sourceMappingURL=patterns.js.map\n","import { injectGlobal } from '@emotion/css';\nimport { getCSSVariableValue } from '../utils/misc.js';\nimport { darkThemeCssSelectors } from '../utils/theme.js';\nimport { getCSSColorVariable, getLighterColor, colors, getDarkerColor, colorsDark } from './colors.js';\nimport { fills, getPatternVariable, lines } from './patterns.js';\n\nconst UNOVIS_ICON_FONT_FAMILY_DEFAULT = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_ICON_FONT_FAMILY) || 'FontAwesome';\r\nconst UNOVIS_FONT_WH_RATIO_DEFAULT = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_FONT_W2H_RATIO_DEFAULT) || 0.5;\r\nconst UNOVIS_TEXT_SEPARATOR_DEFAULT = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_TEXT_SEPARATOR_DEFAULT) || [' ', '-', '.', ','];\r\nconst UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT) || '-';\r\nconst UNOVIS_TEXT_DEFAULT = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.UNOVIS_TEXT_DEFAULT) || {\r\n // If you change these defaults, don't forget to update the values in the `UnovisText` type in `types/text.ts`\r\n text: '',\r\n fontSize: 12,\r\n fontFamily: 'var(--vis-font-family)',\r\n lineHeight: 1.25,\r\n marginTop: 0,\r\n marginBottom: 0,\r\n};\r\nconst variables = injectGlobal `\n :root {\n label: vis-root-styles;\n --vis-font-family: Inter, Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n --vis-font-wh-ratio: ${UNOVIS_FONT_WH_RATIO_DEFAULT};\n --vis-color-main: var(${getCSSColorVariable(0)});\n --vis-color-main-light: ${getLighterColor(colors[0])};\n --vis-color-main-dark: ${getDarkerColor(colors[0])};\n --vis-color-grey: #2a2a2a;\n ${colors.map((c, i) => `${getCSSColorVariable(i)}: ${c};`)}\n ${colorsDark.map((c, i) => `--vis-dark-color${i}: ${c};`)}\n ${fills.map((p, i) => `\n --${getPatternVariable(p)}: url(#${getPatternVariable(p)});\n --vis-pattern-fill${i}: var(--${getPatternVariable(p)});\n `)}\n ${lines.map((p, i) => {\r\n var _a;\r\n return `\n --${getPatternVariable(p)}: url(#${getPatternVariable(p)});\n --vis-pattern-marker${i}: var(--${getPatternVariable(p)});\n --vis-pattern-dasharray${i}: ${(_a = p.dashArray) === null || _a === void 0 ? void 0 : _a.join(' ')};\n `;\r\n})}\n\n ${darkThemeCssSelectors} {\n ${colors.map((c, i) => `${getCSSColorVariable(i)}: var(--vis-dark-color${i});`)}\n }\n\n body.theme-patterns {\n ${fills.map((_, i) => `path[style*=\"fill: var(${getCSSColorVariable(i)})\"] {\n mask: var(--vis-pattern-fill${i});\n }`)}\n ${lines.map((_, i) => `\n path[stroke=\"var(${getCSSColorVariable(i)})\"]:not([style*=\"fill\"]),\n path[style*=\"stroke: var(${getCSSColorVariable(i)})\"]:not([style*=\"fill\"]) {\n marker: var(--vis-pattern-marker${i});\n stroke-dasharray: var(--vis-pattern-dasharray${i});\n }\n `)}\n}\n`;\r\nfunction getFontWidthToHeightRatio(context = window === null || window === void 0 ? void 0 : window.document.body) {\r\n return context ? +getCSSVariableValue('var(--vis-font-wh-ratio)', context) : UNOVIS_FONT_WH_RATIO_DEFAULT;\r\n}\n\nexport { UNOVIS_FONT_WH_RATIO_DEFAULT, UNOVIS_ICON_FONT_FAMILY_DEFAULT, UNOVIS_TEXT_DEFAULT, UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT, UNOVIS_TEXT_SEPARATOR_DEFAULT, getFontWidthToHeightRatio, variables };\n//# sourceMappingURL=index.js.map\n","import { interrupt } from 'd3-transition';\n\nfunction smartTransition(selection, duration, easing) {\r\n selection.nodes().forEach(node => interrupt(node)); // Interrupt active transitions if any\r\n if (duration) {\r\n const transition = selection.transition().duration(duration);\r\n if (easing)\r\n transition.ease(easing);\r\n return transition;\r\n }\r\n else\r\n return selection;\r\n}\n\nexport { smartTransition };\n//# sourceMappingURL=d3.js.map\n","import { ContainerDefaultConfig } from '../../core/container/config.js';\n\n// Core\r\nconst SingleContainerDefaultConfig = Object.assign(Object.assign({}, ContainerDefaultConfig), { tooltip: undefined, annotations: undefined });\n\nexport { SingleContainerDefaultConfig };\n//# sourceMappingURL=config.js.map\n","import '../../styles/index.js';\nimport { ContainerCore } from '../../core/container/index.js';\nimport { smartTransition } from '../../utils/d3.js';\nimport { Sizing } from '../../types/component.js';\nimport { SingleContainerDefaultConfig } from './config.js';\n\n// Global CSS variables (side effects import)\r\nclass SingleContainer extends ContainerCore {\r\n constructor(element, config, data) {\r\n var _a;\r\n super(element);\r\n this._defaultConfig = SingleContainerDefaultConfig;\r\n this.config = this._defaultConfig;\r\n if (config) {\r\n this.updateContainer(config, true);\r\n this.component = config.component;\r\n }\r\n if (data) {\r\n this.setData(data, true);\r\n }\r\n // Render if component exists and has data\r\n if ((_a = this.component) === null || _a === void 0 ? void 0 : _a.datamodel.data)\r\n this.render();\r\n }\r\n setData(data, preventRender) {\r\n var _a;\r\n const { config } = this;\r\n if (this.component)\r\n this.component.setData(data);\r\n if (!preventRender)\r\n this.render();\r\n (_a = config.tooltip) === null || _a === void 0 ? void 0 : _a.hide();\r\n }\r\n updateContainer(containerConfig, preventRender) {\r\n super.updateContainer(containerConfig);\r\n this._removeAllChildren();\r\n this.component = containerConfig.component;\r\n if (containerConfig.sizing)\r\n this.component.sizing = containerConfig.sizing;\r\n this.element.appendChild(this.component.element);\r\n const tooltip = containerConfig.tooltip;\r\n if (tooltip) {\r\n if (!tooltip.hasContainer())\r\n tooltip.setContainer(this._container);\r\n tooltip.setComponents([this.component]);\r\n }\r\n const annotations = containerConfig.annotations;\r\n if (annotations) {\r\n this.element.appendChild(annotations.element);\r\n }\r\n // Defs\r\n this.element.appendChild(this._svgDefs.node());\r\n this.element.appendChild(this._svgDefsExternal.node());\r\n if (!preventRender)\r\n this.render();\r\n }\r\n updateComponent(componentConfig, preventRender) {\r\n this.component.setConfig(componentConfig);\r\n if (!preventRender)\r\n this.render();\r\n }\r\n update(containerConfig, componentConfig, data) {\r\n if (containerConfig)\r\n this.updateContainer(containerConfig, true);\r\n if (componentConfig)\r\n this.updateComponent(componentConfig, true);\r\n if (data)\r\n this.setData(data, true);\r\n this.render();\r\n }\r\n getFitWidthScale() {\r\n const { config, component } = this;\r\n const extendedSizeComponent = component;\r\n if (!extendedSizeComponent.getWidth)\r\n return 1;\r\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right;\r\n return this.width / componentWidth;\r\n }\r\n _preRender() {\r\n var _a, _b;\r\n super._preRender();\r\n this.component.setSize(this.width, this.height, this.containerWidth, this.containerHeight);\r\n this.component.setContainerMargin(this.config.margin);\r\n (_a = this.config.annotations) === null || _a === void 0 ? void 0 : _a.setSize(this.width, this.height, this.containerWidth, this.containerHeight);\r\n (_b = this.config.annotations) === null || _b === void 0 ? void 0 : _b.setContainerMargin(this.config.margin);\r\n }\r\n _render(duration) {\r\n var _a, _b;\r\n const { config, component } = this;\r\n super._render(duration);\r\n component.g.attr('transform', `translate(${config.margin.left},${config.margin.top})`);\r\n component.render(duration);\r\n (_a = config.annotations) === null || _a === void 0 ? void 0 : _a.render(duration);\r\n if (config.tooltip)\r\n config.tooltip.update();\r\n (_b = config.onRenderComplete) === null || _b === void 0 ? void 0 : _b.call(config, this.svg.node(), config.margin, this.containerWidth, this.containerHeight, this.width, this.height);\r\n }\r\n // Re-defining the `render()` function to handle different sizing techniques (`Sizing.Extend` and `Sizing.FitWidth`)\r\n // Not calling `super.render()` because we don't want it to interfere with setting the SVG size here.\r\n render(duration = this.config.duration) {\r\n const { config, component } = this;\r\n if (config.sizing === Sizing.Extend || config.sizing === Sizing.FitWidth) {\r\n const fitToWidth = config.sizing === Sizing.FitWidth;\r\n const extendedSizeComponent = component;\r\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right;\r\n const componentHeight = extendedSizeComponent.getHeight() + config.margin.top + config.margin.bottom;\r\n const scale = fitToWidth ? this.getFitWidthScale() : 1;\r\n const currentWidth = this.svg.attr('width');\r\n const currentHeight = this.svg.attr('height');\r\n const scaledWidth = componentWidth * scale;\r\n const scaledHeight = componentHeight * scale;\r\n const animated = currentWidth || currentHeight;\r\n smartTransition(this.svg, animated ? duration : 0)\r\n .attr('width', scaledWidth)\r\n .attr('height', scaledHeight)\r\n .attr('viewBox', `${0} ${0} ${componentWidth} ${fitToWidth ? scaledHeight : componentHeight}`)\r\n .attr('preserveAspectRatio', 'xMinYMin');\r\n }\r\n else {\r\n this.svg\r\n .attr('width', this.config.width || this.containerWidth)\r\n .attr('height', this.config.height || this.containerHeight);\r\n }\r\n // Set up Resize Observer\r\n if (!this._resizeObserver)\r\n this._setUpResizeObserver();\r\n // Schedule the actual rendering in the next frame\r\n cancelAnimationFrame(this._renderAnimationFrameId);\r\n this._renderAnimationFrameId = requestAnimationFrame(() => {\r\n this._preRender();\r\n this._render(duration);\r\n });\r\n }\r\n _onResize() {\r\n var _a;\r\n const { config } = this;\r\n super._onResize();\r\n (_a = config.tooltip) === null || _a === void 0 ? void 0 : _a.hide();\r\n }\r\n destroy() {\r\n var _a, _b;\r\n const { component, config } = this;\r\n super.destroy();\r\n component === null || component === void 0 ? void 0 : component.destroy();\r\n (_a = config.tooltip) === null || _a === void 0 ? void 0 : _a.destroy();\r\n (_b = config.annotations) === null || _b === void 0 ? void 0 : _b.destroy();\r\n }\r\n}\n\nexport { SingleContainer };\n//# sourceMappingURL=index.js.map\n","class CoreDataModel {\r\n constructor(data) {\r\n this.data = data;\r\n }\r\n get data() {\r\n return this._data;\r\n }\r\n set data(value) {\r\n this._data = value;\r\n }\r\n}\n\nexport { CoreDataModel };\n//# sourceMappingURL=core.js.map\n","const ComponentDefaultConfig = {\r\n duration: 600,\r\n events: {},\r\n attributes: {},\r\n};\n\nexport { ComponentDefaultConfig };\n//# sourceMappingURL=config.js.map\n","import { select } from 'd3-selection';\nimport { CoreDataModel } from '../../data-models/core.js';\nimport { throttle, merge } from '../../utils/data.js';\nimport { guid } from '../../utils/misc.js';\nimport { ComponentType, Sizing } from '../../types/component.js';\nimport { ComponentDefaultConfig } from './config.js';\n\nclass ComponentCore {\r\n constructor(type = ComponentType.SVG) {\r\n var _a, _b;\r\n this.type = ComponentType.SVG;\r\n this.datamodel = new CoreDataModel();\r\n this.sizing = Sizing.Fit; // Supported by SingleContainer and a subset of components only (Sankey)\r\n this.events = {};\r\n /** Default configuration */\r\n this._defaultConfig = ComponentDefaultConfig;\r\n /** Component width in pixels. This property is set automatically by the container. */\r\n this._width = 400;\r\n /** Component height in pixels. This property is set automatically by the container. */\r\n this._height = 200;\r\n /** Container width in pixels. This property is set automatically by the container. */\r\n this._containerWidth = undefined;\r\n /** Container height in pixels. This property is set automatically by the container. */\r\n this._containerHeight = undefined;\r\n /** Container margin in pixels. This property is set automatically by the container. */\r\n this._containerMargin = { top: 0, bottom: 0, left: 0, right: 0 };\r\n this._setUpComponentEventsThrottled = throttle(this._setUpComponentEvents, 500);\r\n this._setCustomAttributesThrottled = throttle(this._setCustomAttributes, 500);\r\n if (type === ComponentType.SVG) {\r\n this.element = document.createElementNS('http://www.w3.org/2000/svg', 'g');\r\n }\r\n else {\r\n this.element = document.createElement('div');\r\n }\r\n this.uid = guid();\r\n this.g = select(this.element);\r\n // Setting the root class if available\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n // eslint-disable-next-line dot-notation\r\n const rootClass = (_b = (_a = this.constructor) === null || _a === void 0 ? void 0 : _a['selectors']) === null || _b === void 0 ? void 0 : _b.root;\r\n if (rootClass)\r\n this.g.attr('class', rootClass);\r\n }\r\n /** Set the container margin. Called automatically by containers. */\r\n setContainerMargin(margin) {\r\n this._containerMargin = margin;\r\n }\r\n setConfig(config) {\r\n this.prevConfig = this.config; // Store the previous config instance\r\n this.config = merge(this._defaultConfig, config);\r\n }\r\n setData(data) {\r\n this.datamodel.data = data;\r\n }\r\n setSize(width, height, containerWidth, containerHeight) {\r\n if (isFinite(width))\r\n this._width = width;\r\n if (isFinite(height))\r\n this._height = height;\r\n if (isFinite(containerWidth))\r\n this._containerWidth = containerWidth;\r\n if (isFinite(containerHeight))\r\n this._containerHeight = containerHeight;\r\n }\r\n render(duration = this.config.duration) {\r\n this._render(duration);\r\n // While transition is in progress, we add the 'animating' attribute to the component's SVG group\r\n const ANIMATING_ATTR = 'animating';\r\n if (duration) {\r\n this.g.attr(ANIMATING_ATTR, '');\r\n const transition = this.g\r\n .transition(ANIMATING_ATTR)\r\n .duration(duration);\r\n transition.on('end interrupt', () => {\r\n this.g.attr(ANIMATING_ATTR, null);\r\n });\r\n }\r\n this._setUpComponentEventsThrottled();\r\n this._setCustomAttributesThrottled();\r\n }\r\n get bleed() {\r\n return { top: 0, bottom: 0, left: 0, right: 0 };\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n _render(duration = this.config.duration) {\r\n }\r\n _setCustomAttributes() {\r\n const attributeMap = this.config.attributes;\r\n Object.keys(attributeMap).forEach(className => {\r\n Object.keys(attributeMap[className]).forEach(attr => {\r\n const selection = this.g\r\n .selectAll(`.${className}`);\r\n selection.attr(attr, attributeMap[className][attr]);\r\n });\r\n });\r\n }\r\n _setUpComponentEvents() {\r\n // Set up default events\r\n this._bindEvents(this.events);\r\n // Set up user-defined events\r\n this._bindEvents(this.config.events, '.user');\r\n }\r\n // Sometimes we don't want to pass the original data and/or index to the event handler.\r\n // This method can be overridden by components to implement a custom mapping.\r\n // See Stacked Bar and Scatter for examples.\r\n _mapEventDatum(datum, index) {\r\n return { datum, index };\r\n }\r\n _bindEvents(events = this.events, suffix = '') {\r\n Object.keys(events).forEach(className => {\r\n Object.keys(events[className]).forEach(eventType => {\r\n const selection = this.g\r\n .selectAll(`.${className}`);\r\n selection.on(eventType + suffix, (event, d) => {\r\n const els = selection.nodes();\r\n const i = els.indexOf(event.currentTarget);\r\n const eventFunction = events[className][eventType];\r\n const { datum, index } = this._mapEventDatum(d, i);\r\n return eventFunction === null || eventFunction === void 0 ? void 0 : eventFunction(datum, event, index, els);\r\n });\r\n });\r\n });\r\n }\r\n destroy() {\r\n var _a;\r\n (_a = this.g) === null || _a === void 0 ? void 0 : _a.remove();\r\n this.element = undefined;\r\n }\r\n isDestroyed() {\r\n return !this.element;\r\n }\r\n}\n\nexport { ComponentCore };\n//# sourceMappingURL=index.js.map\n","function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function () {};\n\n return {\n s: F,\n n: function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function (e) {\n throw e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function () {\n it = it.call(o);\n },\n n: function () {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function (e) {\n didErr = true;\n err = e;\n },\n f: function () {\n try {\n if (!normalCompletion && it.return != null) it.return();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\n/**\n * de Casteljau's algorithm for drawing and splitting bezier curves.\n * Inspired by https://pomax.github.io/bezierinfo/\n *\n * @param {Number[][]} points Array of [x,y] points: [start, control1, control2, ..., end]\n * The original segment to split.\n * @param {Number} t Where to split the curve (value between [0, 1])\n * @return {Object} An object { left, right } where left is the segment from 0..t and\n * right is the segment from t..1.\n */\nfunction decasteljau(points, t) {\n var left = [];\n var right = [];\n\n function decasteljauRecurse(points, t) {\n if (points.length === 1) {\n left.push(points[0]);\n right.push(points[0]);\n } else {\n var newPoints = Array(points.length - 1);\n\n for (var i = 0; i < newPoints.length; i++) {\n if (i === 0) {\n left.push(points[0]);\n }\n\n if (i === newPoints.length - 1) {\n right.push(points[i + 1]);\n }\n\n newPoints[i] = [(1 - t) * points[i][0] + t * points[i + 1][0], (1 - t) * points[i][1] + t * points[i + 1][1]];\n }\n\n decasteljauRecurse(newPoints, t);\n }\n }\n\n if (points.length) {\n decasteljauRecurse(points, t);\n }\n\n return {\n left: left,\n right: right.reverse()\n };\n}\n/**\n * Convert segments represented as points back into a command object\n *\n * @param {Number[][]} points Array of [x,y] points: [start, control1, control2, ..., end]\n * Represents a segment\n * @return {Object} A command object representing the segment.\n */\n\n\nfunction pointsToCommand(points) {\n var command = {};\n\n if (points.length === 4) {\n command.x2 = points[2][0];\n command.y2 = points[2][1];\n }\n\n if (points.length >= 3) {\n command.x1 = points[1][0];\n command.y1 = points[1][1];\n }\n\n command.x = points[points.length - 1][0];\n command.y = points[points.length - 1][1];\n\n if (points.length === 4) {\n // start, control1, control2, end\n command.type = 'C';\n } else if (points.length === 3) {\n // start, control, end\n command.type = 'Q';\n } else {\n // start, end\n command.type = 'L';\n }\n\n return command;\n}\n/**\n * Runs de Casteljau's algorithm enough times to produce the desired number of segments.\n *\n * @param {Number[][]} points Array of [x,y] points for de Casteljau (the initial segment to split)\n * @param {Number} segmentCount Number of segments to split the original into\n * @return {Number[][][]} Array of segments\n */\n\n\nfunction splitCurveAsPoints(points, segmentCount) {\n segmentCount = segmentCount || 2;\n var segments = [];\n var remainingCurve = points;\n var tIncrement = 1 / segmentCount; // x-----x-----x-----x\n // t= 0.33 0.66 1\n // x-----o-----------x\n // r= 0.33\n // x-----o-----x\n // r= 0.5 (0.33 / (1 - 0.33)) === tIncrement / (1 - (tIncrement * (i - 1))\n // x-----x-----x-----x----x\n // t= 0.25 0.5 0.75 1\n // x-----o----------------x\n // r= 0.25\n // x-----o----------x\n // r= 0.33 (0.25 / (1 - 0.25))\n // x-----o----x\n // r= 0.5 (0.25 / (1 - 0.5))\n\n for (var i = 0; i < segmentCount - 1; i++) {\n var tRelative = tIncrement / (1 - tIncrement * i);\n var split = decasteljau(remainingCurve, tRelative);\n segments.push(split.left);\n remainingCurve = split.right;\n } // last segment is just to the end from the last point\n\n\n segments.push(remainingCurve);\n return segments;\n}\n/**\n * Convert command objects to arrays of points, run de Casteljau's algorithm on it\n * to split into to the desired number of segments.\n *\n * @param {Object} commandStart The start command object\n * @param {Object} commandEnd The end command object\n * @param {Number} segmentCount The number of segments to create\n * @return {Object[]} An array of commands representing the segments in sequence\n */\n\n\nfunction splitCurve(commandStart, commandEnd, segmentCount) {\n var points = [[commandStart.x, commandStart.y]];\n\n if (commandEnd.x1 != null) {\n points.push([commandEnd.x1, commandEnd.y1]);\n }\n\n if (commandEnd.x2 != null) {\n points.push([commandEnd.x2, commandEnd.y2]);\n }\n\n points.push([commandEnd.x, commandEnd.y]);\n return splitCurveAsPoints(points, segmentCount).map(pointsToCommand);\n}\n\nvar commandTokenRegex = /[MLCSTQAHVZmlcstqahv]|-?[\\d.e+-]+/g;\n/**\n * List of params for each command type in a path `d` attribute\n */\n\nvar typeMap = {\n M: ['x', 'y'],\n L: ['x', 'y'],\n H: ['x'],\n V: ['y'],\n C: ['x1', 'y1', 'x2', 'y2', 'x', 'y'],\n S: ['x2', 'y2', 'x', 'y'],\n Q: ['x1', 'y1', 'x', 'y'],\n T: ['x', 'y'],\n A: ['rx', 'ry', 'xAxisRotation', 'largeArcFlag', 'sweepFlag', 'x', 'y'],\n Z: []\n}; // Add lower case entries too matching uppercase (e.g. 'm' == 'M')\n\nObject.keys(typeMap).forEach(function (key) {\n typeMap[key.toLowerCase()] = typeMap[key];\n});\n\nfunction arrayOfLength(length, value) {\n var array = Array(length);\n\n for (var i = 0; i < length; i++) {\n array[i] = value;\n }\n\n return array;\n}\n/**\n * Converts a command object to a string to be used in a `d` attribute\n * @param {Object} command A command object\n * @return {String} The string for the `d` attribute\n */\n\n\nfunction commandToString(command) {\n return \"\".concat(command.type).concat(typeMap[command.type].map(function (p) {\n return command[p];\n }).join(','));\n}\n/**\n * Converts command A to have the same type as command B.\n *\n * e.g., L0,5 -> C0,5,0,5,0,5\n *\n * Uses these rules:\n * x1 <- x\n * x2 <- x\n * y1 <- y\n * y2 <- y\n * rx <- 0\n * ry <- 0\n * xAxisRotation <- read from B\n * largeArcFlag <- read from B\n * sweepflag <- read from B\n *\n * @param {Object} aCommand Command object from path `d` attribute\n * @param {Object} bCommand Command object from path `d` attribute to match against\n * @return {Object} aCommand converted to type of bCommand\n */\n\n\nfunction convertToSameType(aCommand, bCommand) {\n var conversionMap = {\n x1: 'x',\n y1: 'y',\n x2: 'x',\n y2: 'y'\n };\n var readFromBKeys = ['xAxisRotation', 'largeArcFlag', 'sweepFlag']; // convert (but ignore M types)\n\n if (aCommand.type !== bCommand.type && bCommand.type.toUpperCase() !== 'M') {\n var aConverted = {};\n Object.keys(bCommand).forEach(function (bKey) {\n var bValue = bCommand[bKey]; // first read from the A command\n\n var aValue = aCommand[bKey]; // if it is one of these values, read from B no matter what\n\n if (aValue === undefined) {\n if (readFromBKeys.includes(bKey)) {\n aValue = bValue;\n } else {\n // if it wasn't in the A command, see if an equivalent was\n if (aValue === undefined && conversionMap[bKey]) {\n aValue = aCommand[conversionMap[bKey]];\n } // if it doesn't have a converted value, use 0\n\n\n if (aValue === undefined) {\n aValue = 0;\n }\n }\n }\n\n aConverted[bKey] = aValue;\n }); // update the type to match B\n\n aConverted.type = bCommand.type;\n aCommand = aConverted;\n }\n\n return aCommand;\n}\n/**\n * Interpolate between command objects commandStart and commandEnd segmentCount times.\n * If the types are L, Q, or C then the curves are split as per de Casteljau's algorithm.\n * Otherwise we just copy commandStart segmentCount - 1 times, finally ending with commandEnd.\n *\n * @param {Object} commandStart Command object at the beginning of the segment\n * @param {Object} commandEnd Command object at the end of the segment\n * @param {Number} segmentCount The number of segments to split this into. If only 1\n * Then [commandEnd] is returned.\n * @return {Object[]} Array of ~segmentCount command objects between commandStart and\n * commandEnd. (Can be segmentCount+1 objects if commandStart is type M).\n */\n\n\nfunction splitSegment(commandStart, commandEnd, segmentCount) {\n var segments = []; // line, quadratic bezier, or cubic bezier\n\n if (commandEnd.type === 'L' || commandEnd.type === 'Q' || commandEnd.type === 'C') {\n segments = segments.concat(splitCurve(commandStart, commandEnd, segmentCount)); // general case - just copy the same point\n } else {\n var copyCommand = _extends({}, commandStart); // convert M to L\n\n\n if (copyCommand.type === 'M') {\n copyCommand.type = 'L';\n }\n\n segments = segments.concat(arrayOfLength(segmentCount - 1).map(function () {\n return copyCommand;\n }));\n segments.push(commandEnd);\n }\n\n return segments;\n}\n/**\n * Extends an array of commandsToExtend to the length of the referenceCommands by\n * splitting segments until the number of commands match. Ensures all the actual\n * points of commandsToExtend are in the extended array.\n *\n * @param {Object[]} commandsToExtend The command object array to extend\n * @param {Object[]} referenceCommands The command object array to match in length\n * @param {Function} excludeSegment a function that takes a start command object and\n * end command object and returns true if the segment should be excluded from splitting.\n * @return {Object[]} The extended commandsToExtend array\n */\n\n\nfunction extend(commandsToExtend, referenceCommands, excludeSegment) {\n // compute insertion points:\n // number of segments in the path to extend\n var numSegmentsToExtend = commandsToExtend.length - 1; // number of segments in the reference path.\n\n var numReferenceSegments = referenceCommands.length - 1; // this value is always between [0, 1].\n\n var segmentRatio = numSegmentsToExtend / numReferenceSegments; // create a map, mapping segments in referenceCommands to how many points\n // should be added in that segment (should always be >= 1 since we need each\n // point itself).\n // 0 = segment 0-1, 1 = segment 1-2, n-1 = last vertex\n\n var countPointsPerSegment = arrayOfLength(numReferenceSegments).reduce(function (accum, d, i) {\n var insertIndex = Math.floor(segmentRatio * i); // handle excluding segments\n\n if (excludeSegment && insertIndex < commandsToExtend.length - 1 && excludeSegment(commandsToExtend[insertIndex], commandsToExtend[insertIndex + 1])) {\n // set the insertIndex to the segment that this point should be added to:\n // round the insertIndex essentially so we split half and half on\n // neighbouring segments. hence the segmentRatio * i < 0.5\n var addToPriorSegment = segmentRatio * i % 1 < 0.5; // only skip segment if we already have 1 point in it (can't entirely remove a segment)\n\n if (accum[insertIndex]) {\n // TODO - Note this is a naive algorithm that should work for most d3-area use cases\n // but if two adjacent segments are supposed to be skipped, this will not perform as\n // expected. Could be updated to search for nearest segment to place the point in, but\n // will only do that if necessary.\n // add to the prior segment\n if (addToPriorSegment) {\n if (insertIndex > 0) {\n insertIndex -= 1; // not possible to add to previous so adding to next\n } else if (insertIndex < commandsToExtend.length - 1) {\n insertIndex += 1;\n } // add to next segment\n\n } else if (insertIndex < commandsToExtend.length - 1) {\n insertIndex += 1; // not possible to add to next so adding to previous\n } else if (insertIndex > 0) {\n insertIndex -= 1;\n }\n }\n }\n\n accum[insertIndex] = (accum[insertIndex] || 0) + 1;\n return accum;\n }, []); // extend each segment to have the correct number of points for a smooth interpolation\n\n var extended = countPointsPerSegment.reduce(function (extended, segmentCount, i) {\n // if last command, just add `segmentCount` number of times\n if (i === commandsToExtend.length - 1) {\n var lastCommandCopies = arrayOfLength(segmentCount, _extends({}, commandsToExtend[commandsToExtend.length - 1])); // convert M to L\n\n if (lastCommandCopies[0].type === 'M') {\n lastCommandCopies.forEach(function (d) {\n d.type = 'L';\n });\n }\n\n return extended.concat(lastCommandCopies);\n } // otherwise, split the segment segmentCount times.\n\n\n return extended.concat(splitSegment(commandsToExtend[i], commandsToExtend[i + 1], segmentCount));\n }, []); // add in the very first point since splitSegment only adds in the ones after it\n\n extended.unshift(commandsToExtend[0]);\n return extended;\n}\n/**\n * Takes a path `d` string and converts it into an array of command\n * objects. Drops the `Z` character.\n *\n * @param {String|null} d A path `d` string\n */\n\n\nfunction pathCommandsFromString(d) {\n // split into valid tokens\n var tokens = (d || '').match(commandTokenRegex) || [];\n var commands = [];\n var commandArgs;\n var command; // iterate over each token, checking if we are at a new command\n // by presence in the typeMap\n\n for (var i = 0; i < tokens.length; ++i) {\n commandArgs = typeMap[tokens[i]]; // new command found:\n\n if (commandArgs) {\n command = {\n type: tokens[i]\n }; // add each of the expected args for this command:\n\n for (var a = 0; a < commandArgs.length; ++a) {\n command[commandArgs[a]] = +tokens[i + a + 1];\n } // need to increment our token index appropriately since\n // we consumed token args\n\n\n i += commandArgs.length;\n commands.push(command);\n }\n }\n\n return commands;\n}\n/**\n * Interpolate from A to B by extending A and B during interpolation to have\n * the same number of points. This allows for a smooth transition when they\n * have a different number of points.\n *\n * Ignores the `Z` command in paths unless both A and B end with it.\n *\n * This function works directly with arrays of command objects instead of with\n * path `d` strings (see interpolatePath for working with `d` strings).\n *\n * @param {Object[]} aCommandsInput Array of path commands\n * @param {Object[]} bCommandsInput Array of path commands\n * @param {(Function|Object)} interpolateOptions\n * @param {Function} interpolateOptions.excludeSegment a function that takes a start command object and\n * end command object and returns true if the segment should be excluded from splitting.\n * @param {Boolean} interpolateOptions.snapEndsToInput a boolean indicating whether end of input should\n * be sourced from input argument or computed.\n * @returns {Function} Interpolation function that maps t ([0, 1]) to an array of path commands.\n */\n\nfunction interpolatePathCommands(aCommandsInput, bCommandsInput, interpolateOptions) {\n // make a copy so we don't mess with the input arrays\n var aCommands = aCommandsInput == null ? [] : aCommandsInput.slice();\n var bCommands = bCommandsInput == null ? [] : bCommandsInput.slice();\n\n var _ref = _typeof(interpolateOptions) === 'object' ? interpolateOptions : {\n excludeSegment: interpolateOptions,\n snapEndsToInput: true\n },\n excludeSegment = _ref.excludeSegment,\n snapEndsToInput = _ref.snapEndsToInput; // both input sets are empty, so we don't interpolate\n\n\n if (!aCommands.length && !bCommands.length) {\n return function nullInterpolator() {\n return [];\n };\n } // do we add Z during interpolation? yes if both have it. (we'd expect both to have it or not)\n\n\n var addZ = (aCommands.length === 0 || aCommands[aCommands.length - 1].type === 'Z') && (bCommands.length === 0 || bCommands[bCommands.length - 1].type === 'Z'); // we temporarily remove Z\n\n if (aCommands.length > 0 && aCommands[aCommands.length - 1].type === 'Z') {\n aCommands.pop();\n }\n\n if (bCommands.length > 0 && bCommands[bCommands.length - 1].type === 'Z') {\n bCommands.pop();\n } // if A is empty, treat it as if it used to contain just the first point\n // of B. This makes it so the line extends out of from that first point.\n\n\n if (!aCommands.length) {\n aCommands.push(bCommands[0]); // otherwise if B is empty, treat it as if it contains the first point\n // of A. This makes it so the line retracts into the first point.\n } else if (!bCommands.length) {\n bCommands.push(aCommands[0]);\n } // extend to match equal size\n\n\n var numPointsToExtend = Math.abs(bCommands.length - aCommands.length);\n\n if (numPointsToExtend !== 0) {\n // B has more points than A, so add points to A before interpolating\n if (bCommands.length > aCommands.length) {\n aCommands = extend(aCommands, bCommands, excludeSegment); // else if A has more points than B, add more points to B\n } else if (bCommands.length < aCommands.length) {\n bCommands = extend(bCommands, aCommands, excludeSegment);\n }\n } // commands have same length now.\n // convert commands in A to the same type as those in B\n\n\n aCommands = aCommands.map(function (aCommand, i) {\n return convertToSameType(aCommand, bCommands[i]);\n }); // create mutable interpolated command objects\n\n var interpolatedCommands = aCommands.map(function (aCommand) {\n return _objectSpread2({}, aCommand);\n });\n\n if (addZ) {\n interpolatedCommands.push({\n type: 'Z'\n });\n aCommands.push({\n type: 'Z'\n }); // required for when returning at t == 0\n }\n\n return function pathCommandInterpolator(t) {\n // at 1 return the final value without the extensions used during interpolation\n if (t === 1 && snapEndsToInput) {\n return bCommandsInput == null ? [] : bCommandsInput;\n } // work with aCommands directly since interpolatedCommands are mutated\n\n\n if (t === 0) {\n return aCommands;\n } // interpolate the commands using the mutable interpolated command objs\n\n\n for (var i = 0; i < interpolatedCommands.length; ++i) {\n // if (interpolatedCommands[i].type === 'Z') continue;\n var aCommand = aCommands[i];\n var bCommand = bCommands[i];\n var interpolatedCommand = interpolatedCommands[i];\n\n var _iterator = _createForOfIteratorHelper(typeMap[interpolatedCommand.type]),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var arg = _step.value;\n interpolatedCommand[arg] = (1 - t) * aCommand[arg] + t * bCommand[arg]; // do not use floats for flags (#27), round to integer\n\n if (arg === 'largeArcFlag' || arg === 'sweepFlag') {\n interpolatedCommand[arg] = Math.round(interpolatedCommand[arg]);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n return interpolatedCommands;\n };\n}\n/** @typedef InterpolateOptions */\n\n/**\n * Interpolate from A to B by extending A and B during interpolation to have\n * the same number of points. This allows for a smooth transition when they\n * have a different number of points.\n *\n * Ignores the `Z` character in paths unless both A and B end with it.\n *\n * @param {String} a The `d` attribute for a path\n * @param {String} b The `d` attribute for a path\n * @param {((command1, command2) => boolean|{\n * excludeSegment?: (command1, command2) => boolean;\n * snapEndsToInput?: boolean\n * })} interpolateOptions The excludeSegment function or an options object\n * - interpolateOptions.excludeSegment a function that takes a start command object and\n * end command object and returns true if the segment should be excluded from splitting.\n * - interpolateOptions.snapEndsToInput a boolean indicating whether end of input should\n * be sourced from input argument or computed.\n * @returns {Function} Interpolation function that maps t ([0, 1]) to a path `d` string.\n */\n\nfunction interpolatePath(a, b, interpolateOptions) {\n var aCommands = pathCommandsFromString(a);\n var bCommands = pathCommandsFromString(b);\n\n var _ref2 = _typeof(interpolateOptions) === 'object' ? interpolateOptions : {\n excludeSegment: interpolateOptions,\n snapEndsToInput: true\n },\n excludeSegment = _ref2.excludeSegment,\n snapEndsToInput = _ref2.snapEndsToInput;\n\n if (!aCommands.length && !bCommands.length) {\n return function nullInterpolator() {\n return '';\n };\n }\n\n var commandInterpolator = interpolatePathCommands(aCommands, bCommands, {\n excludeSegment: excludeSegment,\n snapEndsToInput: snapEndsToInput\n });\n return function pathStringInterpolator(t) {\n // at 1 return the final value without the extensions used during interpolation\n if (t === 1 && snapEndsToInput) {\n return b == null ? '' : b;\n }\n\n var interpolatedCommands = commandInterpolator(t); // convert to a string (fastest concat: https://jsperf.com/join-concat/150)\n\n var interpolatedString = '';\n\n var _iterator2 = _createForOfIteratorHelper(interpolatedCommands),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var interpolatedCommand = _step2.value;\n interpolatedString += commandToString(interpolatedCommand);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return interpolatedString;\n };\n}\n\nexport { interpolatePath, interpolatePathCommands, pathCommandsFromString };\n","import { color, hcl } from 'd3-color';\nimport { getCSSColorVariable } from '../styles/colors.js';\nimport { getString, isNumber } from './data.js';\nimport { isStringCSSVariable, getCSSVariableValue } from './misc.js';\n\n/** Retrieves color from the data if provided, fallbacks to CSS variables if the index was passed */\r\nfunction getColor(d, accessor, index, dontFallbackToCssVar) {\r\n if (Array.isArray(accessor) && isFinite(index))\r\n return accessor[index % accessor.length];\r\n const value = getString(d, accessor, index);\r\n return (value || ((isNumber(index) && !dontFallbackToCssVar) ? `var(${getCSSColorVariable(index)})` : null));\r\n}\r\nfunction hexToRgb(hex) {\r\n const parsed = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return parsed ? {\r\n r: parseInt(parsed[1], 16),\r\n g: parseInt(parsed[2], 16),\r\n b: parseInt(parsed[3], 16),\r\n } : { r: 0, g: 0, b: 0 };\r\n}\r\nfunction rgbToBrightness(rgb) {\r\n return (0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b) / 255;\r\n}\r\nfunction hexToBrightness(hex) {\r\n const rgb = hexToRgb(hex);\r\n return rgbToBrightness(rgb);\r\n}\r\nfunction getHexValue(s, context) {\r\n var _a;\r\n const hex = isStringCSSVariable(s) ? getCSSVariableValue(s, context) : s;\r\n return (_a = color(hex)) === null || _a === void 0 ? void 0 : _a.formatHex();\r\n}\r\nfunction rgbaToRgb(rgba, backgroundColor) {\r\n var _a;\r\n const rgb = (_a = color(rgba)) === null || _a === void 0 ? void 0 : _a.rgb();\r\n if (!rgb || rgb.opacity === 1)\r\n return rgb;\r\n const alpha = 1 - rgb.opacity;\r\n const bg = color(backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : '#fff').rgb();\r\n return {\r\n r: Math.round((rgb.opacity * (rgb.r / 255) + (alpha * (bg.r / 255))) * 255),\r\n g: Math.round((rgb.opacity * (rgb.g / 255) + (alpha * (bg.g / 255))) * 255),\r\n b: Math.round((rgb.opacity * (rgb.b / 255) + (alpha * (bg.b / 255))) * 255),\r\n };\r\n}\r\n/**\r\n * Makes a color brighter by a certain amount\r\n * @param inputColor - The color to brighten (hex, rgb, or rgba)\r\n * @param amount - Amount to brighten by (0-1)\r\n * @returns The brightened color in hex format\r\n */\r\nfunction brighter(inputColor, amount) {\r\n const c = hcl(inputColor);\r\n if (!c)\r\n return inputColor;\r\n return c.brighter(amount).formatHex();\r\n}\r\nfunction isColorDark(color, threshold = 0.55) {\r\n const hex = getHexValue(color, document.body);\r\n if (!hex)\r\n return false;\r\n return hexToBrightness(hex) < threshold;\r\n}\n\nexport { brighter, getColor, getHexValue, hexToBrightness, hexToRgb, isColorDark, rgbToBrightness, rgbaToRgb };\n//# sourceMappingURL=color.js.map\n","import { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalClosed, curveCardinalOpen, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore } from 'd3-shape';\n\nvar CurveType;\r\n(function (CurveType) {\r\n CurveType[\"Basis\"] = \"basis\";\r\n CurveType[\"BasisClosed\"] = \"basisClosed\";\r\n CurveType[\"BasisOpen\"] = \"basisOpen\";\r\n CurveType[\"Bundle\"] = \"bundle\";\r\n CurveType[\"Cardinal\"] = \"cardinal\";\r\n CurveType[\"CardinalClosed\"] = \"cardinalClosed\";\r\n CurveType[\"CardinalOpen\"] = \"cardinalOpen\";\r\n CurveType[\"CatmullRom\"] = \"catmullRom\";\r\n CurveType[\"CatmullRomClosed\"] = \"catmullRomClosed\";\r\n CurveType[\"CatmullRomOpen\"] = \"catmullRomOpen\";\r\n CurveType[\"Linear\"] = \"linear\";\r\n CurveType[\"LinearClosed\"] = \"linearClosed\";\r\n CurveType[\"MonotoneX\"] = \"monotoneX\";\r\n CurveType[\"MonotoneY\"] = \"monotoneY\";\r\n CurveType[\"Natural\"] = \"natural\";\r\n CurveType[\"Step\"] = \"step\";\r\n CurveType[\"StepAfter\"] = \"stepAfter\";\r\n CurveType[\"StepBefore\"] = \"stepBefore\";\r\n})(CurveType || (CurveType = {}));\r\nconst Curve = {\r\n [CurveType.Basis]: curveBasis,\r\n [CurveType.BasisClosed]: curveBasisClosed,\r\n [CurveType.BasisOpen]: curveBasisOpen,\r\n [CurveType.Bundle]: curveBundle,\r\n [CurveType.Cardinal]: curveCardinal,\r\n [CurveType.CardinalClosed]: curveCardinalClosed,\r\n [CurveType.CardinalOpen]: curveCardinalOpen,\r\n [CurveType.CatmullRom]: curveCatmullRom,\r\n [CurveType.CatmullRomClosed]: curveCatmullRomClosed,\r\n [CurveType.CatmullRomOpen]: curveCatmullRomOpen,\r\n [CurveType.Linear]: curveLinear,\r\n [CurveType.LinearClosed]: curveLinearClosed,\r\n [CurveType.MonotoneX]: curveMonotoneX,\r\n [CurveType.MonotoneY]: curveMonotoneY,\r\n [CurveType.Natural]: curveNatural,\r\n [CurveType.Step]: curveStep,\r\n [CurveType.StepAfter]: curveStepAfter,\r\n [CurveType.StepBefore]: curveStepBefore,\r\n};\n\nexport { Curve, CurveType };\n//# sourceMappingURL=curve.js.map\n","import { range, min, max } from 'd3-array';\nimport { line, curveCardinal, curveCardinalClosed } from 'd3-shape';\nimport { clamp } from './data.js';\n\n/*\r\n * Generate SVG path for rectangle with rounded corners\r\n *\r\n * @param {Object} props - Configuration object\r\n * @param {Number} props.x - Rect top left X coordinate\r\n * @param {Number} props.y - Rect top left Y coordinate\r\n * @param {Number} props.w - Rect width\r\n * @param {Number} props.h - Rect height\r\n * @param {Bool} [props.tl=false] - Round top left corner\r\n * @param {Bool} [props.tr=false] - Round top right corner\r\n * @param {Bool} [props.bl=false] - Round bottom left corner\r\n * @param {Bool} [props.br=false] - Round bottom right corner\r\n * @param {Number} [props.r=0] - Corner Radius\r\n * @return {String} Path string for the `d` attribute\r\n */\r\nfunction roundedRectPath({ x, y, w, h, tl = false, tr = false, bl = false, br = false, r = 0, }) {\r\n let path;\r\n path = `M${x + r},${y}h${w - 2 * r}`;\r\n let roundedR = tr ? r : 0;\r\n let angularR = tr ? 0 : r;\r\n path += `a${roundedR},${roundedR} 0 0 1 ${roundedR},${roundedR}`;\r\n path += `h${angularR}v${angularR}`;\r\n path += `v${h - 2 * r}`;\r\n roundedR = br ? r : 0;\r\n angularR = br ? 0 : r;\r\n path += `a${roundedR},${roundedR} 0 0 1 ${-roundedR},${roundedR}`;\r\n path += `v${angularR}h${-angularR}`;\r\n path += `h${2 * r - w}`;\r\n roundedR = bl ? r : 0;\r\n angularR = bl ? 0 : r;\r\n path += `a${roundedR},${roundedR} 0 0 1 ${-roundedR},${-roundedR}`;\r\n path += `h${-angularR}v${-angularR}`;\r\n path += `v${2 * r - h}`;\r\n roundedR = tl ? r : 0;\r\n angularR = tl ? 0 : r;\r\n path += `a${roundedR},${roundedR} 0 0 1 ${roundedR},${-roundedR}`;\r\n path += `v${-angularR}h${angularR}`;\r\n path += 'z';\r\n return path;\r\n}\r\nfunction polygon(size, n = 6, endAngle = 2 * Math.PI, open = false) {\r\n const r = n === 4 ? Math.sqrt(0.5) * size : size / 3.6 * 2;\r\n const deltaAngle = n === 4 ? Math.PI / 4 : 0; // rotate to 45 grads if shape is a rectangle\r\n const shiftedEndAngle = endAngle - deltaAngle;\r\n const completion = (shiftedEndAngle < 0 ? endAngle : shiftedEndAngle) / (2 * Math.PI);\r\n const nSegments = Math.ceil(n * completion);\r\n const centerAngle = 1 / n * Math.PI * 2; // /\\\r\n const baseAngle = (Math.PI - centerAngle) / 2; // /__\\\r\n const data = range(nSegments + (shiftedEndAngle >= 0 ? 1 : 0))\r\n .map((d, i) => {\r\n const isLastSegment = i === nSegments || (nSegments === 1 && shiftedEndAngle < 0);\r\n let mult = isLastSegment ? ((completion * n) % 1 || 1) : 1; // Handle partial shape\r\n if (shiftedEndAngle < 0) {\r\n mult += 0.5;\r\n }\r\n const angle = centerAngle * (i - 1 + mult);\r\n let radius;\r\n if (isLastSegment) {\r\n const thirdAngle = Math.PI - baseAngle - centerAngle * mult;\r\n radius = r * Math.sin(baseAngle) / Math.sin(thirdAngle); // Law of sines\r\n }\r\n else {\r\n radius = r;\r\n }\r\n return {\r\n x: Math.sin(angle + deltaAngle) * radius,\r\n y: -Math.cos(angle + deltaAngle) * radius,\r\n };\r\n });\r\n if (n === 4) {\r\n const angle = centerAngle * (-1 + 0.5);\r\n const thirdAngle = Math.PI * 0.5;\r\n const radius = r * Math.sin(baseAngle) / Math.sin(thirdAngle); // Law of sines\r\n data.unshift({\r\n x: Math.sin(angle + deltaAngle) * radius,\r\n y: -Math.cos(angle + deltaAngle) * radius,\r\n });\r\n }\r\n const path = line()\r\n /* eslint-disable-next-line dot-notation */\r\n .x(d => d['x'])\r\n /* eslint-disable-next-line dot-notation */\r\n .y(d => d['y'])\r\n .curve((open ? curveCardinal : curveCardinalClosed).tension(0.95));\r\n return path(data);\r\n}\r\nfunction circlePath(cx, cy, r) {\r\n return `\n M ${cx} ${cy}\n m ${-r}, 0\n a ${r},${r} 0 1,1 ${r * 2},0\n a ${r},${r} 0 1,1 ${-r * 2},0`;\r\n}\r\nfunction scoreRectPath({ x, y, w, h, r = 0, score = 1 }) {\r\n let path;\r\n const side = 1 / 4;\r\n const halfSide = side / 2;\r\n let part = score;\r\n // 8 1\r\n // - -\r\n // 7 | | 2\r\n // 6 | | 3\r\n // - -\r\n // 5 4\r\n // 1\r\n const hLength = min([w * 0.5 * (part / halfSide) + r, w * 0.5 - r]);\r\n path = `M${x + w * 0.5},${y}h${hLength}`;\r\n // 2, 3\r\n part = score - 1 / 8;\r\n if (part > 0) {\r\n path += `a${r},${r} 0 0 1 ${r},${r}`;\r\n const vLength = clamp(h * (part / side) - r, 0, h - 2 * r);\r\n path += `v${vLength}`;\r\n }\r\n // 4, 5\r\n part = score - 3 / 8;\r\n if (part > 0) {\r\n path += `a${r},${r} 0 0 1 ${-r},${r}`;\r\n const hLength = clamp(r - w * (part / side), 2 * r - w, 0);\r\n path += `h${hLength}`;\r\n }\r\n // 6, 7\r\n part = score - 5 / 8;\r\n if (part > 0) {\r\n path += `a${r},${r} 0 0 1 ${-r},${-r}`;\r\n const vLength = clamp(r - h * (part / side), 2 * r - h, 0);\r\n path += `v${vLength}`;\r\n }\r\n // 8\r\n part = score - 7 / 8;\r\n if (part > 0) {\r\n path += `a${r},${r} 0 0 1 ${r},${-r}`;\r\n const hLength = max([w * 0.5 * (part / halfSide) - r, 0]);\r\n path += `h${hLength}`;\r\n }\r\n return path;\r\n}\r\n/*\r\n * Replace L path command with arc with specified radius\r\n * @param {String} path - the path string\r\n * @param {number} r - radius in pixels\r\n * @returns {String} new path string\r\n */\r\nfunction convertLineToArc(path, r) {\r\n return path.toString().replace(/L(?<x>-?\\d*\\.?\\d*),(?<y>-?\\d+\\.?\\d*)/gm, (_, x, y) => `A ${r} ${r} 0 0 0 ${x} ${y}`);\r\n}\r\n/**\r\n * Generate an SVG path string for an arrow that follows a polyline path.\r\n * The arrow is composed of line segments between points and a triangular arrowhead at the end.\r\n *\r\n * @param opts - ArrowPolylinePathOptions object containing array of points and optional head dimensions.\r\n * @returns SVG path string for the arrow.\r\n */\r\nfunction arrowPolylinePath(points, arrowHeadLength = 8, arrowHeadWidth = 6, smoothing = 5) {\r\n if (points.length < 2)\r\n return '';\r\n // Calculate total path length\r\n let totalLength = 0;\r\n for (let i = 0; i < points.length - 1; i++) {\r\n const [x1, y1] = points[i];\r\n const [x2, y2] = points[i + 1];\r\n totalLength += Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n }\r\n // If the total length is zero or nearly zero, don't draw anything\r\n if (totalLength === 0)\r\n return '';\r\n // Let the default values be modifiable based on the line length\r\n let headLength = arrowHeadLength;\r\n let headWidth = arrowHeadWidth;\r\n // If the line is very short, scale down the arrow head dimensions\r\n const threshold = arrowHeadLength * 2;\r\n if (totalLength < threshold) {\r\n const scale = totalLength / threshold;\r\n headLength *= scale;\r\n headWidth *= scale;\r\n }\r\n // Ensure the arrow head length is never longer than the line itself\r\n headLength = Math.min(headLength / 2, totalLength);\r\n // Get the last two points for arrowhead calculation\r\n const [lastX, lastY] = points[points.length - 1];\r\n const [prevX, prevY] = points[points.length - 2];\r\n // Calculate direction vector for the last segment\r\n const dx = lastX - prevX;\r\n const dy = lastY - prevY;\r\n const segmentLength = Math.sqrt(dx * dx + dy * dy);\r\n const ux = dx / segmentLength;\r\n const uy = dy / segmentLength;\r\n // Tail point of the arrow (where the arrowhead starts)\r\n const tailX = lastX - headLength * ux;\r\n const tailY = lastY - headLength * uy;\r\n // Perpendicular vector for arrowhead width calculation\r\n const perpX = -uy;\r\n const perpY = ux;\r\n // Calculate the two base points of the arrowhead triangle\r\n const leftX = tailX + (headWidth / 2) * perpX;\r\n const leftY = tailY + (headWidth / 2) * perpY;\r\n const rightX = tailX - (headWidth / 2) * perpX;\r\n const rightY = tailY - (headWidth / 2) * perpY;\r\n // Build the path\r\n const pathParts = [];\r\n if (points.length === 2) {\r\n // For a single segment, create a curved path\r\n const [startX, startY] = points[0];\r\n // Adjust smoothing based on segment length\r\n const adjustedSmoothing = Math.min(smoothing, segmentLength / 3);\r\n // Calculate control points for a cubic Bézier curve with adjusted smoothing\r\n const cp1x = startX + ux * adjustedSmoothing;\r\n const cp1y = startY + uy * adjustedSmoothing + perpY * adjustedSmoothing * 0.5;\r\n const cp2x = tailX - ux * adjustedSmoothing;\r\n const cp2y = tailY - uy * adjustedSmoothing + perpY * adjustedSmoothing * 0.5;\r\n // Start path and add cubic Bézier curve\r\n pathParts.push(`M${startX},${startY}`);\r\n pathParts.push(`C${cp1x},${cp1y} ${cp2x},${cp2y} ${lastX},${lastY}`);\r\n }\r\n else {\r\n // For multiple segments, use smooth Bézier corners with absolute smoothing\r\n pathParts.push(`M${points[0][0]},${points[0][1]}`);\r\n for (let i = 0; i < points.length - 2; i++) {\r\n const [x1, y1] = points[i];\r\n const [x2, y2] = points[i + 1];\r\n const [x3, y3] = points[i + 2];\r\n // Calculate vectors for the current and next segment\r\n const v1x = x2 - x1;\r\n const v1y = y2 - y1;\r\n const v2x = x3 - x2;\r\n const v2y = y3 - y2;\r\n // Calculate lengths of segments\r\n const len1 = Math.sqrt(v1x * v1x + v1y * v1y);\r\n const len2 = Math.sqrt(v2x * v2x + v2y * v2y);\r\n // Calculate unit vectors\r\n const u1x = v1x / len1;\r\n const u1y = v1y / len1;\r\n const u2x = v2x / len2;\r\n const u2y = v2y / len2;\r\n // Adjust smoothing based on the minimum segment length\r\n const minSegmentLength = Math.min(len1, len2);\r\n const adjustedSmoothing = Math.min(smoothing, minSegmentLength / 3);\r\n // Calculate the corner points and control points with adjusted smoothing\r\n const corner1x = x2 - u1x * adjustedSmoothing;\r\n const corner1y = y2 - u1y * adjustedSmoothing;\r\n const corner2x = x2 + u2x * adjustedSmoothing;\r\n const corner2y = y2 + u2y * adjustedSmoothing;\r\n // Add line to approach point\r\n pathParts.push(`L${corner1x},${corner1y}`);\r\n // Add cubic Bézier curve for the corner\r\n pathParts.push(`C${x2},${y2} ${x2},${y2} ${corner2x},${corner2y}`);\r\n }\r\n // Add the final line segment to the tail point\r\n pathParts.push(`L${lastX},${lastY}`);\r\n }\r\n // Add the arrowhead\r\n pathParts.push(`M${leftX},${leftY} L${lastX},${lastY} L${rightX},${rightY}`);\r\n return pathParts.join(' ');\r\n}\n\nexport { arrowPolylinePath, circlePath, convertLineToArc, polygon, roundedRectPath, scoreRectPath };\n//# sourceMappingURL=path.js.map\n","var TrimMode;\r\n(function (TrimMode) {\r\n TrimMode[\"Start\"] = \"start\";\r\n TrimMode[\"Middle\"] = \"middle\";\r\n TrimMode[\"End\"] = \"end\";\r\n})(TrimMode || (TrimMode = {}));\r\nvar VerticalAlign;\r\n(function (VerticalAlign) {\r\n VerticalAlign[\"Top\"] = \"top\";\r\n VerticalAlign[\"Middle\"] = \"middle\";\r\n VerticalAlign[\"Bottom\"] = \"bottom\";\r\n})(VerticalAlign || (VerticalAlign = {}));\r\nvar FitMode;\r\n(function (FitMode) {\r\n FitMode[\"Wrap\"] = \"wrap\";\r\n FitMode[\"Trim\"] = \"trim\";\r\n})(FitMode || (FitMode = {}));\r\nvar TextAlign;\r\n(function (TextAlign) {\r\n TextAlign[\"Left\"] = \"left\";\r\n TextAlign[\"Center\"] = \"center\";\r\n TextAlign[\"Right\"] = \"right\";\r\n})(TextAlign || (TextAlign = {}));\n\nexport { FitMode, TextAlign, TrimMode, VerticalAlign };\n//# sourceMappingURL=text.js.map\n","'use strict';\n\n(function (global) {\n\n // minimal symbol polyfill for IE11 and others\n if (typeof Symbol !== 'function') {\n var Symbol = function(name) {\n return name;\n }\n\n Symbol.nonNative = true;\n }\n\n const STATE_PLAINTEXT = Symbol('plaintext');\n const STATE_HTML = Symbol('html');\n const STATE_COMMENT = Symbol('comment');\n\n const ALLOWED_TAGS_REGEX = /<(\\w*)>/g;\n const NORMALIZE_TAG_REGEX = /<\\/?([^\\s\\/>]+)/;\n\n function striptags(html, allowable_tags, tag_replacement) {\n html = html || '';\n allowable_tags = allowable_tags || [];\n tag_replacement = tag_replacement || '';\n\n let context = init_context(allowable_tags, tag_replacement);\n\n return striptags_internal(html, context);\n }\n\n function init_striptags_stream(allowable_tags, tag_replacement) {\n allowable_tags = allowable_tags || [];\n tag_replacement = tag_replacement || '';\n\n let context = init_context(allowable_tags, tag_replacement);\n\n return function striptags_stream(html) {\n return striptags_internal(html || '', context);\n };\n }\n\n striptags.init_streaming_mode = init_striptags_stream;\n\n function init_context(allowable_tags, tag_replacement) {\n allowable_tags = parse_allowable_tags(allowable_tags);\n\n return {\n allowable_tags : allowable_tags,\n tag_replacement: tag_replacement,\n\n state : STATE_PLAINTEXT,\n tag_buffer : '',\n depth : 0,\n in_quote_char : ''\n };\n }\n\n function striptags_internal(html, context) {\n if (typeof html != \"string\") {\n throw new TypeError(\"'html' parameter must be a string\");\n }\n\n let allowable_tags = context.allowable_tags;\n let tag_replacement = context.tag_replacement;\n\n let state = context.state;\n let tag_buffer = context.tag_buffer;\n let depth = context.depth;\n let in_quote_char = context.in_quote_char;\n let output = '';\n\n for (let idx = 0, length = html.length; idx < length; idx++) {\n let char = html[idx];\n\n if (state === STATE_PLAINTEXT) {\n switch (char) {\n case '<':\n state = STATE_HTML;\n tag_buffer += char;\n break;\n\n default:\n output += char;\n break;\n }\n }\n\n else if (state === STATE_HTML) {\n switch (char) {\n case '<':\n // ignore '<' if inside a quote\n if (in_quote_char) {\n break;\n }\n\n // we're seeing a nested '<'\n depth++;\n break;\n\n case '>':\n // ignore '>' if inside a quote\n if (in_quote_char) {\n break;\n }\n\n // something like this is happening: '<<>>'\n if (depth) {\n depth--;\n\n break;\n }\n\n // this is closing the tag in tag_buffer\n in_quote_char = '';\n state = STATE_PLAINTEXT;\n tag_buffer += '>';\n\n if (allowable_tags.has(normalize_tag(tag_buffer))) {\n output += tag_buffer;\n } else {\n output += tag_replacement;\n }\n\n tag_buffer = '';\n break;\n\n case '\"':\n case '\\'':\n // catch both single and double quotes\n\n if (char === in_quote_char) {\n in_quote_char = '';\n } else {\n in_quote_char = in_quote_char || char;\n }\n\n tag_buffer += char;\n break;\n\n case '-':\n if (tag_buffer === '<!-') {\n state = STATE_COMMENT;\n }\n\n tag_buffer += char;\n break;\n\n case ' ':\n case '\\n':\n if (tag_buffer === '<') {\n state = STATE_PLAINTEXT;\n output += '< ';\n tag_buffer = '';\n\n break;\n }\n\n tag_buffer += char;\n break;\n\n default:\n tag_buffer += char;\n break;\n }\n }\n\n else if (state === STATE_COMMENT) {\n switch (char) {\n case '>':\n if (tag_buffer.slice(-2) == '--') {\n // close the comment\n state = STATE_PLAINTEXT;\n }\n\n tag_buffer = '';\n break;\n\n default:\n tag_buffer += char;\n break;\n }\n }\n }\n\n // save the context for future iterations\n context.state = state;\n context.tag_buffer = tag_buffer;\n context.depth = depth;\n context.in_quote_char = in_quote_char;\n\n return output;\n }\n\n function parse_allowable_tags(allowable_tags) {\n let tag_set = new Set();\n\n if (typeof allowable_tags === 'string') {\n let match;\n\n while ((match = ALLOWED_TAGS_REGEX.exec(allowable_tags))) {\n tag_set.add(match[1]);\n }\n }\n\n else if (!Symbol.nonNative &&\n typeof allowable_tags[Symbol.iterator] === 'function') {\n\n tag_set = new Set(allowable_tags);\n }\n\n else if (typeof allowable_tags.forEach === 'function') {\n // IE11 compatible\n allowable_tags.forEach(tag_set.add, tag_set);\n }\n\n return tag_set;\n }\n\n function normalize_tag(tag_buffer) {\n let match = NORMALIZE_TAG_REGEX.exec(tag_buffer);\n\n return match ? match[1].toLowerCase() : null;\n }\n\n if (typeof define === 'function' && define.amd) {\n // AMD\n define(function module_factory() { return striptags; });\n }\n\n else if (typeof module === 'object' && module.exports) {\n // Node\n module.exports = striptags;\n }\n\n else {\n // Browser\n global.striptags = striptags;\n }\n}(this));\n","import { sum } from 'd3-array';\nimport striptags from 'striptags';\nimport { TextAlign, TrimMode, VerticalAlign } from '../types/text.js';\nimport { flatten, isArray, merge } from './data.js';\nimport { getTextAnchorFromTextAlign } from '../types/svg.js';\nimport { toPx } from './to-px.js';\nimport { UNOVIS_TEXT_DEFAULT, getFontWidthToHeightRatio, UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT, UNOVIS_TEXT_SEPARATOR_DEFAULT } from '../styles/index.js';\n\nconst textAlignToAnchor = (textAlign) => {\r\n switch (textAlign) {\r\n case TextAlign.Left: return 'start';\r\n case TextAlign.Right: return 'end';\r\n case TextAlign.Center: return 'middle';\r\n default: return null;\r\n }\r\n};\r\n/**\r\n * Converts a kebab-case string to camelCase.\r\n *\r\n * @param {string} str - The kebab-case string to be converted.\r\n * @returns {string} The resulting camelCase string.\r\n */\r\nfunction kebabCaseToCamel(str) {\r\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\r\n}\r\n/**\r\n * Converts a given string to kebab-case.\r\n * @param {string} str - The input string to be converted to kebab-case.\r\n * @returns {string} - The kebab-cased string.\r\n */\r\nfunction kebabCase(str) {\r\n var _a;\r\n return (_a = str.match(/[A-Z]{2,}(?=[A-Z][a-z0-9]*|\\b)|[A-Z]?[a-z0-9]*|[A-Z]|[0-9]+/g)) === null || _a === void 0 ? void 0 : _a.filter(Boolean).map(x => x.toLowerCase()).join('-');\r\n}\r\nfunction escapeStringKeepHash(str) {\r\n return str\r\n .replace(/['\"]/g, ''') // Escapes quotes with '\r\n // eslint-disable-next-line no-control-regex\r\n .replace(/\\u0000/g, '\\\\0') // Escapes null characters\r\n .replace(/\\n/g, '\\\\n') // Escapes new lines\r\n .replace(/\\r/g, '\\\\r') // Escapes carriage returns\r\n .replace(/\\v/g, '\\\\v') // Escapes vertical tabs\r\n .replace(/\\t/g, '\\\\t') // Escapes horizontal tabs\r\n .replace(/\\f/g, '\\\\f'); // Escapes form feeds\r\n}\r\n/**\r\n * Trims the input string from the start, leaving only the specified maximum length.\r\n * @param {string} str - The input string to be trimmed.\r\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\r\n * @returns {string} - The trimmed string.\r\n */\r\nfunction trimStringStart(str, maxLength = 15) {\r\n if (!str)\r\n return '';\r\n return str.length > maxLength ? `…${str.substr(str.length - maxLength, maxLength)}` : str;\r\n}\r\n/**\r\n * Trims the input string from the middle, leaving only the specified maximum length.\r\n * @param {string} str - The input string to be trimmed.\r\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\r\n * @returns {string} - The trimmed string.\r\n */\r\nfunction trimStringMiddle(str, maxLength = 15) {\r\n if (!str)\r\n return '';\r\n const dist = Math.floor((maxLength - 3) / 2);\r\n return str.length > maxLength ? `${str.substr(0, dist)}…${str.substr(-dist, dist)}` : str;\r\n}\r\n/**\r\n * Trims the input string from the end, leaving only the specified maximum length.\r\n * @param {string} str - The input string to be trimmed.\r\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\r\n * @returns {string} - The trimmed string.\r\n */\r\nfunction trimStringEnd(str, maxLength = 15) {\r\n if (!str)\r\n return '';\r\n return str.length > maxLength ? `${str.substr(0, maxLength)}…` : str;\r\n}\r\n/**\r\n * Trims the input string according to the specified trim mode.\r\n * @param {string} str - The input string to be trimmed.\r\n * @param {number} [length=15] - The maximum allowed length of the trimmed string.\r\n * @param {TrimMode} [type=TrimMode.Middle] - The trim mode to be applied.\r\n * @returns {string} - The trimmed string.\r\n */\r\nfunction trimString(str, length = 15, type = TrimMode.Middle) {\r\n if (!str)\r\n return '';\r\n let result = trimStringEnd(str, length);\r\n if (type === TrimMode.Start)\r\n result = trimStringStart(str, length);\r\n else if (type === TrimMode.Middle)\r\n result = trimStringMiddle(str, length);\r\n return result;\r\n}\r\n/**\r\n * Splits the input string according to the specified separators.\r\n * @param {string} text - The input string to be split.\r\n * @param {string[]} [separators=[' ']] - The array of separators to be used for splitting.\r\n * @returns {string[]} - The array of split words.\r\n */\r\nfunction splitString(text, separators = [' ']) {\r\n let result = [text];\r\n for (let i = 0; i < separators.length; i++) {\r\n const sep = separators[i];\r\n result.forEach((d, index) => {\r\n const separated = d.split(sep);\r\n const words = separated.map((word, j) => `${word}${j === separated.length - 1 ? '' : sep}`);\r\n result[index] = words;\r\n });\r\n result = flatten(result);\r\n }\r\n return result;\r\n}\r\n/**\r\n * Wraps an SVG text element to fit within the specified width.\r\n * @param {Selection<SVGTextElement, any, SVGElement, any>} textElement - The SVG text element to be wrapped.\r\n * @param {number} width - The maximum allowed width for the text element.\r\n * @param {(string | string[])} [separator=[' ', '-', '.', ',']] - The separator(s) to be used for wrapping.\r\n */\r\nfunction wrapSVGText(textElement, width, separator = [' ', '-', '.', ',']) {\r\n const text = textElement.text();\r\n if (!text)\r\n return;\r\n // Wrap\r\n const separators = (isArray(separator) ? separator : [separator]);\r\n const words = splitString(text, separators);\r\n const x = parseFloat(textElement.attr('x')) || 0;\r\n textElement.text('');\r\n let tspan = textElement.append('tspan').attr('x', x);\r\n let tspanContent = `${words[0]}`;\r\n tspan.text(tspanContent);\r\n words.forEach((word, i) => {\r\n if (i === 0)\r\n return;\r\n const tspanText = `${tspanContent}${word}`;\r\n tspan.text(tspanText);\r\n const tspanWidth = tspan.node().getComputedTextLength();\r\n if (tspanWidth > width) {\r\n tspan.text(tspanContent.trim());\r\n tspan = textElement.append('tspan')\r\n .attr('x', x)\r\n .attr('dy', '1.2em')\r\n .text(word);\r\n tspanContent = word;\r\n }\r\n else\r\n tspanContent += word;\r\n });\r\n}\r\n// TODO: When we calculate `maxCharacters` we don't take into account that the ellipsis character is wider than the regular characters,\r\n// which sometimes leads to labels getting cut off. We should rethink the tolerance value and maybe subtract a few characters from `maxCharacters`,\r\n// but this can be a breaking change and should be done carefully testing all components that use `trimSVGText`\r\n/**\r\n * Trims an SVG text element based on the specified max width, trim type, and other options.\r\n * @param {Selection<SVGTextElement, any, SVGElement, any>} svgTextSelection - The D3 selection of the SVG text element to be trimmed.\r\n * @param {number} [maxWidth=50] - The maximum width of the text element.\r\n * @param {TrimMode} [trimType=TrimMode.Middle] - The type of trim (start, middle, or end).\r\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method for text length calculation.\r\n * @param {number} [fontSize=0] - The font size of the text.\r\n * @param {number} [fontWidthToHeightRatio=getFontWidthToHeightRatio()] - The font width to height ratio.\r\n * @returns {boolean} True if the text was trimmed, false otherwise.\r\n */\r\nfunction trimSVGText(svgTextSelection, maxWidth, trimType, fastMode, fontSize, fontWidthToHeightRatio) {\r\n var _a;\r\n if (maxWidth === void 0) { maxWidth = 50; }\r\n if (trimType === void 0) { trimType = TrimMode.Middle; }\r\n if (fastMode === void 0) { fastMode = true; }\r\n if (fontSize === void 0) { fontSize = toPx(((_a = window.getComputedStyle(svgTextSelection.node())) === null || _a === void 0 ? void 0 : _a.fontSize) || UNOVIS_TEXT_DEFAULT.fontSize); }\r\n if (fontWidthToHeightRatio === void 0) { fontWidthToHeightRatio = getFontWidthToHeightRatio(); }\r\n const text = svgTextSelection.text() || '';\r\n const textLength = text.length;\r\n const textWidth = fastMode ? fontSize * textLength * fontWidthToHeightRatio : svgTextSelection.node().getComputedTextLength();\r\n const tolerance = 1.1;\r\n const maxCharacters = Math.ceil(textLength * maxWidth / (tolerance * textWidth));\r\n if (maxCharacters < textLength) {\r\n svgTextSelection.text(trimString(text, maxCharacters, trimType));\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Estimates the length of a string in pixels.\r\n * @param {string} str - The string to be measured.\r\n * @param {number} fontSize - The font size of the string.\r\n * @param {number} [fontWidthToHeightRatio=getFontWidthToHeightRatio()] - The font width to height ratio.\r\n * @returns {number} The estimated length of the string in pixels.\r\n */\r\nfunction estimateStringPixelLength(str, fontSize, fontWidthToHeightRatio = getFontWidthToHeightRatio()) {\r\n return str.length * fontSize * fontWidthToHeightRatio || 0;\r\n}\r\n/**\r\n * Calculates the precise length of a string in pixels.\r\n * @param {string} str - The string to be measured.\r\n * @param {string} [fontFamily] - The font family of the string.\r\n * @param {(string | number)} [fontSize] - The font size of the string.\r\n * @returns {number} The precise length of the string in pixels.\r\n */\r\nfunction getPreciseStringLengthPx(str, fontFamily, fontSize) {\r\n const svgNS = 'http://www.w3.org/2000/svg';\r\n const svg = document.createElementNS(svgNS, 'svg');\r\n const text = document.createElementNS(svgNS, 'text');\r\n text.textContent = str;\r\n text.setAttribute('font-size', `${fontSize}`);\r\n text.setAttribute('font-family', fontFamily);\r\n svg.appendChild(text);\r\n document.body.appendChild(svg);\r\n const length = text.getComputedTextLength();\r\n document.body.removeChild(svg);\r\n return length;\r\n}\r\n/**\r\n * Estimates the dimensions of an SVG text element.\r\n *\r\n * @export\r\n * @param {Selection<SVGTextElement, any, SVGElement, any>} svgTextSelection - The D3 selection of the SVG text element.\r\n * @param {number} fontSize - The font size.\r\n * @param {number} [dy=0.32] - The line height scaling factor.\r\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\r\n * @param {number} [fontWidthToHeightRatio] - The font width-to-height ratio.\r\n * @returns {{width: number, height: number}} - The estimated dimensions of the text element.\r\n */\r\nfunction estimateTextSize(svgTextSelection, fontSize, dy = 0.32, fastMode = true, fontWidthToHeightRatio) {\r\n fontWidthToHeightRatio = fontWidthToHeightRatio || getFontWidthToHeightRatio();\r\n const tspanSelection = svgTextSelection.selectAll('tspan');\r\n const lines = tspanSelection.size() || 1;\r\n const height = svgTextSelection.text() ? 0.85 * fontSize * lines * (1 + dy) - dy : 0;\r\n let width = 0;\r\n if (tspanSelection.empty()) {\r\n const textLength = svgTextSelection.text().length;\r\n width = fastMode ? fontSize * textLength * fontWidthToHeightRatio : svgTextSelection.node().getComputedTextLength();\r\n }\r\n else {\r\n for (const tspan of tspanSelection.nodes()) {\r\n const tspanTextLength = tspan.textContent.length;\r\n const w = fastMode ? fontSize * tspanTextLength * fontWidthToHeightRatio : tspan.getComputedTextLength();\r\n if (w > width)\r\n width = w;\r\n }\r\n }\r\n return { width, height };\r\n}\r\n/**\r\n * Breaks a text block into lines based on the specified width.\r\n *\r\n * @param {UnovisText} textBlock - The text block to break into lines.\r\n * @param {number | undefined} [width=undefined] - The maximum width of a line in pixels.\r\n * @param {(number | undefined)} [height=undefined] - The height limit for the wrapped text in pixels.\r\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\r\n * @param {string | string[]} [separator] - The word separators.\r\n * @returns {string[]} - The text split into lines.\r\n */\r\nfunction breakTextIntoLines(textBlock, width = undefined, fastMode = true, separator = UNOVIS_TEXT_SEPARATOR_DEFAULT, wordBreak = false) {\r\n var _a, _b, _c;\r\n const text = `${textBlock.text}`;\r\n if (!text)\r\n return [];\r\n const fontSize = (_a = textBlock.fontSize) !== null && _a !== void 0 ? _a : UNOVIS_TEXT_DEFAULT.fontSize;\r\n const fontFamily = (_b = textBlock.fontFamily) !== null && _b !== void 0 ? _b : UNOVIS_TEXT_DEFAULT.fontFamily;\r\n const fontWidthToHeightRatio = (_c = textBlock.fontWidthToHeightRatio) !== null && _c !== void 0 ? _c : UNOVIS_TEXT_DEFAULT.fontWidthToHeightRatio;\r\n const separators = Array.isArray(separator) ? separator : [separator];\r\n const splitByNewLine = text.split('\\n');\r\n return splitByNewLine.map((str) => {\r\n const lines = [];\r\n if (!width)\r\n return [str];\r\n const words = splitString(str, separators);\r\n let line = '';\r\n for (let i = 0; i < words.length; i += 1) {\r\n const textLengthPx = fastMode\r\n ? estimateStringPixelLength(line + words[i], fontSize, fontWidthToHeightRatio)\r\n : getPreciseStringLengthPx(line + words[i], fontFamily, fontSize);\r\n if (textLengthPx < width || i === 0) {\r\n line += words[i];\r\n }\r\n else {\r\n lines.push(line.trim());\r\n line = words[i];\r\n }\r\n // Word break functionality\r\n const minCharactersOnLine = 2;\r\n if (wordBreak) {\r\n while (line.trim().length > minCharactersOnLine) {\r\n const subLineLengthPx = fastMode\r\n ? estimateStringPixelLength(line, fontSize, fontWidthToHeightRatio)\r\n : getPreciseStringLengthPx(line, fontFamily, fontSize);\r\n if (subLineLengthPx > width) {\r\n let breakIndex = (line.trim()).length - minCharactersOnLine; // Place at least `minCharactersOnLine` characters onto the next line\r\n while (breakIndex > 0) {\r\n const subLine = `${line.substring(0, breakIndex)}${UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT}`; // Use hyphen when force breaking words\r\n const subLinePx = fastMode\r\n ? estimateStringPixelLength(subLine, fontSize, fontWidthToHeightRatio)\r\n : getPreciseStringLengthPx(subLine, fontFamily, fontSize);\r\n // If the subline is less than the width, or just one character left, break the line\r\n if (subLinePx <= width || breakIndex === 1) {\r\n lines.push(subLine.trim());\r\n line = line.substring(breakIndex);\r\n break;\r\n }\r\n breakIndex--;\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n // Adding the final line after the loop\r\n if (line)\r\n lines.push(line.trim());\r\n return lines;\r\n }).flat();\r\n}\r\n/**\r\n * Wraps a text or array of texts to fit within specified width and height, if provided.\r\n *\r\n * @export\r\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to wrap.\r\n * @param {number | undefined} [width=undefined] - The maximum width of a line in pixels.\r\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\r\n * @param {string | string[]} [separator] - The word separators.\r\n * @returns {UnovisWrappedText[]} - The wrapped texts.\r\n */\r\nfunction getWrappedText(text, width = undefined, height = undefined, fastMode = true, separator = UNOVIS_TEXT_SEPARATOR_DEFAULT, wordBreak = false) {\r\n // Merge input text with default values and convert it to an array if it's not already\r\n const textArrays = Array.isArray(text) ? text.map(t => merge(UNOVIS_TEXT_DEFAULT, t)) : [merge(UNOVIS_TEXT_DEFAULT, text)];\r\n // Break input text into lines based on width and separator\r\n const textWrapped = textArrays.map(block => breakTextIntoLines(block, width, fastMode, separator, wordBreak));\r\n const firstBlock = textArrays[0];\r\n let h = -firstBlock.fontSize * (firstBlock.lineHeight - 1);\r\n const blocks = [];\r\n // Process each text block and its lines based on height limit\r\n textArrays.forEach((text, i) => {\r\n var _a;\r\n let lines = textWrapped[i];\r\n const prevBlock = i > 0 ? blocks[i - 1] : undefined;\r\n const prevBlockMarginBottomPx = prevBlock ? prevBlock.marginBottom : 0;\r\n const marginTopPx = text.marginTop;\r\n const effectiveMarginPx = Math.max(prevBlockMarginBottomPx, marginTopPx);\r\n h += effectiveMarginPx;\r\n const dh = text.fontSize * text.lineHeight;\r\n let maxWidth = 0;\r\n // Iterate over lines and handle text overflow based on the height limit if provided\r\n for (let k = 0; k < lines.length; k += 1) {\r\n let line = lines[k];\r\n h += dh;\r\n const lineWithEllipsis = `${line} …`;\r\n const textLengthPx = fastMode\r\n ? estimateStringPixelLength(lineWithEllipsis, text.fontSize, text.fontWidthToHeightRatio)\r\n : getPreciseStringLengthPx(lineWithEllipsis, text.fontFamily, text.fontSize);\r\n maxWidth = Math.max(textLengthPx, maxWidth);\r\n if (height && (h + dh) > height && (k !== lines.length - 1)) {\r\n // Remove hyphen character from the end of the line if it's there\r\n const lastCharacter = line.charAt(line.length - 1);\r\n if (lastCharacter === UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT) {\r\n line = line.substr(0, lines[k].length - 1);\r\n }\r\n if (textLengthPx < width) {\r\n lines[k] = lineWithEllipsis;\r\n }\r\n else {\r\n lines[k] = `${lines[k].substr(0, lines[k].length - 2)}…`;\r\n }\r\n lines = lines.slice(0, k + 1);\r\n break;\r\n }\r\n }\r\n // Create wrapped text block with its calculated properties\r\n blocks.push(Object.assign(Object.assign({}, text), { _lines: lines, _estimatedHeight: h - ((prevBlock === null || prevBlock === void 0 ? void 0 : prevBlock._estimatedHeight) || 0), _maxWidth: Math.max(maxWidth, (_a = prevBlock === null || prevBlock === void 0 ? void 0 : prevBlock._maxWidth) !== null && _a !== void 0 ? _a : 0) }));\r\n });\r\n return blocks;\r\n}\r\n/**\r\n * Renders a text or array of texts to SVG tspan strings.\r\n *\r\n * @param {UnovisWrappedText[]} blocks - The wrapped text blocks.\r\n * @param {number} [x=0] - The x-coordinate for the tspan elements.\r\n * @param {number} [y] - The y-coordinate for the tspan elements.\r\n * @returns {string[]} - The SVG tspan strings.\r\n */\r\nfunction renderTextToTspanStrings(blocks, x = 0, y, dominantBaseline) {\r\n return blocks.map((b, i) => {\r\n const prevBlock = i > 0 ? blocks[i - 1] : undefined;\r\n const prevBlockMarginBottomEm = prevBlock ? prevBlock.marginBottom / prevBlock.fontSize : 0;\r\n const marginTopEm = b.marginTop / b.fontSize;\r\n const marginEm = Math.max(prevBlockMarginBottomEm, marginTopEm);\r\n const attributes = {\r\n fontSize: b.fontSize,\r\n fontFamily: b.fontFamily,\r\n fontWeight: b.fontWeight,\r\n fill: b.color,\r\n y: (i === 0) && y,\r\n };\r\n const attributesString = Object.entries(attributes)\r\n .filter(([_, value]) => value)\r\n .map(([key, value]) => `${kebabCase(key)}=\"${escapeStringKeepHash(value.toString())}\"`)\r\n .join(' ');\r\n return `<tspan xmlns=\"http://www.w3.org/2000/svg\" ${attributesString}>${b._lines.map((line, k) => {\r\n let dy;\r\n if (i === 0 && k === 0)\r\n dy = marginEm;\r\n else if (k === 0)\r\n dy = marginEm + b.lineHeight;\r\n else\r\n dy = b.lineHeight;\r\n return `<tspan x=\"${x}\" dy=\"${dy}em\" dominant-baseline=\"${dominantBaseline !== null && dominantBaseline !== void 0 ? dominantBaseline : 'auto'}\">${line.length ? line : ' '}</tspan>`;\r\n }).join('')}</tspan>`;\r\n });\r\n}\r\n/**\r\n * Estimates the height of wrapped text blocks.\r\n *\r\n * @export\r\n * @param {UnovisWrappedText[]} blocks - The wrapped text blocks.\r\n * @returns {number} - The estimated height of the wrapped text blocks.\r\n */\r\nfunction estimateWrappedTextHeight(blocks) {\r\n return sum(blocks, b => b._estimatedHeight);\r\n}\r\nconst allowedSvgTextTags = ['text', 'tspan', 'textPath', 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'glyphRef', 'textRef', 'textArea'];\r\n/**\r\n * Renders a text or array of texts to an SVG text element.\r\n * Calling this function will replace the contents of the specified SVG text element.\r\n *\r\n * @export\r\n * @param {SVGTextElement} textElement - The SVG text element to render the text into.\r\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to render.\r\n * @param {UnovisTextOptions} options - The text options.\r\n */\r\nfunction renderTextToSvgTextElement(textElement, text, options, \r\n// Dominant baseline sets alignment for a line of text, whereas\r\n// the `options.verticalAlign` property sets alignment for the entire text block\r\n// shifting it vertically, irrespective of the dominant baseline.\r\ndominantBaseline) {\r\n var _a, _b;\r\n const wrappedText = getWrappedText(text, options.width, undefined, options.fastMode, options.separator, options.wordBreak);\r\n const textElementX = (_a = options.x) !== null && _a !== void 0 ? _a : +textElement.getAttribute('x');\r\n const textElementY = (_b = options.y) !== null && _b !== void 0 ? _b : +textElement.getAttribute('y');\r\n const x = textElementX !== null && textElementX !== void 0 ? textElementX : 0;\r\n let y = textElementY !== null && textElementY !== void 0 ? textElementY : 0;\r\n if (options.textAlign) {\r\n textElement.setAttribute('text-anchor', getTextAnchorFromTextAlign(options.textAlign));\r\n }\r\n if (options.verticalAlign && options.verticalAlign !== VerticalAlign.Top) {\r\n const height = estimateWrappedTextHeight(wrappedText);\r\n const dy = options.verticalAlign === VerticalAlign.Middle ? -height / 2\r\n : options.verticalAlign === VerticalAlign.Bottom ? -height : 0;\r\n y += dy;\r\n }\r\n if (options.textRotationAngle) {\r\n textElement.setAttribute('transform', `rotate(${(options.textRotationAngle === 0 || options.textRotationAngle) ? options.textRotationAngle : 0} ${x} ${y})`);\r\n }\r\n else {\r\n textElement.removeAttribute('transform');\r\n }\r\n const parser = new DOMParser();\r\n textElement.textContent = '';\r\n wrappedText.forEach(block => {\r\n const svgCode = renderTextToTspanStrings([block], x, y, dominantBaseline).join('');\r\n const svgCodeSanitized = striptags(svgCode, allowedSvgTextTags);\r\n const parsedSvgCode = parser.parseFromString(svgCodeSanitized, 'image/svg+xml').firstChild;\r\n textElement.appendChild(parsedSvgCode);\r\n });\r\n}\r\n/**\r\n * Renders a text or array of texts into a frame.\r\n * Calling this function will replace the contents of the specified SVG group.\r\n *\r\n * @export\r\n * @param {SVGGElement} group - The SVG group element to render the text into.\r\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to render.\r\n * @param {UnovisTextFrameOptions} frameOptions - The text frame options.\r\n */\r\nfunction renderTextIntoFrame(group, text, frameOptions) {\r\n var _a, _b;\r\n const wrappedText = getWrappedText(text, frameOptions.width, frameOptions.height, frameOptions.fastMode, frameOptions.separator, frameOptions.wordBreak);\r\n const x = frameOptions.textAlign === TextAlign.Center ? frameOptions.width / 2\r\n : frameOptions.textAlign === TextAlign.Right ? frameOptions.width : 0;\r\n let y = 0;\r\n const height = estimateWrappedTextHeight(wrappedText);\r\n // If the frame has height, the text will be vertically aligned within the frame.\r\n // If not, the text will be aligned against the `y` position of the frame.\r\n const dh = frameOptions.height - height;\r\n y = frameOptions.verticalAlign === VerticalAlign.Middle ? dh / 2\r\n : frameOptions.verticalAlign === VerticalAlign.Bottom ? dh : 0;\r\n const translate = (frameOptions.x || frameOptions.y)\r\n ? `transform=\"translate(${(_a = frameOptions.x) !== null && _a !== void 0 ? _a : 0},${(_b = frameOptions.y) !== null && _b !== void 0 ? _b : 0})\"`\r\n : '';\r\n const svgCode = `<text\n xmlns=\"http://www.w3.org/2000/svg\"\n text-anchor=\"${getTextAnchorFromTextAlign(frameOptions.textAlign)}\"\n ${translate}\n >\n ${renderTextToTspanStrings(wrappedText, x, y, 'hanging').join('')}\n </text>`;\r\n const parser = new DOMParser();\r\n const svgCodeSanitized = striptags(svgCode, allowedSvgTextTags);\r\n const parsedSvgCode = parser.parseFromString(svgCodeSanitized, 'image/svg+xml').firstChild;\r\n group.textContent = '';\r\n group.appendChild(parsedSvgCode);\r\n}\n\nexport { allowedSvgTextTags, escapeStringKeepHash, estimateStringPixelLength, estimateTextSize, estimateWrappedTextHeight, getPreciseStringLengthPx, getWrappedText, kebabCase, kebabCaseToCamel, renderTextIntoFrame, renderTextToSvgTextElement, splitString, textAlignToAnchor, trimSVGText, trimString, trimStringEnd, trimStringMiddle, trimStringStart, wrapSVGText };\n//# sourceMappingURL=text.js.map\n","var ChordLabelAlignment;\r\n(function (ChordLabelAlignment) {\r\n ChordLabelAlignment[\"Along\"] = \"along\";\r\n ChordLabelAlignment[\"Perpendicular\"] = \"perpendicular\";\r\n})(ChordLabelAlignment || (ChordLabelAlignment = {}));\n\nexport { ChordLabelAlignment };\n//# sourceMappingURL=types.js.map\n","import { isString, cloneDeep, isFunction, isUndefined, without, isNumber, isObject, isEqual } from '../utils/data.js';\nimport { CoreDataModel } from './core.js';\n\nclass GraphDataModel extends CoreDataModel {\r\n constructor() {\r\n super(...arguments);\r\n this._nodes = [];\r\n this._links = [];\r\n this._inputNodesMap = new Map();\r\n this._nodesMap = new Map();\r\n // Model configuration\r\n this.nodeId = n => (isString(n.id) || isFinite(n.id)) ? `${n.id}` : undefined;\r\n this.linkId = l => (isString(l.id) || isFinite(l.id)) ? `${l.id}` : undefined;\r\n }\r\n getNodeById(id) {\r\n return this._nodesMap.get(id);\r\n }\r\n get data() {\r\n return this._data;\r\n }\r\n set data(inputData) {\r\n var _a, _b;\r\n if (!inputData)\r\n return;\r\n this._data = inputData;\r\n const prevNodes = this.nodes;\r\n const prevLinks = this.links;\r\n this._inputNodesMap.clear();\r\n this._nodesMap.clear();\r\n // Todo: Figure out why TypeScript complains about types\r\n const nodes = cloneDeep((_a = inputData === null || inputData === void 0 ? void 0 : inputData.nodes) !== null && _a !== void 0 ? _a : []);\r\n const links = cloneDeep((_b = inputData === null || inputData === void 0 ? void 0 : inputData.links) !== null && _b !== void 0 ? _b : []);\r\n // Every node or link can have a private state used for rendering needs\r\n // On data update we transfer state between objects with same ids\r\n this.transferState(nodes, prevNodes, this.nodeId);\r\n this.transferState(links, prevLinks, this.linkId);\r\n // Set node `_id` and `_index`\r\n nodes.forEach((node, i) => {\r\n node._index = i;\r\n node._id = this.nodeId(node) || `${i}`;\r\n this._inputNodesMap.set(node, inputData.nodes[i]);\r\n this._nodesMap.set(node._id, node);\r\n });\r\n // Sort nodes\r\n if (isFunction(this.nodeSort))\r\n nodes.sort(this.nodeSort);\r\n // Fill link source and target\r\n links.forEach((link, i) => {\r\n link._indexGlobal = i;\r\n link.source = this.findNode(nodes, link.source);\r\n link.target = this.findNode(nodes, link.target);\r\n });\r\n // Set link index for multiple link rendering\r\n links.forEach((link, i) => {\r\n if (!isUndefined(link._index) && !isUndefined(link._neighbours))\r\n return;\r\n const linksFiltered = links.filter(l => ((link.source === l.source) && (link.target === l.target)) ||\r\n ((link.source === l.target) && (link.target === l.source)));\r\n linksFiltered.forEach((l, i) => {\r\n var _a, _b;\r\n l._index = i;\r\n l._id = this.linkId(l) || `${(_a = l.source) === null || _a === void 0 ? void 0 : _a._id}-${(_b = l.target) === null || _b === void 0 ? void 0 : _b._id}-${i}`;\r\n l._neighbours = linksFiltered.length;\r\n l._direction = ((link.source === l.source) && (link.target === l.target)) ? 1 : -1;\r\n });\r\n });\r\n nodes.forEach(d => {\r\n // Determine if a node is connected or not and store it as a property\r\n d.links = links.filter(l => (l.source === d) || (l.target === d));\r\n d._isConnected = d.links.length !== 0;\r\n });\r\n this._nonConnectedNodes = nodes.filter(d => !d._isConnected);\r\n this._connectedNodes = without(nodes, ...this._nonConnectedNodes);\r\n this._nodes = nodes;\r\n this._links = links.filter(l => {\r\n if (l.source === l.target) {\r\n console.warn(`Unovis | Graph Data Model: Skipping link ${l._id} because it has the same source and target`);\r\n return false;\r\n }\r\n return l.source && l.target;\r\n });\r\n }\r\n get nodes() {\r\n return this._nodes;\r\n }\r\n get links() {\r\n return this._links;\r\n }\r\n get connectedNodes() {\r\n return this._connectedNodes;\r\n }\r\n get nonConnectedNodes() {\r\n return this._nonConnectedNodes;\r\n }\r\n findNode(nodes, nodeIdentifier) {\r\n let foundNode;\r\n if (isNumber(nodeIdentifier))\r\n foundNode = nodes[nodeIdentifier];\r\n else if (isString(nodeIdentifier))\r\n foundNode = nodes.find(node => this.nodeId(node) === nodeIdentifier);\r\n else if (isObject(nodeIdentifier))\r\n foundNode = nodes.find(node => isEqual(this._inputNodesMap.get(node), nodeIdentifier));\r\n if (!foundNode) {\r\n console.warn(`Unovis | Graph Data Model: Node ${nodeIdentifier} is missing from the nodes list`);\r\n }\r\n return foundNode;\r\n }\r\n transferState(items, itemsPrev, getId) {\r\n for (const item of items) {\r\n const dPrev = itemsPrev.find((dp) => getId(dp) === getId(item));\r\n if (dPrev)\r\n item._state = Object.assign({}, dPrev._state);\r\n else\r\n item._state = {};\r\n }\r\n }\r\n setNodeStateById(id, state) {\r\n const node = this.getNodeById(id);\r\n if (!node) {\r\n console.warn(`Unovis | Graph Data Model: Node ${id} not found`);\r\n return;\r\n }\r\n node._state = state;\r\n }\r\n}\n\nexport { GraphDataModel };\n//# sourceMappingURL=graph.js.map\n","import { ComponentDefaultConfig } from '../../core/component/config.js';\nimport { ChordLabelAlignment } from './types.js';\n\n// Core\r\nconst ChordDiagramDefaultConfig = Object.assign(Object.assign({}, ComponentDefaultConfig), { duration: 800, highlightedNodeId: undefined, highlightedLinkIds: [], linkColor: undefined, linkValue: (d) => d.value, nodeLevels: [], nodeWidth: 15, nodeColor: (d) => d.color, nodeLabel: (d) => { var _a; return (_a = d.label) !== null && _a !== void 0 ? _a : d.key; }, nodeLabelColor: undefined, nodeLabelAlignment: ChordLabelAlignment.Along, padAngle: 0.02, cornerRadius: 2, angleRange: [0, 2 * Math.PI], radiusScaleExponent: 2 });\n\nexport { ChordDiagramDefaultConfig };\n//# sourceMappingURL=config.js.map\n","import { interpolate } from 'd3-interpolate';\nimport { getColor } from '../../../utils/color.js';\nimport { smartTransition } from '../../../utils/d3.js';\n\nfunction createNode(selection) {\r\n selection\r\n .style('opacity', 0)\r\n .each((d, i, els) => {\r\n const arcNode = els[i];\r\n const angleCenter = (d.x0 + d.x1) / 2;\r\n const angleHalfWidth = (d.x1 - d.x0) / 2;\r\n arcNode._animState = {\r\n x0: angleCenter - angleHalfWidth * 0.8,\r\n x1: angleCenter + angleHalfWidth * 0.8,\r\n y0: d.y0,\r\n y1: d.y1,\r\n };\r\n });\r\n}\r\nfunction updateNode(selection, config, arcGen, duration) {\r\n const nodeColor = (d) => getColor(d.data, config.nodeColor, d.height);\r\n selection\r\n .attr('id', d => d.uid)\r\n .style('transition', `fill ${duration}ms`) // Animate color with CSS because we're using CSS-variables\r\n .style('fill', nodeColor)\r\n .style('stroke', nodeColor);\r\n if (duration) {\r\n const transition = smartTransition(selection, duration)\r\n .style('opacity', 1);\r\n transition.attrTween('d', (d, i, els) => {\r\n const arcNode = els[i];\r\n const nextAnimState = { x0: d.x0, x1: d.x1, y0: d.y0, y1: d.y1 };\r\n const datum = interpolate(arcNode._animState, nextAnimState);\r\n return (t) => {\r\n arcNode._animState = datum(t);\r\n return arcGen(arcNode._animState);\r\n };\r\n });\r\n }\r\n else {\r\n selection.attr('d', d => arcGen(d))\r\n .style('opacity', 1);\r\n }\r\n}\r\nfunction removeNode(selection, duration) {\r\n smartTransition(selection, duration)\r\n .style('opacity', 0)\r\n .remove();\r\n}\n\nexport { createNode, removeNode, updateNode };\n//# sourceMappingURL=node.js.map\n","import { css, injectGlobal } from '@emotion/css';\nimport { darkThemeCssSelectors } from '../../utils/theme.js';\n\nconst root = css `\n label: chord-diagram-component;\n`;\r\nconst variables = injectGlobal `\n :root {\n --vis-chord-diagram-link-fill-color: #cad5f6;\n --vis-chord-diagram-link-stroke-color: #777777;\n --vis-chord-diagram-link-opacity: 0.5;\n --vis-chord-diagram-link-stroke-opacity: 0.15;\n --vis-chord-diagram-link-highlighted-opacity: 0.9;\n --vis-chord-diagram-link-dimmed-opacity: 0.25;\n\n --vis-chord-diagram-node-highlighted-opacity: 0.9;\n --vis-chord-diagram-node-dimmed-opacity: 0.25;\n\n --vis-chord-diagram-label-text-fill-color-bright: #ffffff;\n --vis-chord-diagram-label-text-fill-color-dark: #a5abb2;\n --vis-chord-diagram-label-text-font-size: 1em;\n\n --vis-dark-chord-diagram-link-fill-color: #575c65;\n }\n\n ${darkThemeCssSelectors} ${`.${root}`} {\n --vis-chord-diagram-link-fill-color: var(--vis-dark-chord-diagram-link-fill-color);\n }\n`;\r\nconst background = css `\n label: background;\n`;\r\nconst nodes = css `\n label: nodes;\n`;\r\nconst links = css `\n label: links;\n`;\r\nconst labels = css `\n label: labels;\n`;\r\nconst node = css `\n label: node;\n stroke-width: 0;\n fill: var(--vis-color-main);\n stroke: var(--vis-color-main);\n transition: .1s fill-opacity;\n`;\r\nconst highlightedNode = css `\n label: highlighted;\n fill-opacity: var(--vis-chord-diagram-node-highlighted-opacity);\n stroke-width: 1.5;\n`;\r\nconst label = css `\n label: label;\n`;\r\nconst labelText = css `\n label: label-text;\n\n dominant-baseline: middle;\n user-select: none;\n font-size: var(--vis-chord-diagram-label-text-font-size);\n\n > textPath {\n dominant-baseline: central;\n }\n`;\r\nconst labelExit = css `\n label: label-exit;\n`;\r\nconst link = css `\n label: link;\n\n fill: var(--vis-chord-diagram-link-fill-color);\n fill-opacity: var(--vis-chord-diagram-link-opacity);\n stroke: var(--vis-chord-diagram-link-stroke-color);\n stroke-opacity: var(--vis-chord-diagram-link-stroke-opacity);\n transition: .1s fill-opacity;\n`;\r\nconst highlightedLink = css `\n label: highlighted;\n fill-opacity: var(--vis-chord-diagram-link-highlighted-opacity);\n`;\r\nconst transparent = css `\n label: transparent;\n\n ${`.${link}`}:not(${`.${highlightedLink}`}) {\n fill-opacity: var(--vis-chord-diagram-link-dimmed-opacity);\n }\n\n ${`.${node}`}:not(${`.${highlightedNode}`}) {\n fill-opacity: var(--vis-chord-diagram-node-dimmed-opacity);\n }\n`;\n\nexport { background, highlightedLink, highlightedNode, label, labelExit, labelText, labels, link, links, node, nodes, root, transparent, variables };\n//# sourceMappingURL=style.js.map\n","import { select } from 'd3-selection';\nimport { color } from 'd3-color';\nimport { trimSVGText } from '../../../utils/text.js';\nimport { smartTransition } from '../../../utils/d3.js';\nimport { getValue, getString, getNumber } from '../../../utils/data.js';\nimport { getColor, hexToBrightness } from '../../../utils/color.js';\nimport { ChordLabelAlignment } from '../types.js';\nimport { labelText } from '../style.js';\n\nconst LABEL_PADDING = 3;\r\nfunction getLabelFillColor(d, config) {\r\n var _a;\r\n const nodeLabelAlignment = (_a = getValue(d.data, config.nodeLabelAlignment)) !== null && _a !== void 0 ? _a : ChordLabelAlignment.Along;\r\n switch (nodeLabelAlignment) {\r\n case ChordLabelAlignment.Perpendicular: {\r\n return getColor(d.data, config.nodeColor, d.height);\r\n }\r\n case ChordLabelAlignment.Along: {\r\n const c = getColor(d.data, config.nodeColor, d.height);\r\n const colorParsed = color(c);\r\n const brightness = colorParsed ? hexToBrightness(colorParsed.hex()) : 0;\r\n return brightness > 0.65 ? 'var(--vis-chord-diagram-label-text-fill-color-dark)' : 'var(--vis-chord-diagram-label-text-fill-color-bright)';\r\n }\r\n }\r\n}\r\nfunction getLabelTextAnchor(d, config) {\r\n var _a;\r\n const nodeLabelAlignment = (_a = getValue(d.data, config.nodeLabelAlignment)) !== null && _a !== void 0 ? _a : ChordLabelAlignment.Along;\r\n switch (nodeLabelAlignment) {\r\n case ChordLabelAlignment.Perpendicular: {\r\n const angleCenter = (d.x0 + d.x1) / 2;\r\n const angleDegree = angleCenter * 180 / Math.PI;\r\n return angleDegree < 180 ? 'start' : 'end';\r\n }\r\n case ChordLabelAlignment.Along: {\r\n return null;\r\n }\r\n }\r\n}\r\nfunction getLabelTransform(d, config, radiusScale) {\r\n var _a;\r\n const nodeLabelAlignment = (_a = getValue(d.data, config.nodeLabelAlignment)) !== null && _a !== void 0 ? _a : ChordLabelAlignment.Along;\r\n switch (nodeLabelAlignment) {\r\n case ChordLabelAlignment.Perpendicular: {\r\n const r = radiusScale(d.y1) + LABEL_PADDING;\r\n const angleCenter = (d.x0 + d.x1) / 2;\r\n const angle = angleCenter - Math.PI / 2;\r\n const x = r * Math.cos(angle);\r\n const y = r * Math.sin(angle);\r\n return `translate(${x}, ${y})`;\r\n }\r\n case ChordLabelAlignment.Along:\r\n return null;\r\n }\r\n}\r\nfunction createLabel(selection, config, radiusScale) {\r\n selection.style('opacity', 0)\r\n .attr('transform', d => getLabelTransform(d, config, radiusScale));\r\n selection.append('text')\r\n .attr('class', labelText)\r\n .style('fill', d => getColor(d.data, config.nodeColor, d.height));\r\n}\r\nfunction updateLabel(selection, config, width, radiusScale, duration) {\r\n const { nodeLabel, nodeLabelColor, nodeWidth } = config;\r\n smartTransition(selection, duration)\r\n .attr('transform', d => getLabelTransform(d, config, radiusScale))\r\n .style('opacity', 1);\r\n const label = selection.select(`.${labelText}`);\r\n label.selectAll('textPath').remove();\r\n label.text(d => getString(d.data, nodeLabel))\r\n .style('transition', `fill ${duration}ms`)\r\n .style('fill', d => { var _a; return (_a = getColor(d.data, nodeLabelColor)) !== null && _a !== void 0 ? _a : getLabelFillColor(d, config); })\r\n .style('text-anchor', d => getLabelTextAnchor(d, config))\r\n .each((d, i, elements) => {\r\n var _a;\r\n const nodeLabelAlignment = (_a = getValue(d.data, config.nodeLabelAlignment)) !== null && _a !== void 0 ? _a : ChordLabelAlignment.Along;\r\n const radianArcLength = d.x1 - d.x0 - getNumber(d.data, config.padAngle) * 2;\r\n const radius = radiusScale(d.y1) - getNumber(d, config.nodeWidth) / 2;\r\n const arcLength = radius * radianArcLength;\r\n const maxWidth = (nodeLabelAlignment === ChordLabelAlignment.Along ? arcLength : width - LABEL_PADDING * 2);\r\n const textElement = select(elements[i])\r\n .call(trimSVGText, maxWidth)\r\n .attr('dx', nodeLabelAlignment === ChordLabelAlignment.Along ? LABEL_PADDING : null)\r\n .attr('dy', nodeLabelAlignment === ChordLabelAlignment.Along ? getNumber(d.data, nodeWidth) / 2 : null);\r\n const textWidth = textElement.node().getComputedTextLength();\r\n const labelText = textElement.text();\r\n if (nodeLabelAlignment === ChordLabelAlignment.Along) {\r\n textElement.text('');\r\n if (textWidth <= maxWidth) {\r\n textElement.append('textPath')\r\n .attr('href', `#${d.uid}`)\r\n .text(labelText);\r\n }\r\n }\r\n });\r\n smartTransition(label, duration)\r\n .attr('transform', d => {\r\n const nodeLabelAlignment = getValue(d.data, config.nodeLabelAlignment);\r\n if (nodeLabelAlignment !== ChordLabelAlignment.Perpendicular)\r\n return null;\r\n const angleCenter = (d.x0 + d.x1) / 2;\r\n const angleDegree = angleCenter * 180 / Math.PI;\r\n return `rotate(${angleDegree < 180 ? angleDegree - 90 : angleDegree + 90})`;\r\n });\r\n}\r\nfunction removeLabel(selection, duration) {\r\n smartTransition(selection, duration)\r\n .style('opacity', 0)\r\n .remove();\r\n}\n\nexport { LABEL_PADDING, createLabel, removeLabel, updateLabel };\n//# sourceMappingURL=label.js.map\n","import { group, index } from 'd3-array';\nimport { hierarchy } from 'd3-hierarchy';\nimport { pie } from 'd3-shape';\nimport { getNumber, groupBy } from '../../../utils/data.js';\n\nfunction transformData(node) {\r\n const { height, depth } = node;\r\n if (height > 0) {\r\n const d = node.data;\r\n const n = node;\r\n n.data = { key: d[0], values: d[1], depth, height, ancestors: n.ancestors().map(d => d.data.key) };\r\n }\r\n}\r\nfunction getHierarchyNodes(data, value, levels = []) {\r\n const nodeLevels = levels.map(level => (d) => d[level]);\r\n const nestedData = levels.length ? group(data, ...nodeLevels) : { key: 'root', children: data };\r\n const root = hierarchy(nestedData)\r\n .sum(d => getNumber(d, value))\r\n .each(transformData);\r\n return root;\r\n}\r\nfunction positionChildren(node, padding, scalingCoeff = 0.95) {\r\n if (!node.children)\r\n return;\r\n // We need to ensure levels with empty links still take up full space\r\n const containsLinks = node.value > 0;\r\n const length = node.x1 - node.x0;\r\n const scaledLength = length * (node.y0 === 0 ? 1 : scalingCoeff);\r\n const delta = length - scaledLength;\r\n const padAngle = containsLinks ? padding : scaledLength / node.children.length;\r\n const positions = pie()\r\n .startAngle(node.x0 + delta / 2)\r\n .endAngle(node.x1 - delta / 2)\r\n .padAngle(padAngle)\r\n .value(d => containsLinks ? d.value : 1)\r\n .sort((a, b) => node.children.indexOf(a) - node.children.indexOf(b))(node.children);\r\n node.children.forEach((child, i) => {\r\n const x0 = positions[i].startAngle;\r\n const x1 = positions[i].endAngle;\r\n const childDelta = (x1 - x0) * (1 - scalingCoeff);\r\n const xmid = (x0 + x1) / 2;\r\n child.x0 = containsLinks ? x0 + childDelta / 2 : xmid - padding / 2;\r\n child.x1 = containsLinks ? x1 - childDelta / 2 : xmid + padding / 2;\r\n });\r\n}\r\nfunction getRibbons(data, links, padding) {\r\n const groupedBySource = groupBy(links, d => d.source._id);\r\n const groupedByTarget = groupBy(links, d => d.target._id);\r\n const leafNodes = data.leaves();\r\n const leafNodesById = index(leafNodes, d => d.data._id);\r\n const getNodesInRibbon = (source, target, partitionHeight, nodes = []) => {\r\n nodes[source.height] = source;\r\n nodes[partitionHeight * 2 - target.height] = target;\r\n if (source.parent && target.parent)\r\n getNodesInRibbon(source.parent, target.parent, partitionHeight, nodes);\r\n return nodes;\r\n };\r\n const calculatePoints = (links, type, depth, maxDepth) => {\r\n links.forEach(link => {\r\n var _a;\r\n if (!link._state.points)\r\n link._state.points = [];\r\n const sourceLeaf = leafNodesById.get(link.source._id);\r\n const targetLeaf = leafNodesById.get(link.target._id);\r\n const nodesInRibbon = getNodesInRibbon(type === 'out' ? sourceLeaf : targetLeaf, type === 'out' ? targetLeaf : sourceLeaf, maxDepth);\r\n const currNode = nodesInRibbon[depth];\r\n const len = currNode.x1 - currNode.x0 - padding;\r\n const x0 = (_a = currNode._prevX1) !== null && _a !== void 0 ? _a : (currNode.x0 + padding / 2);\r\n const x1 = x0 + len * link._state.value / currNode.value;\r\n currNode._prevX1 = x1;\r\n const pointIdx = type === 'out' ? depth : maxDepth * 2 - 1 - depth;\r\n link._state.points[pointIdx] = { a0: x0, a1: x1, r: currNode.y1 };\r\n });\r\n };\r\n leafNodes.forEach(leafNode => {\r\n const outLinks = groupedBySource[leafNode.data._id] || [];\r\n const inLinks = groupedByTarget[leafNode.data._id] || [];\r\n for (let depth = 0; depth < leafNode.depth; depth += 1) {\r\n calculatePoints(outLinks, 'out', depth, leafNode.depth);\r\n calculatePoints(inLinks, 'in', depth, leafNode.depth);\r\n }\r\n });\r\n return links.map(l => ({\r\n source: leafNodesById.get(l.source._id),\r\n target: leafNodesById.get(l.target._id),\r\n data: l,\r\n points: l._state.points,\r\n _state: {},\r\n }));\r\n}\n\nexport { getHierarchyNodes, getRibbons, positionChildren };\n//# sourceMappingURL=layout.js.map\n","export var abs = Math.abs;\nexport var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\nexport var epsilon = 1e-12;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport {abs, cos, epsilon, halfPi, sin} from \"./math.js\";\n\nfunction defaultSource(d) {\n return d.source;\n}\n\nfunction defaultTarget(d) {\n return d.target;\n}\n\nfunction defaultRadius(d) {\n return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n return d.endAngle;\n}\n\nfunction defaultPadAngle() {\n return 0;\n}\n\nfunction defaultArrowheadRadius() {\n return 10;\n}\n\nfunction ribbon(headRadius) {\n var source = defaultSource,\n target = defaultTarget,\n sourceRadius = defaultRadius,\n targetRadius = defaultRadius,\n startAngle = defaultStartAngle,\n endAngle = defaultEndAngle,\n padAngle = defaultPadAngle,\n context = null;\n\n function ribbon() {\n var buffer,\n s = source.apply(this, arguments),\n t = target.apply(this, arguments),\n ap = padAngle.apply(this, arguments) / 2,\n argv = slice.call(arguments),\n sr = +sourceRadius.apply(this, (argv[0] = s, argv)),\n sa0 = startAngle.apply(this, argv) - halfPi,\n sa1 = endAngle.apply(this, argv) - halfPi,\n tr = +targetRadius.apply(this, (argv[0] = t, argv)),\n ta0 = startAngle.apply(this, argv) - halfPi,\n ta1 = endAngle.apply(this, argv) - halfPi;\n\n if (!context) context = buffer = path();\n\n if (ap > epsilon) {\n if (abs(sa1 - sa0) > ap * 2 + epsilon) sa1 > sa0 ? (sa0 += ap, sa1 -= ap) : (sa0 -= ap, sa1 += ap);\n else sa0 = sa1 = (sa0 + sa1) / 2;\n if (abs(ta1 - ta0) > ap * 2 + epsilon) ta1 > ta0 ? (ta0 += ap, ta1 -= ap) : (ta0 -= ap, ta1 += ap);\n else ta0 = ta1 = (ta0 + ta1) / 2;\n }\n\n context.moveTo(sr * cos(sa0), sr * sin(sa0));\n context.arc(0, 0, sr, sa0, sa1);\n if (sa0 !== ta0 || sa1 !== ta1) {\n if (headRadius) {\n var hr = +headRadius.apply(this, arguments), tr2 = tr - hr, ta2 = (ta0 + ta1) / 2;\n context.quadraticCurveTo(0, 0, tr2 * cos(ta0), tr2 * sin(ta0));\n context.lineTo(tr * cos(ta2), tr * sin(ta2));\n context.lineTo(tr2 * cos(ta1), tr2 * sin(ta1));\n } else {\n context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n context.arc(0, 0, tr, ta0, ta1);\n }\n }\n context.quadraticCurveTo(0, 0, sr * cos(sa0), sr * sin(sa0));\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n if (headRadius) ribbon.headRadius = function(_) {\n return arguments.length ? (headRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : headRadius;\n };\n\n ribbon.radius = function(_) {\n return arguments.length ? (sourceRadius = targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n };\n\n ribbon.sourceRadius = function(_) {\n return arguments.length ? (sourceRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n };\n\n ribbon.targetRadius = function(_) {\n return arguments.length ? (targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : targetRadius;\n };\n\n ribbon.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : startAngle;\n };\n\n ribbon.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : endAngle;\n };\n\n ribbon.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : padAngle;\n };\n\n ribbon.source = function(_) {\n return arguments.length ? (source = _, ribbon) : source;\n };\n\n ribbon.target = function(_) {\n return arguments.length ? (target = _, ribbon) : target;\n };\n\n ribbon.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n };\n\n return ribbon;\n}\n\nexport default function() {\n return ribbon();\n}\n\nexport function ribbonArrow() {\n return ribbon(defaultArrowheadRadius);\n}\n","import { select } from 'd3-selection';\nimport { ribbon } from 'd3-chord';\nimport { areaRadial } from 'd3-shape';\nimport { interpolatePath } from 'd3-interpolate-path';\nimport { Curve } from '../../../types/curve.js';\nimport { getColor } from '../../../utils/color.js';\nimport { smartTransition } from '../../../utils/d3.js';\nimport { convertLineToArc } from '../../../utils/path.js';\n\n// Generators\r\nfunction emptyPath() {\r\n return 'M0,0 L0,0';\r\n}\r\n// Generators\r\nconst ribbonGen = ribbon()\r\n .source(d => d[0])\r\n .target(d => d[d.length - 1])\r\n .startAngle(d => d.a0)\r\n .endAngle(d => d.a1);\r\nconst areaGen = areaRadial()\r\n .curve(Curve.catmullRom.alpha(0.5))\r\n .startAngle((d, i, points) => i < points.length / 2 ? d.a1 : d.a0)\r\n .endAngle((d, i, points) => i < points.length / 2 ? d.a0 : d.a1);\r\n// Creates a path from set of points\r\nfunction linkGen(points, radiusScale) {\r\n var _a;\r\n const link = (points.length === 2 ? ribbonGen : areaGen);\r\n link.radius(d => radiusScale(d.r));\r\n const linkPath = link(points);\r\n if (points.length === 2)\r\n return linkPath;\r\n // Replace closePath with line to starting point\r\n const area = linkPath.slice(0, -1);\r\n const path = area.concat(`L${(_a = area.match(/M-?\\d*\\.?\\d*[,\\s*]-?\\d*\\.?\\d*/)) === null || _a === void 0 ? void 0 : _a[0].slice(1)}`);\r\n // Convert line edges to arcs\r\n const radius = Math.max(radiusScale(points[0].r), 0);\r\n return convertLineToArc(path, radius);\r\n}\r\nfunction createLink(selection, radiusScale) {\r\n selection\r\n .attr('d', d => linkGen(d.points, radiusScale) || emptyPath())\r\n .style('opacity', 0);\r\n}\r\nfunction updateLink(selection, config, radiusScale, duration) {\r\n selection\r\n .style('transition', `fill ${duration}ms`)\r\n .style('fill', d => getColor(d.data, config.linkColor))\r\n .style('stroke', d => getColor(d.data, config.linkColor));\r\n const transition = smartTransition(selection, duration)\r\n .style('opacity', 1);\r\n if (duration) {\r\n transition.attrTween('d', (d, i, el) => {\r\n const previous = select(el[i]).attr('d');\r\n const next = linkGen(d.points, radiusScale) || emptyPath();\r\n return interpolatePath(previous, next);\r\n });\r\n }\r\n else {\r\n transition.attr('d', d => linkGen(d.points, radiusScale) || emptyPath());\r\n }\r\n}\r\nfunction removeLink(selection, duration) {\r\n smartTransition(selection, duration)\r\n .style('opacity', 0)\r\n .remove();\r\n}\n\nexport { createLink, emptyPath, removeLink, updateLink };\n//# sourceMappingURL=link.js.map\n","import { max } from 'd3-array';\nimport { partition } from 'd3-hierarchy';\nimport { scalePow } from 'd3-scale';\nimport { arc } from 'd3-shape';\nimport { ComponentCore } from '../../core/component/index.js';\nimport { GraphDataModel } from '../../data-models/graph.js';\nimport { getValue, getString, getNumber, isNumber } from '../../utils/data.js';\nimport { estimateStringPixelLength } from '../../utils/text.js';\nimport { getCSSVariableValueInPixels } from '../../utils/misc.js';\nimport { ChordLabelAlignment } from './types.js';\nimport { ChordDiagramDefaultConfig } from './config.js';\nimport { createNode, updateNode, removeNode } from './modules/node.js';\nimport { LABEL_PADDING, createLabel, updateLabel, removeLabel } from './modules/label.js';\nimport { getHierarchyNodes, positionChildren, getRibbons } from './modules/layout.js';\nimport { createLink, updateLink, removeLink } from './modules/link.js';\nimport * as style from './style.js';\nimport { background, links, nodes, labels, transparent, link, highlightedLink, node, highlightedNode, label, labelExit } from './style.js';\n\nclass ChordDiagram extends ComponentCore {\r\n constructor(config) {\r\n super();\r\n this._defaultConfig = ChordDiagramDefaultConfig;\r\n this.config = this._defaultConfig;\r\n this.datamodel = new GraphDataModel();\r\n this.arcGen = arc();\r\n this.radiusScale = scalePow();\r\n this.events = {\r\n [ChordDiagram.selectors.node]: {\r\n mouseover: this._onNodeMouseOver.bind(this),\r\n mouseout: this._onNodeMouseOut.bind(this),\r\n },\r\n [ChordDiagram.selectors.link]: {\r\n mouseover: this._onLinkMouseOver.bind(this),\r\n mouseout: this._onLinkMouseOut.bind(this),\r\n },\r\n [ChordDiagram.selectors.label]: {\r\n mouseover: this._onNodeMouseOver.bind(this),\r\n mouseout: this._onNodeMouseOut.bind(this),\r\n },\r\n };\r\n this._nodes = [];\r\n this._links = [];\r\n if (config)\r\n this.setConfig(config);\r\n this.background = this.g.append('rect').attr('class', background);\r\n this.linkGroup = this.g.append('g').attr('class', links);\r\n this.nodeGroup = this.g.append('g').attr('class', nodes);\r\n this.labelGroup = this.g.append('g').attr('class', labels);\r\n }\r\n get _forceHighlight() {\r\n var _a;\r\n return this.config.highlightedNodeId !== undefined || ((_a = this.config.highlightedLinkIds) === null || _a === void 0 ? void 0 : _a.length) > 0;\r\n }\r\n get bleed() {\r\n const { config } = this;\r\n const padding = LABEL_PADDING * 2;\r\n let top = 0;\r\n let bottom = 0;\r\n let right = 0;\r\n let left = 0;\r\n this._nodes.forEach(n => {\r\n var _a;\r\n const nodeLabelAlignment = getValue(n.data, config.nodeLabelAlignment);\r\n if (n.height === 0 && nodeLabelAlignment === ChordLabelAlignment.Perpendicular) {\r\n const label = (_a = getString(n.data, config.nodeLabel)) !== null && _a !== void 0 ? _a : '';\r\n const fontSize = getCSSVariableValueInPixels('var(--vis-chord-diagram-label-text-font-size)', this.element);\r\n const labelWidth = estimateStringPixelLength(label, fontSize);\r\n const [x, y] = this.arcGen.centroid(n);\r\n if (x < 0)\r\n left = Math.max(left, labelWidth);\r\n else\r\n right = Math.max(right, labelWidth);\r\n if (y < 0)\r\n top = Math.max(top, labelWidth);\r\n else\r\n bottom = Math.max(bottom, labelWidth);\r\n }\r\n });\r\n left += padding;\r\n right += padding;\r\n bottom += padding;\r\n top += padding;\r\n return { top, bottom, left, right };\r\n }\r\n setSize(width, height, containerWidth, containerHeight) {\r\n super.setSize(width, height, containerWidth, containerHeight);\r\n // Setting radius for initial bleed calculation. This ensures the correct radius is set when render is called\r\n this.radiusScale\r\n .exponent(this.config.radiusScaleExponent)\r\n .range([0, Math.min(width, height) / 2]);\r\n }\r\n setData(data) {\r\n super.setData(data);\r\n this._layoutData();\r\n }\r\n _layoutData() {\r\n const { nodes } = this.datamodel;\r\n let { links } = this.datamodel;\r\n const { padAngle, linkValue, nodeLevels } = this.config;\r\n nodes.forEach(n => { delete n._state.value; });\r\n links.forEach(l => {\r\n delete l._state.points;\r\n l._state.value = getNumber(l, linkValue);\r\n l.source._state.value = (l.source._state.value || 0) + getNumber(l, linkValue);\r\n l.target._state.value = (l.target._state.value || 0) + getNumber(l, linkValue);\r\n });\r\n links = links.filter(d => d._state.value);\r\n const root = getHierarchyNodes(nodes, d => { var _a; return (_a = d._state) === null || _a === void 0 ? void 0 : _a.value; }, nodeLevels);\r\n const partitionData = partition().size([this.config.angleRange[1], 1])(root);\r\n partitionData.each((n, i) => {\r\n positionChildren(n, padAngle);\r\n n.uid = `${this.uid.substr(0, 4)}-${i}`;\r\n n.x0 = Number.isNaN(n.x0) ? 0 : n.x0;\r\n n.x1 = Number.isNaN(n.x1) ? 0 : n.x1;\r\n n._state = {};\r\n });\r\n const partitionDataWithRoot = partitionData.descendants();\r\n this._rootNode = partitionDataWithRoot.find(d => d.depth === 0);\r\n this._nodes = partitionDataWithRoot.filter(d => d.depth !== 0); // Filter out the root node\r\n this._links = getRibbons(partitionData, links, padAngle);\r\n }\r\n _render(customDuration) {\r\n var _a;\r\n super._render(customDuration);\r\n const { config, bleed } = this;\r\n this._layoutData();\r\n const duration = isNumber(customDuration) ? customDuration : config.duration;\r\n const size = Math.min(this._width, this._height);\r\n const radius = size / 2 - max([bleed.top, bleed.bottom, bleed.left, bleed.right]);\r\n const numLevels = 1 + ((_a = config.nodeLevels) === null || _a === void 0 ? void 0 : _a.length);\r\n const maxSpace = config.nodeWidth * numLevels;\r\n const nodeWidth = radius > maxSpace ? config.nodeWidth : Math.max(radius / numLevels, 0);\r\n this.radiusScale.range([0, Math.max(radius, 0)]);\r\n this.arcGen\r\n .startAngle(d => d.x0 + config.padAngle / 2 - (d.value ? 0 : Math.PI / 360))\r\n .endAngle(d => d.x1 - config.padAngle / 2 + (d.value ? 0 : Math.PI / 360))\r\n .cornerRadius(d => getNumber(d.data, config.cornerRadius))\r\n .innerRadius(d => Math.max(this.radiusScale(d.y1) - nodeWidth, 0))\r\n .outerRadius(d => this.radiusScale(d.y1));\r\n this.g.classed(transparent, this._forceHighlight);\r\n this.background\r\n .attr('width', this._width)\r\n .attr('height', this._height)\r\n .style('opacity', 0);\r\n // Center the view\r\n this.nodeGroup.attr('transform', `translate(${this._width / 2},${this._height / 2})`);\r\n this.labelGroup.attr('transform', `translate(${this._width / 2},${this._height / 2})`);\r\n this.linkGroup.attr('transform', `translate(${this._width / 2},${this._height / 2})`);\r\n // Links\r\n const linksSelection = this.linkGroup\r\n .selectAll(`.${link}`)\r\n .data(this._links, d => String(d.data._id));\r\n const linksEnter = linksSelection.enter().append('path')\r\n .attr('class', link)\r\n .call(createLink, this.radiusScale);\r\n const linksMerged = linksSelection\r\n .merge(linksEnter)\r\n .classed(highlightedLink, l => {\r\n var _a, _b;\r\n const linkId = (_a = l.data.id) !== null && _a !== void 0 ? _a : l.data._indexGlobal;\r\n return (_b = config.highlightedLinkIds) === null || _b === void 0 ? void 0 : _b.includes(linkId);\r\n });\r\n linksMerged.call(updateLink, config, this.radiusScale, duration);\r\n linksSelection.exit()\r\n .call(removeLink, duration);\r\n // Nodes\r\n const nodesSelection = this.nodeGroup\r\n .selectAll(`.${node}`)\r\n .data(this._nodes, d => String(d.uid));\r\n const nodesEnter = nodesSelection.enter().append('path')\r\n .attr('class', node)\r\n .call(createNode, config);\r\n const nodesMerged = nodesSelection\r\n .merge(nodesEnter)\r\n .classed(highlightedNode, d => config.highlightedNodeId === d.data._id);\r\n nodesMerged.call(updateNode, config, this.arcGen, duration, this.bleed);\r\n nodesSelection.exit()\r\n .call(removeNode, duration);\r\n // Labels\r\n const labelWidth = size - radius;\r\n const labels = this.labelGroup\r\n .selectAll(`.${label}`)\r\n .data(this._nodes, d => String(d.uid));\r\n const labelEnter = labels.enter().append('g')\r\n .attr('class', label)\r\n .call(createLabel, config, this.radiusScale);\r\n const labelsMerged = labels.merge(labelEnter);\r\n labelsMerged.call(updateLabel, config, labelWidth, this.radiusScale, duration);\r\n labels.exit()\r\n .attr('class', labelExit)\r\n .call(removeLabel, duration);\r\n }\r\n _onNodeMouseOver(d) {\r\n let ribbons;\r\n if (d.children) {\r\n const leaves = d.leaves();\r\n ribbons = this._links.filter(l => leaves.find(leaf => l.source.data.id === leaf.data.id || l.target.data.id === leaf.data.id));\r\n }\r\n else {\r\n const leaf = d;\r\n ribbons = this._links.filter(l => l.source.data.id === leaf.data.id || l.target.data.id === leaf.data.id);\r\n }\r\n // Nodes without links should still be highlighted\r\n if (!ribbons.length)\r\n d._state.hovered = true;\r\n this._highlightOnHover(ribbons);\r\n }\r\n _onNodeMouseOut() {\r\n this._highlightOnHover();\r\n }\r\n _onLinkMouseOver(d) {\r\n this._highlightOnHover([d]);\r\n }\r\n _onLinkMouseOut() {\r\n this._highlightOnHover();\r\n }\r\n _highlightOnHover(links) {\r\n if (this._forceHighlight)\r\n return;\r\n if (links) {\r\n links.forEach(l => {\r\n l._state.hovered = true;\r\n const sourcePath = l.source.path(this._rootNode);\r\n const targetPath = l.target.path(this._rootNode);\r\n sourcePath.forEach(n => { if (n.depth)\r\n n._state.hovered = true; });\r\n targetPath.forEach(n => { if (n.depth)\r\n n._state.hovered = true; });\r\n });\r\n }\r\n else {\r\n this._nodes.forEach(n => { delete n._state.hovered; });\r\n this._links.forEach(l => { delete l._state.hovered; });\r\n }\r\n this.nodeGroup.selectAll(`.${node}`)\r\n .classed(highlightedNode, d => d._state.hovered);\r\n this.linkGroup.selectAll(`.${link}`)\r\n .classed(highlightedLink, d => d._state.hovered);\r\n this.g.classed(transparent, !!links);\r\n }\r\n}\r\nChordDiagram.selectors = style;\n\nexport { ChordDiagram };\n//# sourceMappingURL=index.js.map\n","// ── External Dependencies & Registrations\nimport { ChordDiagram, type ChordInputLink, type ChordInputNode, type GraphData, SingleContainer } from '@unovis/ts';\n\n// ── Local\nimport { categoricalColor, type ColorModeId, INK } from '@/palette';\n\n// ── Types ────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport interface ChordDiagramNode extends ChordInputNode {\n id: string;\n label: string;\n}\n\nexport interface ChordDiagramLink extends ChordInputLink {\n source: string;\n target: string;\n value: number;\n}\n\nexport interface ChordDiagramData {\n links: ChordDiagramLink[];\n nodes: ChordDiagramNode[];\n}\n\nexport interface ChordDiagramOptions {\n colorModeId?: ColorModeId;\n nodeWidth?: number;\n padAngle?: number;\n}\n\nexport interface ChordDiagramRenderHandle {\n resize: () => void;\n svg: SVGSVGElement;\n}\n\n// ── Constants ────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nconst DEFAULT_NODE_WIDTH = 16;\nconst DEFAULT_PAD_ANGLE = 0.02;\n\n// ── Actions ──────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport function renderChordDiagram(data: ChordDiagramData, renderTo: HTMLElement, options: ChordDiagramOptions = {}): ChordDiagramRenderHandle {\n const colorModeId = options.colorModeId ?? 'light';\n const ink = INK[colorModeId];\n\n const chordDiagram = new ChordDiagram<ChordDiagramNode, ChordDiagramLink>({\n linkColor: (link) => categoricalColor(data.nodes.findIndex((node) => node.id === link.source), colorModeId),\n nodeColor: (_node, index) => categoricalColor(index, colorModeId),\n nodeLabel: (node) => ('label' in node ? node.label : node.key),\n nodeLabelColor: ink.primary,\n nodeWidth: options.nodeWidth ?? DEFAULT_NODE_WIDTH,\n padAngle: options.padAngle ?? DEFAULT_PAD_ANGLE\n });\n\n const graphData: GraphData<ChordDiagramNode, ChordDiagramLink> = { links: data.links, nodes: data.nodes };\n const container = new SingleContainer<GraphData<ChordDiagramNode, ChordDiagramLink>>(renderTo, { component: chordDiagram }, graphData);\n\n return {\n resize: () => {\n container.render();\n },\n get svg() {\n return container.element;\n }\n };\n}\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],"mappings":"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"}
|