@diplodoc/mermaid-extension 1.4.0 → 1.4.1

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.
@@ -36,7 +36,7 @@ var init_zoom = __esm({
36
36
  "src/runtime/zoom.scss"() {
37
37
  "use strict";
38
38
  init_index();
39
- inject_style(':root{--mermaid-zoom-control-size: 20px;--mermaid-zoom-control-pad: 5px;--mermaid-zoom-control-color: #000}[data-mermaid-zoom-enabled="1"]{position:relative}[data-mermaid-zoom-enabled="1"]>svg{outline:solid 1px var(--mermaid-zoom-control-color)}@keyframes mermaid-zoom-menu-controls-fadein{0%{transform:translateY(-100%)}to{transform:translateY(0)}}.mermaid-zoom-menu{position:absolute;position:sticky;top:0;height:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);overflow:hidden}.mermaid-zoom-menu-controls{position:absolute;right:0;top:0;height:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);width:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);animation:mermaid-zoom-menu-controls-fadein ease .2s}.mermaid-zoom-menu-control{position:absolute;width:var(--mermaid-zoom-control-size);height:var(--mermaid-zoom-control-size);pointer-events:all;cursor:pointer;transition:all .2s}.mermaid-zoom-menu-control:hover{transform:scale(1.3)}.mermaid-zoom-menu-control:active{transform:scale(1)}.mermaid-zoom-menu-control[data-action=up]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control[data-action=down]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:var(--mermaid-zoom-control-pad)}.mermaid-zoom-menu-control[data-action=reset]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=left]{right:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=right]{right:var(--mermaid-zoom-control-pad);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=zoomout]{right:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control[data-action=zoomin]{right:var(--mermaid-zoom-control-pad);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control svg{color:var(--mermaid-zoom-control-color);width:var(--mermaid-zoom-control-size);height:var(--mermaid-zoom-control-size)}');
39
+ inject_style(':root{--mermaid-zoom-control-size: 20px;--mermaid-zoom-control-pad: 5px;--mermaid-zoom-control-color: #000}[data-mermaid-zoom-enabled="1"]{position:relative}[data-mermaid-zoom-enabled="1"]>svg{outline:solid 1px var(--mermaid-zoom-control-color)}@keyframes mermaid-zoom-menu-controls-fadein{0%{transform:translateY(-100%)}to{transform:translateY(0)}}.mermaid-zoom-menu{position:sticky;top:0;height:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);overflow:hidden}.mermaid-zoom-menu-controls{position:absolute;right:0;top:0;height:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);width:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);animation:mermaid-zoom-menu-controls-fadein ease .2s}.mermaid-zoom-menu-control{position:absolute;width:var(--mermaid-zoom-control-size);height:var(--mermaid-zoom-control-size);pointer-events:all;cursor:pointer;transition:all .2s}.mermaid-zoom-menu-control:hover{transform:scale(1.3)}.mermaid-zoom-menu-control:active{transform:scale(1)}.mermaid-zoom-menu-control[data-action=up]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control[data-action=down]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:var(--mermaid-zoom-control-pad)}.mermaid-zoom-menu-control[data-action=reset]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=left]{right:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=right]{right:var(--mermaid-zoom-control-pad);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=zoomout]{right:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control[data-action=zoomin]{right:var(--mermaid-zoom-control-pad);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control svg{color:var(--mermaid-zoom-control-color);width:var(--mermaid-zoom-control-size);height:var(--mermaid-zoom-control-size)}');
40
40
  }
41
41
  });
42
42
 
@@ -51,25 +51,25 @@ import * as d32 from "d3";
51
51
  import * as d3 from "d3";
52
52
 
53
53
  // node_modules/@gravity-ui/icons/svgs/magnifier-plus.svg
54
- var magnifier_plus_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5Zm0 1.5a5.725 5.725 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5Zm.75-7.75a.75.75 0 0 0-1.5 0V6H4.75a.75.75 0 0 0 0 1.5H6v1.25a.75.75 0 0 0 1.5 0V7.5h1.25a.75.75 0 0 0 0-1.5H7.5V4.75Z" clip-rule="evenodd"/></svg>';
54
+ var magnifier_plus_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5m0 1.5a5.73 5.73 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5m.75-7.75a.75.75 0 0 0-1.5 0V6H4.75a.75.75 0 0 0 0 1.5H6v1.25a.75.75 0 0 0 1.5 0V7.5h1.25a.75.75 0 0 0 0-1.5H7.5z" clip-rule="evenodd"/></svg>';
55
55
 
56
56
  // node_modules/@gravity-ui/icons/svgs/magnifier-minus.svg
57
- var magnifier_minus_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5Zm0 1.5a5.725 5.725 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5Zm-2-6.5a.75.75 0 0 0 0 1.5h4a.75.75 0 0 0 0-1.5h-4Z" clip-rule="evenodd"/></svg>';
57
+ var magnifier_minus_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5m0 1.5a5.73 5.73 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5m-2-6.5a.75.75 0 0 0 0 1.5h4a.75.75 0 0 0 0-1.5z" clip-rule="evenodd"/></svg>';
58
58
 
59
59
  // node_modules/@gravity-ui/icons/svgs/caret-up.svg
60
- var caret_up_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M11.823 9.295a.73.73 0 0 1-.552 1.205H4.729a.73.73 0 0 1-.552-1.205L7.2 5.786a1 1 0 0 1 .757-.347h.084a1 1 0 0 1 .757.347l3.024 3.509Z" clip-rule="evenodd"/></svg>';
60
+ var caret_up_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M11.823 9.295a.73.73 0 0 1-.552 1.205H4.729a.73.73 0 0 1-.552-1.205L7.2 5.786a1 1 0 0 1 .757-.347h.084a1 1 0 0 1 .757.347z" clip-rule="evenodd"/></svg>';
61
61
 
62
62
  // node_modules/@gravity-ui/icons/svgs/caret-down.svg
63
- var caret_down_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M4.177 6.705A.73.73 0 0 1 4.729 5.5h6.542a.73.73 0 0 1 .552 1.205L8.8 10.214a1 1 0 0 1-.757.347h-.084a1 1 0 0 1-.757-.347L4.177 6.705Z" clip-rule="evenodd"/></svg>';
63
+ var caret_down_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M4.177 6.705A.73.73 0 0 1 4.729 5.5h6.542a.73.73 0 0 1 .552 1.205L8.8 10.214a1 1 0 0 1-.757.347h-.084a1 1 0 0 1-.757-.347z" clip-rule="evenodd"/></svg>';
64
64
 
65
65
  // node_modules/@gravity-ui/icons/svgs/caret-left.svg
66
- var caret_left_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M9.295 4.177a.73.73 0 0 1 1.205.552v6.542a.73.73 0 0 1-1.205.552L5.786 8.8a1 1 0 0 1-.347-.757v-.084a1 1 0 0 1 .347-.757l3.509-3.024Z" clip-rule="evenodd"/></svg>';
66
+ var caret_left_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M9.295 4.177a.73.73 0 0 1 1.205.552v6.542a.73.73 0 0 1-1.205.552L5.786 8.8a1 1 0 0 1-.347-.757v-.084a1 1 0 0 1 .347-.757z" clip-rule="evenodd"/></svg>';
67
67
 
