@diplodoc/mermaid-extension 1.3.6 → 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.
@@ -1,3 +1,45 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ 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;
7
+ };
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
+
33
+ // 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)}');
40
+ }
41
+ });
42
+
1
43
  // src/runtime/index.ts
2
44
  import mermaid from "mermaid";
3
45
  import dedent from "ts-dedent";
@@ -9,25 +51,25 @@ import * as d32 from "d3";
9
51
  import * as d3 from "d3";
10
52
 
11
53
  // node_modules/@gravity-ui/icons/svgs/magnifier-plus.svg
12
- 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>';
13
55
 
14
56
  // node_modules/@gravity-ui/icons/svgs/magnifier-minus.svg
15
- 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>';
16
58
 
17
59
  // node_modules/@gravity-ui/icons/svgs/caret-up.svg
18
- 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>';
19
61
 
20
62
  // node_modules/@gravity-ui/icons/svgs/caret-down.svg
21
- 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>';
22
64
 
23
65
  // node_modules/@gravity-ui/icons/svgs/caret-left.svg
24
- 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>';
25
67
 
26
68
  // node_modules/@gravity-ui/icons/svgs/caret-right.svg
27
- 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>';
28
70
 
29
71
  // node_modules/@gravity-ui/icons/svgs/circle.svg
30
- 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>';
31
73
 
32
74
  // src/runtime/zoom-control.ts
33
75
  var ZOOM_SPEED = 1;
@@ -173,19 +215,6 @@ var attachMenu = (container, $svg, $inner, zoom2) => {
173
215
  };
174
216
  };
175
217
 
176
- // style-helper:index.js
177
- function inject_style(text) {
178
- if (typeof document !== "undefined") {
179
- var style = document.createElement("style");
180
- var node = document.createTextNode(text);
181
- style.appendChild(node);
182
- document.head.appendChild(style);
183
- }
184
- }
185
-
186
- // src/runtime/zoom.scss
187
- 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)}');
188
-
189
218
  // src/runtime/zoom.ts
190
219
  var DATA_MERMAID_ZOOM = "mermaidZoom";
191
220
  function datakey(key) {
@@ -287,6 +316,7 @@ function getZoomOptions(element) {
287
316
  bindKeys: get(element.dataset, "bindKeys") === "true"
288
317
  };
289
318
  }
