@diplodoc/mermaid-extension 1.4.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,82 @@
1
+ /* src/runtime/zoom.scss */
2
+ :root {
3
+ --mermaid-zoom-control-size: 20px;
4
+ --mermaid-zoom-control-pad: 5px;
5
+ --mermaid-zoom-control-color: #000;
6
+ }
7
+ [data-mermaid-zoom-enabled="1"] {
8
+ position: relative;
9
+ }
10
+ [data-mermaid-zoom-enabled="1"] > svg {
11
+ outline: solid 1px var(--mermaid-zoom-control-color);
12
+ }
13
+ @keyframes mermaid-zoom-menu-controls-fadein {
14
+ from {
15
+ transform: translateY(-100%);
16
+ }
17
+ to {
18
+ transform: translateY(0);
19
+ }
20
+ }
21
+ .mermaid-zoom-menu {
22
+ position: sticky;
23
+ top: 0;
24
+ height: calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);
25
+ overflow: hidden;
26
+ }
27
+ .mermaid-zoom-menu-controls {
28
+ position: absolute;
29
+ right: 0;
30
+ top: 0;
31
+ height: calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);
32
+ width: calc(var(--mermaid-zoom-control-size) * 3 + var(--mermaid-zoom-control-pad) * 4);
33
+ animation: mermaid-zoom-menu-controls-fadein ease 0.2s;
34
+ }
35
+ .mermaid-zoom-menu-control {
36
+ position: absolute;
37
+ width: var(--mermaid-zoom-control-size);
38
+ height: var(--mermaid-zoom-control-size);
39
+ pointer-events: all;
40
+ cursor: pointer;
41
+ transition: all 0.2s;
42
+ }
43
+ .mermaid-zoom-menu-control:hover {
44
+ transform: scale(1.3);
45
+ }
46
+ .mermaid-zoom-menu-control:active {
47
+ transform: scale(1);
48
+ }
49
+ .mermaid-zoom-menu-control[data-action=up] {
50
+ right: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);
51
+ bottom: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);
52
+ }
53
+ .mermaid-zoom-menu-control[data-action=down] {
54
+ right: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);
55
+ bottom: var(--mermaid-zoom-control-pad);
56
+ }
57
+ .mermaid-zoom-menu-control[data-action=reset] {
58
+ right: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);
59
+ bottom: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);
60
+ }
61
+ .mermaid-zoom-menu-control[data-action=left] {
62
+ right: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);
63
+ bottom: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);
64
+ }
65
+ .mermaid-zoom-menu-control[data-action=right] {
66
+ right: var(--mermaid-zoom-control-pad);
67
+ bottom: calc(var(--mermaid-zoom-control-size) + var(--mermaid-zoom-control-pad) * 2);
68
+ }
69
+ .mermaid-zoom-menu-control[data-action=zoomout] {
70
+ right: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);
71
+ bottom: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);
72
+ }
73
+ .mermaid-zoom-menu-control[data-action=zoomin] {
74
+ right: var(--mermaid-zoom-control-pad);
75
+ bottom: calc(var(--mermaid-zoom-control-size) * 2 + var(--mermaid-zoom-control-pad) * 3);
76
+ }
77
+ .mermaid-zoom-menu-control svg {
78
+ color: var(--mermaid-zoom-control-color);
79
+ width: var(--mermaid-zoom-control-size);
80
+ height: var(--mermaid-zoom-control-size);
81
+ }
82
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
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
+ "names": []
7
+ }
@@ -1,42 +1,12 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
1
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __esm = (fn, res) => function __init() {
6
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
2
+ var __commonJS = (cb, mod) => function __require() {
3
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
7
4
  };
8
- var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") {
10
- for (let key of __getOwnPropNames(from))
11
- if (!__hasOwnProp.call(to, key) && key !== except)
12
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
- }
14
- return to;
15
- };
16
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
17
-
18
- // style-helper:index.js
19
- function inject_style(text) {
20
- if (typeof document !== "undefined") {
21
- var style = document.createElement("style");
22
- var node = document.createTextNode(text);
23
- style.appendChild(node);
24
- document.head.appendChild(style);
25
- }
26
- }
27
- var init_index = __esm({
28
- "style-helper:index.js"() {
29
- "use strict";
30
- }
31
- });
32
5
 