68
68
  // node_modules/@gravity-ui/icons/svgs/caret-right.svg
69
- var caret_right_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.705 11.823a.73.73 0 0 1-1.205-.552V4.729a.73.73 0 0 1 1.205-.552L10.214 7.2a1 1 0 0 1 .347.757v.084a1 1 0 0 1-.347.757l-3.509 3.024Z" clip-rule="evenodd"/></svg>';
69
+ var caret_right_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.705 11.823a.73.73 0 0 1-1.205-.552V4.729a.73.73 0 0 1 1.205-.552L10.214 7.2a1 1 0 0 1 .347.757v.084a1 1 0 0 1-.347.757z" clip-rule="evenodd"/></svg>';
70
70
 
71
71
  // node_modules/@gravity-ui/icons/svgs/circle.svg
72
- var circle_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11ZM8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z" clip-rule="evenodd"/></svg>';
72
+ var circle_default = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14" clip-rule="evenodd"/></svg>';
73
73
 
74
74
  // src/runtime/zoom-control.ts
75
75
  var ZOOM_SPEED = 1;
@@ -384,7 +384,14 @@ async function next() {
384
384
  dedentedContent += " ";
385
385
  }
386
386
  const text = dedentedContent.trimStart().replace(/<br\s*\/?>/gi, "<br/>");
387
- const { svg, bindFunctions } = await mermaid.render(id, text, element);
387
+ let svg, bindFunctions;
388
+ try {
389
+ const result = await mermaid.render(id, text, element);
390
+ svg = result.svg;
391
+ bindFunctions = result.bindFunctions;
392
+ } catch {
393
+ return;
394
+ }
388
395
  let svgWithNonce = svg;