319
+ var styleInjected = false;
290
320
  function bindZoomOptions(element, options) {
291
321
  const _options = Object.assign(
292
322
  {
@@ -303,6 +333,10 @@ function bindZoomOptions(element, options) {
303
333
  return;
304
334
  }
305
335
  setZoomable(element, "1");
336
+ if (_options.inlineStyle !== false && !styleInjected) {
337
+ styleInjected = true;
338
+ init_zoom();
339
+ }
306
340
  for (const key of Object.keys(_options)) {
307
341
  set(element.dataset, key, _options[key]);
308
342
  }
@@ -337,7 +371,7 @@ async function next() {
337
371
  const callback = queue.shift();
338
372
  if (callback) {
339
373
  await callback({
340
- run: async ({ querySelector = ".mermaid", nodes } = {}) => {
374
+ run: async ({ querySelector = ".mermaid", nodes, nonce } = {}) => {
341
375
  const nodesList = Array.from(
342
376
  nodes || document.querySelectorAll(querySelector)
343
377
  );
@@ -350,8 +384,19 @@ async function next() {
350
384
  dedentedContent += " ";
351
385
  }
352
386
  const text = dedentedContent.trimStart().replace(/<br\s*\/?>/gi, "<br/>");
353
- const { svg, bindFunctions } = await mermaid.render(id, text, element);
354
- element.innerHTML = svg;
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
+ }
395
+ let svgWithNonce = svg;
396
+ if (nonce) {
397
+ svgWithNonce = svgWithNonce.replace(/<style>/g, `<style nonce="${nonce}">`);
398
+ }
399
+ element.innerHTML = svgWithNonce;
355
400
  if (bindFunctions) {
356
401
  bindFunctions(element);
357
402
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../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", "style-helper:index.js", "../../src/runtime/zoom.scss"],
4
- "sourcesContent": ["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} = {}) => {\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 element.innerHTML = svg;\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';\nimport './zoom.scss';\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\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\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>", "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)}\")"],
5
- "mappings": "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",
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": ";;;;;;;;;;;;;;;;;;AAAO,SAAS,aAAa,MAAM;AACjC,MAAI,OAAO,aAAa,aAAa;AACnC,QAAI,QAAQ,SAAS,cAAc,OAAO;AAC1C,QAAI,OAAO,SAAS,eAAe,IAAI;AACvC,UAAM,YAAY,IAAI;AACtB,aAAS,KAAK,YAAY,KAAK;AAAA,EACjC;AACF;AAPA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAAa,giFAAoiF;AAAA;AAAA;;;ACEjjF,OAAO,aAAa;AACpB,OAAO,YAAY;;;ACFnB,YAAYA,SAAQ;;;ACFpB,YAAY,QAAQ;;;ACApB;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;ACAA;;;APSA,IAAM,aAAa;AACnB,IAAM,aAAa;AACnB,IAAM,iBAAiB;AACvB,IAAM,WAAoC;AAAA,EACtC,IAAI,CAAC,WAAW,kBAAa,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,EACrD,MAAM,CAAC,aAAa,oBAAe,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAAA,EAC5D,MAAM,CAAC,aAAa,oBAAe,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,EAC3D,OAAO,CAAC,cAAc,qBAAgB,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,EAC/D,QAAQ,CAAC,WAAW,wBAAmB,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,EAC/D,SAAS,CAAC,YAAY,yBAAoB,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;AAAA,EACnE,OAAO,CAAC,SAAS,gBAAY,CAAC,QAAQ,GAAG,GAAM,eAAY;AAC/D;AAMA,IAAM,MAAM,MAAM,IAAI,QAAQ,CAAC,YAAY,sBAAsB,OAAO,CAAC;AACzE,IAAM,MAAM,CAAC,IAAc,OAAiB,GAAG,IAAI,CAAC,MAAM,UAAU,OAAO,GAAG,KAAK,CAAC;AAEpF,IAAM,cAAc,oBAAI,QAAQ;AAChC,IAAM,aAAa,CAAC,MAAoB,QAAoBC,UAAe;AACvE,MAAI,YAAY,IAAIA,KAAI,GAAG;AACvB,WAAO,YAAY,IAAIA,KAAI;AAAA,EAC/B;AAEA,QAAM,UAAU,oBAAI,IAAY;AAChC,MAAI,OAA6B;AAEjC,QAAM,WAAW,YAAY;AACzB,WAAO,QAAQ,MAAM;AACjB,YAAM,IAAI,KAAK,IAAI;AAEnB,UAAI,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;AAC3B,iBAAW,UAAU,SAAS;AAC1B,cAAM,IAAI,SAAS,MAAM,EAAE,CAAC;AAC5B,YAAI,MAAS,iBAAc;AACvB,cAAI;AACA,kBAAM,KAAK,WAAW,EAAE,KAAKA,MAAK,WAAc,eAAY,EAAE,IAAI;AAAA,UACtE,QAAQ;AAAA,UAAC;AAAA,QACb,OAAO;AACH,WAAC,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,GAAG,CAAc;AAAA,QACnD;AAAA,MACJ;AAEA,YAAM,IAAI;AAEV,YAAM,EAAC,EAAC,IAAO,iBAAc,OAAO,KAAK,CAAY;AACrD,YAAM,MAAM,KAAK,IAAI,IAAI,KAAK;AAE9B,OAAC,IAAI,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,YAAY,KAAK,KAAK,YAAY,KAAK,KAAK,UAAU;AAEhF,UAAI,MAAM,IAAI;AACV,QAAAA,MAAK,YAAY,MAAM,IAAI,EAAE;AAAA,MACjC;AAEA,UAAI,IAAI;AACJ,QAAAA,MAAK,QAAQ,MAAM,IAAI,EAAE;AAAA,MAC7B;AAAA,IACJ;AAAA,EACJ;AAEA,cAAY,IAAIA,OAAM;AAAA,IAClB,IAAI,QAAgB;AAChB,cAAQ,IAAI,MAAM;AAElB,UAAI,CAAC,MAAM;AACP,eAAO,SAAS,EAAE,QAAQ,MAAM;AAC5B,iBAAO;AAAA,QACX,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,IAEA,OAAO,QAAgB;AACnB,cAAQ,OAAO,MAAM;AAAA,IACzB;AAAA,EACJ,CAAC;AAED,SAAO,YAAY,IAAIA,KAAI;AAC/B;AAEO,IAAM,iBAAiB,CAAC,MAAoB,QAAoBA,UAAe;AAClF,QAAM,KAAK,WAAW,MAAM,QAAQA,KAAI;AAExC,QAAM,OAA+B,OAAO,KAAK,QAAQ,EAAE;AAAA,IACvD,CAAC,KAAK,QAAQ;AACV,YAAM,UAAU,SAAS,GAAG;AAC5B,YAAM,OAAO,QAAQ,CAAC,EAAE,CAAC;AAEzB,UAAI,IAAI,IAAI;AAEZ,aAAO;AAAA,IACX;AAAA,IACA,CAAC;AAAA,EACL;AAEA,QAAM,gBAAgB,CAAC,UAAyB;AAC5C,QAAI,MAAM,UAAU,MAAM,WAAW,MAAM,YAAY,MAAM,SAAS;AAClE;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,QAAI,QAAQ;AACR,YAAM,eAAe;AACrB,SAAG,IAAI,MAAM;AAAA,IACjB;AAAA,EACJ;AAEA,QAAM,cAAc,CAAC,UAAyB;AAC1C,UAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,QAAI,QAAQ;AACR,YAAM,eAAe;AACrB,SAAG,OAAO,MAAM;AAAA,IACpB;AAAA,EACJ;AAEA,WAAS,iBAAiB,WAAW,aAAa;AAClD,WAAS,iBAAiB,SAAS,WAAW;AAE9C,SAAO,MAAM;AACT,aAAS,oBAAoB,WAAW,aAAa;AACrD,aAAS,oBAAoB,SAAS,WAAW;AAAA,EACrD;AACJ;AAEO,IAAM,aAAa,CACtB,WACA,MACA,QACAA,UACC;AACD,QAAM,KAAK,WAAW,MAAM,QAAQA,KAAI;AAExC,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,UAAU,OAAO,KAAK,QAAQ,EAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,EACpC;AAAA,IACG,CAAC,KAAK,CAAC,MAAM,OAAO,IAAI,MACpB,MACA;AAAA,0BACU,cAAc,YAAY,KAAK,kBAAkB,IAAI;AAAA,kBAC7D,IAAI;AAAA;AAAA,IAEV;AAAA,EACJ;AAEJ,QAAM,YAAY;AAAA;AAAA;AAAA,kBAGJ,OAAO;AAAA;AAAA;AAAA;AAKrB,QAAM,OAAO,MAAM;AAEnB,MAAI,gBAA+B;AACnC,QAAM,kBAAkB,MAAM;AAC1B,OAAG,OAAO,aAAa;AACvB,oBAAgB;AAChB,aAAS,oBAAoB,WAAW,iBAAiB,IAAI;AAAA,EACjE;AAEA,QAAM,qBAAqB,OAAO,UAAsB;AAEpD,QAAI,MAAM,SAAS,GAAG;AAClB,YAAM,eAAe;AAAA,IACzB;AAEA,UAAM,UAAW,MAAM,OAAuB,QAAQ,4BAA4B;AAElF,QAAI,CAAC,SAAS;AACV;AAAA,IACJ;AAEA,oBAAiB,QAAwB,QAAQ;AACjD,OAAG,IAAI,aAAuB;AAC9B,aAAS,iBAAiB,WAAW,iBAAiB,IAAI;AAAA,EAC9D;AAEA,OAAK,iBAAiB,aAAa,kBAAkB;AACrD,YAAU,YAAY,IAAI;AAE1B,SAAO,MAAM;AACT,oBAAgB;AAChB,cAAU,YAAY,IAAI;AAC1B,SAAK,oBAAoB,aAAa,kBAAkB;AAAA,EAC5D;AACJ;;;AD/LA,IAAM,oBAAoB;AAE1B,SAAS,QAAQ,KAAa;AAC1B,SAAO,IAAI,QAAQ,QAAQ,CAAC,GAAG,OAAO,GAAG,YAAY,CAAC;AAC1D;AAEA,SAAS,IAAI,SAAuB,KAAa,OAAgB;AAC7D,UAAQ,oBAAoB,QAAQ,GAAG,CAAC,IAAI,OAAO,KAAK;AAC5D;AAEA,SAAS,IAAI,SAAuB,KAAa;AAC7C,SAAO,QAAQ,oBAAoB,QAAQ,GAAG,CAAC;AACnD;AAEA,IAAM,oBAAoB,CAAC,QAA8B;AACrD,QAAM,cAAc,SAAS,cAAc,KAAK;AAChD,QAAM,EAAC,OAAO,OAAM,IAAI,IAAI,sBAAsB;AAClD,QAAM,QAAQ,2BAA2B,KAAK,eAAe,MAAM;AAEnE,cAAY,YAAY,gDAAgD,KAAK;AAE7E,SAAO,YAAY;AACvB;AAEA,IAAM,aAAa,CAAC,SAAsB,YAAyB;AAC/D,QAAM,MAAM,QAAQ,cAAc,KAAK;AACvC,QAAM,EAAC,aAAY,IAAI;AACvB,QAAM,UAAsB,CAAC;AAE7B,QAAM,OAAU,WAA+B,GAAG;AAElD,MAAI,CAAC,IAAI,cAAc,cAAc,GAAG;AACpC,UAAM,QAAQ,SAAS,gBAAgB,8BAA8B,GAAG;AACxE,UAAM,aAAa,SAAS,YAAY;AACxC,UAAM,KAAK,IAAI,UAAU,EAAE,QAAQ,CAAC,UAAU;AAC1C,YAAM,YAAY,KAAK;AAAA,IAC3B,CAAC;AACD,QAAI,YAAY,KAAK;AAAA,EACzB;AAEA,QAAM,SAAS,KAAK,OAAoB,cAAc;AACtD,QAAM,cAAc,kBAAkB,GAAG;AAEzC,QAAMC,QACD,SAA6B,EAC7B,GAAG,QAAQ,CAAC,UAAqB,OAAO,KAAK,aAAa,OAAO,MAAM,SAAS,CAAC,CAAC,EAClF,YAAY,CAAC,GAAG,YAAY,CAAC;AAElC,OAAK,KAAKA,KAAI;AACd,UAAQ,KAAK,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC;AAEzC,MAAI,QAAQ,aAAa;AACrB,YAAQ,KAAK,MAAM;AACf,WAAK,KAAKA,MAAK,WAAc,gBAAY;AAAA,IAC7C,CAAC;AAAA,EACL;AAEA,MAAI,QAAQ,UAAU;AAClB,YAAQ,KAAK,WAAW,aAAa,MAAM,QAAQA,KAAI,CAAC;AAAA,EAC5D;AAEA,MAAI,QAAQ,UAAU;AAClB,YAAQ,KAAK,eAAe,MAAM,QAAQA,KAAI,CAAC;AAAA,EACnD;AAEA,UAAQ,YAAY,WAAW;AAC/B,UAAQ,KAAK,MAAM,QAAQ,YAAY,WAAW,CAAC;AAEnD,SAAO,MAAM,QAAQ,QAAQ,CAAC,WAAW,OAAO,CAAC;AACrD;AAEA,SAAS,YAAY,SAAsB;AACvC,SAAO,QAAQ,QAAQ,iCAAiC;AAC5D;AAEA,SAAS,eAAe,SAAsB;AAC1C,SAAO,QAAQ,QAAQ,uCAAuC;AAClE;AAEA,SAAS,aAAa,SAAsB;AACxC,SAAO,QAAQ,QAAQ,uCAAuC;AAClE;AAEA,SAAS,qBAAqB,SAAsB;AAChD,SAAO,QAAQ;AAAA,IACX;AAAA,EACJ;AACJ;AAEA,SAAS,YAAY,SAAsB,OAAe;AACtD,MAAI,QAAQ,SAAS,WAAW,KAAK;AACzC;AAEA,SAAS,cAAc,SAAsB;AACzC,SAAO,IAAI,QAAQ,SAAS,SAAS,MAAM;AAC/C;AAEA,SAAS,eAAe,SAAsB,OAAe;AACzD,MAAI,QAAQ,SAAS,WAAW,KAAK;AACzC;AAEO,SAAS,aAAa,OAAc;AACvC,QAAM,UAAU,YAAY,MAAM,MAAqB;AACvD,QAAM,MAAM,eAAe,MAAM,MAAqB;AAEtD,MAAI,CAAC,WAAW,CAAC,OAAO,cAAc,OAAsB,GAAG;AAC3D;AAAA,EACJ;AAEA,iBAAe,SAAS,GAAG;AAE3B,QAAM,UAAU,eAAe,OAAO;AACtC,QAAM,cAAc,WAAW,SAAS,OAAO;AAC/C,QAAM,eAAe,CAACC,WAAiB;AACnC,UAAM,SAASA,OAAM;AACrB,QAAI,CAAC,aAAa,MAAM,KAAK,CAAC,qBAAqB,MAAM,GAAG;AACxD,kBAAY;AACZ,qBAAe,SAAS,GAAG;AAC3B,eAAS,oBAAoB,aAAa,cAAc,IAAI;AAAA,IAChE;AAAA,EACJ;AAEA,WAAS,iBAAiB,aAAa,cAAc,IAAI;AAC7D;AAEA,SAAS,eAAe,SAAmC;AACvD,SAAO;AAAA,IACH,cAAc,OAAO,IAAI,QAAQ,SAAS,cAAc,CAAC;AAAA,IACzD,aAAa,IAAI,QAAQ,SAAS,aAAa,MAAM;AAAA,IACrD,UAAU,IAAI,QAAQ,SAAS,UAAU,MAAM;AAAA,IAC/C,UAAU,IAAI,QAAQ,SAAS,UAAU,MAAM;AAAA,EACnD;AACJ;AAEA,IAAI,gBAAgB;AACb,SAAS,gBAAgB,SAAsB,SAAyC;AAC3F,QAAM,WAAwB,OAAO;AAAA,IACjC;AAAA,MACI,cAAc;AAAA,MACd,aAAa;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,IACd;AAAA,IACA;AAAA,EACJ;AAEA,MAAI,YAAY,OAAO;AACnB,gBAAY,SAAS,GAAG;AACxB,mBAAe,SAAS,GAAG;AAC3B;AAAA,EACJ;AAEA,cAAY,SAAS,GAAG;AACxB,MAAI,SAAS,gBAAgB,SAAS,CAAC,eAAe;AAClD,oBAAgB;AAChB;AAAA,EACJ;AAEA,aAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AACrC,QAAI,QAAQ,SAAS,KAAK,SAAS,GAA4B,CAAC;AAAA,EACpE;AACJ;;;AD/JA,IAAM,yBAAwC;AAAA,EAC1C,aAAa;AAAA;AAAA,EAEb,UAAU,EAAC,aAAa,MAAK;AAAA,EAC7B,QAAQ,EAAC,aAAa,MAAK;AAAA,EAC3B,OAAO;AACX;AAEA,QAAQ,WAAW,sBAAsB;AAEzC,IAAM,QAAS,OAAO,eAAe,OAAO,gBAAgB,CAAC;AAC7D,IAAM,QAAQ,MAAM,OAAO,GAAG,MAAM,MAAM;AAE1C,MAAM,OAAO,YAAa,MAAM;AAC5B,OAAK,QAAQ,CAAC,aAAa;AACvB,UAAM,KAAK,QAAQ;AACnB,YAAQ;AAAA,EACZ,CAAC;AAED,SAAO,MAAM;AACjB;AAEA,IAAI,aAAa;AAEjB,SAAS,UAAU;AACf,MAAI,CAAC,YAAY;AACb,SAAK;AAAA,EACT;AACJ;AAEA,eAAe,OAAsB;AACjC,eAAa;AAEb,QAAM,WAAW,MAAM,MAAM;AAC7B,MAAI,UAAU;AACV,UAAM,SAAS;AAAA,MACX,KAAK,OAAO,EAAC,gBAAgB,YAAY,OAAO,MAAK,IAAI,CAAC,MAAM;AAC5D,cAAM,YAAuB,MAAM;AAAA,UAC/B,SAAS,SAAS,iBAAiB,aAAa;AAAA,QACpD;AACA,cAAM,EAAC,MAAAC,QAAO,MAAK,IAAI,QAAQ,WAAW,UAAU;AAEpD,mBAAW,WAAW,WAAW;AAC7B,gBAAM,KAAK,WAAW,KAAK,IAAI,CAAC;AAChC,gBAAM,UAAU,mBAAmB,QAAQ,aAAa,cAAc,KAAK,EAAE;AAC7E,cAAI,kBAAkB,OAAO,OAAO;AAEpC,cAAI,QAAQ,QAAQ,QAAQ,EAAE,EAAE,SAAS,GAAG,GAAG;AAC3C,+BAAmB;AAAA,UACvB;AACA,gBAAM,OAAO,gBAAgB,UAAU,EAAE,QAAQ,gBAAgB,OAAO;AAExE,cAAI,KAAa;AAEjB,cAAI;AACA,kBAAM,SAAS,MAAM,QAAQ,OAAO,IAAI,MAAM,OAAO;AACrD,kBAAM,OAAO;AACb,4BAAgB,OAAO;AAAA,UAC3B,QAAQ;AACJ;AAAA,UACJ;AAEA,cAAI,eAAe;AACnB,cAAI,OAAO;AACP,2BAAe,aAAa,QAAQ,YAAY,iBAAiB,KAAK,IAAI;AAAA,UAC9E;AACA,kBAAQ,YAAY;AAEpB,cAAI,eAAe;AACf,0BAAc,OAAO;AAAA,UACzB;AAEA,0BAAgB,SAAwBA,KAAI;AAAA,QAChD;AAAA,MACJ;AAAA,MACA,YAAY,CAAC,WAAW;AACpB,gBAAQ,WAAW;AAAA,UACf,GAAG;AAAA,UACH,GAAI;AAAA,QACR,CAAC;AAED,cAAM,EAAC,MAAAA,MAAI,IAAI,QAAQ,WAAW,UAAU;AAE5C,iBAAS,oBAAoB,SAAS,YAAY;AAClD,YAAIA,OAAM;AACN,mBAAS,iBAAiB,SAAS,YAAY;AAAA,QACnD;AAAA,MACJ;AAAA,MACA,QAAQ,QAAQ;AAAA,MAChB,YAAY,QAAQ;AAAA,MACpB,OAAO,QAAQ;AAAA,MACf,sBAAsB,QAAQ;AAAA,IAClC,CAAe;AAEf,WAAO,KAAK;AAAA,EAChB;AAEA,eAAa;AACjB;AAEA,QAAQ;",
6
6
  "names": ["d3", "zoom", "zoom", "event", "zoom"]
7
7
  }
@@ -1,4 +1,3 @@
1
1
  import type { ZoomOptions } from '../types';
2
- import './zoom.scss';
3
2
  export declare function zoomBehavior(event: Event): void;
4
3
  export declare function bindZoomOptions(element: HTMLElement, options: Partial<ZoomOptions> | boolean): void;
@@ -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=zoom.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
+ }
package/build/types.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import type mermaid from 'mermaid';
2
2
  import type { MermaidConfig, RunOptions as MermaidRunOptions } from 'mermaid';
3
- export type RunOptions = Pick<MermaidRunOptions, 'querySelector' | 'nodes'>;
3
+ export type RunOptions = Pick<MermaidRunOptions, 'querySelector' | 'nodes'> & {
4
+ nonce?: string;
5
+ };
4
6
  export type InitConfig = MermaidConfig & {
5
7
  /**
6
8
  * Enable diagram *zoom and explore* feature. Can be boolean or object with inner props.
@@ -37,4 +39,5 @@ export type ZoomOptions = {
37
39
  * @default false
38
40
  */
39
41
  bindKeys: boolean;
42
+ inlineStyle?: boolean;
40
43
  };
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "@diplodoc/mermaid-extension",
3
- "version": "1.3.6",
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
  ".": {
@@ -22,7 +26,8 @@
22
26
  "default": "./build/runtime/index.js"
23
27
  },
24
28
  "./react": "./build/react/index.js",
25
- "./hooks": "./build/react/index.js"
29
+ "./hooks": "./build/react/index.js",
30
+ "./styles/*": "./build/styles/*"
26
31
  },
27
32
  "typesVersions": {
28
33
  "*": {
@@ -68,14 +73,14 @@
68
73
  },
69
74
  "devDependencies": {
70
75
  "@diplodoc/lint": "^1.1.3",
71
- "@diplodoc/transform": "^4.7.2",
72
76
  "@diplodoc/tsconfig": "^1.0.2",
73
77
  "@types/d3": "^7.4.0",
74
78
  "@types/markdown-it": "^13.0.9",
75
- "@types/node": "^20.3.2",
79
+ "@types/node": "^22.19.7",
76
80
  "@types/react": "^18.0.35",
77
- "esbuild": "^0.23.1",
81
+ "esbuild": "^0.27.2",
78
82
  "esbuild-inline-sass": "^0.4.1",
83
+ "esbuild-sass-plugin": "^3.3.1",
79
84
  "jest": "^29.5.0",
80
85
  "markdown-it": "^13.0.2",
81
86
  "npm-run-all": "^4.1.5",