33
6
  // src/runtime/zoom.scss
34
- var zoom_exports = {};
35
- var init_zoom = __esm({
36
- "src/runtime/zoom.scss"() {
37
- "use strict";
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: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)}');
7
+ var require_zoom = __commonJS({
8
+ "src/runtime/zoom.scss"(exports, module) {
9
+ module.exports = {};
40
10
  }
41
11
  });
42
12
 
@@ -335,7 +305,7 @@ function bindZoomOptions(element, options) {
335
305
  setZoomable(element, "1");
336
306
  if (_options.inlineStyle !== false && !styleInjected) {
337
307
  styleInjected = true;
338
- init_zoom();
308
+ require_zoom();
339
309
  }
340
310
  for (const key of Object.keys(_options)) {
341
311
  set(element.dataset, key, _options[key]);
@@ -390,7 +360,7 @@ async function next() {
390
360
  svg = result.svg;
391
361
  bindFunctions = result.bindFunctions;
392
362
  } catch {
393
- return;
363
+ continue;
394
364
  }
395
365
  let svgWithNonce = svg;
396
366
  if (nonce) {
@@ -417,7 +387,8 @@ async function next() {
417
387
  render: mermaid.render,
418
388
  parseError: mermaid.parseError,
419
389
  parse: mermaid.parse,
420
- setParseErrorHandler: mermaid.setParseErrorHandler
390
+ setParseErrorHandler: mermaid.setParseErrorHandler,
391
+ registerLayoutLoaders: mermaid.registerLayoutLoaders
421
392
  });
422
393
  return next();
423
394
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 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: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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",
3
+ "sources": ["../../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": [":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[data-mermaid-zoom-enabled=\"1\"] > svg {\n outline: solid 1px var(--mermaid-zoom-control-color);\n}\n\n@keyframes mermaid-zoom-menu-controls-fadein {\n from {\n transform: translateY(-100%);\n }\n to {\n transform: translateY(0);\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.mermaid-zoom-menu-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.mermaid-zoom-menu-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.mermaid-zoom-menu-control:hover {\n transform: scale(1.3);\n}\n.mermaid-zoom-menu-control:active {\n transform: scale(1);\n}\n.mermaid-zoom-menu-control[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.mermaid-zoom-menu-control[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.mermaid-zoom-menu-control[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.mermaid-zoom-menu-control[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.mermaid-zoom-menu-control[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.mermaid-zoom-menu-control[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.mermaid-zoom-menu-control[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.mermaid-zoom-menu-control svg {\n color: var(--mermaid-zoom-control-color);\n width: var(--mermaid-zoom-control-size);\n height: var(--mermaid-zoom-control-size);\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbWVybWFpZC1leHRlbnNpb24vbWVybWFpZC1leHRlbnNpb24vc3JjL3J1bnRpbWUiLCJzb3VyY2VzIjpbInpvb20uc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTs7QUFFQTtFQUNJOzs7QUFJUjtFQUNJO0lBQ0k7O0VBR0o7SUFDSTs7O0FBSVI7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNJOztBQUdKO0VBQ0k7O0FBR0o7RUFDSTtFQUNBOztBQUtKO0VBQ0k7RUFDQTs7QUFHSjtFQUNJO0VBQ0E7O0FBR0o7RUFDSTtFQUNBOztBQUdKO0VBQ0k7RUFDQTs7QUFHSjtFQUNJO0VBQ0E7O0FBS0o7RUFDSTtFQUNBOztBQUtKO0VBQ0k7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiOnJvb3Qge1xuICAgIC0tbWVybWFpZC16b29tLWNvbnRyb2wtc2l6ZTogMjBweDtcbiAgICAtLW1lcm1haWQtem9vbS1jb250cm9sLXBhZDogNXB4O1xuICAgIC0tbWVybWFpZC16b29tLWNvbnRyb2wtY29sb3I6ICMwMDA7XG59XG5cbltkYXRhLW1lcm1haWQtem9vbS1lbmFibGVkPScxJ10ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICYgPiBzdmcge1xuICAgICAgICBvdXRsaW5lOiBzb2xpZCAxcHggdmFyKC0tbWVybWFpZC16b29tLWNvbnRyb2wtY29sb3IpO1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyBtZXJtYWlkLXpvb20tbWVudS1jb250cm9scy1mYWRlaW4ge1xuICAgIGZyb20ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpO1xuICAgIH1cblxuICAgIHRvIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIH1cbn1cblxuLm1lcm1haWQtem9vbS1tZW51IHtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHRvcDogMDtcbiAgICBoZWlnaHQ6IGNhbGModmFyKC0tbWVybWFpZC16b29tLWNvbnRyb2wtc2l6ZSkgKiAzICsgdmFyKC0tbWVybWFpZC16b29tLWNvbnRyb2wtcGFkKSAqIDQpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmLWNvbnRyb2xzIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tbWVybWFpZC16b29tLWNvbnRyb2wtc2l6ZSkgKiAzICsgdmFyKC0tbWVybWFpZC16b29tLWNvbnRyb2wtcGFkKSAqIDQpO1xuICAgICAgICB3aWR0aDogY2FsYyh2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1zaXplKSAqIDMgKyB2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1wYWQpICogNCk7XG4gICAgICAgIGFuaW1hdGlvbjogbWVybWFpZC16b29tLW1lbnUtY29udHJvbHMtZmFkZWluIGVhc2UgMC4ycztcbiAgICB9XG5cbiAgICAmLWNvbnRyb2wge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHdpZHRoOiB2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1zaXplKTtcbiAgICAgICAgaGVpZ2h0OiB2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1zaXplKTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4zKTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIH1cblxuICAgICAgICAmW2RhdGEtYWN0aW9uPSd1cCddIHtcbiAgICAgICAgICAgIHJpZ2h0OiBjYWxjKHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXNpemUpICsgdmFyKC0tbWVybWFpZC16b29tLWNvbnRyb2wtcGFkKSAqIDIpO1xuICAgICAgICAgICAgYm90dG9tOiBjYWxjKFxuICAgICAgICAgICAgICAgIHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXNpemUpICogMiArIHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXBhZCkgKiAzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgJltkYXRhLWFjdGlvbj0nZG93biddIHtcbiAgICAgICAgICAgIHJpZ2h0OiBjYWxjKHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXNpemUpICsgdmFyKC0tbWVybWFpZC16b29tLWNvbnRyb2wtcGFkKSAqIDIpO1xuICAgICAgICAgICAgYm90dG9tOiB2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1wYWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgJltkYXRhLWFjdGlvbj0ncmVzZXQnXSB7XG4gICAgICAgICAgICByaWdodDogY2FsYyh2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1zaXplKSArIHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXBhZCkgKiAyKTtcbiAgICAgICAgICAgIGJvdHRvbTogY2FsYyh2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1zaXplKSArIHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXBhZCkgKiAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgICZbZGF0YS1hY3Rpb249J2xlZnQnXSB7XG4gICAgICAgICAgICByaWdodDogY2FsYyh2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1zaXplKSAqIDIgKyB2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1wYWQpICogMyk7XG4gICAgICAgICAgICBib3R0b206IGNhbGModmFyKC0tbWVybWFpZC16b29tLWNvbnRyb2wtc2l6ZSkgKyB2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1wYWQpICogMik7XG4gICAgICAgIH1cblxuICAgICAgICAmW2RhdGEtYWN0aW9uPSdyaWdodCddIHtcbiAgICAgICAgICAgIHJpZ2h0OiB2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1wYWQpO1xuICAgICAgICAgICAgYm90dG9tOiBjYWxjKHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXNpemUpICsgdmFyKC0tbWVybWFpZC16b29tLWNvbnRyb2wtcGFkKSAqIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgJltkYXRhLWFjdGlvbj0nem9vbW91dCddIHtcbiAgICAgICAgICAgIHJpZ2h0OiBjYWxjKHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXNpemUpICogMiArIHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXBhZCkgKiAzKTtcbiAgICAgICAgICAgIGJvdHRvbTogY2FsYyhcbiAgICAgICAgICAgICAgICB2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1zaXplKSAqIDIgKyB2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1wYWQpICogM1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgICZbZGF0YS1hY3Rpb249J3pvb21pbiddIHtcbiAgICAgICAgICAgIHJpZ2h0OiB2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1wYWQpO1xuICAgICAgICAgICAgYm90dG9tOiBjYWxjKFxuICAgICAgICAgICAgICAgIHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXNpemUpICogMiArIHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXBhZCkgKiAzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgc3ZnIHtcbiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1tZXJtYWlkLXpvb20tY29udHJvbC1jb2xvcik7XG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tbWVybWFpZC16b29tLWNvbnRyb2wtc2l6ZSk7XG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLW1lcm1haWQtem9vbS1jb250cm9sLXNpemUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19 */", "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 continue;\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 registerLayoutLoaders: mermaid.registerLayoutLoaders,\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
  }
package/build/types.d.ts CHANGED
@@ -16,7 +16,9 @@ export type ExposedAPI = {
16
16
  parseError: typeof mermaid.parseError;
17
17
  parse: typeof mermaid.parse;
18
18
  setParseErrorHandler: typeof mermaid.setParseErrorHandler;
19
+ registerLayoutLoaders: typeof mermaid.registerLayoutLoaders;
19
20
  };
21
+ export type LayoutLoaders = Parameters<typeof mermaid.registerLayoutLoaders>[0];
20
22
  export type ZoomOptions = {
21
23
  /**
22
24
  * Maximum zoom scale.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diplodoc/mermaid-extension",
3
- "version": "1.4.2",
3
+ "version": "2.1.0",
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",
@@ -44,10 +44,13 @@
44
44
  },
45
45
  "scripts": {
46
46
  "build": "run-p build:*",
47
- "build:js": "./esbuild/build.js",
48
- "build:declarations": "tsc --emitDeclarationOnly --outDir ./build",
49
- "prepublishOnly": "npm run build",
50
- "test": "exit 0",
47
+ "build:js": "node ./esbuild/build.js",
48
+ "build:declarations": "tsc --project tsconfig.publish.json --emitDeclarationOnly --outDir ./build",
49
+ "prepublishOnly": "npm run typecheck && npm run lint && npm test && npm run build",
50
+ "test": "vitest run",
51
+ "test:watch": "vitest",
52
+ "test:coverage": "vitest run --coverage",
53
+ "typecheck": "tsc --noEmit",
51
54
  "lint": "lint update && lint",
52
55
  "lint:fix": "lint update && lint fix",
53
56
  "pre-commit": "lint update && lint-staged",
@@ -72,20 +75,19 @@
72
75
  }
73
76
  },
74
77
  "devDependencies": {
75
- "@diplodoc/lint": "^1.1.3",
78
+ "@diplodoc/lint": "^1.14.2",
76
79
  "@diplodoc/tsconfig": "^1.0.2",
77
80
  "@types/d3": "^7.4.0",
78
81
  "@types/markdown-it": "^13.0.9",
79
82
  "@types/node": "^22.19.7",
80
83
  "@types/react": "^18.0.35",
81
- "esbuild": "^0.27.2",
82
- "esbuild-inline-sass": "^0.4.1",
83
- "esbuild-sass-plugin": "^3.3.1",
84
- "jest": "^29.5.0",
84
+ "@vitest/coverage-v8": "^3.2.4",
85
+ "jsdom": "^28.1.0",
85
86
  "markdown-it": "^13.0.2",
86
87
  "npm-run-all": "^4.1.5",
87
88
  "react": "^18.2.0",
88
- "typescript": "^5.0.2"
89
+ "typescript": "^5.0.2",
90
+ "vitest": "^3.2.4"
89
91
  },
90
92
  "dependencies": {
91
93
  "@gravity-ui/icons": "^2.8.1",