389
396
  if (nonce) {
390
397
  svgWithNonce = svgWithNonce.replace(/<style>/g, `<style nonce="${nonce}">`);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["style-helper:index.js", "../../src/runtime/zoom.scss", "../../src/runtime/index.ts", "../../src/runtime/zoom.ts", "../../src/runtime/zoom-control.ts", "../../node_modules/@gravity-ui/icons/svgs/magnifier-plus.svg", "../../node_modules/@gravity-ui/icons/svgs/magnifier-minus.svg", "../../node_modules/@gravity-ui/icons/svgs/caret-up.svg", "../../node_modules/@gravity-ui/icons/svgs/caret-down.svg", "../../node_modules/@gravity-ui/icons/svgs/caret-left.svg", "../../node_modules/@gravity-ui/icons/svgs/caret-right.svg", "../../node_modules/@gravity-ui/icons/svgs/circle.svg"],
4
- "sourcesContent": ["export function inject_style(text) {\n if (typeof document !== 'undefined') {\n var style = document.createElement('style')\n var node = document.createTextNode(text)\n style.appendChild(node)\n document.head.appendChild(style)\n }\n}", "import { inject_style } from \"__style_helper__\"\ninject_style(\":root{--mermaid-zoom-control-size: 20px;--mermaid-zoom-control-pad: 5px;--mermaid-zoom-control-color: #000}[data-mermaid-zoom-enabled=\\\"1\\\"]{position:relative}[data-mermaid-zoom-enabled=\\\"1\\\"]>svg{outline:solid 1px var(--mermaid-zoom-control-color)}@keyframes mermaid-zoom-menu-controls-fadein{0%{transform:translateY(-100%)}to{transform:translateY(0)}}.mermaid-zoom-menu{position:absolute;position:sticky;top:0;height:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);overflow:hidden}.mermaid-zoom-menu-controls{position:absolute;right:0;top:0;height:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);width:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);animation:mermaid-zoom-menu-controls-fadein ease .2s}.mermaid-zoom-menu-control{position:absolute;width:var(--mermaid-zoom-control-size);height:var(--mermaid-zoom-control-size);pointer-events:all;cursor:pointer;transition:all .2s}.mermaid-zoom-menu-control:hover{transform:scale(1.3)}.mermaid-zoom-menu-control:active{transform:scale(1)}.mermaid-zoom-menu-control[data-action=up]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control[data-action=down]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:var(--mermaid-zoom-control-pad)}.mermaid-zoom-menu-control[data-action=reset]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=left]{right:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=right]{right:var(--mermaid-zoom-control-pad);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=zoomout]{right:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control[data-action=zoomin]{right:var(--mermaid-zoom-control-pad);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control svg{color:var(--mermaid-zoom-control-color);width:var(--mermaid-zoom-control-size);height:var(--mermaid-zoom-control-size)}\")", "import type {ExposedAPI, InitConfig} from '../types';\n\nimport mermaid, {MermaidConfig} from 'mermaid';\nimport dedent from 'ts-dedent';\n\nimport {bindZoomOptions, zoomBehavior} from './zoom';\n\nconst DEFAULT_MERMAID_CONFIG: MermaidConfig = {\n startOnLoad: false,\n // To avoid breaking changes after updating to https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0\n gitGraph: {useMaxWidth: false},\n sankey: {useMaxWidth: false},\n theme: 'forest',\n};\n\nmermaid.initialize(DEFAULT_MERMAID_CONFIG);\n\nconst jsonp = (window.mermaidJsonp = window.mermaidJsonp || []);\nconst queue = jsonp.splice(0, jsonp.length);\n\njsonp.push = function (...args) {\n args.forEach((callback) => {\n queue.push(callback);\n unqueue();\n });\n\n return queue.length;\n};\n\nlet processing = false;\n\nfunction unqueue() {\n if (!processing) {\n next();\n }\n}\n\nasync function next(): Promise<void> {\n processing = true;\n\n const callback = queue.shift();\n if (callback) {\n await callback({\n run: async ({querySelector = '.mermaid', nodes, nonce} = {}) => {\n const nodesList: Element[] = Array.from(\n nodes || document.querySelectorAll(querySelector),\n );\n const {zoom = false} = mermaid.mermaidAPI.getConfig() as InitConfig;\n\n for (const element of nodesList) {\n const id = `mermaid-${Date.now()}`;\n const content = decodeURIComponent(element.getAttribute('data-content') || '');\n let dedentedContent = dedent(content);\n\n if (content.replace(/\\n*$/, '').endsWith(' ')) {\n dedentedContent += ' ';\n }\n const text = dedentedContent.trimStart().replace(/<br\\s*\\/?>/gi, '<br/>');\n\n const {svg, bindFunctions} = await mermaid.render(id, text, element);\n let svgWithNonce = svg;\n if (nonce) {\n svgWithNonce = svgWithNonce.replace(/<style>/g, `<style nonce=\"${nonce}\">`);\n }\n element.innerHTML = svgWithNonce;\n\n if (bindFunctions) {\n bindFunctions(element);\n }\n\n bindZoomOptions(element as HTMLElement, zoom);\n }\n },\n initialize: (config) => {\n mermaid.initialize({\n ...DEFAULT_MERMAID_CONFIG,\n ...(config as MermaidConfig),\n });\n\n const {zoom} = mermaid.mermaidAPI.getConfig() as InitConfig;\n\n document.removeEventListener('click', zoomBehavior);\n if (zoom) {\n document.addEventListener('click', zoomBehavior);\n }\n },\n render: mermaid.render,\n parseError: mermaid.parseError,\n parse: mermaid.parse,\n setParseErrorHandler: mermaid.setParseErrorHandler,\n } as ExposedAPI);\n\n return next();\n }\n\n processing = false;\n}\n\nunqueue();\n", "import type {ZoomOptions} from '../types';\n\nimport * as d3 from 'd3';\n\nimport {attachKeyboard, attachMenu} from './zoom-control';\n\nconst DATA_MERMAID_ZOOM = 'mermaidZoom';\n\nfunction datakey(key: string) {\n return key.replace(/^(.)/, (_, $1) => $1.toUpperCase());\n}\n\nfunction set(dataset: DOMStringMap, key: string, value: unknown) {\n dataset[DATA_MERMAID_ZOOM + datakey(key)] = String(value);\n}\n\nfunction get(dataset: DOMStringMap, key: string) {\n return dataset[DATA_MERMAID_ZOOM + datakey(key)];\n}\n\nconst createInteraction = (svg: Element): HTMLElement => {\n const interaction = document.createElement('div');\n const {width, height} = svg.getBoundingClientRect();\n const style = `top: 0; left: 0; width: ${width}px; height: ${height}px; position: absolute; pointer-events: none;`;\n\n interaction.innerHTML = `<div class=\"mermaid-zoom-interaction\" style=\"${style}\"></div>`;\n\n return interaction.firstElementChild as HTMLElement;\n};\n\nconst enableZoom = (element: HTMLElement, options: ZoomOptions) => {\n const svg = element.querySelector('svg') as SVGSVGElement;\n const {maximumScale} = options;\n const dispose: Function[] = [];\n\n const $svg = d3.select<SVGSVGElement, unknown>(svg);\n\n if (!svg.querySelector('g.zoom-layer')) {\n const layer = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n layer.setAttribute('class', 'zoom-layer');\n Array.from(svg.childNodes).forEach((child) => {\n layer.appendChild(child);\n });\n svg.appendChild(layer);\n }\n\n const $inner = $svg.select<SVGGElement>('g.zoom-layer');\n const interaction = createInteraction(svg);\n\n const zoom = d3\n .zoom<SVGSVGElement, unknown>()\n .on('zoom', (event: ZoomEvent) => $inner.attr('transform', String(event.transform)))\n .scaleExtent([1, maximumScale]);\n\n $svg.call(zoom);\n dispose.push(() => $svg.on('.zoom', null));\n\n if (options.resetOnBlur) {\n dispose.push(() => {\n $svg.call(zoom.transform, d3.zoomIdentity);\n });\n }\n\n if (options.showMenu) {\n dispose.push(attachMenu(interaction, $svg, $inner, zoom));\n }\n\n if (options.bindKeys) {\n dispose.push(attachKeyboard($svg, $inner, zoom));\n }\n\n element.appendChild(interaction);\n dispose.push(() => element.removeChild(interaction));\n\n return () => dispose.forEach((action) => action());\n};\n\nfunction getZoomable(element: HTMLElement) {\n return element.closest('[data-mermaid-zoom-allowed=\"1\"]') as HTMLElement | null;\n}\n\nfunction getZoomableSvg(element: HTMLElement) {\n return element.closest('[data-mermaid-zoom-allowed=\"1\"] > svg') as HTMLElement | null;\n}\n\nfunction getActiveSvg(element: HTMLElement) {\n return element.closest('[data-mermaid-zoom-enabled=\"1\"] > svg') as HTMLElement | null;\n}\n\nfunction getActiveInteraction(element: HTMLElement) {\n return element.closest(\n '[data-mermaid-zoom-enabled=\"1\"] > .mermaid-zoom-interaction',\n ) as HTMLElement | null;\n}\n\nfunction setZoomable(element: HTMLElement, value: string) {\n set(element.dataset, 'allowed', value);\n}\n\nfunction isZoomEnabled(element: HTMLElement) {\n return get(element.dataset, 'enabled') === '1';\n}\n\nfunction setZoomEnabled(element: HTMLElement, value: string) {\n set(element.dataset, 'enabled', value);\n}\n\nexport function zoomBehavior(event: Event) {\n const element = getZoomable(event.target as HTMLElement);\n const svg = getZoomableSvg(event.target as HTMLElement);\n\n if (!element || !svg || isZoomEnabled(element as HTMLElement)) {\n return;\n }\n\n setZoomEnabled(element, '1');\n\n const options = getZoomOptions(element);\n const disableZoom = enableZoom(element, options);\n const onOuterClick = (event: Event) => {\n const target = event.target as HTMLElement;\n if (!getActiveSvg(target) && !getActiveInteraction(target)) {\n disableZoom();\n setZoomEnabled(element, '0');\n document.removeEventListener('mousedown', onOuterClick, true);\n }\n };\n\n document.addEventListener('mousedown', onOuterClick, true);\n}\n\nfunction getZoomOptions(element: HTMLElement): ZoomOptions {\n return {\n maximumScale: Number(get(element.dataset, 'maximumScale')),\n resetOnBlur: get(element.dataset, 'resetOnBlur') === 'true',\n showMenu: get(element.dataset, 'showMenu') === 'true',\n bindKeys: get(element.dataset, 'bindKeys') === 'true',\n };\n}\n\nlet styleInjected = false;\nexport function bindZoomOptions(element: HTMLElement, options: Partial<ZoomOptions> | boolean) {\n const _options: ZoomOptions = Object.assign(\n {\n maximumScale: 5,\n resetOnBlur: false,\n showMenu: false,\n bindKeys: false,\n },\n options,\n );\n\n if (options === false) {\n setZoomable(element, '0');\n setZoomEnabled(element, '0');\n return;\n }\n\n setZoomable(element, '1');\n if (_options.inlineStyle !== false && !styleInjected) {\n styleInjected = true;\n require('./zoom.scss');\n }\n\n for (const key of Object.keys(_options)) {\n set(element.dataset, key, _options[key as keyof typeof _options]);\n }\n}\n", "import * as d3 from 'd3';\nimport MagnifierPlusIcon from '@gravity-ui/icons/svgs/magnifier-plus.svg';\nimport MagnifierMinusIcon from '@gravity-ui/icons/svgs/magnifier-minus.svg';\nimport CaretUpIcon from '@gravity-ui/icons/svgs/caret-up.svg';\nimport CaretDownIcon from '@gravity-ui/icons/svgs/caret-down.svg';\nimport CaretLeftIcon from '@gravity-ui/icons/svgs/caret-left.svg';\nimport CaretRightIcon from '@gravity-ui/icons/svgs/caret-right.svg';\nimport CircleIcon from '@gravity-ui/icons/svgs/circle.svg';\n\nconst ZOOM_SPEED = 1;\nconst MOVE_SPEED = 500;\nconst CONTROLS_CLASS = 'mermaid-zoom-menu-control';\nconst CONTROLS: Record<string, Control> = {\n up: ['move up', CaretUpIcon, ['KeyW', 'w'], [0, 0, 1]],\n down: ['move down', CaretDownIcon, ['KeyS', 's'], [0, 0, -1]],\n left: ['move left', CaretLeftIcon, ['KeyA', 'a'], [0, 1, 0]],\n right: ['move right', CaretRightIcon, ['KeyD', 'd'], [0, -1, 0]],\n zoomin: ['zoom in', MagnifierPlusIcon, ['KeyE', 'e'], [1, 0, 0]],\n zoomout: ['zoom out', MagnifierMinusIcon, ['KeyQ', 'q'], [-1, 0, 0]],\n reset: ['reset', CircleIcon, ['KeyR', 'r'], d3.zoomIdentity],\n};\n\ntype Transform = [number, number, number];\ntype Control = [string, string, [string, string], Transform | d3.ZoomTransform];\ntype Action = keyof typeof CONTROLS;\n\nconst raf = () => new Promise((resolve) => requestAnimationFrame(resolve));\nconst sum = (a1: number[], a2: number[]) => a1.map((item, index) => item + a2[index]);\n\nconst transitions = new WeakMap();\nconst transition = ($svg: SVGSelection, $inner: GSelection, zoom: Zoom) => {\n if (transitions.has(zoom)) {\n return transitions.get(zoom);\n }\n\n const actions = new Set<Action>();\n let loop: Promise<void> | null = null;\n\n const iterarte = async () => {\n while (actions.size) {\n const t = Date.now();\n\n let [dk, dx, dy] = [0, 0, 0];\n for (const action of actions) {\n const d = CONTROLS[action][3];\n if (d === d3.zoomIdentity) {\n try {\n await $svg.transition().call(zoom.transform, d3.zoomIdentity).end();\n } catch {}\n } else {\n [dk, dx, dy] = sum([dk, dx, dy], d as Transform);\n }\n }\n\n await raf();\n\n const {k} = d3.zoomTransform($inner.node() as Element);\n const dt = (Date.now() - t) / 1000;\n\n [dk, dx, dy] = [dk * dt * ZOOM_SPEED, dx * dt * MOVE_SPEED, dy * dt * MOVE_SPEED];\n\n if (dx || dy) {\n zoom.translateBy($svg, dx, dy);\n }\n\n if (dk) {\n zoom.scaleTo($svg, k + dk);\n }\n }\n };\n\n transitions.set(zoom, {\n add(action: Action) {\n actions.add(action);\n\n if (!loop) {\n loop = iterarte().finally(() => {\n loop = null;\n });\n }\n },\n\n delete(action: Action) {\n actions.delete(action);\n },\n });\n\n return transitions.get(zoom);\n};\n\nexport const attachKeyboard = ($svg: SVGSelection, $inner: GSelection, zoom: Zoom) => {\n const ts = transition($svg, $inner, zoom);\n\n const keys: Record<string, Action> = Object.keys(CONTROLS).reduce(\n (acc, key) => {\n const control = CONTROLS[key] as Control;\n const bind = control[2][0];\n\n acc[bind] = key;\n\n return acc;\n },\n {} as Record<string, Action>,\n );\n\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.altKey || event.ctrlKey || event.shiftKey || event.metaKey) {\n return;\n }\n\n const action = keys[event.code];\n if (action) {\n event.preventDefault();\n ts.add(action);\n }\n };\n\n const handleKeyup = (event: KeyboardEvent) => {\n const action = keys[event.code];\n if (action) {\n event.preventDefault();\n ts.delete(action);\n }\n };\n\n document.addEventListener('keydown', handleKeydown);\n document.addEventListener('keyup', handleKeyup);\n\n return () => {\n document.removeEventListener('keydown', handleKeydown);\n document.removeEventListener('keyup', handleKeyup);\n };\n};\n\nexport const attachMenu = (\n container: HTMLElement,\n $svg: SVGSelection,\n $inner: GSelection,\n zoom: Zoom,\n) => {\n const ts = transition($svg, $inner, zoom);\n\n const build = document.createElement('div');\n const buttons = Object.keys(CONTROLS)\n .map((key) => [key, ...CONTROLS[key]])\n .reduce(\n (acc, [name, title, icon]) =>\n acc +\n `\n <div class=\"${CONTROLS_CLASS}\" title=\"${title}\" data-action=\"${name}\">\n ${icon}\n </div>`,\n '',\n );\n\n build.innerHTML = `\n <div class=\"mermaid-zoom-menu\">\n <div class=\"mermaid-zoom-menu-controls\">\n ${buttons}\n </div>\n </div>\n `;\n\n const menu = build.firstElementChild as HTMLElement;\n\n let controlActive: Action | null = null;\n const resetTransition = () => {\n ts.delete(controlActive);\n controlActive = null;\n document.removeEventListener('mouseup', resetTransition, true);\n };\n\n const handleControlClick = async (event: MouseEvent) => {\n // Disable external text selection\n if (event.detail > 1) {\n event.preventDefault();\n }\n\n const element = (event.target as HTMLElement).closest('.mermaid-zoom-menu-control');\n\n if (!element) {\n return;\n }\n\n controlActive = (element as HTMLElement).dataset.action as Action;\n ts.add(controlActive as Action);\n document.addEventListener('mouseup', resetTransition, true);\n };\n\n menu.addEventListener('mousedown', handleControlClick);\n container.appendChild(menu);\n\n return () => {\n resetTransition();\n container.removeChild(menu);\n menu.removeEventListener('mousedown', handleControlClick);\n };\n};\n", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5Zm0 1.5a5.725 5.725 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5Zm.75-7.75a.75.75 0 0 0-1.5 0V6H4.75a.75.75 0 0 0 0 1.5H6v1.25a.75.75 0 0 0 1.5 0V7.5h1.25a.75.75 0 0 0 0-1.5H7.5V4.75Z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5Zm0 1.5a5.725 5.725 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5Zm-2-6.5a.75.75 0 0 0 0 1.5h4a.75.75 0 0 0 0-1.5h-4Z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M11.823 9.295a.73.73 0 0 1-.552 1.205H4.729a.73.73 0 0 1-.552-1.205L7.2 5.786a1 1 0 0 1 .757-.347h.084a1 1 0 0 1 .757.347l3.024 3.509Z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M4.177 6.705A.73.73 0 0 1 4.729 5.5h6.542a.73.73 0 0 1 .552 1.205L8.8 10.214a1 1 0 0 1-.757.347h-.084a1 1 0 0 1-.757-.347L4.177 6.705Z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M9.295 4.177a.73.73 0 0 1 1.205.552v6.542a.73.73 0 0 1-1.205.552L5.786 8.8a1 1 0 0 1-.347-.757v-.084a1 1 0 0 1 .347-.757l3.509-3.024Z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M6.705 11.823a.73.73 0 0 1-1.205-.552V4.729a.73.73 0 0 1 1.205-.552L10.214 7.2a1 1 0 0 1 .347.757v.084a1 1 0 0 1-.347.757l-3.509 3.024Z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11ZM8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z\" clip-rule=\"evenodd\"/></svg>"],
5
- "mappings": "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",
4
+ "sourcesContent": ["export function inject_style(text) {\n if (typeof document !== 'undefined') {\n var style = document.createElement('style')\n var node = document.createTextNode(text)\n style.appendChild(node)\n document.head.appendChild(style)\n }\n}", "import { inject_style } from \"__style_helper__\"\ninject_style(\":root{--mermaid-zoom-control-size: 20px;--mermaid-zoom-control-pad: 5px;--mermaid-zoom-control-color: #000}[data-mermaid-zoom-enabled=\\\"1\\\"]{position:relative}[data-mermaid-zoom-enabled=\\\"1\\\"]>svg{outline:solid 1px var(--mermaid-zoom-control-color)}@keyframes mermaid-zoom-menu-controls-fadein{0%{transform:translateY(-100%)}to{transform:translateY(0)}}.mermaid-zoom-menu{position:sticky;top:0;height:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);overflow:hidden}.mermaid-zoom-menu-controls{position:absolute;right:0;top:0;height:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);width:calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);animation:mermaid-zoom-menu-controls-fadein ease .2s}.mermaid-zoom-menu-control{position:absolute;width:var(--mermaid-zoom-control-size);height:var(--mermaid-zoom-control-size);pointer-events:all;cursor:pointer;transition:all .2s}.mermaid-zoom-menu-control:hover{transform:scale(1.3)}.mermaid-zoom-menu-control:active{transform:scale(1)}.mermaid-zoom-menu-control[data-action=up]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control[data-action=down]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:var(--mermaid-zoom-control-pad)}.mermaid-zoom-menu-control[data-action=reset]{right:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=left]{right:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=right]{right:var(--mermaid-zoom-control-pad);bottom:calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2)}.mermaid-zoom-menu-control[data-action=zoomout]{right:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control[data-action=zoomin]{right:var(--mermaid-zoom-control-pad);bottom:calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3)}.mermaid-zoom-menu-control svg{color:var(--mermaid-zoom-control-color);width:var(--mermaid-zoom-control-size);height:var(--mermaid-zoom-control-size)}\")", "import type {ExposedAPI, InitConfig} from '../types';\nimport type {MermaidConfig} from 'mermaid';\n\nimport mermaid from 'mermaid';\nimport dedent from 'ts-dedent';\n\nimport {bindZoomOptions, zoomBehavior} from './zoom';\n\nconst DEFAULT_MERMAID_CONFIG: MermaidConfig = {\n startOnLoad: false,\n // To avoid breaking changes after updating to https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0\n gitGraph: {useMaxWidth: false},\n sankey: {useMaxWidth: false},\n theme: 'forest',\n};\n\nmermaid.initialize(DEFAULT_MERMAID_CONFIG);\n\nconst jsonp = (window.mermaidJsonp = window.mermaidJsonp || []);\nconst queue = jsonp.splice(0, jsonp.length);\n\njsonp.push = function (...args) {\n args.forEach((callback) => {\n queue.push(callback);\n unqueue();\n });\n\n return queue.length;\n};\n\nlet processing = false;\n\nfunction unqueue() {\n if (!processing) {\n next();\n }\n}\n\nasync function next(): Promise<void> {\n processing = true;\n\n const callback = queue.shift();\n if (callback) {\n await callback({\n run: async ({querySelector = '.mermaid', nodes, nonce} = {}) => {\n const nodesList: Element[] = Array.from(\n nodes || document.querySelectorAll(querySelector),\n );\n const {zoom = false} = mermaid.mermaidAPI.getConfig() as InitConfig;\n\n for (const element of nodesList) {\n const id = `mermaid-${Date.now()}`;\n const content = decodeURIComponent(element.getAttribute('data-content') || '');\n let dedentedContent = dedent(content);\n\n if (content.replace(/\\n*$/, '').endsWith(' ')) {\n dedentedContent += ' ';\n }\n const text = dedentedContent.trimStart().replace(/<br\\s*\\/?>/gi, '<br/>');\n\n let svg: string, bindFunctions: ((element: Element) => void) | undefined;\n\n try {\n const result = await mermaid.render(id, text, element);\n svg = result.svg;\n bindFunctions = result.bindFunctions;\n } catch {\n return;\n }\n\n let svgWithNonce = svg;\n if (nonce) {\n svgWithNonce = svgWithNonce.replace(/<style>/g, `<style nonce=\"${nonce}\">`);\n }\n element.innerHTML = svgWithNonce;\n\n if (bindFunctions) {\n bindFunctions(element);\n }\n\n bindZoomOptions(element as HTMLElement, zoom);\n }\n },\n initialize: (config) => {\n mermaid.initialize({\n ...DEFAULT_MERMAID_CONFIG,\n ...(config as MermaidConfig),\n });\n\n const {zoom} = mermaid.mermaidAPI.getConfig() as InitConfig;\n\n document.removeEventListener('click', zoomBehavior);\n if (zoom) {\n document.addEventListener('click', zoomBehavior);\n }\n },\n render: mermaid.render,\n parseError: mermaid.parseError,\n parse: mermaid.parse,\n setParseErrorHandler: mermaid.setParseErrorHandler,\n } as ExposedAPI);\n\n return next();\n }\n\n processing = false;\n}\n\nunqueue();\n", "import type {ZoomOptions} from '../types';\n\nimport * as d3 from 'd3';\n\nimport {attachKeyboard, attachMenu} from './zoom-control';\n\nconst DATA_MERMAID_ZOOM = 'mermaidZoom';\n\nfunction datakey(key: string) {\n return key.replace(/^(.)/, (_, $1) => $1.toUpperCase());\n}\n\nfunction set(dataset: DOMStringMap, key: string, value: unknown) {\n dataset[DATA_MERMAID_ZOOM + datakey(key)] = String(value);\n}\n\nfunction get(dataset: DOMStringMap, key: string) {\n return dataset[DATA_MERMAID_ZOOM + datakey(key)];\n}\n\nconst createInteraction = (svg: Element): HTMLElement => {\n const interaction = document.createElement('div');\n const {width, height} = svg.getBoundingClientRect();\n const style = `top: 0; left: 0; width: ${width}px; height: ${height}px; position: absolute; pointer-events: none;`;\n\n interaction.innerHTML = `<div class=\"mermaid-zoom-interaction\" style=\"${style}\"></div>`;\n\n return interaction.firstElementChild as HTMLElement;\n};\n\nconst enableZoom = (element: HTMLElement, options: ZoomOptions) => {\n const svg = element.querySelector('svg') as SVGSVGElement;\n const {maximumScale} = options;\n const dispose: Function[] = [];\n\n const $svg = d3.select<SVGSVGElement, unknown>(svg);\n\n if (!svg.querySelector('g.zoom-layer')) {\n const layer = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n layer.setAttribute('class', 'zoom-layer');\n Array.from(svg.childNodes).forEach((child) => {\n layer.appendChild(child);\n });\n svg.appendChild(layer);\n }\n\n const $inner = $svg.select<SVGGElement>('g.zoom-layer');\n const interaction = createInteraction(svg);\n\n const zoom = d3\n .zoom<SVGSVGElement, unknown>()\n .on('zoom', (event: ZoomEvent) => $inner.attr('transform', String(event.transform)))\n .scaleExtent([1, maximumScale]);\n\n $svg.call(zoom);\n dispose.push(() => $svg.on('.zoom', null));\n\n if (options.resetOnBlur) {\n dispose.push(() => {\n $svg.call(zoom.transform, d3.zoomIdentity);\n });\n }\n\n if (options.showMenu) {\n dispose.push(attachMenu(interaction, $svg, $inner, zoom));\n }\n\n if (options.bindKeys) {\n dispose.push(attachKeyboard($svg, $inner, zoom));\n }\n\n element.appendChild(interaction);\n dispose.push(() => element.removeChild(interaction));\n\n return () => dispose.forEach((action) => action());\n};\n\nfunction getZoomable(element: HTMLElement) {\n return element.closest('[data-mermaid-zoom-allowed=\"1\"]') as HTMLElement | null;\n}\n\nfunction getZoomableSvg(element: HTMLElement) {\n return element.closest('[data-mermaid-zoom-allowed=\"1\"] > svg') as HTMLElement | null;\n}\n\nfunction getActiveSvg(element: HTMLElement) {\n return element.closest('[data-mermaid-zoom-enabled=\"1\"] > svg') as HTMLElement | null;\n}\n\nfunction getActiveInteraction(element: HTMLElement) {\n return element.closest(\n '[data-mermaid-zoom-enabled=\"1\"] > .mermaid-zoom-interaction',\n ) as HTMLElement | null;\n}\n\nfunction setZoomable(element: HTMLElement, value: string) {\n set(element.dataset, 'allowed', value);\n}\n\nfunction isZoomEnabled(element: HTMLElement) {\n return get(element.dataset, 'enabled') === '1';\n}\n\nfunction setZoomEnabled(element: HTMLElement, value: string) {\n set(element.dataset, 'enabled', value);\n}\n\nexport function zoomBehavior(event: Event) {\n const element = getZoomable(event.target as HTMLElement);\n const svg = getZoomableSvg(event.target as HTMLElement);\n\n if (!element || !svg || isZoomEnabled(element as HTMLElement)) {\n return;\n }\n\n setZoomEnabled(element, '1');\n\n const options = getZoomOptions(element);\n const disableZoom = enableZoom(element, options);\n const onOuterClick = (event: Event) => {\n const target = event.target as HTMLElement;\n if (!getActiveSvg(target) && !getActiveInteraction(target)) {\n disableZoom();\n setZoomEnabled(element, '0');\n document.removeEventListener('mousedown', onOuterClick, true);\n }\n };\n\n document.addEventListener('mousedown', onOuterClick, true);\n}\n\nfunction getZoomOptions(element: HTMLElement): ZoomOptions {\n return {\n maximumScale: Number(get(element.dataset, 'maximumScale')),\n resetOnBlur: get(element.dataset, 'resetOnBlur') === 'true',\n showMenu: get(element.dataset, 'showMenu') === 'true',\n bindKeys: get(element.dataset, 'bindKeys') === 'true',\n };\n}\n\nlet styleInjected = false;\nexport function bindZoomOptions(element: HTMLElement, options: Partial<ZoomOptions> | boolean) {\n const _options: ZoomOptions = Object.assign(\n {\n maximumScale: 5,\n resetOnBlur: false,\n showMenu: false,\n bindKeys: false,\n },\n options,\n );\n\n if (options === false) {\n setZoomable(element, '0');\n setZoomEnabled(element, '0');\n return;\n }\n\n setZoomable(element, '1');\n if (_options.inlineStyle !== false && !styleInjected) {\n styleInjected = true;\n require('./zoom.scss');\n }\n\n for (const key of Object.keys(_options)) {\n set(element.dataset, key, _options[key as keyof typeof _options]);\n }\n}\n", "import * as d3 from 'd3';\nimport MagnifierPlusIcon from '@gravity-ui/icons/svgs/magnifier-plus.svg';\nimport MagnifierMinusIcon from '@gravity-ui/icons/svgs/magnifier-minus.svg';\nimport CaretUpIcon from '@gravity-ui/icons/svgs/caret-up.svg';\nimport CaretDownIcon from '@gravity-ui/icons/svgs/caret-down.svg';\nimport CaretLeftIcon from '@gravity-ui/icons/svgs/caret-left.svg';\nimport CaretRightIcon from '@gravity-ui/icons/svgs/caret-right.svg';\nimport CircleIcon from '@gravity-ui/icons/svgs/circle.svg';\n\nconst ZOOM_SPEED = 1;\nconst MOVE_SPEED = 500;\nconst CONTROLS_CLASS = 'mermaid-zoom-menu-control';\nconst CONTROLS: Record<string, Control> = {\n up: ['move up', CaretUpIcon, ['KeyW', 'w'], [0, 0, 1]],\n down: ['move down', CaretDownIcon, ['KeyS', 's'], [0, 0, -1]],\n left: ['move left', CaretLeftIcon, ['KeyA', 'a'], [0, 1, 0]],\n right: ['move right', CaretRightIcon, ['KeyD', 'd'], [0, -1, 0]],\n zoomin: ['zoom in', MagnifierPlusIcon, ['KeyE', 'e'], [1, 0, 0]],\n zoomout: ['zoom out', MagnifierMinusIcon, ['KeyQ', 'q'], [-1, 0, 0]],\n reset: ['reset', CircleIcon, ['KeyR', 'r'], d3.zoomIdentity],\n};\n\ntype Transform = [number, number, number];\ntype Control = [string, string, [string, string], Transform | d3.ZoomTransform];\ntype Action = keyof typeof CONTROLS;\n\nconst raf = () => new Promise((resolve) => requestAnimationFrame(resolve));\nconst sum = (a1: number[], a2: number[]) => a1.map((item, index) => item + a2[index]);\n\nconst transitions = new WeakMap();\nconst transition = ($svg: SVGSelection, $inner: GSelection, zoom: Zoom) => {\n if (transitions.has(zoom)) {\n return transitions.get(zoom);\n }\n\n const actions = new Set<Action>();\n let loop: Promise<void> | null = null;\n\n const iterarte = async () => {\n while (actions.size) {\n const t = Date.now();\n\n let [dk, dx, dy] = [0, 0, 0];\n for (const action of actions) {\n const d = CONTROLS[action][3];\n if (d === d3.zoomIdentity) {\n try {\n await $svg.transition().call(zoom.transform, d3.zoomIdentity).end();\n } catch {}\n } else {\n [dk, dx, dy] = sum([dk, dx, dy], d as Transform);\n }\n }\n\n await raf();\n\n const {k} = d3.zoomTransform($inner.node() as Element);\n const dt = (Date.now() - t) / 1000;\n\n [dk, dx, dy] = [dk * dt * ZOOM_SPEED, dx * dt * MOVE_SPEED, dy * dt * MOVE_SPEED];\n\n if (dx || dy) {\n zoom.translateBy($svg, dx, dy);\n }\n\n if (dk) {\n zoom.scaleTo($svg, k + dk);\n }\n }\n };\n\n transitions.set(zoom, {\n add(action: Action) {\n actions.add(action);\n\n if (!loop) {\n loop = iterarte().finally(() => {\n loop = null;\n });\n }\n },\n\n delete(action: Action) {\n actions.delete(action);\n },\n });\n\n return transitions.get(zoom);\n};\n\nexport const attachKeyboard = ($svg: SVGSelection, $inner: GSelection, zoom: Zoom) => {\n const ts = transition($svg, $inner, zoom);\n\n const keys: Record<string, Action> = Object.keys(CONTROLS).reduce(\n (acc, key) => {\n const control = CONTROLS[key] as Control;\n const bind = control[2][0];\n\n acc[bind] = key;\n\n return acc;\n },\n {} as Record<string, Action>,\n );\n\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.altKey || event.ctrlKey || event.shiftKey || event.metaKey) {\n return;\n }\n\n const action = keys[event.code];\n if (action) {\n event.preventDefault();\n ts.add(action);\n }\n };\n\n const handleKeyup = (event: KeyboardEvent) => {\n const action = keys[event.code];\n if (action) {\n event.preventDefault();\n ts.delete(action);\n }\n };\n\n document.addEventListener('keydown', handleKeydown);\n document.addEventListener('keyup', handleKeyup);\n\n return () => {\n document.removeEventListener('keydown', handleKeydown);\n document.removeEventListener('keyup', handleKeyup);\n };\n};\n\nexport const attachMenu = (\n container: HTMLElement,\n $svg: SVGSelection,\n $inner: GSelection,\n zoom: Zoom,\n) => {\n const ts = transition($svg, $inner, zoom);\n\n const build = document.createElement('div');\n const buttons = Object.keys(CONTROLS)\n .map((key) => [key, ...CONTROLS[key]])\n .reduce(\n (acc, [name, title, icon]) =>\n acc +\n `\n <div class=\"${CONTROLS_CLASS}\" title=\"${title}\" data-action=\"${name}\">\n ${icon}\n </div>`,\n '',\n );\n\n build.innerHTML = `\n <div class=\"mermaid-zoom-menu\">\n <div class=\"mermaid-zoom-menu-controls\">\n ${buttons}\n </div>\n </div>\n `;\n\n const menu = build.firstElementChild as HTMLElement;\n\n let controlActive: Action | null = null;\n const resetTransition = () => {\n ts.delete(controlActive);\n controlActive = null;\n document.removeEventListener('mouseup', resetTransition, true);\n };\n\n const handleControlClick = async (event: MouseEvent) => {\n // Disable external text selection\n if (event.detail > 1) {\n event.preventDefault();\n }\n\n const element = (event.target as HTMLElement).closest('.mermaid-zoom-menu-control');\n\n if (!element) {\n return;\n }\n\n controlActive = (element as HTMLElement).dataset.action as Action;\n ts.add(controlActive as Action);\n document.addEventListener('mouseup', resetTransition, true);\n };\n\n menu.addEventListener('mousedown', handleControlClick);\n container.appendChild(menu);\n\n return () => {\n resetTransition();\n container.removeChild(menu);\n menu.removeEventListener('mousedown', handleControlClick);\n };\n};\n", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5m0 1.5a5.73 5.73 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5m.75-7.75a.75.75 0 0 0-1.5 0V6H4.75a.75.75 0 0 0 0 1.5H6v1.25a.75.75 0 0 0 1.5 0V7.5h1.25a.75.75 0 0 0 0-1.5H7.5z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5m0 1.5a5.73 5.73 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5m-2-6.5a.75.75 0 0 0 0 1.5h4a.75.75 0 0 0 0-1.5z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M11.823 9.295a.73.73 0 0 1-.552 1.205H4.729a.73.73 0 0 1-.552-1.205L7.2 5.786a1 1 0 0 1 .757-.347h.084a1 1 0 0 1 .757.347z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M4.177 6.705A.73.73 0 0 1 4.729 5.5h6.542a.73.73 0 0 1 .552 1.205L8.8 10.214a1 1 0 0 1-.757.347h-.084a1 1 0 0 1-.757-.347z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M9.295 4.177a.73.73 0 0 1 1.205.552v6.542a.73.73 0 0 1-1.205.552L5.786 8.8a1 1 0 0 1-.347-.757v-.084a1 1 0 0 1 .347-.757z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M6.705 11.823a.73.73 0 0 1-1.205-.552V4.729a.73.73 0 0 1 1.205-.552L10.214 7.2a1 1 0 0 1 .347.757v.084a1 1 0 0 1-.347.757z\" clip-rule=\"evenodd\"/></svg>", "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14\" clip-rule=\"evenodd\"/></svg>"],
5
+ "mappings": "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",
6
6
  "names": ["d3", "zoom", "zoom", "event", "zoom"]
7
7
  }
