ose-app 0.2.5__py3-none-any.whl → 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. ose_app/static/js/admin.js +0 -1
  2. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-BDr_frBe.js +0 -1
  3. ose_app/static/js/chunks/CollapsibleCard-DoX0kPCZ.js +0 -1
  4. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-CBzsmnqW.js +0 -1
  5. ose_app/static/js/chunks/_plugin-vue_export-helper-DlAUqK2U.js +0 -1
  6. ose_app/static/js/chunks/bootbox-D3SJ_Fwv.js +0 -1
  7. ose_app/static/js/chunks/constants-CzBHF1EN.js +0 -1
  8. ose_app/static/js/chunks/filter-CiYqP1_r.js +0 -1
  9. ose_app/static/js/chunks/index-sLCKmIWG-umQeu_-w.js +0 -1
  10. ose_app/static/js/editor.js +0 -1
  11. ose_app/static/js/release.js +0 -1
  12. ose_app/static/js/settings.js +0 -1
  13. ose_app/static/js/visualise.js +2 -3
  14. {ose_app-0.2.5.dist-info → ose_app-0.3.0.dist-info}/METADATA +2 -2
  15. {ose_app-0.2.5.dist-info → ose_app-0.3.0.dist-info}/RECORD +17 -57
  16. ose_app/static/excel-bootstrap-table-filter-bundle.js.map +0 -1
  17. ose_app/static/excel-bootstrap-table-filter-bundle.min.js.map +0 -1
  18. ose_app/static/js/admin.js.map +0 -1
  19. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-BDr_frBe.js.map +0 -1
  20. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-MonxH8xj.js +0 -2
  21. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-MonxH8xj.js.map +0 -1
  22. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-DKAZyKKr-DTksKjtf.js +0 -2
  23. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-DKAZyKKr-DTksKjtf.js.map +0 -1
  24. ose_app/static/js/chunks/CollapsibleCard-BQR8R54V.js +0 -2
  25. ose_app/static/js/chunks/CollapsibleCard-BQR8R54V.js.map +0 -1
  26. ose_app/static/js/chunks/CollapsibleCard-DgwkQKDg.js +0 -2
  27. ose_app/static/js/chunks/CollapsibleCard-DgwkQKDg.js.map +0 -1
  28. ose_app/static/js/chunks/CollapsibleCard-DoX0kPCZ.js.map +0 -1
  29. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-CBzsmnqW.js.map +0 -1
  30. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-EcINi797.js +0 -43
  31. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-EcINi797.js.map +0 -1
  32. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-bumDOBqD.js +0 -43
  33. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-bumDOBqD.js.map +0 -1
  34. ose_app/static/js/chunks/_plugin-vue_export-helper-DlAUqK2U.js.map +0 -1
  35. ose_app/static/js/chunks/bootbox-D3SJ_Fwv.js.map +0 -1
  36. ose_app/static/js/chunks/constants-CzBHF1EN.js.map +0 -1
  37. ose_app/static/js/chunks/constants-DL6Hx3V0.js +0 -2
  38. ose_app/static/js/chunks/constants-DL6Hx3V0.js.map +0 -1
  39. ose_app/static/js/chunks/constants-DPgwRV4l.js +0 -2
  40. ose_app/static/js/chunks/constants-DPgwRV4l.js.map +0 -1
  41. ose_app/static/js/chunks/filter-Bx-PU1OL.js +0 -18
  42. ose_app/static/js/chunks/filter-Bx-PU1OL.js.map +0 -1
  43. ose_app/static/js/chunks/filter-CdAXK93b.js +0 -18
  44. ose_app/static/js/chunks/filter-CdAXK93b.js.map +0 -1
  45. ose_app/static/js/chunks/filter-CiYqP1_r.js.map +0 -1
  46. ose_app/static/js/chunks/index-sLCKmIWG-B5BYNF2N.js +0 -2
  47. ose_app/static/js/chunks/index-sLCKmIWG-B5BYNF2N.js.map +0 -1
  48. ose_app/static/js/chunks/index-sLCKmIWG-Cb9lQq-c.js +0 -9
  49. ose_app/static/js/chunks/index-sLCKmIWG-Cb9lQq-c.js.map +0 -1
  50. ose_app/static/js/chunks/index-sLCKmIWG-umQeu_-w.js.map +0 -1
  51. ose_app/static/js/editor.js.map +0 -1
  52. ose_app/static/js/release.js.map +0 -1
  53. ose_app/static/js/settings.js.map +0 -1
  54. ose_app/static/js/visualise.js.map +0 -1
  55. ose_app/static/main.css.map +0 -7
  56. {ose_app-0.2.5.dist-info → ose_app-0.3.0.dist-info}/WHEEL +0 -0
  57. {ose_app-0.2.5.dist-info → ose_app-0.3.0.dist-info}/top_level.txt +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"visualise.js","sources":["../../../../../ose-js-core/src/types.ts","../../../../../../node_modules/d3-dispatch/src/dispatch.js","../../../../../../node_modules/d3-selection/src/namespaces.js","../../../../../../node_modules/d3-selection/src/namespace.js","../../../../../../node_modules/d3-selection/src/creator.js","../../../../../../node_modules/d3-selection/src/selector.js","../../../../../../node_modules/d3-selection/src/selection/select.js","../../../../../../node_modules/d3-selection/src/array.js","../../../../../../node_modules/d3-selection/src/selectorAll.js","../../../../../../node_modules/d3-selection/src/selection/selectAll.js","../../../../../../node_modules/d3-selection/src/matcher.js","../../../../../../node_modules/d3-selection/src/selection/selectChild.js","../../../../../../node_modules/d3-selection/src/selection/selectChildren.js","../../../../../../node_modules/d3-selection/src/selection/filter.js","../../../../../../node_modules/d3-selection/src/selection/sparse.js","../../../../../../node_modules/d3-selection/src/selection/enter.js","../../../../../../node_modules/d3-selection/src/constant.js","../../../../../../node_modules/d3-selection/src/selection/data.js","../../../../../../node_modules/d3-selection/src/selection/exit.js","../../../../../../node_modules/d3-selection/src/selection/join.js","../../../../../../node_modules/d3-selection/src/selection/merge.js","../../../../../../node_modules/d3-selection/src/selection/order.js","../../../../../../node_modules/d3-selection/src/selection/sort.js","../../../../../../node_modules/d3-selection/src/selection/call.js","../../../../../../node_modules/d3-selection/src/selection/nodes.js","../../../../../../node_modules/d3-selection/src/selection/node.js","../../../../../../node_modules/d3-selection/src/selection/size.js","../../../../../../node_modules/d3-selection/src/selection/empty.js","../../../../../../node_modules/d3-selection/src/selection/each.js","../../../../../../node_modules/d3-selection/src/selection/attr.js","../../../../../../node_modules/d3-selection/src/window.js","../../../../../../node_modules/d3-selection/src/selection/style.js","../../../../../../node_modules/d3-selection/src/selection/property.js","../../../../../../node_modules/d3-selection/src/selection/classed.js","../../../../../../node_modules/d3-selection/src/selection/text.js","../../../../../../node_modules/d3-selection/src/selection/html.js","../../../../../../node_modules/d3-selection/src/selection/raise.js","../../../../../../node_modules/d3-selection/src/selection/lower.js","../../../../../../node_modules/d3-selection/src/selection/append.js","../../../../../../node_modules/d3-selection/src/selection/insert.js","../../../../../../node_modules/d3-selection/src/selection/remove.js","../../../../../../node_modules/d3-selection/src/selection/clone.js","../../../../../../node_modules/d3-selection/src/selection/datum.js","../../../../../../node_modules/d3-selection/src/selection/on.js","../../../../../../node_modules/d3-selection/src/selection/dispatch.js","../../../../../../node_modules/d3-selection/src/selection/iterator.js","../../../../../../node_modules/d3-selection/src/selection/index.js","../../../../../../node_modules/d3-selection/src/select.js","../../../../../../node_modules/d3-selection/src/selectAll.js","../../../../../../node_modules/d3-color/src/define.js","../../../../../../node_modules/d3-color/src/color.js","../../../../../../node_modules/d3-interpolate/src/constant.js","../../../../../../node_modules/d3-interpolate/src/color.js","../../../../../../node_modules/d3-interpolate/src/rgb.js","../../../../../../node_modules/d3-interpolate/src/number.js","../../../../../../node_modules/d3-interpolate/src/string.js","../../../../../../node_modules/d3-interpolate/src/transform/decompose.js","../../../../../../node_modules/d3-interpolate/src/transform/parse.js","../../../../../../node_modules/d3-interpolate/src/transform/index.js","../../../../../../node_modules/d3-timer/src/timer.js","../../../../../../node_modules/d3-timer/src/timeout.js","../../../../../../node_modules/d3-transition/src/transition/schedule.js","../../../../../../node_modules/d3-transition/src/interrupt.js","../../../../../../node_modules/d3-transition/src/selection/interrupt.js","../../../../../../node_modules/d3-transition/src/transition/tween.js","../../../../../../node_modules/d3-transition/src/transition/interpolate.js","../../../../../../node_modules/d3-transition/src/transition/attr.js","../../../../../../node_modules/d3-transition/src/transition/attrTween.js","../../../../../../node_modules/d3-transition/src/transition/delay.js","../../../../../../node_modules/d3-transition/src/transition/duration.js","../../../../../../node_modules/d3-transition/src/transition/ease.js","../../../../../../node_modules/d3-transition/src/transition/easeVarying.js","../../../../../../node_modules/d3-transition/src/transition/filter.js","../../../../../../node_modules/d3-transition/src/transition/merge.js","../../../../../../node_modules/d3-transition/src/transition/on.js","../../../../../../node_modules/d3-transition/src/transition/remove.js","../../../../../../node_modules/d3-transition/src/transition/select.js","../../../../../../node_modules/d3-transition/src/transition/selectAll.js","../../../../../../node_modules/d3-transition/src/transition/selection.js","../../../../../../node_modules/d3-transition/src/transition/style.js","../../../../../../node_modules/d3-transition/src/transition/styleTween.js","../../../../../../node_modules/d3-transition/src/transition/text.js","../../../../../../node_modules/d3-transition/src/transition/textTween.js","../../../../../../node_modules/d3-transition/src/transition/transition.js","../../../../../../node_modules/d3-transition/src/transition/end.js","../../../../../../node_modules/d3-transition/src/transition/index.js","../../../../../../node_modules/d3-ease/src/cubic.js","../../../../../../node_modules/d3-transition/src/selection/transition.js","../../../../../../node_modules/d3-transition/src/selection/index.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/count.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/each.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/find.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/sum.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/sort.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/path.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/links.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js","../../../../../../node_modules/d3-hierarchy/src/hierarchy/index.js","../../../../../../node_modules/d3-hierarchy/src/tree.js","../../../../../../node_modules/d3-zoom/src/transform.js","../../../../../ose-js-app/src/visualise/graph-filters.ts","../../../../../ose-js-app/src/visualise/search-manager.ts","../../../../../../node_modules/svg-pan-zoom/src/uniwheel.js","../../../../../../node_modules/svg-pan-zoom/src/utilities.js","../../../../../../node_modules/svg-pan-zoom/src/svg-utilities.js","../../../../../../node_modules/svg-pan-zoom/src/control-icons.js","../../../../../../node_modules/svg-pan-zoom/src/shadow-viewport.js","../../../../../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js","../../../../../ose-js-app/src/visualise/graph-renderer.ts","../../../../../ose-js-app/src/visualise/graph-builder.ts","../../../../../ose-js-app/src/visualise/Visualise.vue","../../../../../ose-js-app/src/visualise/main.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n ose?: {\n visualise?: VisualisationData;\n };\n oseDataChanged?: () => void;\n }\n}\n\nexport class Graph {\n private _edges: Edge[];\n private _nodes: Map<string, Node>;\n\n private _successors: Map<string, Set<string>>;\n private _predecessors: Map<string, Set<string>>;\n\n get nodes(): ReadonlyArray<Node> {\n return Array.from(this._nodes.values())\n }\n\n get edges(): ReadonlyArray<Edge> {\n return this._edges\n }\n\n public get roots(): ReadonlyArray<Node> {\n return this.nodes.filter(n => this.predecessors(n.id).length === 0);\n }\n\n public get leaves(): ReadonlyArray<Node> {\n return this.nodes.filter(n => this.successors(n.id).length === 0);\n }\n\n constructor(nodes: Node[] = [], edges: Edge[] = []) {\n this._nodes = new Map<string, Node>();\n this._edges = [];\n\n this._successors = new Map<string, Set<string>>();\n this._predecessors = new Map<string, Set<string>>();\n\n for (const node of nodes) {\n this.addNode(node);\n }\n\n for (const edge of edges) {\n this.addEdge(edge);\n }\n }\n\n public outgoingEdges(nodeId: string): Edge[] {\n return this._edges.filter(e => e.source === nodeId)\n }\n\n public incomingEdges(nodeId: string): Edge[] {\n return this._edges.filter(e => e.target === nodeId)\n }\n\n public node(nodeId: string): Node | undefined {\n return this._nodes.get(nodeId)\n }\n\n\n public addNode(node: Node): void {\n this._nodes.set(node.id, node);\n }\n\n public removeNode(node: Node): void\n public removeNode(nodeId: string): void\n public removeNode(nodeOrId: Node | string): void {\n const nodeId = typeof nodeOrId === 'string' ? nodeOrId : nodeOrId.id;\n this._nodes.delete(nodeId);\n\n // Remove associated edges\n this._edges = this._edges.filter(e => e.source !== nodeId && e.target !== nodeId);\n\n this._successors.delete(nodeId);\n this._predecessors.delete(nodeId);\n\n for (const [_, targets] of this._successors) {\n targets.delete(nodeId);\n }\n\n for (const [_, sources] of this._predecessors) {\n sources.delete(nodeId);\n }\n }\n\n public removeEdge(edgeToRemove: Pick<Edge, 'source' | 'target'> & Partial<Pick<Edge, 'type'>>): void {\n this._edges = this._edges.filter(e => !(e.source === edgeToRemove.source && e.target === edgeToRemove.target && (!edgeToRemove.type || e.type === edgeToRemove.type)));\n\n this._successors.get(edgeToRemove.source)?.delete(edgeToRemove.target);\n this._predecessors.get(edgeToRemove.target)?.delete(edgeToRemove.source);\n }\n\n public addEdge(edge: Edge): void {\n this._edges.push(edge);\n\n if (!this._successors.has(edge.source)) {\n this._successors.set(edge.source, new Set<string>());\n }\n this._successors.get(edge.source)!.add(edge.target);\n\n if (!this._predecessors.has(edge.target)) {\n this._predecessors.set(edge.target, new Set<string>());\n }\n this._predecessors.get(edge.target)!.add(edge.source);\n }\n\n public successors(node: Node): Node[]\n public successors(nodeId: string): Node[]\n public successors(nodeOrId: Node | string): Node[] {\n const nodeId = typeof nodeOrId === 'string' ? nodeOrId : nodeOrId.id;\n return Array.from(this._successors.get(nodeId) || []).map(id => this._nodes.get(id)!);\n }\n\n public predecessors(node: Node): Node[]\n public predecessors(nodeId: string): Node[]\n public predecessors(nodeOrId: Node | string): Node[] {\n const nodeId = typeof nodeOrId === 'string' ? nodeOrId : nodeOrId.id;\n return Array.from(this._predecessors.get(nodeId) || []).map(id => this._nodes.get(id)!);\n }\n \n public reachable(nodeId: string): Set<string> {\n const visited = new Set<string>();\n const stack = [nodeId];\n\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (!visited.has(current)) {\n visited.add(current);\n const successors = this.successors(current);\n for (const succ of successors) {\n if (!visited.has(succ.id)) {\n stack.push(succ.id);\n }\n }\n }\n }\n\n return visited;\n }\n\n public backwardReachable(nodeId: string): Set<string> {\n const visited = new Set<string>();\n const stack = [nodeId];\n\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (!visited.has(current)) {\n visited.add(current);\n const predecessors = this.predecessors(current);\n for (const pred of predecessors) {\n if (!visited.has(pred.id)) {\n stack.push(pred.id);\n }\n }\n }\n }\n\n return visited;\n }\n\n public clone(): Graph {\n return new Graph(this.nodes.map(n => ({ ...n })), this.edges.map(e => ({ ...e })));\n }\n}\n\nexport interface Edge {\n source: string\n target: string\n type: string\n color?: string\n label?: string\n}\n\n\nexport interface Node {\n class: string\n id: string\n label: string\n curationStatus: string\n origin: string\n source: 'current' | 'dependencies' | 'derived'\n visualDepth: number\n isSelected: boolean\n}\n\nexport interface Row {\n Label: string;\n ID: string;\n Parent: string;\n\n [key: string]: string;\n}\n\nexport interface VisualisationData {\n /**\n * Data for the spreadsheet being visualised\n */\n sheetData: SpreadsheetData<Row>,\n\n /**\n * Indexes of selected rows in the spreadsheet that should be visualised\n */\n selection: number[] | null;\n}\n\nexport interface SpreadsheetData<RowType = Record<string, string | null | number | boolean>> {\n header: string[],\n rows: RowType[],\n file_sha: string,\n repo_name: string,\n folder: string,\n spreadsheet_name: string,\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([array(selector)], root);\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","import { Graph, Node, Edge } from \"@ose/js-core\";\n\nexport interface FilterOptions {\n curationFilter: string[];\n showChildrenFromOtherSheets: boolean;\n showParentsFromOtherSheets: boolean;\n numChildLevels: number | null;\n currentSheet?: string;\n}\n\nexport interface FilteredGraph {\n nodes: Node[];\n hierarchyEdges: Edge[];\n relationEdges: Edge[];\n}\n\n/**\n * Apply filters to graph nodes and edges\n */\nexport function applyGraphFilters(graph: Graph, options: FilterOptions): FilteredGraph {\n const filteredNodeIds = new Set<string>();\n \n // Filter nodes based on criteria\n for (const node of graph.nodes) {\n const status = node.curationStatus;\n const depth = node.visualDepth;\n const isFromCurrentSheet = node.source === 'current';\n const isParentNode = depth < 0;\n const isChildNode = depth > 0;\n const isRelevantParent = depth === 0; \n\n // Check each filter condition\n const passesCurationFilter = options.curationFilter.includes(status);\n const passesDepthFilter = depth <= (options.numChildLevels ?? Infinity);\n const passesSheetFilter = isFromCurrentSheet || isRelevantParent\n || (isParentNode && options.showParentsFromOtherSheets)\n || (isChildNode && options.showChildrenFromOtherSheets);\n\n if (passesCurationFilter && passesDepthFilter && passesSheetFilter) {\n filteredNodeIds.add(node.id);\n }\n }\n\n // Filter nodes and edges\n const nodes = graph.nodes.filter(n => filteredNodeIds.has(n.id));\n const allEdges = graph.edges.filter(e => \n filteredNodeIds.has(e.source) && filteredNodeIds.has(e.target)\n );\n \n // Separate subclass_of edges (for hierarchy) from other relation edges\n const hierarchyEdges = allEdges.filter(e => e.type === 'subclass_of');\n const relationEdges = allEdges.filter(e => e.type !== 'subclass_of');\n\n return { nodes, hierarchyEdges, relationEdges };\n}\n\n/**\n * Build hierarchical tree structure from filtered nodes and edges\n */\nexport interface HierarchyNode {\n id: string;\n label: string;\n ose_curation: string;\n ose_origin: string;\n ose_source: 'current' | 'dependencies' | 'derived';\n ose_selected: boolean;\n children: HierarchyNode[];\n}\n\nexport function buildHierarchyTrees(\n nodes: Node[], \n hierarchyEdges: Edge[]\n): HierarchyNode[] {\n // Build adjacency map (parent -> children) using only subclass_of edges\n const childrenMap = new Map<string, string[]>();\n const parentMap = new Map<string, string>();\n \n for (const edge of hierarchyEdges) {\n // In a directed graph, source -> target means source is parent of target\n if (!childrenMap.has(edge.source)) {\n childrenMap.set(edge.source, []);\n }\n childrenMap.get(edge.source)!.push(edge.target);\n parentMap.set(edge.target, edge.source);\n }\n\n // Find root nodes (nodes with no parent)\n const roots = nodes.filter(n => !parentMap.has(n.id));\n\n // Create node lookup map\n const nodeMap = new Map<string, Node>();\n for (const node of nodes) {\n nodeMap.set(node.id, node);\n }\n\n // Recursively build hierarchy\n function buildHierarchy(nodeId: string): HierarchyNode | null {\n const node = nodeMap.get(nodeId);\n if (!node) return null;\n\n const children: HierarchyNode[] = [];\n const childIds = childrenMap.get(nodeId) ?? [];\n for (const childId of childIds) {\n const child = buildHierarchy(childId);\n if (child) children.push(child);\n }\n\n return {\n id: node.id,\n label: node.label,\n ose_curation: node.curationStatus,\n ose_origin: node.origin,\n ose_source: node.source,\n ose_selected: node.isSelected,\n children\n };\n }\n\n // Build tree for each root\n const trees: HierarchyNode[] = [];\n for (const root of roots) {\n const tree = buildHierarchy(root.id);\n if (tree) trees.push(tree);\n }\n\n return trees;\n}\n","import * as d3 from 'd3';\nimport type svgPanZoom from 'svg-pan-zoom';\n\nexport interface SearchState {\n query: string;\n matches: string[];\n currentIndex: number;\n}\n\n/**\n * Performs search on graph nodes\n */\nexport function performGraphSearch(\n query: string,\n nodeIdLabelMap: Record<string, string>\n): string[] {\n const normalizedQuery = query.trim().toLowerCase();\n \n // Clear previous highlights\n d3.selectAll('.node').classed('search-match', false).classed('search-current', false);\n \n if (!normalizedQuery) {\n return [];\n }\n \n // Find matching nodes by label or ID\n const matches: string[] = [];\n d3.selectAll('.node').each(function() {\n const node = d3.select(this);\n const nodeId = node.attr('data-node-id');\n const label = nodeIdLabelMap[nodeId] || '';\n const id = nodeId?.replace('_', ':') || '';\n \n if (label.toLowerCase().includes(normalizedQuery) || id.toLowerCase().includes(normalizedQuery)) {\n matches.push(nodeId);\n node.classed('search-match', true);\n }\n });\n \n return matches;\n}\n\n/**\n * Highlights the current search match\n */\nexport function highlightSearchMatch(nodeId: string) {\n d3.selectAll('.node').classed('search-current', false);\n d3.select(`.node[data-node-id=\"${nodeId}\"]`).classed('search-current', true);\n}\n\n/**\n * Clears all search highlights\n */\nexport function clearSearchHighlights() {\n d3.selectAll('.node').classed('search-match', false).classed('search-current', false);\n}\n\n/**\n * Pans the view to center a specific node\n */\nexport function panToNode(\n nodeId: string,\n svgContainer: HTMLElement,\n panZoomInstance: ReturnType<typeof svgPanZoom>\n): boolean {\n const nodeElement = document.querySelector(`.node[data-node-id=\"${nodeId}\"]`) as SVGGElement;\n \n if (!nodeElement) {\n console.warn('Node element not found:', nodeId);\n return false;\n }\n \n const svgElement = svgContainer.querySelector('svg');\n if (!svgElement) return false;\n \n // Get the graph container (has the actual content)\n const graphContainer = svgElement.querySelector('.graph-container') as SVGGElement;\n if (!graphContainer) return false;\n \n // Get node's position relative to graph container\n const nodeBBox = nodeElement.getBBox();\n \n // Get the node's transform relative to its parent\n let totalX = nodeBBox.x + nodeBBox.width / 2;\n let totalY = nodeBBox.y + nodeBBox.height / 2;\n \n // Walk up the tree to accumulate transforms until we reach graph-container\n let currentElement = nodeElement as SVGGraphicsElement;\n while (currentElement && currentElement !== graphContainer) {\n const transform = currentElement.getAttribute('transform');\n if (transform) {\n const match = transform.match(/translate\\(([^,]+),([^)]+)\\)/);\n if (match) {\n totalX += parseFloat(match[1]);\n totalY += parseFloat(match[2]);\n }\n }\n currentElement = currentElement.parentElement as unknown as SVGGraphicsElement;\n if (!currentElement || currentElement === svgElement) break;\n }\n \n // Now totalX, totalY are in viewBox coordinates\n // Get current zoom and viewport size\n const currentZoom = panZoomInstance.getSizes().realZoom;\n const sizes = panZoomInstance.getSizes();\n \n // Calculate pan to center the node\n const newPanX = (sizes.width / 2) - (totalX * currentZoom);\n const newPanY = (sizes.height / 2) - (totalY * currentZoom);\n \n panZoomInstance.pan({ x: newPanX, y: newPanY });\n return true;\n}\n","// uniwheel 0.1.2 (customized)\n// A unified cross browser mouse wheel event handler\n// https://github.com/teemualap/uniwheel\n\nmodule.exports = (function(){\n\n //Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel\n\n var prefix = \"\", _addEventListener, _removeEventListener, support, fns = [];\n var passiveListenerOption = {passive: true};\n var activeListenerOption = {passive: false};\n\n // detect event model\n if ( window.addEventListener ) {\n _addEventListener = \"addEventListener\";\n _removeEventListener = \"removeEventListener\";\n } else {\n _addEventListener = \"attachEvent\";\n _removeEventListener = \"detachEvent\";\n prefix = \"on\";\n }\n\n // detect available wheel event\n support = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\n document.onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\n \"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\n\n\n function createCallback(element,callback) {\n\n var fn = function(originalEvent) {\n\n !originalEvent && ( originalEvent = window.event );\n\n // create a normalized event object\n var event = {\n // keep a ref to the original event object\n originalEvent: originalEvent,\n target: originalEvent.target || originalEvent.srcElement,\n type: \"wheel\",\n deltaMode: originalEvent.type == \"MozMousePixelScroll\" ? 0 : 1,\n deltaX: 0,\n delatZ: 0,\n preventDefault: function() {\n originalEvent.preventDefault ?\n originalEvent.preventDefault() :\n originalEvent.returnValue = false;\n }\n };\n\n // calculate deltaY (and deltaX) according to the event\n if ( support == \"mousewheel\" ) {\n event.deltaY = - 1/40 * originalEvent.wheelDelta;\n // Webkit also support wheelDeltaX\n originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX );\n } else {\n event.deltaY = originalEvent.detail;\n }\n\n // it's time to fire the callback\n return callback( event );\n\n };\n\n fns.push({\n element: element,\n fn: fn,\n });\n\n return fn;\n }\n\n function getCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns[i].fn;\n }\n }\n return function(){};\n }\n\n function removeCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns.splice(i,1);\n }\n }\n }\n\n function _addWheelListener(elem, eventName, callback, isPassiveListener ) {\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = createCallback(elem, callback);\n }\n\n elem[_addEventListener](\n prefix + eventName,\n cb,\n isPassiveListener ? passiveListenerOption : activeListenerOption\n );\n }\n\n function _removeWheelListener(elem, eventName, callback, isPassiveListener ) {\n\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = getCallback(elem);\n }\n\n elem[_removeEventListener](\n prefix + eventName,\n cb,\n isPassiveListener ? passiveListenerOption : activeListenerOption\n );\n\n removeCallback(elem);\n }\n\n function addWheelListener( elem, callback, isPassiveListener ) {\n _addWheelListener(elem, support, callback, isPassiveListener );\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _addWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener );\n }\n }\n\n function removeWheelListener(elem, callback, isPassiveListener){\n _removeWheelListener(elem, support, callback, isPassiveListener);\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _removeWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener);\n }\n }\n\n return {\n on: addWheelListener,\n off: removeWheelListener\n };\n\n})();\n","module.exports = {\n /**\n * Extends an object\n *\n * @param {Object} target object to extend\n * @param {Object} source object to take properties from\n * @return {Object} extended object\n */\n extend: function(target, source) {\n target = target || {};\n for (var prop in source) {\n // Go recursively\n if (this.isObject(source[prop])) {\n target[prop] = this.extend(target[prop], source[prop]);\n } else {\n target[prop] = source[prop];\n }\n }\n return target;\n },\n\n /**\n * Checks if an object is a DOM element\n *\n * @param {Object} o HTML element or String\n * @return {Boolean} returns true if object is a DOM element\n */\n isElement: function(o) {\n return (\n o instanceof HTMLElement ||\n o instanceof SVGElement ||\n o instanceof SVGSVGElement || //DOM2\n (o &&\n typeof o === \"object\" &&\n o !== null &&\n o.nodeType === 1 &&\n typeof o.nodeName === \"string\")\n );\n },\n\n /**\n * Checks if an object is an Object\n *\n * @param {Object} o Object\n * @return {Boolean} returns true if object is an Object\n */\n isObject: function(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n },\n\n /**\n * Checks if variable is Number\n *\n * @param {Integer|Float} n\n * @return {Boolean} returns true if variable is Number\n */\n isNumber: function(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n },\n\n /**\n * Search for an SVG element\n *\n * @param {Object|String} elementOrSelector DOM Element or selector String\n * @return {Object|Null} SVG or null\n */\n getSvg: function(elementOrSelector) {\n var element, svg;\n\n if (!this.isElement(elementOrSelector)) {\n // If selector provided\n if (\n typeof elementOrSelector === \"string\" ||\n elementOrSelector instanceof String\n ) {\n // Try to find the element\n element = document.querySelector(elementOrSelector);\n\n if (!element) {\n throw new Error(\n \"Provided selector did not find any elements. Selector: \" +\n elementOrSelector\n );\n return null;\n }\n } else {\n throw new Error(\"Provided selector is not an HTML object nor String\");\n return null;\n }\n } else {\n element = elementOrSelector;\n }\n\n if (element.tagName.toLowerCase() === \"svg\") {\n svg = element;\n } else {\n if (element.tagName.toLowerCase() === \"object\") {\n svg = element.contentDocument.documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"embed\") {\n svg = element.getSVGDocument().documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"img\") {\n throw new Error(\n 'Cannot script an SVG in an \"img\" element. Please use an \"object\" element or an in-line SVG.'\n );\n } else {\n throw new Error(\"Cannot get SVG.\");\n }\n return null;\n }\n }\n }\n\n return svg;\n },\n\n /**\n * Attach a given context to a function\n * @param {Function} fn Function\n * @param {Object} context Context\n * @return {Function} Function with certain context\n */\n proxy: function(fn, context) {\n return function() {\n return fn.apply(context, arguments);\n };\n },\n\n /**\n * Returns object type\n * Uses toString that returns [object SVGPoint]\n * And than parses object type from string\n *\n * @param {Object} o Any object\n * @return {String} Object type\n */\n getType: function(o) {\n return Object.prototype.toString\n .apply(o)\n .replace(/^\\[object\\s/, \"\")\n .replace(/\\]$/, \"\");\n },\n\n /**\n * If it is a touch event than add clientX and clientY to event object\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n */\n mouseAndTouchNormalize: function(evt, svg) {\n // If no clientX then fallback\n if (evt.clientX === void 0 || evt.clientX === null) {\n // Fallback\n evt.clientX = 0;\n evt.clientY = 0;\n\n // If it is a touch event\n if (evt.touches !== void 0 && evt.touches.length) {\n if (evt.touches[0].clientX !== void 0) {\n evt.clientX = evt.touches[0].clientX;\n evt.clientY = evt.touches[0].clientY;\n } else if (evt.touches[0].pageX !== void 0) {\n var rect = svg.getBoundingClientRect();\n\n evt.clientX = evt.touches[0].pageX - rect.left;\n evt.clientY = evt.touches[0].pageY - rect.top;\n }\n // If it is a custom event\n } else if (evt.originalEvent !== void 0) {\n if (evt.originalEvent.clientX !== void 0) {\n evt.clientX = evt.originalEvent.clientX;\n evt.clientY = evt.originalEvent.clientY;\n }\n }\n }\n },\n\n /**\n * Check if an event is a double click/tap\n * TODO: For touch gestures use a library (hammer.js) that takes in account other events\n * (touchmove and touchend). It should take in account tap duration and traveled distance\n *\n * @param {Event} evt\n * @param {Event} prevEvt Previous Event\n * @return {Boolean}\n */\n isDblClick: function(evt, prevEvt) {\n // Double click detected by browser\n if (evt.detail === 2) {\n return true;\n }\n // Try to compare events\n else if (prevEvt !== void 0 && prevEvt !== null) {\n var timeStampDiff = evt.timeStamp - prevEvt.timeStamp, // should be lower than 250 ms\n touchesDistance = Math.sqrt(\n Math.pow(evt.clientX - prevEvt.clientX, 2) +\n Math.pow(evt.clientY - prevEvt.clientY, 2)\n );\n\n return timeStampDiff < 250 && touchesDistance < 10;\n }\n\n // Nothing found\n return false;\n },\n\n /**\n * Returns current timestamp as an integer\n *\n * @return {Number}\n */\n now:\n Date.now ||\n function() {\n return new Date().getTime();\n },\n\n // From underscore.\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n throttle: function(func, wait, options) {\n var that = this;\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) {\n options = {};\n }\n var later = function() {\n previous = options.leading === false ? 0 : that.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n };\n return function() {\n var now = that.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n var remaining = wait - (now - previous);\n context = this; // eslint-disable-line consistent-this\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n },\n\n /**\n * Create a requestAnimationFrame simulation\n *\n * @param {Number|String} refreshRate\n * @return {Function}\n */\n createRequestAnimationFrame: function(refreshRate) {\n var timeout = null;\n\n // Convert refreshRate to timeout\n if (refreshRate !== \"auto\" && refreshRate < 60 && refreshRate > 1) {\n timeout = Math.floor(1000 / refreshRate);\n }\n\n if (timeout === null) {\n return window.requestAnimationFrame || requestTimeout(33);\n } else {\n return requestTimeout(timeout);\n }\n }\n};\n\n/**\n * Create a callback that will execute after a given timeout\n *\n * @param {Function} timeout\n * @return {Function}\n */\nfunction requestTimeout(timeout) {\n return function(callback) {\n window.setTimeout(callback, timeout);\n };\n}\n","var Utils = require(\"./utilities\"),\n _browser = \"unknown\";\n\n// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser\nif (/*@cc_on!@*/ false || !!document.documentMode) {\n // internet explorer\n _browser = \"ie\";\n}\n\nmodule.exports = {\n svgNS: \"http://www.w3.org/2000/svg\",\n xmlNS: \"http://www.w3.org/XML/1998/namespace\",\n xmlnsNS: \"http://www.w3.org/2000/xmlns/\",\n xlinkNS: \"http://www.w3.org/1999/xlink\",\n evNS: \"http://www.w3.org/2001/xml-events\",\n\n /**\n * Get svg dimensions: width and height\n *\n * @param {SVGSVGElement} svg\n * @return {Object} {width: 0, height: 0}\n */\n getBoundingClientRectNormalized: function(svg) {\n if (svg.clientWidth && svg.clientHeight) {\n return { width: svg.clientWidth, height: svg.clientHeight };\n } else if (!!svg.getBoundingClientRect()) {\n return svg.getBoundingClientRect();\n } else {\n throw new Error(\"Cannot get BoundingClientRect for SVG.\");\n }\n },\n\n /**\n * Gets g element with class of \"viewport\" or creates it if it doesn't exist\n *\n * @param {SVGSVGElement} svg\n * @return {SVGElement} g (group) element\n */\n getOrCreateViewport: function(svg, selector) {\n var viewport = null;\n\n if (Utils.isElement(selector)) {\n viewport = selector;\n } else {\n viewport = svg.querySelector(selector);\n }\n\n // Check if there is just one main group in SVG\n if (!viewport) {\n var childNodes = Array.prototype.slice\n .call(svg.childNodes || svg.children)\n .filter(function(el) {\n return el.nodeName !== \"defs\" && el.nodeName !== \"#text\";\n });\n\n // Node name should be SVGGElement and should have no transform attribute\n // Groups with transform are not used as viewport because it involves parsing of all transform possibilities\n if (\n childNodes.length === 1 &&\n childNodes[0].nodeName === \"g\" &&\n childNodes[0].getAttribute(\"transform\") === null\n ) {\n viewport = childNodes[0];\n }\n }\n\n // If no favorable group element exists then create one\n if (!viewport) {\n var viewportId =\n \"viewport-\" + new Date().toISOString().replace(/\\D/g, \"\");\n viewport = document.createElementNS(this.svgNS, \"g\");\n viewport.setAttribute(\"id\", viewportId);\n\n // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes\n var svgChildren = svg.childNodes || svg.children;\n if (!!svgChildren && svgChildren.length > 0) {\n for (var i = svgChildren.length; i > 0; i--) {\n // Move everything into viewport except defs\n if (svgChildren[svgChildren.length - i].nodeName !== \"defs\") {\n viewport.appendChild(svgChildren[svgChildren.length - i]);\n }\n }\n }\n svg.appendChild(viewport);\n }\n\n // Parse class names\n var classNames = [];\n if (viewport.getAttribute(\"class\")) {\n classNames = viewport.getAttribute(\"class\").split(\" \");\n }\n\n // Set class (if not set already)\n if (!~classNames.indexOf(\"svg-pan-zoom_viewport\")) {\n classNames.push(\"svg-pan-zoom_viewport\");\n viewport.setAttribute(\"class\", classNames.join(\" \"));\n }\n\n return viewport;\n },\n\n /**\n * Set SVG attributes\n *\n * @param {SVGSVGElement} svg\n */\n setupSvgAttributes: function(svg) {\n // Setting default attributes\n svg.setAttribute(\"xmlns\", this.svgNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:xlink\", this.xlinkNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:ev\", this.evNS);\n\n // Needed for Internet Explorer, otherwise the viewport overflows\n if (svg.parentNode !== null) {\n var style = svg.getAttribute(\"style\") || \"\";\n if (style.toLowerCase().indexOf(\"overflow\") === -1) {\n svg.setAttribute(\"style\", \"overflow: hidden; \" + style);\n }\n }\n },\n\n /**\n * How long Internet Explorer takes to finish updating its display (ms).\n */\n internetExplorerRedisplayInterval: 300,\n\n /**\n * Forces the browser to redisplay all SVG elements that rely on an\n * element defined in a 'defs' section. It works globally, for every\n * available defs element on the page.\n * The throttling is intentionally global.\n *\n * This is only needed for IE. It is as a hack to make markers (and 'use' elements?)\n * visible after pan/zoom when there are multiple SVGs on the page.\n * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/\n * also see svg-pan-zoom issue: https://github.com/bumbu/svg-pan-zoom/issues/62\n */\n refreshDefsGlobal: Utils.throttle(\n function() {\n var allDefs = document.querySelectorAll(\"defs\");\n var allDefsCount = allDefs.length;\n for (var i = 0; i < allDefsCount; i++) {\n var thisDefs = allDefs[i];\n thisDefs.parentNode.insertBefore(thisDefs, thisDefs);\n }\n },\n this ? this.internetExplorerRedisplayInterval : null\n ),\n\n /**\n * Sets the current transform matrix of an element\n *\n * @param {SVGElement} element\n * @param {SVGMatrix} matrix CTM\n * @param {SVGElement} defs\n */\n setCTM: function(element, matrix, defs) {\n var that = this,\n s =\n \"matrix(\" +\n matrix.a +\n \",\" +\n matrix.b +\n \",\" +\n matrix.c +\n \",\" +\n matrix.d +\n \",\" +\n matrix.e +\n \",\" +\n matrix.f +\n \")\";\n\n element.setAttributeNS(null, \"transform\", s);\n if (\"transform\" in element.style) {\n element.style.transform = s;\n } else if (\"-ms-transform\" in element.style) {\n element.style[\"-ms-transform\"] = s;\n } else if (\"-webkit-transform\" in element.style) {\n element.style[\"-webkit-transform\"] = s;\n }\n\n // IE has a bug that makes markers disappear on zoom (when the matrix \"a\" and/or \"d\" elements change)\n // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10\n // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/\n if (_browser === \"ie\" && !!defs) {\n // this refresh is intended for redisplaying the SVG during zooming\n defs.parentNode.insertBefore(defs, defs);\n // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG\n // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that\n // are located under any other element(s).\n window.setTimeout(function() {\n that.refreshDefsGlobal();\n }, that.internetExplorerRedisplayInterval);\n }\n },\n\n /**\n * Instantiate an SVGPoint object with given event coordinates\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n * @return {SVGPoint} point\n */\n getEventPoint: function(evt, svg) {\n var point = svg.createSVGPoint();\n\n Utils.mouseAndTouchNormalize(evt, svg);\n\n point.x = evt.clientX;\n point.y = evt.clientY;\n\n return point;\n },\n\n /**\n * Get SVG center point\n *\n * @param {SVGSVGElement} svg\n * @return {SVGPoint}\n */\n getSvgCenterPoint: function(svg, width, height) {\n return this.createSVGPoint(svg, width / 2, height / 2);\n },\n\n /**\n * Create a SVGPoint with given x and y\n *\n * @param {SVGSVGElement} svg\n * @param {Number} x\n * @param {Number} y\n * @return {SVGPoint}\n */\n createSVGPoint: function(svg, x, y) {\n var point = svg.createSVGPoint();\n point.x = x;\n point.y = y;\n\n return point;\n }\n};\n","var SvgUtils = require(\"./svg-utilities\");\n\nmodule.exports = {\n enable: function(instance) {\n // Select (and create if necessary) defs\n var defs = instance.svg.querySelector(\"defs\");\n if (!defs) {\n defs = document.createElementNS(SvgUtils.svgNS, \"defs\");\n instance.svg.appendChild(defs);\n }\n\n // Check for style element, and create it if it doesn't exist\n var styleEl = defs.querySelector(\"style#svg-pan-zoom-controls-styles\");\n if (!styleEl) {\n var style = document.createElementNS(SvgUtils.svgNS, \"style\");\n style.setAttribute(\"id\", \"svg-pan-zoom-controls-styles\");\n style.setAttribute(\"type\", \"text/css\");\n style.textContent =\n \".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }\";\n defs.appendChild(style);\n }\n\n // Zoom Group\n var zoomGroup = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomGroup.setAttribute(\"id\", \"svg-pan-zoom-controls\");\n zoomGroup.setAttribute(\n \"transform\",\n \"translate(\" +\n (instance.width - 70) +\n \" \" +\n (instance.height - 76) +\n \") scale(0.75)\"\n );\n zoomGroup.setAttribute(\"class\", \"svg-pan-zoom-control\");\n\n // Control elements\n zoomGroup.appendChild(this._createZoomIn(instance));\n zoomGroup.appendChild(this._createZoomReset(instance));\n zoomGroup.appendChild(this._createZoomOut(instance));\n\n // Finally append created element\n instance.svg.appendChild(zoomGroup);\n\n // Cache control instance\n instance.controlIcons = zoomGroup;\n },\n\n _createZoomIn: function(instance) {\n var zoomIn = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomIn.setAttribute(\"id\", \"svg-pan-zoom-zoom-in\");\n zoomIn.setAttribute(\"transform\", \"translate(30.5 5) scale(0.015)\");\n zoomIn.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomIn.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n zoomIn.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n\n var zoomInBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomInBackground.setAttribute(\"x\", \"0\");\n zoomInBackground.setAttribute(\"y\", \"0\");\n zoomInBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomInBackground.setAttribute(\"height\", \"1400\");\n zoomInBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomIn.appendChild(zoomInBackground);\n\n var zoomInShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomInShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\"\n );\n zoomInShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomIn.appendChild(zoomInShape);\n\n return zoomIn;\n },\n\n _createZoomReset: function(instance) {\n // reset\n var resetPanZoomControl = document.createElementNS(SvgUtils.svgNS, \"g\");\n resetPanZoomControl.setAttribute(\"id\", \"svg-pan-zoom-reset-pan-zoom\");\n resetPanZoomControl.setAttribute(\"transform\", \"translate(5 35) scale(0.4)\");\n resetPanZoomControl.setAttribute(\"class\", \"svg-pan-zoom-control\");\n resetPanZoomControl.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n resetPanZoomControl.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n\n var resetPanZoomControlBackground = document.createElementNS(\n SvgUtils.svgNS,\n \"rect\"\n ); // TODO change these background space fillers to rounded rectangles so they look prettier\n resetPanZoomControlBackground.setAttribute(\"x\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"y\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"width\", \"182\"); // larger than expected because the whole group is transformed to scale down\n resetPanZoomControlBackground.setAttribute(\"height\", \"58\");\n resetPanZoomControlBackground.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-background\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlBackground);\n\n var resetPanZoomControlShape1 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"d\",\n \"M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape1);\n\n var resetPanZoomControlShape2 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"d\",\n \"M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape2);\n\n return resetPanZoomControl;\n },\n\n _createZoomOut: function(instance) {\n // zoom out\n var zoomOut = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomOut.setAttribute(\"id\", \"svg-pan-zoom-zoom-out\");\n zoomOut.setAttribute(\"transform\", \"translate(30.5 70) scale(0.015)\");\n zoomOut.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomOut.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n zoomOut.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n\n var zoomOutBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomOutBackground.setAttribute(\"x\", \"0\");\n zoomOutBackground.setAttribute(\"y\", \"0\");\n zoomOutBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomOutBackground.setAttribute(\"height\", \"1400\");\n zoomOutBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomOut.appendChild(zoomOutBackground);\n\n var zoomOutShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomOutShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z\"\n );\n zoomOutShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomOut.appendChild(zoomOutShape);\n\n return zoomOut;\n },\n\n disable: function(instance) {\n if (instance.controlIcons) {\n instance.controlIcons.parentNode.removeChild(instance.controlIcons);\n instance.controlIcons = null;\n }\n }\n};\n","var SvgUtils = require(\"./svg-utilities\"),\n Utils = require(\"./utilities\");\n\nvar ShadowViewport = function(viewport, options) {\n this.init(viewport, options);\n};\n\n/**\n * Initialization\n *\n * @param {SVGElement} viewport\n * @param {Object} options\n */\nShadowViewport.prototype.init = function(viewport, options) {\n // DOM Elements\n this.viewport = viewport;\n this.options = options;\n\n // State cache\n this.originalState = { zoom: 1, x: 0, y: 0 };\n this.activeState = { zoom: 1, x: 0, y: 0 };\n\n this.updateCTMCached = Utils.proxy(this.updateCTM, this);\n\n // Create a custom requestAnimationFrame taking in account refreshRate\n this.requestAnimationFrame = Utils.createRequestAnimationFrame(\n this.options.refreshRate\n );\n\n // ViewBox\n this.viewBox = { x: 0, y: 0, width: 0, height: 0 };\n this.cacheViewBox();\n\n // Process CTM\n var newCTM = this.processCTM();\n\n // Update viewport CTM and cache zoom and pan\n this.setCTM(newCTM);\n\n // Update CTM in this frame\n this.updateCTM();\n};\n\n/**\n * Cache initial viewBox value\n * If no viewBox is defined, then use viewport size/position instead for viewBox values\n */\nShadowViewport.prototype.cacheViewBox = function() {\n var svgViewBox = this.options.svg.getAttribute(\"viewBox\");\n\n if (svgViewBox) {\n var viewBoxValues = svgViewBox\n .split(/[\\s\\,]/)\n .filter(function(v) {\n return v;\n })\n .map(parseFloat);\n\n // Cache viewbox x and y offset\n this.viewBox.x = viewBoxValues[0];\n this.viewBox.y = viewBoxValues[1];\n this.viewBox.width = viewBoxValues[2];\n this.viewBox.height = viewBoxValues[3];\n\n var zoom = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n\n // Update active state\n this.activeState.zoom = zoom;\n this.activeState.x = (this.options.width - this.viewBox.width * zoom) / 2;\n this.activeState.y = (this.options.height - this.viewBox.height * zoom) / 2;\n\n // Force updating CTM\n this.updateCTMOnNextFrame();\n\n this.options.svg.removeAttribute(\"viewBox\");\n } else {\n this.simpleViewBoxCache();\n }\n};\n\n/**\n * Recalculate viewport sizes and update viewBox cache\n */\nShadowViewport.prototype.simpleViewBoxCache = function() {\n var bBox = this.viewport.getBBox();\n\n this.viewBox.x = bBox.x;\n this.viewBox.y = bBox.y;\n this.viewBox.width = bBox.width;\n this.viewBox.height = bBox.height;\n};\n\n/**\n * Returns a viewbox object. Safe to alter\n *\n * @return {Object} viewbox object\n */\nShadowViewport.prototype.getViewBox = function() {\n return Utils.extend({}, this.viewBox);\n};\n\n/**\n * Get initial zoom and pan values. Save them into originalState\n * Parses viewBox attribute to alter initial sizes\n *\n * @return {CTM} CTM object based on options\n */\nShadowViewport.prototype.processCTM = function() {\n var newCTM = this.getCTM();\n\n if (this.options.fit || this.options.contain) {\n var newScale;\n if (this.options.fit) {\n newScale = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n } else {\n newScale = Math.max(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n }\n\n newCTM.a = newScale; //x-scale\n newCTM.d = newScale; //y-scale\n newCTM.e = -this.viewBox.x * newScale; //x-transform\n newCTM.f = -this.viewBox.y * newScale; //y-transform\n }\n\n if (this.options.center) {\n var offsetX =\n (this.options.width -\n (this.viewBox.width + this.viewBox.x * 2) * newCTM.a) *\n 0.5,\n offsetY =\n (this.options.height -\n (this.viewBox.height + this.viewBox.y * 2) * newCTM.a) *\n 0.5;\n\n newCTM.e = offsetX;\n newCTM.f = offsetY;\n }\n\n // Cache initial values. Based on activeState and fix+center opitons\n this.originalState.zoom = newCTM.a;\n this.originalState.x = newCTM.e;\n this.originalState.y = newCTM.f;\n\n return newCTM;\n};\n\n/**\n * Return originalState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getOriginalState = function() {\n return Utils.extend({}, this.originalState);\n};\n\n/**\n * Return actualState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getState = function() {\n return Utils.extend({}, this.activeState);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getZoom = function() {\n return this.activeState.zoom;\n};\n\n/**\n * Get zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getRelativeZoom = function() {\n return this.activeState.zoom / this.originalState.zoom;\n};\n\n/**\n * Compute zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.computeRelativeZoom = function(scale) {\n return scale / this.originalState.zoom;\n};\n\n/**\n * Get pan\n *\n * @return {Object}\n */\nShadowViewport.prototype.getPan = function() {\n return { x: this.activeState.x, y: this.activeState.y };\n};\n\n/**\n * Return cached viewport CTM value that can be safely modified\n *\n * @return {SVGMatrix}\n */\nShadowViewport.prototype.getCTM = function() {\n var safeCTM = this.options.svg.createSVGMatrix();\n\n // Copy values manually as in FF they are not itterable\n safeCTM.a = this.activeState.zoom;\n safeCTM.b = 0;\n safeCTM.c = 0;\n safeCTM.d = this.activeState.zoom;\n safeCTM.e = this.activeState.x;\n safeCTM.f = this.activeState.y;\n\n return safeCTM;\n};\n\n/**\n * Set a new CTM\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.setCTM = function(newCTM) {\n var willZoom = this.isZoomDifferent(newCTM),\n willPan = this.isPanDifferent(newCTM);\n\n if (willZoom || willPan) {\n // Before zoom\n if (willZoom) {\n // If returns false then cancel zooming\n if (\n this.options.beforeZoom(\n this.getRelativeZoom(),\n this.computeRelativeZoom(newCTM.a)\n ) === false\n ) {\n newCTM.a = newCTM.d = this.activeState.zoom;\n willZoom = false;\n } else {\n this.updateCache(newCTM);\n this.options.onZoom(this.getRelativeZoom());\n }\n }\n\n // Before pan\n if (willPan) {\n var preventPan = this.options.beforePan(this.getPan(), {\n x: newCTM.e,\n y: newCTM.f\n }),\n // If prevent pan is an object\n preventPanX = false,\n preventPanY = false;\n\n // If prevent pan is Boolean false\n if (preventPan === false) {\n // Set x and y same as before\n newCTM.e = this.getPan().x;\n newCTM.f = this.getPan().y;\n\n preventPanX = preventPanY = true;\n } else if (Utils.isObject(preventPan)) {\n // Check for X axes attribute\n if (preventPan.x === false) {\n // Prevent panning on x axes\n newCTM.e = this.getPan().x;\n preventPanX = true;\n } else if (Utils.isNumber(preventPan.x)) {\n // Set a custom pan value\n newCTM.e = preventPan.x;\n }\n\n // Check for Y axes attribute\n if (preventPan.y === false) {\n // Prevent panning on x axes\n newCTM.f = this.getPan().y;\n preventPanY = true;\n } else if (Utils.isNumber(preventPan.y)) {\n // Set a custom pan value\n newCTM.f = preventPan.y;\n }\n }\n\n // Update willPan flag\n // Check if newCTM is still different\n if ((preventPanX && preventPanY) || !this.isPanDifferent(newCTM)) {\n willPan = false;\n } else {\n this.updateCache(newCTM);\n this.options.onPan(this.getPan());\n }\n }\n\n // Check again if should zoom or pan\n if (willZoom || willPan) {\n this.updateCTMOnNextFrame();\n }\n }\n};\n\nShadowViewport.prototype.isZoomDifferent = function(newCTM) {\n return this.activeState.zoom !== newCTM.a;\n};\n\nShadowViewport.prototype.isPanDifferent = function(newCTM) {\n return this.activeState.x !== newCTM.e || this.activeState.y !== newCTM.f;\n};\n\n/**\n * Update cached CTM and active state\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.updateCache = function(newCTM) {\n this.activeState.zoom = newCTM.a;\n this.activeState.x = newCTM.e;\n this.activeState.y = newCTM.f;\n};\n\nShadowViewport.prototype.pendingUpdate = false;\n\n/**\n * Place a request to update CTM on next Frame\n */\nShadowViewport.prototype.updateCTMOnNextFrame = function() {\n if (!this.pendingUpdate) {\n // Lock\n this.pendingUpdate = true;\n\n // Throttle next update\n this.requestAnimationFrame.call(window, this.updateCTMCached);\n }\n};\n\n/**\n * Update viewport CTM with cached CTM\n */\nShadowViewport.prototype.updateCTM = function() {\n var ctm = this.getCTM();\n\n // Updates SVG element\n SvgUtils.setCTM(this.viewport, ctm, this.defs);\n\n // Free the lock\n this.pendingUpdate = false;\n\n // Notify about the update\n if (this.options.onUpdatedCTM) {\n this.options.onUpdatedCTM(ctm);\n }\n};\n\nmodule.exports = function(viewport, options) {\n return new ShadowViewport(viewport, options);\n};\n","var Wheel = require(\"./uniwheel\"),\n ControlIcons = require(\"./control-icons\"),\n Utils = require(\"./utilities\"),\n SvgUtils = require(\"./svg-utilities\"),\n ShadowViewport = require(\"./shadow-viewport\");\n\nvar SvgPanZoom = function(svg, options) {\n this.init(svg, options);\n};\n\nvar optionsDefaults = {\n viewportSelector: \".svg-pan-zoom_viewport\", // Viewport selector. Can be querySelector string or SVGElement\n panEnabled: true, // enable or disable panning (default enabled)\n controlIconsEnabled: false, // insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled)\n zoomEnabled: true, // enable or disable zooming (default enabled)\n dblClickZoomEnabled: true, // enable or disable zooming by double clicking (default enabled)\n mouseWheelZoomEnabled: true, // enable or disable zooming by mouse wheel (default enabled)\n preventMouseEventsDefault: true, // enable or disable preventDefault for mouse events\n zoomScaleSensitivity: 0.1, // Zoom sensitivity\n minZoom: 0.5, // Minimum Zoom level\n maxZoom: 10, // Maximum Zoom level\n fit: true, // enable or disable viewport fit in SVG (default true)\n contain: false, // enable or disable viewport contain the svg (default false)\n center: true, // enable or disable viewport centering in SVG (default true)\n refreshRate: \"auto\", // Maximum number of frames per second (altering SVG's viewport)\n beforeZoom: null,\n onZoom: null,\n beforePan: null,\n onPan: null,\n customEventsHandler: null,\n eventsListenerElement: null,\n onUpdatedCTM: null\n};\n\nvar passiveListenerOption = { passive: true };\n\nSvgPanZoom.prototype.init = function(svg, options) {\n var that = this;\n\n this.svg = svg;\n this.defs = svg.querySelector(\"defs\");\n\n // Add default attributes to SVG\n SvgUtils.setupSvgAttributes(this.svg);\n\n // Set options\n this.options = Utils.extend(Utils.extend({}, optionsDefaults), options);\n\n // Set default state\n this.state = \"none\";\n\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Init shadow viewport\n this.viewport = ShadowViewport(\n SvgUtils.getOrCreateViewport(this.svg, this.options.viewportSelector),\n {\n svg: this.svg,\n width: this.width,\n height: this.height,\n fit: this.options.fit,\n contain: this.options.contain,\n center: this.options.center,\n refreshRate: this.options.refreshRate,\n // Put callbacks into functions as they can change through time\n beforeZoom: function(oldScale, newScale) {\n if (that.viewport && that.options.beforeZoom) {\n return that.options.beforeZoom(oldScale, newScale);\n }\n },\n onZoom: function(scale) {\n if (that.viewport && that.options.onZoom) {\n return that.options.onZoom(scale);\n }\n },\n beforePan: function(oldPoint, newPoint) {\n if (that.viewport && that.options.beforePan) {\n return that.options.beforePan(oldPoint, newPoint);\n }\n },\n onPan: function(point) {\n if (that.viewport && that.options.onPan) {\n return that.options.onPan(point);\n }\n },\n onUpdatedCTM: function(ctm) {\n if (that.viewport && that.options.onUpdatedCTM) {\n return that.options.onUpdatedCTM(ctm);\n }\n }\n }\n );\n\n // Wrap callbacks into public API context\n var publicInstance = this.getPublicInstance();\n publicInstance.setBeforeZoom(this.options.beforeZoom);\n publicInstance.setOnZoom(this.options.onZoom);\n publicInstance.setBeforePan(this.options.beforePan);\n publicInstance.setOnPan(this.options.onPan);\n publicInstance.setOnUpdatedCTM(this.options.onUpdatedCTM);\n\n if (this.options.controlIconsEnabled) {\n ControlIcons.enable(this);\n }\n\n // Init events handlers\n this.lastMouseWheelEventTime = Date.now();\n this.setupHandlers();\n};\n\n/**\n * Register event handlers\n */\nSvgPanZoom.prototype.setupHandlers = function() {\n var that = this,\n prevEvt = null; // use for touchstart event to detect double tap\n\n this.eventListeners = {\n // Mouse down group\n mousedown: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n touchstart: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n\n // Mouse up group\n mouseup: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchend: function(evt) {\n return that.handleMouseUp(evt);\n },\n\n // Mouse move group\n mousemove: function(evt) {\n return that.handleMouseMove(evt);\n },\n touchmove: function(evt) {\n return that.handleMouseMove(evt);\n },\n\n // Mouse leave group\n mouseleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchcancel: function(evt) {\n return that.handleMouseUp(evt);\n }\n };\n\n // Init custom events handler if available\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.init({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n\n // Custom event handler may halt builtin listeners\n var haltEventListeners = this.options.customEventsHandler\n .haltEventListeners;\n if (haltEventListeners && haltEventListeners.length) {\n for (var i = haltEventListeners.length - 1; i >= 0; i--) {\n if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) {\n delete this.eventListeners[haltEventListeners[i]];\n }\n }\n }\n }\n\n // Bind eventListeners\n for (var event in this.eventListeners) {\n // Attach event to eventsListenerElement or SVG if not available\n (this.options.eventsListenerElement || this.svg).addEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Zoom using mouse wheel\n if (this.options.mouseWheelZoomEnabled) {\n this.options.mouseWheelZoomEnabled = false; // set to false as enable will set it back to true\n this.enableMouseWheelZoom();\n }\n};\n\n/**\n * Enable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.enableMouseWheelZoom = function() {\n if (!this.options.mouseWheelZoomEnabled) {\n var that = this;\n\n // Mouse wheel listener\n this.wheelListener = function(evt) {\n return that.handleMouseWheel(evt);\n };\n\n // Bind wheelListener\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.on(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n\n this.options.mouseWheelZoomEnabled = true;\n }\n};\n\n/**\n * Disable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.disableMouseWheelZoom = function() {\n if (this.options.mouseWheelZoomEnabled) {\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.off(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n this.options.mouseWheelZoomEnabled = false;\n }\n};\n\n/**\n * Handle mouse wheel event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseWheel = function(evt) {\n if (!this.options.zoomEnabled || this.state !== \"none\") {\n return;\n }\n\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Default delta in case that deltaY is not available\n var delta = evt.deltaY || 1,\n timeDelta = Date.now() - this.lastMouseWheelEventTime,\n divider = 3 + Math.max(0, 30 - timeDelta);\n\n // Update cache\n this.lastMouseWheelEventTime = Date.now();\n\n // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0)\n if (\"deltaMode\" in evt && evt.deltaMode === 0 && evt.wheelDelta) {\n delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY;\n }\n\n delta =\n -0.3 < delta && delta < 0.3\n ? delta\n : ((delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10)) / divider;\n\n var inversedScreenCTM = this.svg.getScreenCTM().inverse(),\n relativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n inversedScreenCTM\n ),\n zoom = Math.pow(1 + this.options.zoomScaleSensitivity, -1 * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior\n\n this.zoomAtPoint(zoom, relativeMousePoint);\n};\n\n/**\n * Zoom in at a SVG point\n *\n * @param {SVGPoint} point\n * @param {Float} zoomScale Number representing how much to zoom\n * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value.\n * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%)\n */\nSvgPanZoom.prototype.zoomAtPoint = function(zoomScale, point, zoomAbsolute) {\n var originalState = this.viewport.getOriginalState();\n\n if (!zoomAbsolute) {\n // Fit zoomScale in set bounds\n if (\n this.getZoom() * zoomScale <\n this.options.minZoom * originalState.zoom\n ) {\n zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom();\n } else if (\n this.getZoom() * zoomScale >\n this.options.maxZoom * originalState.zoom\n ) {\n zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom();\n }\n } else {\n // Fit zoomScale in set bounds\n zoomScale = Math.max(\n this.options.minZoom * originalState.zoom,\n Math.min(this.options.maxZoom * originalState.zoom, zoomScale)\n );\n // Find relative scale to achieve desired scale\n zoomScale = zoomScale / this.getZoom();\n }\n\n var oldCTM = this.viewport.getCTM(),\n relativePoint = point.matrixTransform(oldCTM.inverse()),\n modifier = this.svg\n .createSVGMatrix()\n .translate(relativePoint.x, relativePoint.y)\n .scale(zoomScale)\n .translate(-relativePoint.x, -relativePoint.y),\n newCTM = oldCTM.multiply(modifier);\n\n if (newCTM.a !== oldCTM.a) {\n this.viewport.setCTM(newCTM);\n }\n};\n\n/**\n * Zoom at center point\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.zoom = function(scale, absolute) {\n this.zoomAtPoint(\n scale,\n SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height),\n absolute\n );\n};\n\n/**\n * Zoom used by public instance\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoom = function(scale, absolute) {\n if (absolute) {\n scale = this.computeFromRelativeZoom(scale);\n }\n\n this.zoom(scale, absolute);\n};\n\n/**\n * Zoom at point used by public instance\n *\n * @param {Float} scale\n * @param {SVGPoint|Object} point An object that has x and y attributes\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoomAtPoint = function(scale, point, absolute) {\n if (absolute) {\n // Transform zoom into a relative value\n scale = this.computeFromRelativeZoom(scale);\n }\n\n // If not a SVGPoint but has x and y then create a SVGPoint\n if (Utils.getType(point) !== \"SVGPoint\") {\n if (\"x\" in point && \"y\" in point) {\n point = SvgUtils.createSVGPoint(this.svg, point.x, point.y);\n } else {\n throw new Error(\"Given point is invalid\");\n }\n }\n\n this.zoomAtPoint(scale, point, absolute);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getZoom = function() {\n return this.viewport.getZoom();\n};\n\n/**\n * Get zoom scale for public usage\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getRelativeZoom = function() {\n return this.viewport.getRelativeZoom();\n};\n\n/**\n * Compute actual zoom from public zoom\n *\n * @param {Float} zoom\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.computeFromRelativeZoom = function(zoom) {\n return zoom * this.viewport.getOriginalState().zoom;\n};\n\n/**\n * Set zoom to initial state\n */\nSvgPanZoom.prototype.resetZoom = function() {\n var originalState = this.viewport.getOriginalState();\n\n this.zoom(originalState.zoom, true);\n};\n\n/**\n * Set pan to initial state\n */\nSvgPanZoom.prototype.resetPan = function() {\n this.pan(this.viewport.getOriginalState());\n};\n\n/**\n * Set pan and zoom to initial state\n */\nSvgPanZoom.prototype.reset = function() {\n this.resetZoom();\n this.resetPan();\n};\n\n/**\n * Handle double click event\n * See handleMouseDown() for alternate detection method\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleDblClick = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Check if target was a control button\n if (this.options.controlIconsEnabled) {\n var targetClass = evt.target.getAttribute(\"class\") || \"\";\n if (targetClass.indexOf(\"svg-pan-zoom-control\") > -1) {\n return false;\n }\n }\n\n var zoomFactor;\n\n if (evt.shiftKey) {\n zoomFactor = 1 / ((1 + this.options.zoomScaleSensitivity) * 2); // zoom out when shift key pressed\n } else {\n zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2;\n }\n\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.svg.getScreenCTM().inverse()\n );\n this.zoomAtPoint(zoomFactor, point);\n};\n\n/**\n * Handle click event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseDown = function(evt, prevEvt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n Utils.mouseAndTouchNormalize(evt, this.svg);\n\n // Double click detection; more consistent than ondblclick\n if (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)) {\n this.handleDblClick(evt);\n } else {\n // Pan mode\n this.state = \"pan\";\n this.firstEventCTM = this.viewport.getCTM();\n this.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n );\n }\n};\n\n/**\n * Handle mouse move event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseMove = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\" && this.options.panEnabled) {\n // Pan mode\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n ),\n viewportCTM = this.firstEventCTM.translate(\n point.x - this.stateOrigin.x,\n point.y - this.stateOrigin.y\n );\n\n this.viewport.setCTM(viewportCTM);\n }\n};\n\n/**\n * Handle mouse button release event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseUp = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\") {\n // Quit pan mode\n this.state = \"none\";\n }\n};\n\n/**\n * Adjust viewport size (only) so it will fit in SVG\n * Does not center image\n */\nSvgPanZoom.prototype.fit = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.min(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport size (only) so it will contain the SVG\n * Does not center image\n */\nSvgPanZoom.prototype.contain = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.max(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport pan (only) so it will be centered in SVG\n * Does not zoom/fit/contain image\n */\nSvgPanZoom.prototype.center = function() {\n var viewBox = this.viewport.getViewBox(),\n offsetX =\n (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5,\n offsetY =\n (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5;\n\n this.getPublicInstance().pan({ x: offsetX, y: offsetY });\n};\n\n/**\n * Update content cached BorderBox\n * Use when viewport contents change\n */\nSvgPanZoom.prototype.updateBBox = function() {\n this.viewport.simpleViewBoxCache();\n};\n\n/**\n * Pan to a rendered position\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.pan = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e = point.x;\n viewportCTM.f = point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Relatively pan the graph by a specified rendered position vector\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.panBy = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e += point.x;\n viewportCTM.f += point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Get pan vector\n *\n * @return {Object} {x: 0, y: 0}\n */\nSvgPanZoom.prototype.getPan = function() {\n var state = this.viewport.getState();\n\n return { x: state.x, y: state.y };\n};\n\n/**\n * Recalculates cached svg dimensions and controls position\n */\nSvgPanZoom.prototype.resize = function() {\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n this.svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Recalculate original state\n var viewport = this.viewport;\n viewport.options.width = this.width;\n viewport.options.height = this.height;\n viewport.processCTM();\n\n // Reposition control icons by re-enabling them\n if (this.options.controlIconsEnabled) {\n this.getPublicInstance().disableControlIcons();\n this.getPublicInstance().enableControlIcons();\n }\n};\n\n/**\n * Unbind mouse events, free callbacks and destroy public instance\n */\nSvgPanZoom.prototype.destroy = function() {\n var that = this;\n\n // Free callbacks\n this.beforeZoom = null;\n this.onZoom = null;\n this.beforePan = null;\n this.onPan = null;\n this.onUpdatedCTM = null;\n\n // Destroy custom event handlers\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.destroy({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n }\n\n // Unbind eventListeners\n for (var event in this.eventListeners) {\n (this.options.eventsListenerElement || this.svg).removeEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Unbind wheelListener\n this.disableMouseWheelZoom();\n\n // Remove control icons\n this.getPublicInstance().disableControlIcons();\n\n // Reset zoom and pan\n this.reset();\n\n // Remove instance from instancesStore\n instancesStore = instancesStore.filter(function(instance) {\n return instance.svg !== that.svg;\n });\n\n // Delete options and its contents\n delete this.options;\n\n // Delete viewport to make public shadow viewport functions uncallable\n delete this.viewport;\n\n // Destroy public instance and rewrite getPublicInstance\n delete this.publicInstance;\n delete this.pi;\n this.getPublicInstance = function() {\n return null;\n };\n};\n\n/**\n * Returns a public instance object\n *\n * @return {Object} Public instance object\n */\nSvgPanZoom.prototype.getPublicInstance = function() {\n var that = this;\n\n // Create cache\n if (!this.publicInstance) {\n this.publicInstance = this.pi = {\n // Pan\n enablePan: function() {\n that.options.panEnabled = true;\n return that.pi;\n },\n disablePan: function() {\n that.options.panEnabled = false;\n return that.pi;\n },\n isPanEnabled: function() {\n return !!that.options.panEnabled;\n },\n pan: function(point) {\n that.pan(point);\n return that.pi;\n },\n panBy: function(point) {\n that.panBy(point);\n return that.pi;\n },\n getPan: function() {\n return that.getPan();\n },\n // Pan event\n setBeforePan: function(fn) {\n that.options.beforePan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnPan: function(fn) {\n that.options.onPan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zoom and Control Icons\n enableZoom: function() {\n that.options.zoomEnabled = true;\n return that.pi;\n },\n disableZoom: function() {\n that.options.zoomEnabled = false;\n return that.pi;\n },\n isZoomEnabled: function() {\n return !!that.options.zoomEnabled;\n },\n enableControlIcons: function() {\n if (!that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = true;\n ControlIcons.enable(that);\n }\n return that.pi;\n },\n disableControlIcons: function() {\n if (that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = false;\n ControlIcons.disable(that);\n }\n return that.pi;\n },\n isControlIconsEnabled: function() {\n return !!that.options.controlIconsEnabled;\n },\n // Double click zoom\n enableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = true;\n return that.pi;\n },\n disableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = false;\n return that.pi;\n },\n isDblClickZoomEnabled: function() {\n return !!that.options.dblClickZoomEnabled;\n },\n // Mouse wheel zoom\n enableMouseWheelZoom: function() {\n that.enableMouseWheelZoom();\n return that.pi;\n },\n disableMouseWheelZoom: function() {\n that.disableMouseWheelZoom();\n return that.pi;\n },\n isMouseWheelZoomEnabled: function() {\n return !!that.options.mouseWheelZoomEnabled;\n },\n // Zoom scale and bounds\n setZoomScaleSensitivity: function(scale) {\n that.options.zoomScaleSensitivity = scale;\n return that.pi;\n },\n setMinZoom: function(zoom) {\n that.options.minZoom = zoom;\n return that.pi;\n },\n setMaxZoom: function(zoom) {\n that.options.maxZoom = zoom;\n return that.pi;\n },\n // Zoom event\n setBeforeZoom: function(fn) {\n that.options.beforeZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnZoom: function(fn) {\n that.options.onZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zooming\n zoom: function(scale) {\n that.publicZoom(scale, true);\n return that.pi;\n },\n zoomBy: function(scale) {\n that.publicZoom(scale, false);\n return that.pi;\n },\n zoomAtPoint: function(scale, point) {\n that.publicZoomAtPoint(scale, point, true);\n return that.pi;\n },\n zoomAtPointBy: function(scale, point) {\n that.publicZoomAtPoint(scale, point, false);\n return that.pi;\n },\n zoomIn: function() {\n this.zoomBy(1 + that.options.zoomScaleSensitivity);\n return that.pi;\n },\n zoomOut: function() {\n this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity));\n return that.pi;\n },\n getZoom: function() {\n return that.getRelativeZoom();\n },\n // CTM update\n setOnUpdatedCTM: function(fn) {\n that.options.onUpdatedCTM =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Reset\n resetZoom: function() {\n that.resetZoom();\n return that.pi;\n },\n resetPan: function() {\n that.resetPan();\n return that.pi;\n },\n reset: function() {\n that.reset();\n return that.pi;\n },\n // Fit, Contain and Center\n fit: function() {\n that.fit();\n return that.pi;\n },\n contain: function() {\n that.contain();\n return that.pi;\n },\n center: function() {\n that.center();\n return that.pi;\n },\n // Size and Resize\n updateBBox: function() {\n that.updateBBox();\n return that.pi;\n },\n resize: function() {\n that.resize();\n return that.pi;\n },\n getSizes: function() {\n return {\n width: that.width,\n height: that.height,\n realZoom: that.getZoom(),\n viewBox: that.viewport.getViewBox()\n };\n },\n // Destroy\n destroy: function() {\n that.destroy();\n return that.pi;\n }\n };\n }\n\n return this.publicInstance;\n};\n\n/**\n * Stores pairs of instances of SvgPanZoom and SVG\n * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom}\n *\n * @type {Array}\n */\nvar instancesStore = [];\n\nvar svgPanZoom = function(elementOrSelector, options) {\n var svg = Utils.getSvg(elementOrSelector);\n\n if (svg === null) {\n return null;\n } else {\n // Look for existent instance\n for (var i = instancesStore.length - 1; i >= 0; i--) {\n if (instancesStore[i].svg === svg) {\n return instancesStore[i].instance.getPublicInstance();\n }\n }\n\n // If instance not found - create one\n instancesStore.push({\n svg: svg,\n instance: new SvgPanZoom(svg, options)\n });\n\n // Return just pushed instance\n return instancesStore[\n instancesStore.length - 1\n ].instance.getPublicInstance();\n }\n};\n\nmodule.exports = svgPanZoom;\n","import * as d3 from 'd3';\nimport svgPanZoom from 'svg-pan-zoom';\nimport { Edge } from \"@ose/js-core\";\nimport { HierarchyNode } from './graph-filters';\nimport { CURATION_STATUS } from \"@ose/js-core\";\n\n// Relation color map (matching RELATION_COLOR_MAP in visualise.py)\nexport const RELATION_COLOR_MAP: Record<string, string> = {\n \"has part\": \"blue\",\n \"part of\": \"blue\",\n \"contains\": \"green\",\n \"has role\": \"darkgreen\",\n \"is about\": \"darkgrey\",\n \"has participant\": \"darkblue\",\n};\n\n// Layout constants\nconst FONT_SIZE = 11;\nconst LINE_HEIGHT = 14;\nconst MAX_LINE_WIDTH = 120;\nconst NODE_PADDING = 12;\nconst HORIZONTAL_SPACING = 40;\nconst VERTICAL_SPACING = 40;\n\nexport interface NodeDimensions {\n width: number;\n height: number;\n lines: string[];\n}\n\nexport interface TreeLayoutData {\n root: d3.HierarchyPointNode<HierarchyNode>;\n offsetX: number;\n offsetY: number;\n treeWidth: number;\n}\n\nexport interface PanZoomState {\n zoom: number;\n pan: { x: number; y: number };\n}\n\n/**\n * Text wrapping helper\n */\nfunction wrapText(svg: d3.Selection<SVGSVGElement, unknown, null, undefined>, text: string, maxWidth: number): string[] {\n const words = text.split(/\\s+/);\n const lines: string[] = [];\n let currentLine = '';\n\n const tempText = svg.append('text')\n .style('font-size', `${FONT_SIZE}px`)\n .style('visibility', 'hidden');\n\n for (const word of words) {\n const testLine = currentLine ? `${currentLine} ${word}` : word;\n tempText.text(testLine);\n const testWidth = (tempText.node() as SVGTextElement).getComputedTextLength();\n\n if (testWidth > maxWidth && currentLine) {\n lines.push(currentLine);\n currentLine = word;\n } else {\n currentLine = testLine;\n }\n }\n if (currentLine) {\n lines.push(currentLine);\n }\n\n tempText.remove();\n return lines;\n}\n\n/**\n * Text measurement helper\n */\nfunction measureText(svg: d3.Selection<SVGSVGElement, unknown, null, undefined>, text: string): number {\n const tempText = svg.append('text')\n .style('font-size', `${FONT_SIZE}px`)\n .style('visibility', 'hidden')\n .text(text);\n const width = (tempText.node() as SVGTextElement).getComputedTextLength();\n tempText.remove();\n return width;\n}\n\n/**\n * Calculate dimensions for all nodes\n */\nexport function calculateNodeDimensions(\n svg: d3.Selection<SVGSVGElement, unknown, null, undefined>,\n trees: HierarchyNode[]\n): Map<string, NodeDimensions> {\n const nodeDimensionsMap = new Map<string, NodeDimensions>();\n\n for (const tree of trees) {\n const stack = [tree];\n while (stack.length > 0) {\n const node = stack.pop()!;\n const label = node.label || node.id;\n const lines = wrapText(svg, label, MAX_LINE_WIDTH);\n const maxLineWidthActual = Math.max(...lines.map(line => measureText(svg, line)));\n const nodeWidth = Math.max(80, maxLineWidthActual + NODE_PADDING * 2);\n const nodeHeight = Math.max(24, lines.length * LINE_HEIGHT + NODE_PADDING);\n nodeDimensionsMap.set(node.id, { width: nodeWidth, height: nodeHeight, lines });\n stack.push(...node.children);\n }\n }\n\n return nodeDimensionsMap;\n}\n\n/**\n * Calculate tree layouts and positions\n */\nexport function calculateTreeLayouts(\n trees: HierarchyNode[],\n nodeDimensionsMap: Map<string, NodeDimensions>\n): { \n treeLayouts: TreeLayoutData[];\n nodePositions: Map<string, { x: number; y: number }>;\n maxNodeWidth: number;\n maxNodeHeight: number;\n} {\n // Find max node dimensions for layout spacing\n let maxNodeWidth = 0;\n let maxNodeHeight = 0;\n nodeDimensionsMap.forEach(dims => {\n maxNodeWidth = Math.max(maxNodeWidth, dims.width);\n maxNodeHeight = Math.max(maxNodeHeight, dims.height);\n });\n\n let currentX = 20;\n const nodePositions = new Map<string, { x: number; y: number }>();\n const treeLayouts: TreeLayoutData[] = [];\n\n // First pass: calculate all layouts and store node positions\n for (const tree of trees) {\n const root = d3.hierarchy(tree);\n \n // Calculate tree dimensions - use nodeSize with [horizontal spacing, vertical spacing]\n const treeLayout = d3.tree<HierarchyNode>()\n .nodeSize([maxNodeWidth + HORIZONTAL_SPACING, maxNodeHeight + VERTICAL_SPACING])\n .separation((a, b) => a.parent === b.parent ? 1 : 1.2);\n\n treeLayout(root);\n\n // Find bounds of this tree (x is now horizontal, y is vertical)\n let minX = Infinity, maxX = -Infinity;\n root.each(d => {\n minX = Math.min(minX, d.x!);\n maxX = Math.max(maxX, d.x!);\n });\n\n const treeWidth = maxX - minX + maxNodeWidth + 20;\n const offsetX = currentX - minX + maxNodeWidth / 2;\n const offsetY = 50;\n\n // Store layout data for second pass\n treeLayouts.push({ \n root: root as d3.HierarchyPointNode<HierarchyNode>, \n offsetX, \n offsetY, \n treeWidth \n });\n\n // Store node positions\n root.each(d => {\n nodePositions.set(d.data.id, { \n x: d.x! + offsetX, \n y: d.y! + offsetY \n });\n });\n\n currentX += treeWidth + 40;\n }\n\n return { treeLayouts, nodePositions, maxNodeWidth, maxNodeHeight };\n}\n\n/**\n * Create arrow markers for edges\n */\nexport function createArrowMarkers(\n defs: d3.Selection<SVGDefsElement, unknown, null, undefined>,\n relationEdges: Edge[]\n) {\n // Hierarchy arrow marker (gray)\n defs.append('marker')\n .attr('id', 'arrow-hierarchy')\n .attr('viewBox', '0 -5 10 10')\n .attr('refX', 0)\n .attr('refY', 0)\n .attr('markerWidth', 5)\n .attr('markerHeight', 5)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M0,-5L10,0L0,5')\n .attr('fill', '#999');\n\n // Create arrow markers for each relation color\n const usedColors = new Set<string>();\n for (const edge of relationEdges) {\n const edgeLabel = edge.label ?? edge.type ?? '';\n const edgeColor = RELATION_COLOR_MAP[edgeLabel] ?? edge.color ?? 'orange';\n usedColors.add(edgeColor);\n }\n \n usedColors.forEach(color => {\n const colorId = color.replace(/[^a-zA-Z0-9]/g, '_');\n defs.append('marker')\n .attr('id', `arrow-${colorId}`)\n .attr('viewBox', '0 -5 10 10')\n .attr('refX', 8)\n .attr('refY', 0)\n .attr('markerWidth', 6)\n .attr('markerHeight', 6)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M0,-5L10,0L0,5')\n .attr('fill', color);\n });\n}\n\n/**\n * Draw hierarchy edges\n */\nexport function drawHierarchyEdges(\n edgesLayer: d3.Selection<SVGGElement, unknown, null, undefined>,\n treeLayouts: TreeLayoutData[],\n nodeDimensionsMap: Map<string, NodeDimensions>,\n onEdgeInteraction: (sourceId: string, targetId: string, element: SVGElement, action: 'enter' | 'leave' | 'click') => void\n) {\n for (const { root, offsetX, offsetY } of treeLayouts) {\n const treeEdgesGroup = edgesLayer.append('g')\n .attr('class', 'tree-edges')\n .attr('transform', `translate(${offsetX}, ${offsetY})`);\n\n treeEdgesGroup.selectAll('.link')\n .data(root.links())\n .enter()\n .append('path')\n .attr('class', 'link')\n .attr('data-source', d => d.source.data.id)\n .attr('data-target', d => d.target.data.id)\n .attr('d', d => {\n const source = d.source as d3.HierarchyPointNode<HierarchyNode>;\n const target = d.target as d3.HierarchyPointNode<HierarchyNode>;\n const targetDims = nodeDimensionsMap.get(target.data.id);\n const targetHeight = targetDims ? targetDims.height / 2 : 12;\n const adjustedTargetY = target.y! - targetHeight-8;\n const sourceDims = nodeDimensionsMap.get(source.data.id);\n const sourceHeight = sourceDims ? sourceDims.height / 2 : 12;\n const adjustedSourceY = source.y! + sourceHeight;\n return `M${source.x},${adjustedSourceY}C${source.x},${(adjustedSourceY + adjustedTargetY) / 2} ${target.x},${(adjustedSourceY + adjustedTargetY) / 2} ${target.x},${adjustedTargetY}`;\n })\n .attr('marker-end', 'url(#arrow-hierarchy)')\n .on('mouseenter', function(_event, d) {\n onEdgeInteraction(d.source.data.id, d.target.data.id, this, 'enter');\n })\n .on('mouseleave', function(_event, d) {\n onEdgeInteraction(d.source.data.id, d.target.data.id, this, 'leave');\n })\n .on('click', function(_event, d) {\n onEdgeInteraction(d.source.data.id, d.target.data.id, this, 'click');\n })\n .each(function(_d) {\n d3.select(this).append('title').text('subclass of');\n });\n }\n}\n\n/**\n * Draw relation edges\n */\nexport function drawRelationEdges(\n edgesLayer: d3.Selection<SVGGElement, unknown, null, undefined>,\n relationEdges: Edge[],\n nodePositions: Map<string, { x: number; y: number }>,\n nodeDimensionsMap: Map<string, NodeDimensions>,\n nodeIdLabelMap: Record<string, string>,\n onEdgeInteraction: (sourceId: string, targetId: string, element: SVGElement, action: 'enter' | 'leave' | 'click') => void\n) {\n for (const edge of relationEdges) {\n const sourcePos = nodePositions.get(edge.source);\n const targetPos = nodePositions.get(edge.target);\n \n if (!sourcePos || !targetPos) continue;\n\n const edgeLabel = edge.label || edge.type || '';\n const edgeColor = RELATION_COLOR_MAP[edgeLabel] || edge.color || 'orange';\n const colorId = edgeColor.replace(/[^a-zA-Z0-9]/g, '_');\n\n // Get node dimensions\n const sourceDims = nodeDimensionsMap.get(edge.source);\n const targetDims = nodeDimensionsMap.get(edge.target);\n const sourceWidth = sourceDims ? sourceDims.width / 2 : 40;\n const targetWidth = targetDims ? targetDims.width / 2 : 40;\n const sourceHeight = sourceDims ? sourceDims.height / 2 : 12;\n const targetHeight = targetDims ? targetDims.height / 2 : 12;\n\n // Calculate edge start and end points at node boundaries\n const dx = targetPos.x - sourcePos.x;\n const dy = targetPos.y - sourcePos.y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n \n if (dist === 0) continue;\n\n // Determine if edge is more horizontal or vertical\n const angle = Math.atan2(dy, dx);\n const isHorizontal = Math.abs(Math.cos(angle)) > Math.abs(Math.sin(angle));\n \n // Calculate start point at source node edge\n let startX: number, startY: number;\n if (isHorizontal) {\n // Connect at left/right edge\n startX = sourcePos.x + (dx > 0 ? sourceWidth : -sourceWidth);\n startY = sourcePos.y + (dy / dist) * sourceHeight * 0.5;\n } else {\n // Connect at top/bottom edge\n startX = sourcePos.x + (dx / dist) * sourceWidth * 0.5;\n startY = sourcePos.y + (dy > 0 ? sourceHeight : -sourceHeight);\n }\n\n // Calculate end point at target node edge\n let endX: number, endY: number;\n if (isHorizontal) {\n // Connect at left/right edge\n endX = targetPos.x + (dx > 0 ? -targetWidth : targetWidth);\n endY = targetPos.y - (dy / dist) * targetHeight * 0.5;\n } else {\n // Connect at top/bottom edge\n endX = targetPos.x - (dx / dist) * targetWidth * 0.5;\n endY = targetPos.y + (dy > 0 ? -targetHeight : targetHeight);\n }\n\n // Draw curved path for relation edge\n const midX = (startX + endX) / 2;\n const midY = (startY + endY) / 2;\n const offsetAmount = Math.min(30, dist * 0.2);\n const curveOffsetX = dist > 0 ? (-dy / dist) * offsetAmount : 0;\n const curveOffsetY = dist > 0 ? (dx / dist) * offsetAmount : 0;\n\n const pathData = `M${startX},${startY} Q${midX + curveOffsetX},${midY + curveOffsetY} ${endX},${endY}`;\n\n const sourceId = edge.source;\n const targetId = edge.target;\n \n edgesLayer.append('path')\n .attr('class', 'relation-link')\n .attr('data-source', sourceId)\n .attr('data-target', targetId)\n .attr('d', pathData)\n .style('fill', 'none')\n .style('stroke', edgeColor)\n .style('stroke-width', '1.5px')\n .style('stroke-dasharray', '4,2')\n .style('stroke-opacity', 0.8)\n .attr('marker-end', `url(#arrow-${colorId})`)\n .on('mouseenter', function() {\n onEdgeInteraction(sourceId, targetId, this, 'enter');\n })\n .on('mouseleave', function() {\n onEdgeInteraction(sourceId, targetId, this, 'leave');\n })\n .on('click', function() {\n onEdgeInteraction(sourceId, targetId, this, 'click');\n })\n .append('title')\n .text(`'${nodeIdLabelMap[edge.source]}' ${edgeLabel} '${nodeIdLabelMap[edge.target]}'` || 'relation');\n\n // Draw label on the edge\n if (edgeLabel) {\n edgesLayer.append('text')\n .attr('class', 'relation-edge-label')\n .attr('data-source', sourceId)\n .attr('data-target', targetId)\n .attr('x', midX + curveOffsetX)\n .attr('y', midY + curveOffsetY - 4)\n .attr('text-anchor', 'middle')\n .style('font-size', '9px')\n .style('fill', edgeColor)\n .style('font-style', 'italic')\n .style('cursor', 'pointer')\n .text(edgeLabel)\n .on('mouseenter', function() {\n onEdgeInteraction(sourceId, targetId, this, 'enter');\n })\n .on('mouseleave', function() {\n onEdgeInteraction(sourceId, targetId, this, 'leave');\n })\n .on('click', function() {\n onEdgeInteraction(sourceId, targetId, this, 'click');\n });\n }\n }\n}\n\nfunction nodeClasses(d: d3.HierarchyPointNode<HierarchyNode>): string[] {\n const curationStatus = (d.data.ose_curation ?? CURATION_STATUS.EXTERNAL).toLowerCase().replace(/\\s+/g, '_');\n return [\n 'node',\n `ose-source-${d.data.ose_source}`,\n `ose-curation-status-${curationStatus}`,\n ...(d.data.ose_selected ? ['ose-selected'] : [])\n ];\n}\n\n/**\n * Draw nodes\n */\nexport function drawNodes(\n nodesLayer: d3.Selection<SVGGElement, unknown, null, undefined>,\n treeLayouts: TreeLayoutData[],\n nodeDimensionsMap: Map<string, NodeDimensions>,\n onNodeInteraction: (nodeId: string, element: SVGElement, action: 'enter' | 'leave') => void,\n onNodeDoubleClick: (nodeData: HierarchyNode) => void\n) {\n for (const { root, offsetX, offsetY } of treeLayouts) {\n const treeNodesGroup = nodesLayer.append('g')\n .attr('class', 'tree-nodes')\n .attr('transform', `translate(${offsetX}, ${offsetY})`);\n\n const nodeGroups = treeNodesGroup.selectAll('.node')\n .data(root.descendants())\n .enter()\n .append('g')\n .attr('class', d => nodeClasses(d).join(' '))\n .attr('data-node-id', d => d.data.id)\n .attr('transform', d => `translate(${d.x},${d.y})`)\n .on('mouseenter', function(_event, d) {\n onNodeInteraction(d.data.id, this, 'enter');\n })\n .on('mouseleave', function(_event, d) {\n onNodeInteraction(d.data.id, this, 'leave');\n })\n .on('dblclick', function(_event, d) {\n onNodeDoubleClick(d.data);\n });\n\n // Node background rectangle with dynamic dimensions\n nodeGroups.append('rect')\n .attr('x', d => {\n const dims = nodeDimensionsMap.get(d.data.id);\n return dims ? -dims.width / 2 : -40;\n })\n .attr('y', d => {\n const dims = nodeDimensionsMap.get(d.data.id);\n return dims ? -dims.height / 2 : -12;\n })\n .attr('width', d => {\n const dims = nodeDimensionsMap.get(d.data.id);\n return dims ? dims.width : 80;\n })\n .attr('height', d => {\n const dims = nodeDimensionsMap.get(d.data.id);\n return dims ? dims.height : 24;\n })\n .attr('rx', 4)\n .attr('ry', 4)\n .style('fill', '#fff')\n .style('stroke', '#999')\n .style('stroke-width', '1px');\n\n // Node label with multi-line support\n nodeGroups.each(function(d) {\n const dims = nodeDimensionsMap.get(d.data.id);\n if (!dims) return;\n\n const textGroup = d3.select(this).append('text')\n .attr('text-anchor', 'middle')\n .style('font-size', `${FONT_SIZE}px`)\n .style('fill', '#333');\n\n const lines = dims.lines;\n const totalHeight = lines.length * LINE_HEIGHT;\n const startY = -totalHeight / 2 + LINE_HEIGHT / 2;\n\n lines.forEach((line, i) => {\n textGroup.append('tspan')\n .attr('x', 0)\n .attr('dy', i === 0 ? `${startY + FONT_SIZE * 0.35}px` : `${LINE_HEIGHT}px`)\n .text(line);\n });\n\n // Add tooltip\n textGroup.append('title')\n .text(`${d.data.label}\\n${d.data.id}`);\n });\n }\n}\n\n/**\n * Initialize pan and zoom\n */\nexport function initializePanZoom(\n svgElement: SVGSVGElement,\n savedState: PanZoomState | null\n): ReturnType<typeof svgPanZoom> {\n const panZoom = svgPanZoom(svgElement, {\n zoomEnabled: true,\n controlIconsEnabled: true,\n dblClickZoomEnabled: false,\n contain: true,\n center: true,\n zoomScaleSensitivity: 0.3,\n minZoom: 0.01,\n maxZoom: 100\n });\n\n // Restore previous pan/zoom state if available\n if (savedState) {\n panZoom.zoom(savedState.zoom);\n panZoom.pan(savedState.pan);\n }\n\n return panZoom;\n}\n","import { CURATION_STATUS } from \"@ose/js-core\";\nimport { Graph, Node, Row } from \"@ose/js-core\";\n\nexport interface TermDataRelation {\n relation: { label: string };\n target: { label: string };\n}\n\n/**\n * Term data from backend\n */\nexport interface TermData<ParentId = string | undefined> {\n id: string;\n index: number;\n label: string;\n curationStatus?: string;\n origin?: string;\n subClassOf: { id: ParentId, label: string }[];\n relations: TermDataRelation[];\n}\n\nexport type ResolvedTermData = TermData<string>;\n\n/**\n * Raw data from backend API (only dependencies and derived)\n */\nexport interface DependencyData {\n dependencies: ResolvedTermData[];\n derived: ResolvedTermData[];\n}\n\n/**\n * Build graph from current spreadsheet data combined with dependencies\n */\nexport function buildGraphFromSpreadsheet(\n currentRows: Row[],\n currentHeader: string[],\n currentSpreadsheetName: string,\n dependencyData: DependencyData,\n selection?: number[]\n): Graph {\n const graph: Graph = new Graph();\n\n const relationColumns = currentHeader.filter(h => h.startsWith(\"REL \"));\n console.debug(\"Relation columns found:\", relationColumns);\n\n // Convert current spreadsheet rows to TermData\n const currentTerms: TermData[] = currentRows.map((row, index) => {\n const id = row['ID'].trim();\n const label = row['Label'].trim();\n const curationStatus = Object.entries(row)\n .find(([k, _]) => k.toLowerCase().includes('curation status'))\n ?.[1].trim() || CURATION_STATUS.PRE_PROPOSED;\n const parents = [{ label: row['Parent'].trim(), id: undefined }];\n\n const relations: TermDataRelation[] = [];\n for (const relCol of relationColumns) {\n const value = row[relCol];\n if (value && typeof value === 'string') {\n const targets = value.split(\";\").map(t => t.trim()).filter(Boolean);\n for (const target of targets) {\n relations.push({\n relation: { label: relCol.replace(/REL '([^']+)'.*/, \"$1\") },\n target: {label: target}\n });\n }\n }\n }\n\n return {\n id,\n label,\n curationStatus,\n origin: currentSpreadsheetName,\n subClassOf: parents,\n relations,\n index\n };\n }).filter(term => term.id); // Filter out rows without IDs\n\n // Track all terms (combined from all sources)\n const termsByLabel = new Map<string, TermData & { source: 'current' | 'dependencies' | 'derived' }>();\n\n // Add terms from current spreadsheet\n for (const term of currentTerms) {\n termsByLabel.set(term.label, { ...term, source: 'current' });\n }\n\n // Add dependencies\n for (const term of dependencyData.dependencies) {\n if (!termsByLabel.has(term.label)) {\n termsByLabel.set(term.label, { ...term, source: 'dependencies' });\n }\n }\n\n // Add derived terms\n for (const term of dependencyData.derived) {\n if (!termsByLabel.has(term.label)) {\n termsByLabel.set(term.label, { ...term, source: 'derived' });\n }\n }\n\n\n // Resolve parent IDs\n for (const term of currentTerms) {\n for (const parent of term.subClassOf) {\n const parentTerm = termsByLabel.get(parent.label);\n if (parentTerm) {\n parent.id = parentTerm.id;\n } else if (parent.id === undefined) {\n console.warn(`Parent term with label \"${parent.label}\" not found for term \"${term.label} [${term.id}]\"`);\n }\n }\n }\n\n const allTerms = new Map<string, ResolvedTermData & { source: 'current' | 'dependencies' | 'derived' }>();\n for (const term of termsByLabel.values()) {\n const unresolvedParents = term.subClassOf.filter(p => p.id === undefined);\n if (unresolvedParents.length > 0) {\n console.warn(`Term \"${term.label} [${term.id}]\" has unresolved parents:`, unresolvedParents);\n }\n\n term.subClassOf = term.subClassOf.filter(p => p.id !== undefined);\n allTerms.set(term.id, term as ResolvedTermData & { source: 'current' | 'dependencies' | 'derived' });\n }\n\n\n // Create nodes for all terms\n for (const [id, term] of allTerms) {\n const nodeId = id.replace(':', '_');\n const origin = term.origin || '<unknown>';\n const curationStatus = term.curationStatus || 'External';\n\n const node: Node = {\n id: nodeId,\n label: term.label,\n class: `ose-curation-status-${curationStatus.toLowerCase().replace(/\\s+/g, '_')}`,\n curationStatus,\n origin,\n source: term.source,\n isSelected: selection?.includes(term.index) === true,\n visualDepth: -Infinity // Will be calculated later\n };\n graph.addNode(node);\n }\n\n // Create edges for subclass_of relationships\n for (const [id, term] of allTerms) {\n const nodeId = id.replace(':', '_');\n\n for (const parent of term.subClassOf) {\n const parentNodeId = parent.id.replace(':', '_');\n\n // Add parent node if it doesn't exist (external reference)\n if (!allTerms.has(parent.id)) {\n console.warn(`Parent term with label \"${parent.label}\" not found for term \"${term.label} [${term.id}]\"`);\n }\n\n graph.addEdge({\n source: parentNodeId,\n target: nodeId,\n type: 'subclass_of'\n });\n }\n }\n\n // Create edges for other relations\n for (const [id, term] of allTerms) {\n const nodeId = id.replace(':', '_');\n\n for (const rel of term.relations) {\n const targetTerm = termsByLabel.get(rel.target.label);\n if (!targetTerm) {\n console.warn(`Relation target term with label \"${rel.target.label}\" not found for term \"${term.label} [${term.id}]\"`);\n continue;\n }\n\n const targetNodeId = targetTerm.id.replace(':', '_');\n const relationColor = getRelationColor(rel.relation.label);\n\n graph.addEdge({\n source: nodeId,\n target: targetNodeId,\n type: rel.relation.label,\n label: rel.relation.label,\n color: relationColor\n });\n }\n }\n\n console.debug(`Built graph with ${graph.nodes.length} nodes and ${graph.edges.length} edges from ${currentTerms.length} current terms, ${dependencyData.dependencies.length} dependencies, and ${dependencyData.derived.length} derived terms.`, { edges: graph.edges, nodes: graph.nodes, allTerms });\n\n // Remove dependency or derived nodes that don't have a path to current nodes\n const currentNodeIds = new Set(\n Array.from(allTerms.entries())\n .filter(([_, term]) => term.source === 'current')\n .map(([id, _]) => id.replace(':', '_'))\n );\n\n\n const derivedNodeIds = new Set(\n Array.from(allTerms.entries())\n .filter(([_, term]) => term.source === 'derived')\n .map(([id, _]) => id.replace(':', '_'))\n );\n\n const dependencyNodeIds = new Set(\n Array.from(allTerms.entries())\n .filter(([_, term]) => term.source === 'dependencies')\n .map(([id, _]) => id.replace(':', '_'))\n );\n\n\n function isReachableDependency(nodeId: string): boolean {\n if (currentNodeIds.has(nodeId)) {\n return true;\n }\n\n const children = graph.successors(nodeId);\n for (const child of children) {\n if (isReachableDependency(child.id)) {\n return true;\n }\n }\n return false;\n }\n\n function isReachableDerived(nodeId: string): boolean {\n if (currentNodeIds.has(nodeId)) {\n return true;\n }\n\n const parents = graph.predecessors(nodeId);\n for (const parent of parents) {\n if (isReachableDerived(parent.id)) {\n return true;\n }\n }\n return false;\n }\n\n function isReachable(nodeId: string): boolean {\n if (currentNodeIds.has(nodeId)) {\n return true;\n }\n if (derivedNodeIds.has(nodeId)) {\n return isReachableDerived(nodeId);\n }\n if (dependencyNodeIds.has(nodeId)) {\n return isReachableDependency(nodeId);\n }\n return false;\n }\n\n for (const node of graph.nodes) {\n if (!isReachable(node.id)) {\n graph.removeNode(node.id);\n }\n }\n\n // Calculate visual depth for all nodes\n calculateVisualDepth(graph);\n\n console.log({ graph: graph.clone() })\n\n // Calculate which nodes are visible for the current selection\n if (selection && selection.length > 0) {\n const visibleNodes = new Set(graph.nodes.filter(node => node.isSelected).map(node => node.id));\n calculateVisibleNodes(graph, visibleNodes);\n\n for (const node of graph.nodes) {\n if (!visibleNodes.has(node.id)) {\n graph.removeNode(node.id);\n }\n }\n }\n\n return graph;\n}\n\n/**\n * Get color for relation type\n */\nfunction getRelationColor(label?: string): string {\n const colorMap: Record<string, string> = {\n \"has part\": \"blue\",\n \"part of\": \"blue\",\n \"contains\": \"green\",\n \"has role\": \"darkgreen\",\n \"is about\": \"darkgrey\",\n \"has participant\": \"darkblue\",\n };\n\n return (label ? colorMap[label] : null) ?? \"orange\";\n}\n\n/**\n * Calculate visual depth for all nodes in the graph\n * \n * Visual depth rules:\n * - -1 for parent nodes that are no immediate parents of any current sheet nodes\n * - 0 for nodes that are parents of current sheet nodes but not from current sheet\n * - 1..n for current sheet and derived nodes based on distance from closest parent with depth 0 (see above)\n */\nfunction calculateVisualDepth(graph: Graph) {\n // Memoization for depth calculation\n const depthCache = new Map<string, number>();\n\n function getVisualDepth(node: Node): number {\n if (depthCache.has(node.id)) {\n return depthCache.get(node.id)!;\n }\n\n if (!node) {\n console.error(\"Node not found for ID:\", node);\n return -Infinity;\n }\n\n const pred = graph.predecessors(node);\n const succ = graph.successors(node);\n const isFromCurrentSheet = node.source !== 'dependencies';\n\n let depth: number;\n\n if (!isFromCurrentSheet && succ.find(s => s.source !== 'dependencies')) {\n depth = 0;\n } else {\n const maxParentDepth = pred.reduce((d, p) => Math.max(d, getVisualDepth(p)), -1);\n\n if (isFromCurrentSheet) {\n depth = maxParentDepth + 1;\n } else {\n depth = maxParentDepth;\n }\n }\n\n depthCache.set(node.id, depth);\n return depth;\n }\n\n\n // Calculate depth for all nodes\n for (const node of graph.nodes) {\n node.visualDepth = getVisualDepth(node);\n }\n}\n\nfunction calculateVisibleNodes(graph: Graph, visibleNodes: Set<string>): void {\n const isVisible = (node: Node, direction: 'up' | 'down'): boolean => {\n if (visibleNodes.has(node.id)) {\n return true;\n }\n \n const fn = direction === 'up' ? graph.predecessors.bind(graph) : graph.successors.bind(graph);\n \n const visible = fn(node.id).reduce((acc, n) => isVisible(n, direction) || acc, false)\n\n if (visible) {\n visibleNodes.add(node.id);\n }\n\n return visible;\n }\n\n for (const node of graph.leaves) {\n isVisible(node, 'up');\n }\n\n for (const node of graph.roots) {\n isVisible(node, 'down');\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, useTemplateRef, watch, watchEffect, watchPostEffect } from 'vue';\nimport { SpreadsheetData, VisualisationData, Graph, Row } from \"@ose/js-core\";\nimport svgPanZoom from 'svg-pan-zoom';\nimport { CURATION_STATUS } from \"@ose/js-core\";\nimport * as d3 from 'd3';\nimport {\n applyGraphFilters,\n buildHierarchyTrees,\n HierarchyNode,\n type FilterOptions\n} from './graph-filters';\nimport {\n performGraphSearch,\n highlightSearchMatch,\n clearSearchHighlights,\n panToNode\n} from './search-manager';\nimport {\n calculateNodeDimensions,\n calculateTreeLayouts,\n createArrowMarkers,\n drawHierarchyEdges,\n drawRelationEdges,\n drawNodes,\n initializePanZoom,\n type PanZoomState\n} from './graph-renderer';\nimport { buildGraphFromSpreadsheet, type DependencyData } from './graph-builder';\nimport { NavigateToTermMessage } from \"@ose/js-core\";\n\ndeclare var URLS: { [key: string]: any };\nconst URL_PREFIX = URLS['prefix'];\n\n\nconst data = ref<VisualisationData | null>(window.ose?.visualise ?? null);\n\nwindow.oseDataChanged = () => {\n console.debug(\"Visualisation data updated in window.ose\", window.ose?.visualise);\n data.value = window.ose?.visualise ?? null;\n\n // Debug the computed sheetData\n const sheet = data.value?.sheetData;\n console.debug(\"Sheet data after update:\", {\n hasSheetData: !!sheet,\n repo_name: sheet?.repo_name,\n folder: sheet?.folder,\n spreadsheet_name: sheet?.spreadsheet_name,\n rowCount: sheet?.rows?.length || 0,\n header: sheet?.header\n });\n}\n\nconst svgContainer = useTemplateRef(\"svgContainer\")\n\nconst sheetData = computed(() => data.value?.sheetData ?? {\n rows: [],\n header: [],\n file_sha: '',\n repo_name: '',\n folder: '',\n spreadsheet_name: ''\n} as SpreadsheetData<Row>);\n\nconst sheetPath = computed(() => `${sheetData.value.folder}/${sheetData.value.spreadsheet_name}`);\n\nconst loading = ref<boolean>(false);\nconst error = ref<string | null>(null);\n\nconst curationStatuses = computed(() => Object.values(CURATION_STATUS));\n\nconst graph = ref<Graph | null>(null);\n\nconst nodeIdLabelMap = computed(() => graph.value?.nodes.reduce((map, node) => ({\n [node.id]: node.label,\n ...map\n}), {} as Record<string, string>) ?? {});\n\nconst curationFilter = ref<string[]>(Object.values(CURATION_STATUS));\nconst showChildrenFromOtherSheets = ref<boolean>(true);\nconst showParentsFromOtherSheets = ref<boolean>(true);\nconst numChildLevels = ref<number | null>(null);\nconst maxChildLevels = computed(() => graph.value ? Math.max(...graph.value.nodes.map(n => n.visualDepth ?? 0), 1) : 1);\n\n// Store svgPanZoom instance to preserve pan/zoom state across redraws\nlet panZoomInstance: ReturnType<typeof svgPanZoom> | null = null;\n\n// Search functionality\nconst searchQuery = ref<string>('');\nconst searchMatches = ref<string[]>([]);\nconst currentMatchIndex = ref<number>(-1);\n\nconst hasSearchMatches = computed(() => searchMatches.value.length > 0);\nconst matchInfo = computed(() => {\n if (!searchQuery.value.trim()) return '';\n if (searchMatches.value.length === 0) return 'No matches';\n return `${currentMatchIndex.value + 1} / ${searchMatches.value.length}`;\n});\nconst controlsDisabled = computed(() => !graph.value || loading.value);\n\nfunction performSearch() {\n const matches = performGraphSearch(searchQuery.value, nodeIdLabelMap.value);\n searchMatches.value = matches;\n\n if (matches.length > 0) {\n currentMatchIndex.value = 0;\n highlightCurrentMatch();\n setTimeout(() => zoomToCurrentMatch(), 50);\n } else {\n currentMatchIndex.value = -1;\n }\n}\n\nfunction highlightCurrentMatch() {\n if (currentMatchIndex.value >= 0 && currentMatchIndex.value < searchMatches.value.length) {\n const currentNodeId = searchMatches.value[currentMatchIndex.value];\n highlightSearchMatch(currentNodeId);\n }\n}\n\nfunction zoomToCurrentMatch() {\n if (!panZoomInstance || currentMatchIndex.value < 0 || !svgContainer.value) return;\n\n const currentNodeId = searchMatches.value[currentMatchIndex.value];\n panToNode(currentNodeId, svgContainer.value, panZoomInstance);\n}\n\nfunction goToNextMatch() {\n if (searchMatches.value.length === 0) return;\n\n currentMatchIndex.value = (currentMatchIndex.value + 1) % searchMatches.value.length;\n highlightCurrentMatch();\n setTimeout(() => zoomToCurrentMatch(), 0);\n}\n\nfunction goToPreviousMatch() {\n if (searchMatches.value.length === 0) return;\n\n currentMatchIndex.value = (currentMatchIndex.value - 1 + searchMatches.value.length) % searchMatches.value.length;\n highlightCurrentMatch();\n setTimeout(() => zoomToCurrentMatch(), 0);\n}\n\nfunction clearSearch() {\n searchQuery.value = '';\n searchMatches.value = [];\n currentMatchIndex.value = -1;\n clearSearchHighlights();\n}\n\n\nasync function fetchGraph() {\n // Validate that we have all required data\n if (!sheetData.value.repo_name || !sheetData.value.folder || !sheetData.value.spreadsheet_name) {\n console.warn('Cannot fetch graph: missing repo, folder, or spreadsheet name', {\n repo: sheetData.value.repo_name,\n folder: sheetData.value.folder,\n spreadsheet: sheetData.value.spreadsheet_name\n });\n return;\n }\n\n if (sheetData.value.rows.length === 0) {\n console.warn('Cannot fetch graph: no rows in spreadsheet');\n return;\n }\n\n console.debug('Fetching graph dependencies...', {\n repo: sheetData.value.repo_name,\n folder: sheetData.value.folder,\n spreadsheet: sheetData.value.spreadsheet_name,\n rowCount: sheetData.value.rows.length\n });\n\n loading.value = true;\n error.value = null;\n try {\n const response = await fetch(`${URL_PREFIX}/api/visualise/dependencies/${sheetData.value.repo_name}/${sheetData.value.folder}/${sheetData.value.spreadsheet_name}`);\n\n if (!response.ok) {\n throw new Error(`Server error: ${response.status} ${response.statusText}`);\n }\n\n const result = await response.json();\n\n if (!result.success) {\n throw new Error(result.error || 'Failed to load dependencies');\n }\n\n console.debug('Dependencies loaded successfully', result.data);\n\n // Reset view\n panZoomInstance?.destroy();\n panZoomInstance = null;\n clearSearch();\n\n // Build graph from current spreadsheet data + dependencies on frontend\n const dependencyData = result.data as DependencyData;\n const selection = data.value?.selection && data.value.selection.length > 0 ? data.value.selection : undefined;\n graph.value = buildGraphFromSpreadsheet(\n sheetData.value.rows,\n sheetData.value.header,\n sheetData.value.spreadsheet_name,\n dependencyData,\n selection\n );\n\n // Set child levels to minimum of 3 and max child depth\n numChildLevels.value = Math.min(3, maxChildLevels.value);\n\n console.debug('Graph built successfully', {\n nodes: graph.value.nodes.length,\n edges: graph.value.edges.length\n });\n } catch (e) {\n error.value = e instanceof Error ? e.message : 'An unexpected error occurred';\n console.error('Failed to fetch dependencies:', e);\n } finally {\n loading.value = false;\n }\n}\n\nfunction renderGraph() {\n if (!graph.value || !svgContainer.value) {\n console.warn('Cannot render graph:', { hasGraph: !!graph.value, hasContainer: !!svgContainer.value });\n return;\n }\n\n console.debug('Rendering graph...', {\n nodes: graph.value.nodes.length,\n edges: graph.value.edges.length\n });\n\n const g = graph.value.clone();\n\n // Apply filters to graph\n const filterOptions: FilterOptions = {\n curationFilter: curationFilter.value,\n showChildrenFromOtherSheets: showChildrenFromOtherSheets.value,\n showParentsFromOtherSheets: showParentsFromOtherSheets.value,\n numChildLevels: numChildLevels.value,\n currentSheet: data?.value?.sheetData?.spreadsheet_name\n };\n\n const { nodes, hierarchyEdges, relationEdges } = applyGraphFilters(g, filterOptions);\n\n console.debug('After filtering:', {\n nodes: nodes.length,\n hierarchyEdges: hierarchyEdges.length,\n relationEdges: relationEdges.length\n });\n\n // Build hierarchical tree structures\n const trees = buildHierarchyTrees(nodes, hierarchyEdges);\n\n console.debug('Built trees:', trees.length);\n\n // Save current pan/zoom state before clearing the container\n let savedPanZoom: PanZoomState | null = null;\n if (panZoomInstance) {\n try {\n savedPanZoom = {\n zoom: panZoomInstance.getZoom(),\n pan: panZoomInstance.getPan()\n };\n panZoomInstance.destroy();\n panZoomInstance = null;\n } catch (e) {\n // Ignore errors if the instance is already destroyed\n }\n }\n\n // Clear the container\n svgContainer.value.querySelector('svg')?.remove();\n\n // Create SVG\n const containerRect = svgContainer.value.getBoundingClientRect();\n const width = containerRect.width || 800;\n const height = containerRect.height || 600;\n\n const svg = d3.select(svgContainer.value)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${width} ${height}`);\n\n const g_main = svg.append('g').attr('class', 'graph-container');\n\n // Calculate node dimensions and layout\n const nodeDimensionsMap = calculateNodeDimensions(svg, trees);\n const { treeLayouts, nodePositions } = calculateTreeLayouts(trees, nodeDimensionsMap);\n\n // Create layer groups for proper z-ordering: edges below, nodes above\n const edgesLayer = g_main.append('g').attr('class', 'edges-layer');\n const nodesLayer = g_main.append('g').attr('class', 'nodes-layer');\n\n // Define arrowhead markers\n const defs = svg.append('defs');\n createArrowMarkers(defs, relationEdges);\n\n // Track the currently focused/locked edge\n let focusedEdge: { sourceId: string; targetId: string; element: SVGElement } | null = null;\n\n // Node interaction handler\n function handleNodeInteraction(nodeId: string, element: SVGElement, action: 'enter' | 'leave') {\n if (action === 'enter') {\n // Highlight the node itself\n d3.select(element).classed('node-hovered', true);\n\n // Find and highlight all connected edges (both hierarchy and relation edges)\n svg.selectAll('.link, .relation-link').each(function () {\n const edge = d3.select(this);\n const sourceId = edge.attr('data-source');\n const targetId = edge.attr('data-target');\n\n if (sourceId === nodeId || targetId === nodeId) {\n edge.classed('connected', true);\n\n // Also highlight the connected nodes\n if (sourceId !== nodeId) {\n svg.select(`.node[data-node-id=\"${sourceId}\"]`).classed('node-connected', true);\n }\n if (targetId !== nodeId) {\n svg.select(`.node[data-node-id=\"${targetId}\"]`).classed('node-connected', true);\n }\n }\n });\n } else if (action === 'leave') {\n // Remove highlight from node\n d3.select(element).classed('node-hovered', false);\n\n // Remove highlight from edges (both hierarchy and relation edges)\n svg.selectAll('.link, .relation-link').classed('connected', false);\n\n // Remove highlight from connected nodes\n svg.selectAll('.node').classed('node-connected', false);\n }\n }\n\n // Edge interaction handler\n function handleEdgeInteraction(sourceId: string, targetId: string, element: SVGElement, action: 'enter' | 'leave' | 'click') {\n // Helper to highlight/unhighlight connected nodes\n function highlightNodes(highlight: boolean) {\n svg.selectAll('.node').each(function () {\n const node = d3.select(this);\n const nodeId = node.attr('data-node-id');\n if (nodeId === sourceId || nodeId === targetId) {\n node.classed('edge-connected', highlight);\n }\n });\n }\n\n // Helper to find and highlight the corresponding edge path and label\n function highlightEdgeElements(highlight: boolean, classToAdd: string) {\n // Find the edge path\n svg.selectAll('.link, .relation-link').each(function () {\n const edge = d3.select(this);\n if (edge.attr('data-source') === sourceId && edge.attr('data-target') === targetId) {\n edge.classed(classToAdd, highlight);\n }\n });\n\n // Find the edge label\n svg.selectAll('.relation-edge-label').each(function () {\n const label = d3.select(this);\n if (label.attr('data-source') === sourceId && label.attr('data-target') === targetId) {\n label.classed(classToAdd, highlight);\n }\n });\n }\n\n if (action === 'click') {\n const isSameEdge = focusedEdge?.sourceId === sourceId && focusedEdge?.targetId === targetId;\n\n if (isSameEdge) {\n // Unfocus\n highlightNodes(false);\n highlightEdgeElements(false, 'focused');\n focusedEdge = null;\n } else {\n // Unfocus previous edge if any\n if (focusedEdge) {\n svg.selectAll('.node').classed('edge-connected', false);\n highlightEdgeElements(false, 'focused');\n }\n // Focus new edge\n focusedEdge = { sourceId, targetId, element };\n highlightNodes(true);\n highlightEdgeElements(true, 'focused');\n }\n } else if (action === 'enter' && !focusedEdge) {\n highlightNodes(true);\n highlightEdgeElements(true, 'highlighted');\n } else if (action === 'leave' && !focusedEdge) {\n highlightNodes(false);\n highlightEdgeElements(false, 'highlighted');\n }\n }\n\n // Node double-click handler\n function handleNodeDoubleClick(nodeData: HierarchyNode) {\n // Don't navigate for external terms\n if (nodeData.ose_curation?.toLowerCase() === 'external') {\n return;\n }\n\n // Get the editor window and repo info\n const editorWindow: Window | null = window.opener;\n const repo = sheetData.value.repo_name;\n const originSheet = nodeData.ose_source === \"current\" ? sheetPath.value : nodeData.ose_origin;\n const nodeId = nodeData.id;\n\n if (!editorWindow || !repo || !originSheet || !nodeId) {\n console.warn('Cannot navigate to term: missing data', { editorWindow, repo, originSheet, nodeId });\n return;\n }\n\n const message: NavigateToTermMessage = {\n type: \"navigateToTerm\",\n repo: repo,\n sheet: originSheet,\n termID: nodeId\n }\n\n editorWindow.postMessage(message, \"*\");\n }\n\n // Draw hierarchy edges\n drawHierarchyEdges(edgesLayer, treeLayouts, nodeDimensionsMap, handleEdgeInteraction);\n\n // Draw relation edges\n drawRelationEdges(edgesLayer, relationEdges, nodePositions, nodeDimensionsMap, nodeIdLabelMap.value, handleEdgeInteraction);\n\n // Draw nodes\n drawNodes(nodesLayer, treeLayouts, nodeDimensionsMap, handleNodeInteraction, handleNodeDoubleClick);\n\n\n\n\n\n // Initialize pan and zoom\n const svgElement = svgContainer.value?.querySelector('svg');\n if (svgElement) {\n panZoomInstance = initializePanZoom(svgElement as SVGSVGElement, savedPanZoom);\n\n\n const bbox = (g_main.node() as SVGGElement)?.getBBox();\n if (bbox && panZoomInstance && !savedPanZoom) {\n const scaleX = containerRect.width / bbox.width;\n const scaleY = containerRect.height / bbox.height;\n const scale = Math.min(scaleX, scaleY, 1);\n panZoomInstance.zoom(scale);\n\n const panX = (containerRect.width - bbox.width * scale) / 2 - bbox.x * scale;\n const panY = (containerRect.height - bbox.height * scale) / 2 - bbox.y * scale;\n panZoomInstance.pan({ x: panX, y: panY });\n }\n }\n}\n\n\nfunction toggleCurationFilter(status: string) {\n const index = curationFilter.value.indexOf(status);\n if (index >= 0) {\n curationFilter.value.splice(index, 1);\n } else {\n curationFilter.value.push(status);\n }\n\n renderGraph();\n}\n\n// Render graph when graph data changes\nwatchPostEffect(() => {\n if (graph.value && svgContainer.value) {\n renderGraph();\n }\n});\n\n// Fetch graph when sheet data is available\nwatchEffect(() => {\n console.debug('watchEffect triggered:', {\n rowsLength: sheetData.value.rows.length,\n repo_name: sheetData.value.repo_name,\n folder: sheetData.value.folder,\n spreadsheet_name: sheetData.value.spreadsheet_name,\n allConditionsMet: sheetData.value.rows.length > 0 &&\n !!sheetData.value.repo_name &&\n !!sheetData.value.folder &&\n !!sheetData.value.spreadsheet_name\n });\n\n if (sheetData.value.rows.length > 0 &&\n sheetData.value.repo_name &&\n sheetData.value.folder &&\n sheetData.value.spreadsheet_name) {\n fetchGraph();\n }\n});\n\nwatch(numChildLevels, (newValue, oldValue) => {\n if (newValue !== oldValue && newValue !== null && oldValue !== null) {\n renderGraph();\n }\n});\n\nwatch(showChildrenFromOtherSheets, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n renderGraph();\n }\n});\n\nwatch(showParentsFromOtherSheets, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n renderGraph();\n }\n});\n\nwatch(loading, (newValue, oldValue) => {\n if (newValue && oldValue === false) {\n svgContainer.value?.querySelector('svg')?.remove();\n clearSearch();\n }\n});\n\nonMounted(async () => {\n if (svgContainer.value) {\n svgContainer.value.style.minHeight = (window.innerHeight - svgContainer.value.offsetTop - 16) + \"px\";\n }\n});\n\n</script>\n<template>\n <div class=\"visualise-container\">\n <div class=\"header\">\n <div class=\"header-title-row\">\n <div class=\"title-with-help\">\n <h5 class=\"mb-0\">\n Hierarchy Tree <small class=\"text-muted\">{{ data?.sheetData?.spreadsheet_name }}</small>\n </h5>\n <button class=\"btn btn-sm btn-link text-secondary p-0 ms-2\" type=\"button\" data-bs-toggle=\"modal\"\n data-bs-target=\"#legendModal\" title=\"Help & Legend\">\n <i class=\"fa-solid fa-circle-question\"></i>\n </button>\n </div>\n\n <div class=\"search-bar\">\n <small class=\"search-info text-muted\">{{ matchInfo }}</small>\n <div class=\"input-group input-group-sm\">\n <input type=\"text\" class=\"form-control\" placeholder=\"Search classes...\" v-model=\"searchQuery\"\n @keyup.enter=\"performSearch\" :disabled=\"controlsDisabled\">\n <button class=\"btn btn-outline-secondary\" type=\"button\" @click=\"performSearch\" title=\"Search\"\n :disabled=\"controlsDisabled\">\n <i class=\"fa-solid fa-search\"></i>\n </button>\n <button class=\"btn btn-outline-secondary\" type=\"button\" @click=\"goToPreviousMatch\"\n :disabled=\"!hasSearchMatches || controlsDisabled\" title=\"Previous match\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button class=\"btn btn-outline-secondary\" type=\"button\" @click=\"goToNextMatch\"\n :disabled=\"!hasSearchMatches || controlsDisabled\" title=\"Next match\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n <button class=\"btn btn-outline-secondary\" type=\"button\" @click=\"clearSearch\"\n :disabled=\"!searchQuery || controlsDisabled\" title=\"Clear search\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"filters-card\">\n <div class=\"filter-section\">\n <span class=\"filter-section-title\">\n <i class=\"fa-solid fa-filter\"></i>\n From other sheets\n </span>\n <div class=\"filter-controls\">\n <div class=\"form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"ckb_children_other_sheets\"\n v-model=\"showChildrenFromOtherSheets\" :disabled=\"controlsDisabled\">\n <label class=\"form-check-label\" for=\"ckb_children_other_sheets\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n Children\n </label>\n </div>\n\n <div class=\"form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"ckb_parents_other_sheets\"\n v-model=\"showParentsFromOtherSheets\" :disabled=\"controlsDisabled\">\n <label class=\"form-check-label\" for=\"ckb_parents_other_sheets\">\n <i class=\"fa-solid fa-arrow-up\"></i>\n Parents\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"filter-section\">\n <span class=\"filter-section-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Child Levels\n </span>\n <div class=\"filter-controls\">\n <div class=\"range-control\">\n <div class=\"range-header\">\n <label for=\"range_num_child_levels\" class=\"form-label\">\n Depth: <strong>{{ numChildLevels || 'All' }}</strong>\n </label>\n <span class=\"range-minmax\">1–{{ maxChildLevels }}</span>\n </div>\n <input type=\"range\" class=\"form-range\" v-model=\"numChildLevels\" min=\"1\" :max=\"maxChildLevels\" step=\"1\"\n id=\"range_num_child_levels\" :disabled=\"controlsDisabled\">\n </div>\n </div>\n </div>\n\n <div class=\"filter-section\">\n <span class=\"filter-section-title\">\n <i class=\"fa-solid fa-tags\"></i>\n Curation Status\n </span>\n <div class=\"filter-controls\">\n <div class=\"dropdown\">\n <button class=\"btn btn-sm btn-outline-primary dropdown-toggle\" type=\"button\" data-bs-toggle=\"dropdown\"\n aria-expanded=\"false\" :disabled=\"controlsDisabled\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ curationFilter.length }}/{{ curationStatuses.length }} selected\n </button>\n <ul class=\"dropdown-menu dropdown-menu-end\">\n <li v-for=\"s in curationStatuses\" :key=\"s\">\n <a class=\"dropdown-item\" :class=\"'ose-curation-status-' + s.toLowerCase().replace(' ', '_')\" href=\"#\"\n @click=\"toggleCurationFilter(s)\">\n <i class=\"fa-solid\" :class=\"curationFilter.indexOf(s) >= 0 ? 'fa-circle-check' : 'fa-circle'\"></i>\n {{ s }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div ref=\"svgContainer\" class=\"svg-container\">\n <div v-if=\"loading\" class=\"loading-overlay\">\n <div class=\"spinner\"></div>\n <span>Loading visualisation...</span>\n </div>\n <div v-else-if=\"error\" class=\"error-overlay\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n <span class=\"error-title\">Failed to load visualisation</span>\n <span class=\"error-message\">{{ error }}</span>\n <button class=\"btn btn-primary btn-sm\" @click=\"fetchGraph\">Try again</button>\n </div>\n <div v-else-if=\"!graph\" class=\"empty-state-overlay\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n <span class=\"empty-state-title\">No Visualisation Loaded</span>\n <span class=\"empty-state-message\">To see a visualisation, open a spreadsheet from the editor and click the\n \"Visualise\" button in the toolbar.</span>\n </div>\n </div>\n\n <!-- Help & Legend Modal -->\n <div class=\"modal fade\" id=\"legendModal\" tabindex=\"-1\" aria-labelledby=\"legendModalLabel\" aria-hidden=\"true\">\n <div class=\"modal-dialog modal-lg\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\" id=\"legendModalLabel\">\n <i class=\"fa-solid fa-circle-info\"></i> Help & Legend\n </h5>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"legend-grid\">\n <div class=\"legend-item\">\n <h6><i class=\"fa-solid fa-circle-question\"></i> How to Use</h6>\n <ul>\n <li><strong>Pan:</strong> Click and drag the background</li>\n <li><strong>Zoom:</strong> Use mouse wheel or pinch gesture</li>\n <li><strong>Search:</strong> Find specific classes using the search bar</li>\n <li><strong>Children/Parents Switches:</strong> Toggle whether to include children or parents from\n other sheets</li>\n <li><strong>Child Levels Slider:</strong> Adjust how many levels of child classes to display</li>\n <li><strong>Curation Status Filter:</strong> Select which curation statuses to display</li>\n <li><strong>Hover on nodes/edges:</strong> Highlight related nodes and edges</li>\n <li><strong>Click on edges:</strong> Keep the edge highlighted</li>\n </ul>\n </div>\n\n <div class=\"legend-item\">\n <h6><i class=\"fa-solid fa-circle-nodes\"></i> Node Types</h6>\n <div class=\"node-examples\">\n <div class=\"node-example\">\n <div class=\"example-node node-current\">Current Sheet</div>\n <div class=\"example-node node-current node-selected\">Selected Term</div>\n <span class=\"example-desc\">Terms from the current spreadsheet (regular border, selected bold)</span>\n </div>\n <div class=\"node-example\">\n <div class=\"example-node node-dependencies\">Dependencies</div>\n <span class=\"example-desc\">External terms or terms from other sheets referenced by current terms\n (dashed border)</span>\n </div>\n <div class=\"node-example\">\n <div class=\"example-node node-derived\">Derived</div>\n <span class=\"example-desc\">Child terms from other sheets (italic text)</span>\n </div>\n </div>\n </div>\n\n <div class=\"legend-item\">\n <h6><i class=\"fa-solid fa-arrow-right\"></i> Edge Types</h6>\n <ul>\n <li><strong>Subclass Of:</strong> Solid black arrows showing hierarchy (parent → child)</li>\n <li><strong>Relations:</strong> Colored arrows showing other relationships (e.g., \"has part\", \"part\n of\")</li>\n </ul>\n </div>\n\n <div class=\"legend-item full-width\">\n <h6><i class=\"fa-solid fa-palette\"></i> Curation Status Colors</h6>\n <div class=\"status-grid\">\n <span v-for=\"status in curationStatuses\" :key=\"status\" class=\"status-badge\"\n :class=\"'ose-curation-status-' + status.toLowerCase().replace(' ', '_')\">\n {{ status }}\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<style lang=\"scss\">\n.visualise-container {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .header {\n padding: 0.75rem 1rem;\n flex-shrink: 0;\n background: #fff;\n }\n\n .header-title-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0.5rem;\n\n .title-with-help {\n display: flex;\n align-items: center;\n }\n\n h5 {\n margin: 0;\n font-weight: 600;\n\n small {\n font-size: 0.85rem;\n font-weight: 400;\n }\n }\n\n .btn-link {\n font-size: 1.2rem;\n line-height: 1;\n text-decoration: none;\n\n &:hover {\n color: #3b82f6 !important;\n }\n }\n }\n\n .filters-card {\n display: flex;\n gap: 1.5rem;\n padding: 0.5rem 1rem;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n align-items: center;\n }\n\n .filter-section {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n\n &:not(:last-child) {\n border-right: 1px solid #e8e8e8;\n padding-right: 1.5rem;\n }\n }\n\n .filter-section-title {\n font-size: 0.8rem;\n font-weight: 600;\n color: #555;\n display: flex;\n align-items: center;\n gap: 0.4rem;\n white-space: nowrap;\n\n i {\n color: #999;\n font-size: 0.75rem;\n }\n }\n\n .filter-controls {\n display: flex;\n gap: 0.75rem;\n\n .form-check {\n margin-bottom: 0;\n }\n\n\n .form-switch {\n display: flex;\n gap: 8px;\n }\n\n .form-check-label {\n display: flex;\n align-items: center;\n gap: 0.35rem;\n font-size: 0.8rem;\n color: #555;\n cursor: pointer;\n\n i {\n color: #999;\n font-size: 0.7rem;\n }\n }\n\n .form-check-input {\n cursor: pointer;\n }\n\n .dropdown-toggle {\n text-align: left;\n display: flex;\n align-items: center;\n gap: 0.4rem;\n font-size: 0.8rem;\n padding: 0.25rem 0.6rem;\n\n i {\n font-size: 0.7rem;\n }\n }\n }\n\n .range-control {\n min-width: 200px;\n\n .range-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.25rem;\n }\n\n .form-label {\n font-size: 0.8rem;\n color: #555;\n margin-bottom: 0;\n\n strong {\n color: #333;\n font-weight: 600;\n }\n }\n\n .range-minmax {\n font-size: 0.7rem;\n color: #999;\n }\n\n .form-range {\n height: 0.35rem;\n margin: 0;\n }\n }\n\n .search-bar {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n .input-group {\n width: 320px;\n }\n\n .search-info {\n min-width: 70px;\n text-align: center;\n font-size: 0.875rem;\n }\n }\n\n .legend-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 1.5rem;\n }\n\n .legend-item {\n &.full-width {\n grid-column: 1 / -1;\n }\n\n h6 {\n font-size: 0.95rem;\n font-weight: 600;\n color: #333;\n margin-bottom: 0.75rem;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n i {\n color: #3b82f6;\n font-size: 0.9rem;\n }\n }\n\n ul {\n list-style: none;\n padding: 0;\n margin: 0;\n font-size: 0.875rem;\n color: #555;\n\n li {\n padding: 0.35rem 0;\n line-height: 1.5;\n }\n }\n }\n\n .node-examples {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n }\n\n .node-example {\n display: grid;\n grid-auto-flow: column;\n gap: 0.5rem;\n\n .example-desc {\n font-size: 0.8rem;\n color: #666;\n line-height: 1.4;\n\n grid-row: 2;\n grid-column: 1/3;\n }\n }\n\n .example-node {\n padding: 0.5rem 0.75rem;\n border: 2px solid #333;\n border-radius: 4px;\n background: white;\n font-size: 0.875rem;\n font-weight: 500;\n text-align: center;\n display: inline-block;\n align-self: flex-start;\n\n grid-row: 1;\n\n &.node-selected {\n font-weight: bold;\n }\n\n &.node-current {\n border-style: solid;\n }\n\n &.node-dependencies {\n border-style: dashed;\n font-style: italic;\n }\n\n &.node-derived {\n font-style: italic;\n }\n }\n\n .status-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 0.5rem;\n }\n\n .status-badge {\n display: inline-block;\n padding: 0.35rem 0.75rem;\n border-radius: 4px;\n font-size: 0.8rem;\n font-weight: 500;\n text-align: center;\n }\n\n .svg-container {\n position: relative;\n flex: 1;\n overflow: hidden;\n border: 1px solid #ddd;\n border-radius: 6px;\n background: #fafafa;\n\n svg {\n width: 100%;\n height: 100%;\n }\n }\n\n .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n background: rgba(250, 250, 250, 0.9);\n z-index: 10;\n border-radius: 4px;\n\n span {\n color: #666;\n font-size: 0.9rem;\n }\n\n .spinner {\n width: 40px;\n height: 40px;\n border: 3px solid #e0e0e0;\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n }\n }\n\n .error-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.75rem;\n background: rgba(250, 250, 250, 0.95);\n z-index: 10;\n border-radius: 4px;\n\n .fa-circle-exclamation {\n font-size: 2.5rem;\n color: #dc3545;\n }\n\n .error-title {\n font-size: 1.1rem;\n font-weight: 600;\n color: #333;\n }\n\n .error-message {\n font-size: 0.85rem;\n color: #666;\n max-width: 400px;\n text-align: center;\n padding: 0.5rem 1rem;\n background: #f8f8f8;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n }\n\n button {\n margin-top: 0.5rem;\n }\n }\n\n .empty-state-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n background: rgba(250, 250, 250, 0.95);\n z-index: 10;\n border-radius: 4px;\n\n .fa-diagram-project {\n font-size: 3rem;\n color: #999;\n }\n\n .empty-state-title {\n font-size: 1.25rem;\n font-weight: 600;\n color: #555;\n }\n\n .empty-state-message {\n font-size: 0.95rem;\n color: #666;\n max-width: 500px;\n text-align: center;\n line-height: 1.5;\n }\n }\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n .node.ose-selected {\n font-weight: bold;\n }\n\n .node.ose-source-derived {\n font-style: italic;\n }\n\n .node.ose-source-dependencies {\n font-style: italic;\n\n &>rect {\n stroke-dasharray: 4 2 !important;\n }\n }\n\n $curation_status: discussed, proposed, to_be_discussed, in_discussion, published, obsolete, external, pre_proposed;\n\n @each $status in $curation_status {\n .node.ose-curation-status-#{$status} {\n &>rect {\n fill: var(--ose-curation-status-#{$status}) !important;\n }\n }\n\n .ose-curation-status-#{$status} {\n background: var(--ose-curation-status-#{$status}) !important;\n }\n }\n\n // Default/uncurated status\n .node.ose-curation-status-unknown {\n &>rect {\n fill: #fff !important;\n }\n }\n\n .link,\n .relation-link {\n fill: none;\n stroke: #999;\n stroke-opacity: 0.6;\n stroke-width: 1.5px;\n cursor: pointer;\n\n &.highlighted {\n stroke-opacity: 1 !important;\n stroke-width: 3px !important;\n }\n\n &.focused {\n stroke-opacity: 1 !important;\n stroke-width: 3.5px !important;\n filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.5));\n }\n\n &.connected {\n stroke-opacity: 1 !important;\n stroke-width: 3px !important;\n filter: drop-shadow(0 0 2px rgba(0, 0, 0, 0.3));\n }\n }\n\n .relation-link {\n stroke-opacity: 0.8;\n }\n\n .node {\n cursor: pointer;\n\n &:hover,\n &.edge-connected {\n &>rect {\n stroke: #333 !important;\n stroke-width: 2px !important;\n }\n }\n\n &.edge-connected>rect {\n filter: drop-shadow(0 0 4px rgba(0, 0, 0, 0.4));\n }\n\n &.node-hovered>rect {\n stroke: #3b82f6 !important;\n stroke-width: 3px !important;\n filter: drop-shadow(0 0 6px rgba(59, 130, 246, 0.5));\n }\n\n &.node-connected>rect {\n stroke: #3b82f6 !important;\n stroke-width: 2px !important;\n filter: drop-shadow(0 0 4px rgba(59, 130, 246, 0.3));\n }\n\n &.search-match>rect {\n stroke: #f59e0b !important;\n stroke-width: 2px !important;\n filter: drop-shadow(0 0 4px rgba(245, 158, 11, 0.6));\n }\n\n &.search-current>rect {\n stroke: #dc2626 !important;\n stroke-width: 3px !important;\n filter: drop-shadow(0 0 6px rgba(220, 38, 38, 0.8));\n }\n }\n}\n</style>","import {createApp} from \"vue\";\nimport Settings from \"./Visualise.vue\";\nimport {$filters} from \"@ose/js-core\";\n\n\nconst app = createApp(Settings)\nimport {createBootstrap} from 'bootstrap-vue-next'\n\napp.config.globalProperties.$filters = $filters\n\napp.use(createBootstrap())\napp.mount(\"#vue-app-visualise\")\n"],"names":["Graph","n","nodes","edges","node","edge","nodeId","e","nodeOrId","_","targets","sources","edgeToRemove","id","visited","stack","current","successors","succ","predecessors","pred","noop","dispatch","i","t","Dispatch","parseTypenames","typenames","types","name","typename","callback","T","get","set","copy","type","that","args","c","xhtml","namespaces","namespace","prefix","creatorInherit","document","uri","creatorFixed","fullname","creator","none","selector","selection_select","select","groups","m","subgroups","j","group","subgroup","subnode","Selection","array","x","empty","selectorAll","arrayAll","selection_selectAll","parents","matcher","childMatcher","find","childFind","match","childFirst","selection_selectChild","filter","children","childrenFilter","selection_selectChildren","selection_filter","sparse","update","selection_enter","EnterNode","parent","datum","child","next","constant$1","bindIndex","enter","exit","data","groupLength","dataLength","bindKey","key","nodeByKeyValue","keyValues","keyValue","selection_data","value","bind","constant","arraylike","enterGroup","updateGroup","exitGroup","i0","i1","previous","selection_exit","selection_join","onenter","onupdate","onexit","selection_merge","context","selection","groups0","groups1","m0","m1","merges","group0","group1","merge","selection_order","selection_sort","compare","ascending","compareNode","a","b","sortgroups","sortgroup","selection_call","selection_nodes","selection_node","selection_size","size","selection_empty","selection_each","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","v","attrFunctionNS","selection_attr","defaultView","styleRemove","styleConstant","priority","styleFunction","selection_style","styleValue","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","string","classList","ClassList","classedAdd","names","list","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise","selection_raise","lower","selection_lower","selection_append","create","constantNull","selection_insert","before","remove","selection_remove","selection_cloneShallow","clone","selection_cloneDeep","selection_clone","deep","selection_datum","contextListener","listener","event","onRemove","on","o","onAdd","options","selection_on","dispatchEvent","params","window","dispatchConstant","dispatchFunction","selection_dispatch","selection_iterator","root","selection_selection","selectAll","define","constructor","factory","prototype","extend","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","color","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","format","l","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","rgb","opacity","k","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","h","s","Hsl","min","max","hsl","m2","hsl2rgb","clamph","clampt","linear","d","exponential","y","gamma","nogamma","interpolateRgb","rgbGamma","start","end","colorRgb","interpolateNumber","reA","reB","zero","one","interpolateString","bi","am","bm","bs","q","number","degrees","identity","decompose","f","scaleX","scaleY","skewX","svgNode","parseCss","parseSvg","interpolateTransform","parse","pxComma","pxParen","degParen","pop","translate","xa","ya","xb","yb","rotate","scale","interpolateTransformCss","interpolateTransformSvg","frame","timeout","interval","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","now","clearNow","Timer","timer","delay","time","sleep","timerFlush","wake","nap","poke","t0","t1","t2","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","schedule","index","timing","schedules","init","self","tween","stop","tick","interrupt","active","selection_interrupt","tweenRemove","tween0","tween1","tweenFunction","transition_tween","tweenValue","transition","interpolate","value1","string00","string1","interpolate0","string0","string10","transition_attr","attrInterpolate","attrInterpolateNS","attrTweenNS","attrTween","transition_attrTween","delayFunction","delayConstant","transition_delay","durationFunction","durationConstant","transition_duration","easeConstant","transition_ease","easeVarying","transition_easeVarying","transition_filter","Transition","transition_merge","onFunction","on0","on1","sit","transition_on","removeFunction","transition_remove","transition_select","transition_selectAll","inherit","transition_selection","styleNull","style","styleMaybeRemove","listener0","transition_style","styleInterpolate","styleTween","transition_styleTween","transition_text","textInterpolate","textTween","transition_textTween","transition_transition","id0","id1","newId","transition_end","resolve","reject","cancel","selection_prototype","cubicInOut","defaultTiming","easeCubicInOut","selection_transition","count","sum","node_count","node_each","node_eachBefore","node_eachAfter","node_find","node_sum","node_sort","node_path","ancestor","leastCommonAncestor","aNodes","bNodes","node_ancestors","node_descendants","node_leaves","leaves","node_links","links","node_iterator","hierarchy","mapChildren","objectChildren","Node","childs","computeHeight","node_copy","copyData","height","defaultSeparation","nextLeft","nextRight","moveSubtree","wm","wp","shift","change","executeShifts","w","nextAncestor","vim","TreeNode","treeRoot","tree","separation","dx","dy","nodeSize","firstWalk","secondWalk","sizeNode","left","right","bottom","tx","kx","ky","siblings","midpoint","apportion","vip","vop","vom","sip","sop","sim","som","Transform","point","location","applyGraphFilters","graph","filteredNodeIds","status","depth","isFromCurrentSheet","isParentNode","isChildNode","isRelevantParent","passesCurationFilter","passesDepthFilter","passesSheetFilter","allEdges","hierarchyEdges","relationEdges","buildHierarchyTrees","childrenMap","parentMap","roots","nodeMap","buildHierarchy","childIds","childId","trees","performGraphSearch","query","nodeIdLabelMap","normalizedQuery","d3.selectAll","matches","d3.select","label","highlightSearchMatch","clearSearchHighlights","panToNode","svgContainer","panZoomInstance","nodeElement","svgElement","graphContainer","nodeBBox","totalX","totalY","currentElement","transform","currentZoom","sizes","newPanX","newPanY","uniwheel","_addEventListener","_removeEventListener","support","fns","passiveListenerOption","activeListenerOption","createCallback","element","fn","originalEvent","getCallback","removeCallback","_addWheelListener","elem","eventName","isPassiveListener","cb","_removeWheelListener","addWheelListener","removeWheelListener","utilities","target","source","prop","elementOrSelector","svg","evt","rect","prevEvt","timeStampDiff","touchesDistance","func","wait","result","later","remaining","refreshRate","requestTimeout","Utils","require$$0","_browser","svgUtilities","viewport","childNodes","el","viewportId","svgChildren","classNames","allDefs","allDefsCount","thisDefs","this","matrix","defs","width","SvgUtils","controlIcons","instance","styleEl","zoomGroup","zoomIn","zoomInBackground","zoomInShape","resetPanZoomControl","resetPanZoomControlBackground","resetPanZoomControlShape1","resetPanZoomControlShape2","zoomOut","zoomOutBackground","zoomOutShape","require$$1","ShadowViewport","newCTM","svgViewBox","viewBoxValues","zoom","bBox","newScale","offsetX","offsetY","safeCTM","willZoom","willPan","preventPan","preventPanX","preventPanY","ctm","shadowViewport","Wheel","ControlIcons","require$$2","require$$3","require$$4","SvgPanZoom","optionsDefaults","boundingClientRectNormalized","oldScale","oldPoint","newPoint","publicInstance","haltEventListeners","delta","timeDelta","divider","inversedScreenCTM","relativeMousePoint","zoomScale","zoomAbsolute","originalState","oldCTM","relativePoint","modifier","absolute","targetClass","zoomFactor","viewportCTM","viewBox","state","instancesStore","svgPanZoom","svgPanZoom_1","RELATION_COLOR_MAP","FONT_SIZE","LINE_HEIGHT","MAX_LINE_WIDTH","NODE_PADDING","HORIZONTAL_SPACING","VERTICAL_SPACING","wrapText","text","maxWidth","words","lines","currentLine","tempText","word","testLine","measureText","calculateNodeDimensions","nodeDimensionsMap","maxLineWidthActual","line","nodeWidth","nodeHeight","calculateTreeLayouts","maxNodeWidth","maxNodeHeight","dims","currentX","nodePositions","treeLayouts","d3.hierarchy","d3.tree","minX","maxX","treeWidth","createArrowMarkers","usedColors","edgeLabel","edgeColor","colorId","drawHierarchyEdges","edgesLayer","onEdgeInteraction","targetDims","targetHeight","adjustedTargetY","sourceDims","sourceHeight","adjustedSourceY","_event","_d","drawRelationEdges","sourcePos","targetPos","sourceWidth","targetWidth","dist","angle","isHorizontal","startX","startY","endX","endY","midX","midY","offsetAmount","curveOffsetX","curveOffsetY","pathData","sourceId","targetId","nodeClasses","curationStatus","CURATION_STATUS","drawNodes","nodesLayer","onNodeInteraction","onNodeDoubleClick","nodeGroups","textGroup","initializePanZoom","savedState","panZoom","buildGraphFromSpreadsheet","currentRows","currentHeader","currentSpreadsheetName","dependencyData","relationColumns","currentTerms","row","relations","relCol","term","termsByLabel","parentTerm","allTerms","unresolvedParents","p","origin","parentNodeId","rel","targetTerm","targetNodeId","relationColor","getRelationColor","currentNodeIds","derivedNodeIds","dependencyNodeIds","isReachableDependency","isReachableDerived","isReachable","calculateVisualDepth","visibleNodes","calculateVisibleNodes","depthCache","getVisualDepth","maxParentDepth","isVisible","direction","visible","acc","URL_PREFIX","ref","sheet","useTemplateRef","sheetData","computed","sheetPath","loading","error","curationStatuses","map","curationFilter","showChildrenFromOtherSheets","showParentsFromOtherSheets","numChildLevels","maxChildLevels","searchQuery","searchMatches","currentMatchIndex","hasSearchMatches","matchInfo","controlsDisabled","performSearch","highlightCurrentMatch","zoomToCurrentMatch","currentNodeId","goToNextMatch","goToPreviousMatch","clearSearch","fetchGraph","response","renderGraph","filterOptions","savedPanZoom","containerRect","g_main","focusedEdge","handleNodeInteraction","action","handleEdgeInteraction","highlightNodes","highlight","highlightEdgeElements","classToAdd","handleNodeDoubleClick","nodeData","editorWindow","repo","originSheet","message","bbox","panX","panY","toggleCurationFilter","watchPostEffect","watchEffect","watch","newValue","oldValue","onMounted","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_toDisplayString","_hoisted_7","_hoisted_8","_hoisted_9","$event","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_20","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_33","_Fragment","_renderList","_createTextVNode","_hoisted_35","_cache","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","app","createApp","Settings","$filters","createBootstrap"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,107,108,109,110,111,112]}