@@ -19,7 +19,6 @@
19
19
  }
20
20
  }
21
21
  .mermaid-zoom-menu {
22
- position: absolute;
23
22
  position: sticky;
24
23
  top: 0;
25
24
  height: calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/runtime/zoom.scss"],
4
- "sourcesContent": [":root {\n --mermaid-zoom-control-size: 20px;\n --mermaid-zoom-control-pad: 5px;\n --mermaid-zoom-control-color: #000;\n}\n\n[data-mermaid-zoom-enabled=\"1\"] {\n position: relative;\n\n & > svg {\n outline: solid 1px var(--mermaid-zoom-control-color);\n }\n}\n\n@keyframes mermaid-zoom-menu-controls-fadein {\n from {\n transform: translateY(-100%);\n }\n\n to {\n transform: translateY(0);\n }\n}\n\n.mermaid-zoom-menu {\n position: absolute;\n position: sticky;\n top: 0;\n height: calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);\n overflow: hidden;\n\n &-controls {\n position: absolute;\n right: 0;\n top: 0;\n height: calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);\n width: calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);\n animation: mermaid-zoom-menu-controls-fadein ease .2s;\n }\n\n &-control {\n position: absolute;\n width: var(--mermaid-zoom-control-size);\n height: var(--mermaid-zoom-control-size);\n pointer-events: all;\n cursor: pointer;\n transition: all .2s;\n\n &:hover {\n transform: scale(1.3);\n }\n\n &:active {\n transform: scale(1);\n }\n\n &[data-action=\"up\"] {\n right: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n bottom: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);\n }\n\n &[data-action=\"down\"] {\n right: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n bottom: var(--mermaid-zoom-control-pad);\n }\n\n &[data-action=\"reset\"] {\n right: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n bottom: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n }\n\n &[data-action=\"left\"] {\n right: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);\n bottom: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n }\n\n &[data-action=\"right\"] {\n right: var(--mermaid-zoom-control-pad);\n bottom: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n }\n\n &[data-action=\"zoomout\"] {\n right: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);\n bottom: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);\n }\n\n &[data-action=\"zoomin\"] {\n right: var(--mermaid-zoom-control-pad);\n bottom: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);\n }\n\n svg {\n color: var(--mermaid-zoom-control-color);\n width: var(--mermaid-zoom-control-size);\n height: var(--mermaid-zoom-control-size);\n }\n }\n}\n"],
5
- "mappings": ";AAAA;AACI,+BAAA;AACA,8BAAA;AACA,gCAAA;;AAGJ,CAAA;AACI,YAAA;;AAEA,CAAA,+BAAA,EAAA;AACI,WAAA,MAAA,IAAA,IAAA;;AAIR,WAAA;AACI;AACI,eAAA,WAAA;;AAGJ;AACI,eAAA,WAAA;;;AAIR,CAAA;AACI,YAAA;AACA,YAAA;AACA,OAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;AACA,YAAA;;AAEA,CAAA;AACI,YAAA;AACA,SAAA;AACA,OAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;AACA,SAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;AACA,aAAA,kCAAA,KAAA;;AAGJ,CAAA;AACI,YAAA;AACA,SAAA,IAAA;AACA,UAAA,IAAA;AACA,kBAAA;AACA,UAAA;AACA,cAAA,IAAA;;AAEA,CARJ,yBAQI;AACI,aAAA,MAAA;;AAGJ,CAZJ,yBAYI;AACI,aAAA,MAAA;;AAGJ,CAhBJ,yBAgBI,CAAA;AACI,SAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;;AAGJ,CArBJ,yBAqBI,CAAA;AACI,SAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;AACA,UAAA,IAAA;;AAGJ,CA1BJ,yBA0BI,CAAA;AACI,SAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;;AAGJ,CA/BJ,yBA+BI,CAAA;AACI,SAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;;AAGJ,CApCJ,yBAoCI,CAAA;AACI,SAAA,IAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;;AAGJ,CAzCJ,yBAyCI,CAAA;AACI,SAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;;AAGJ,CA9CJ,yBA8CI,CAAA;AACI,SAAA,IAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;;AAGJ,CAnDJ,0BAmDI;AACI,SAAA,IAAA;AACA,SAAA,IAAA;AACA,UAAA,IAAA;;",
3
+ "sources": ["../../src/zoom.scss"],
4
+ "sourcesContent": [":root {\n --mermaid-zoom-control-size: 20px;\n --mermaid-zoom-control-pad: 5px;\n --mermaid-zoom-control-color: #000;\n}\n\n[data-mermaid-zoom-enabled='1'] {\n position: relative;\n\n & > svg {\n outline: solid 1px var(--mermaid-zoom-control-color);\n }\n}\n\n@keyframes mermaid-zoom-menu-controls-fadein {\n from {\n transform: translateY(-100%);\n }\n\n to {\n transform: translateY(0);\n }\n}\n\n.mermaid-zoom-menu {\n position: sticky;\n top: 0;\n height: calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);\n overflow: hidden;\n\n &-controls {\n position: absolute;\n right: 0;\n top: 0;\n height: calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);\n width: calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);\n animation: mermaid-zoom-menu-controls-fadein ease 0.2s;\n }\n\n &-control {\n position: absolute;\n width: var(--mermaid-zoom-control-size);\n height: var(--mermaid-zoom-control-size);\n pointer-events: all;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n transform: scale(1.3);\n }\n\n &:active {\n transform: scale(1);\n }\n\n &[data-action='up'] {\n right: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n bottom: calc(\n var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3\n );\n }\n\n &[data-action='down'] {\n right: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n bottom: var(--mermaid-zoom-control-pad);\n }\n\n &[data-action='reset'] {\n right: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n bottom: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n }\n\n &[data-action='left'] {\n right: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);\n bottom: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n }\n\n &[data-action='right'] {\n right: var(--mermaid-zoom-control-pad);\n bottom: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);\n }\n\n &[data-action='zoomout'] {\n right: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);\n bottom: calc(\n var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3\n );\n }\n\n &[data-action='zoomin'] {\n right: var(--mermaid-zoom-control-pad);\n bottom: calc(\n var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3\n );\n }\n\n svg {\n color: var(--mermaid-zoom-control-color);\n width: var(--mermaid-zoom-control-size);\n height: var(--mermaid-zoom-control-size);\n }\n }\n}\n"],
5
+ "mappings": ";AAAA;AACI,+BAAA;AACA,8BAAA;AACA,gCAAA;;AAGJ,CAAA;AACI,YAAA;;AAEA,CAAA,+BAAA,EAAA;AACI,WAAA,MAAA,IAAA,IAAA;;AAIR,WAAA;AACI;AACI,eAAA,WAAA;;AAGJ;AACI,eAAA,WAAA;;;AAIR,CAAA;AACI,YAAA;AACA,OAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;AACA,YAAA;;AAEA,CAAA;AACI,YAAA;AACA,SAAA;AACA,OAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;AACA,SAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;AACA,aAAA,kCAAA,KAAA;;AAGJ,CAAA;AACI,YAAA;AACA,SAAA,IAAA;AACA,UAAA,IAAA;AACA,kBAAA;AACA,UAAA;AACA,cAAA,IAAA;;AAEA,CARJ,yBAQI;AACI,aAAA,MAAA;;AAGJ,CAZJ,yBAYI;AACI,aAAA,MAAA;;AAGJ,CAhBJ,yBAgBI,CAAA;AACI,SAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;;AAKJ,CAvBJ,yBAuBI,CAAA;AACI,SAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;AACA,UAAA,IAAA;;AAGJ,CA5BJ,yBA4BI,CAAA;AACI,SAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;;AAGJ,CAjCJ,yBAiCI,CAAA;AACI,SAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;;AAGJ,CAtCJ,yBAsCI,CAAA;AACI,SAAA,IAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,IAAA,4BAAA,EAAA;;AAGJ,CA3CJ,yBA2CI,CAAA;AACI,SAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;;AAKJ,CAlDJ,yBAkDI,CAAA;AACI,SAAA,IAAA;AACA,UAAA,KAAA,IAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,4BAAA,EAAA;;AAKJ,CAzDJ,0BAyDI;AACI,SAAA,IAAA;AACA,SAAA,IAAA;AACA,UAAA,IAAA;;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "@diplodoc/mermaid-extension",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Mermaid plugin for Diplodoc transformer and builder",
5
5
  "main": "build/plugin/index.js",
6
6
  "types": "build/plugin/index.d.ts",
7
7
  "engines": {
8
- "node": ">=18",
9
- "npm": ">=9.*"
8
+ "node": ">=22",
9
+ "npm": ">=11.5.1"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git@github.com:diplodoc-platform/mermaid-extension.git"
10
14
  },
11
15
  "exports": {
12
16
  ".": {
@@ -69,13 +73,12 @@
69
73
  },
70
74
  "devDependencies": {
71
75
  "@diplodoc/lint": "^1.1.3",
72
- "@diplodoc/transform": "^4.7.2",
73
76
  "@diplodoc/tsconfig": "^1.0.2",
74
77
  "@types/d3": "^7.4.0",
75
78
  "@types/markdown-it": "^13.0.9",
76
- "@types/node": "^20.3.2",
79
+ "@types/node": "^22.19.7",
77
80
  "@types/react": "^18.0.35",
78
- "esbuild": "^0.23.1",
81
+ "esbuild": "^0.27.2",
79
82
  "esbuild-inline-sass": "^0.4.1",
80
83
  "esbuild-sass-plugin": "^3.3.1",
81
84
  "jest": "^29.5.0",