diff --git a/.changeset/bright-ads-exist.md b/.changeset/bright-ads-exist.md new file mode 100644 index 000000000..ef2f76f4c --- /dev/null +++ b/.changeset/bright-ads-exist.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +Fixes for consistent edge id creation & handling edge cases for animate edge feature diff --git a/.changeset/chatty-elephants-warn.md b/.changeset/chatty-elephants-warn.md new file mode 100644 index 000000000..225047ece --- /dev/null +++ b/.changeset/chatty-elephants-warn.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +Fix for issue #6195 - allowing @ signs inside node labels diff --git a/.changeset/chilly-years-cheat.md b/.changeset/chilly-years-cheat.md new file mode 100644 index 000000000..e665af75b --- /dev/null +++ b/.changeset/chilly-years-cheat.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +fix: `mermaidAPI.getDiagramFromText()` now returns a new different db for each class diagram diff --git a/.changeset/dull-tips-cough.md b/.changeset/dull-tips-cough.md new file mode 100644 index 000000000..1f5179417 --- /dev/null +++ b/.changeset/dull-tips-cough.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +fix: revert state db to resolve getData returning empty nodes and edges diff --git a/.changeset/great-ghosts-rule.md b/.changeset/great-ghosts-rule.md new file mode 100644 index 000000000..f11c6e2a9 --- /dev/null +++ b/.changeset/great-ghosts-rule.md @@ -0,0 +1,8 @@ +--- +'mermaid': minor +--- + +Flowchart new syntax for node metadata bugs + +- Incorrect label mapping for nodes when using `&` +- Syntax error when `}` with trailing spaces before new line diff --git a/.changeset/many-brooms-promise.md b/.changeset/many-brooms-promise.md new file mode 100644 index 000000000..fec442b34 --- /dev/null +++ b/.changeset/many-brooms-promise.md @@ -0,0 +1,5 @@ +--- +'mermaid': minor +--- + +Adding support for animation of flowchart edges diff --git a/.changeset/new-kiwis-listen.md b/.changeset/new-kiwis-listen.md new file mode 100644 index 000000000..24306573c --- /dev/null +++ b/.changeset/new-kiwis-listen.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +fix: `mermaidAPI.getDiagramFromText()` now returns a new different db for each flowchart diff --git a/.changeset/stupid-dots-do.md b/.changeset/stupid-dots-do.md new file mode 100644 index 000000000..594fa9536 --- /dev/null +++ b/.changeset/stupid-dots-do.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +fix: Gantt, Sankey and User Journey diagram are now able to pick font-family from mermaid config. diff --git a/.changeset/witty-crews-smell.md b/.changeset/witty-crews-smell.md new file mode 100644 index 000000000..4213083f2 --- /dev/null +++ b/.changeset/witty-crews-smell.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +`mermaidAPI.getDiagramFromText()` now returns a new different db for each state diagram diff --git a/.cspell/libraries.txt b/.cspell/libraries.txt index 73a2dceeb..185d284f7 100644 --- a/.cspell/libraries.txt +++ b/.cspell/libraries.txt @@ -26,6 +26,7 @@ dompurify elkjs fcose fontawesome +Forgejo Foswiki Gitea graphlib diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml index 13b913c11..7280278d2 100644 --- a/.github/workflows/autofix.yml +++ b/.github/workflows/autofix.yml @@ -42,4 +42,4 @@ jobs: working-directory: ./packages/mermaid run: pnpm run docs:build - - uses: autofix-ci/action@ff86a557419858bb967097bfc916833f5647fa8c # main + - uses: autofix-ci/action@551dded8c6cc8a1054039c8bc0b8b48c51dfc6ef # main diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index c5bbc6e62..1392963fb 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -7,6 +7,9 @@ on: - master - release/** pull_request: + issue_comment: + types: + - created merge_group: concurrency: ${{ github.workflow }}-${{ github.ref }} @@ -28,8 +31,12 @@ env: ) || github.event.before }} + # Check if this is a new comment with '/visual-test' + RUN_VISUAL_TEST: >- + ${{ github.event_name == 'issue_comment' && github.event.action == 'created' && contains(github.event.comment.body, '/visual-test') && github.event.issue.pull_request != null }} jobs: cache: + if: ${{ github.event_name != 'issue_comment' || contains(github.event.comment.body, '/visual-test') }} runs-on: ubuntu-latest container: image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1 @@ -125,18 +132,19 @@ jobs: browser: chrome # Disable recording if we don't have an API key # e.g. if this action was run from a fork - record: ${{ secrets.CYPRESS_RECORD_KEY != '' }} + record: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY != '' }} env: - CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} - VITEST_COVERAGE: true + # Only set Argos environment variables if the visual test comment trigger is present + ARGOS_TOKEN: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.ARGOS_TOKEN || '' }} + ARGOS_PARALLEL: ${{ env.RUN_VISUAL_TEST == 'true' }} + ARGOS_PARALLEL_TOTAL: ${{ env.RUN_VISUAL_TEST == 'true' && strategy.job-total || 1 }} + ARGOS_PARALLEL_INDEX: ${{ env.RUN_VISUAL_TEST == 'true' && matrix.containers || 1 }} CYPRESS_COMMIT: ${{ github.sha }} - ARGOS_TOKEN: ${{ secrets.ARGOS_TOKEN }} - ARGOS_PARALLEL: true - ARGOS_PARALLEL_TOTAL: ${{ strategy.job-total }} - ARGOS_PARALLEL_INDEX: ${{ matrix.containers }} + CYPRESS_RECORD_KEY: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY || ''}} SPLIT: ${{ strategy.job-total }} SPLIT_INDEX: ${{ strategy.job-index }} SPLIT_FILE: 'cypress/timings.json' + VITEST_COVERAGE: true - name: Upload Coverage to Codecov uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 528e94045..c35f2645b 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -26,7 +26,7 @@ jobs: results_format: sarif publish_results: true - name: Upload artifact - uses: actions/upload-artifact@97a0fba1372883ab732affbe8f94b823f91727db # v3.pre.node20 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7323ec027..87fa02818 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -39,6 +39,7 @@ jobs: pnpm exec vitest run ./packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts --coverage - name: Verify out-of-tree build with TypeScript + if: ${{ github.repository == 'mermaid-js/mermaid' }} run: | pnpm test:check:tsc diff --git a/.vscode/launch.json b/.vscode/launch.json index 7d17e55d2..dc0757116 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -12,18 +12,18 @@ "args": ["run", "${relativeFile}"], "smartStep": true, "console": "integratedTerminal" - }, - { - "name": "Docs generation", - "type": "node", - "request": "launch", - "args": ["scripts/docs.cli.mts"], - // we'll need to change this to --import in Node.JS v20.6.0 and up - "runtimeArgs": ["--loader", "tsx/esm"], - "cwd": "${workspaceRoot}/packages/mermaid", - "skipFiles": ["/**", "**/node_modules/**"], - "smartStep": true, - "internalConsoleOptions": "openOnSessionStart" } + // { + // "name": "Docs generation", + // "type": "node", + // "request": "launch", + // "args": ["scripts/docs.cli.mts"], + // // we'll need to change this to --import in Node.JS v20.6.0 and up + // "runtimeArgs": ["--loader", "tsx/esm"], + // "cwd": "${workspaceRoot}/packages/mermaid", + // "skipFiles": ["/**", "**/node_modules/**"], + // "smartStep": true, + // "internalConsoleOptions": "openOnSessionStart" + // } ] } diff --git a/Pulling-from-remote.md b/Pulling-from-remote.md new file mode 100644 index 000000000..6c7b3651a --- /dev/null +++ b/Pulling-from-remote.md @@ -0,0 +1,9 @@ +Pulling from remote repo + +``` +git remote add os_repo git@github.com:mermaid-js/mermaid.git +git pull os_repo main +git pull os_repo +git pull os_repo master +git pull os_repo 5237-unified-layout-common-renderer +``` diff --git a/README.md b/README.md index 456747132..280725af7 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,10 @@ In our release process we rely heavily on visual regression tests using [applito +## Mermaid AI Bot + +[Mermaid](https://codeparrot.ai/oracle?owner=mermaid-js&repo=mermaid) Bot will help you understand this repository better. You can ask for code examples, installation guide, debugging help and much more. + ## Examples **The following are some examples of the diagrams, charts and graphs that can be made using Mermaid. Click here to jump into the [text syntax](https://mermaid.js.org/intro/syntax-reference.html).** @@ -435,7 +439,7 @@ A quick note from Knut Sveidqvist: > > _Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._ > -> _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_ +> _Thank you to the ever-growing list of [contributors](https://github.com/mermaid-js/mermaid/graphs/contributors) that brought the project this far!_ --- diff --git a/README.zh-CN.md b/README.zh-CN.md index 942f54bff..a3046ab54 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -358,7 +358,7 @@ _很不幸的是,鱼与熊掌不可兼得,在这个场景下它意味着在 > _特别感谢 [d3](https://d3js.org/) 和 [dagre-d3](https://github.com/cpettitt/dagre-d3) 这两个优秀的项目,它们提供了图形布局和绘图工具库!_ > _同样感谢 [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) 提供了时序图语法的使用。 感谢 Jessica Peter 提供了甘特图渲染的灵感。_ > _感谢 [Tyler Long](https://github.com/tylerlong) 从 2017 年四月开始成为了项目的合作者。_ > -> _感谢越来越多的 [贡献者们](https://github.com/knsv/mermaid/graphs/contributors),没有你们,就没有这个项目的今天!_ +> _感谢越来越多的 [贡献者们](https://github.com/mermaid-js/mermaid/graphs/contributors),没有你们,就没有这个项目的今天!_ --- diff --git a/cypress.config.ts b/cypress.config.ts index b0257b9b2..fc43eb8aa 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -23,7 +23,11 @@ export default eyesPlugin( }); // copy any needed variables from process.env to config.env config.env.useAppli = process.env.USE_APPLI ? true : false; - config.env.useArgos = !!process.env.CI; + // only use Argos on CI in the mermaid-js/mermaid repository + config.env.useArgos = + !!process.env.CI && + process.env.GITHUB_REPOSITORY === 'mermaid-js/mermaid' && + !!process.env.ARGOS_TOKEN; if (config.env.useArgos) { registerArgosTask(on, config, { diff --git a/cypress/helpers/util.ts b/cypress/helpers/util.ts index 52da4a72e..81b7036af 100644 --- a/cypress/helpers/util.ts +++ b/cypress/helpers/util.ts @@ -132,3 +132,10 @@ export const verifyScreenshot = (name: string): void => { cy.matchImageSnapshot(name); } }; + +export const verifyNumber = (value: number, expected: number, deltaPercent = 10): void => { + expect(value).to.be.within( + expected * (1 - deltaPercent / 100), + expected * (1 + deltaPercent / 100) + ); +}; diff --git a/cypress/integration/rendering/flowchart-elk.spec.js b/cypress/integration/rendering/flowchart-elk.spec.js index 38bfe6440..c31df1181 100644 --- a/cypress/integration/rendering/flowchart-elk.spec.js +++ b/cypress/integration/rendering/flowchart-elk.spec.js @@ -1,4 +1,4 @@ -import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts'; +import { imgSnapshotTest, renderGraph, verifyNumber } from '../../helpers/util.ts'; describe('Flowchart ELK', () => { it('1-elk: should render a simple flowchart', () => { @@ -109,7 +109,7 @@ describe('Flowchart ELK', () => { const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); - expect(maxWidthValue).to.be.within(230 * 0.95, 230 * 1.05); + verifyNumber(maxWidthValue, 380); }); }); it('8-elk: should render a flowchart when useMaxWidth is false', () => { @@ -128,7 +128,7 @@ describe('Flowchart ELK', () => { const width = parseFloat(svg.attr('width')); // use within because the absolute value can be slightly different depending on the environment ±5% // expect(height).to.be.within(446 * 0.95, 446 * 1.05); - expect(width).to.be.within(230 * 0.95, 230 * 1.05); + verifyNumber(width, 380); expect(svg).to.not.have.attr('style'); }); }); @@ -692,7 +692,7 @@ A --> B {} ); cy.get('svg').should((svg) => { - const edges = svg.querySelectorAll('.edges > path'); + const edges = svg[0].querySelectorAll('.edges > path'); edges.forEach((edge) => { expect(edge).to.have.class('flowchart-link'); }); @@ -739,7 +739,7 @@ NL\`") --"\`1o **bold**\`"--> c { flowchart: { titleTopMargin: 0 } } ); }); - it('Wrapping long text with a new line', () => { + it.skip('Wrapping long text with a new line', () => { imgSnapshotTest( `%%{init: {"flowchart": {"htmlLabels": true}} }%% flowchart-elk LR @@ -841,7 +841,7 @@ end { flowchart: { titleTopMargin: 0 } } ); }); - it('Sub graphs and markdown strings', () => { + it('Sub graphs', () => { imgSnapshotTest( `--- config: diff --git a/cypress/integration/rendering/flowchart-v2.spec.js b/cypress/integration/rendering/flowchart-v2.spec.js index 66452f4b2..4322500df 100644 --- a/cypress/integration/rendering/flowchart-v2.spec.js +++ b/cypress/integration/rendering/flowchart-v2.spec.js @@ -1076,4 +1076,41 @@ end ); }); }); + describe('New @ sytax for node metadata edge cases', () => { + it('should be possible to use @ syntax to add labels on multi nodes', () => { + imgSnapshotTest( + `flowchart TB + n2["label for n2"] & n4@{ label: "labe for n4"} & n5@{ label: "labe for n5"} + `, + {} + ); + }); + it('should be possible to use @ syntax to add labels with trail spaces and &', () => { + imgSnapshotTest( + `flowchart TB + n2["label for n2"] & n4@{ label: "labe for n4"} & n5@{ label: "labe for n5"} + `, + {} + ); + }); + it('should be possible to use @ syntax to add labels with trail spaces', () => { + imgSnapshotTest( + `flowchart TB + n2["label for n2"] + n4@{ label: "labe for n4"} + n5@{ label: "labe for n5"} + `, + {} + ); + }); + it('should be possible to use @ syntax to add labels with trail spaces and edge/link', () => { + imgSnapshotTest( + `flowchart TD + A["A"] --> B["for B"] & C@{ label: "for c"} & E@{label : "for E"} + D@{label: "for D"} + `, + {} + ); + }); + }); }); diff --git a/cypress/integration/rendering/stateDiagram-v2.spec.js b/cypress/integration/rendering/stateDiagram-v2.spec.js index 606a1a3f5..29635b27c 100644 --- a/cypress/integration/rendering/stateDiagram-v2.spec.js +++ b/cypress/integration/rendering/stateDiagram-v2.spec.js @@ -460,7 +460,7 @@ stateDiagram-v2 [*] --> State1 State1 --> [*] `, - { state: { useMaxWidth: true } } + { state: { useMaxWidth: true }, look: 'classic' } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); @@ -482,7 +482,7 @@ stateDiagram-v2 [*] --> State1 State1 --> [*] `, - { state: { useMaxWidth: false } } + { state: { useMaxWidth: false }, look: 'classic' } ); cy.get('svg').should((svg) => { // const height = parseFloat(svg.attr('height')); diff --git a/cypress/integration/rendering/stateDiagram.spec.js b/cypress/integration/rendering/stateDiagram.spec.js index 9be1f2322..aaa2dde4c 100644 --- a/cypress/integration/rendering/stateDiagram.spec.js +++ b/cypress/integration/rendering/stateDiagram.spec.js @@ -338,7 +338,7 @@ describe('State diagram', () => { [*] --> State1 State1 --> [*] `, - { state: { useMaxWidth: true } } + { state: { useMaxWidth: true }, look: 'classic', theme: 'default' } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); @@ -361,7 +361,7 @@ describe('State diagram', () => { [*] --> State1 State1 --> [*] `, - { state: { useMaxWidth: false } } + { state: { useMaxWidth: false }, look: 'classic', theme: 'default' } ); cy.get('svg').should((svg) => { // const height = parseFloat(svg.attr('height')); diff --git a/cypress/platform/ash.html b/cypress/platform/ash.html new file mode 100644 index 000000000..6d306390b --- /dev/null +++ b/cypress/platform/ash.html @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + +
+flowchart
+   node
+   rounded(rounded)
+   id1([This is the text in the box])
+   id2((circle))
+   id3(((double circle)))
+   id4>Asymetrical]
+   id5{This is the text in the box}
+   id6{{This is the text in the box}}
+   id7[/This is the text in the box/]
+   id8[\This is the text in the box\]
+   A[/Christmas\]
+   B[\Christmas/]
+   sub[[subroutine]]
+   db[(Database)]
+    
+
+      
+
+---
+config: 
+      theme: default
+      look: classic
+---
+flowchart
+   node
+   rounded(rounded)
+   id1([This is the text in the box])
+   id2((circle))
+   id3(((double circle)))
+   id4>Asymetrical]
+   id5{This is the text in the box}
+   id6{{This is the text in the box}}
+   id7[/This is the text in the box/]
+   id8[\This is the text in the box\]
+   B[/Christmas\]
+   sub[[subroutine]]
+   db[(Database)]
+    
+
+            
+
+      
+
+stateDiagram
+    [*] --> Active
+    Active --> Inactive
+    Inactive --> Active
+    Active --> [*]
+    
+ +
+flowchart
+   a_a(Aftonbladet) --> b_b[gorilla]:::apa --> c_c{chimp}:::apa -->a_a
+        a_a --> c --> d_d --> c_c
+        classDef apa fill:#f9f,stroke:#333,stroke-width:4px;
+        class a_a apa;
+        click a_a "http://www.aftonbladet.se" "bookmark"
+        click c_c callback "new tooltip"
+      
+
+flowchart LR
+    id1(Start)-->id2(Stop)
+    style id1 fill:#f9f,stroke:#333,stroke-width:4px
+    style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
+
+      
+    
+ +
+      flowchart LR
+    A:::foo & B:::bar --> C:::foobar
+    classDef foo stroke:#f00
+    classDef bar stroke:#0f0
+    classDef ash color:red
+    class C ash
+    style C stroke:#00f, fill:black
+
+    
+ +
+      stateDiagram
+    A:::foo 
+    B:::bar --> C:::foobar
+    classDef foo stroke:#f00
+    classDef bar stroke:#0f0
+    style C stroke:#00f, fill:black, color:white
+
+    
+ + + + diff --git a/cypress/platform/knsv-dark.html b/cypress/platform/knsv-dark.html new file mode 100644 index 000000000..d22e1b4f4 --- /dev/null +++ b/cypress/platform/knsv-dark.html @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + +
+flowchart
+      A --> B & C
+      subgraph apa
+        D --> E
+      end
+      
+
+flowchart LR
+    id1(Start)-->id2(Stop)
+    style id1 fill:#f9f,stroke:#333,stroke-width:4px
+    style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
+
+
+    
+ +
+      flowchart LR
+    A:::foo & B:::bar --> C:::foobar
+    classDef foo stroke:#f00
+    classDef bar stroke:#0f0
+    classDef ash color:red
+    class C ash
+    style C stroke:#00f, fill:black
+
+    
+ +
+      stateDiagram
+    A:::foo
+    B:::bar --> C:::foobar
+    classDef foo stroke:#f00
+    classDef bar stroke:#0f0
+    style C stroke:#00f, fill:black, color:white
+
+    
+ + + + diff --git a/cypress/platform/knsv-pos.html b/cypress/platform/knsv-pos.html new file mode 100644 index 000000000..9dc5eb1db --- /dev/null +++ b/cypress/platform/knsv-pos.html @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + +

+
+    
+  
+
diff --git a/cypress/platform/knsv-recursive.html b/cypress/platform/knsv-recursive.html
new file mode 100644
index 000000000..060d81e27
--- /dev/null
+++ b/cypress/platform/knsv-recursive.html
@@ -0,0 +1,272 @@
+
+  
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+
+    
+  
+
+  
+    

Test Diagram

+
+
+---
+config:
+  theme: neo
+  layout: dagre
+---
+flowchart TD
+    A{"Diamond"} --- n1["Rectangle"] & n2["Rounded"] & n3(["Stadium"])
+    n1 --x n4["Rounded"]
+    n2 --o n5["Hexagon"]
+    n3 --> n6["Parallelogram"]
+    n5 o--o n7["Trapezoid"]
+    n4 x--x n8["Lean Right"]
+    n6 <--> n9(("Circle"))
+    n8 --> n10["Rose"]
+    n7 --> n11["Pine"]
+    n9 --> n12["Peach"]
+    n2@{ shape: rounded}
+    n4@{ shape: rounded}
+    n5@{ shape: hex}
+    n6@{ shape: lean-l}
+    n7@{ shape: trap-b}
+    n8@{ shape: lean-r}
+
+     n10:::Rose
+     n11:::Pine
+     n12:::Peach
+    classDef Rose stroke-width:1px, stroke-dasharray:none, stroke:#FF5978, fill:#FFDFE5, color:#8E2236
+    classDef Pine stroke-width:1px, stroke-dasharray:none, stroke:#254336, fill:#27654A, color:#FFFFFF
+    classDef Peach stroke-width:1px, stroke-dasharray:none, stroke:#FBB35A, fill:#FFEFDB, color:#8F632D
+    n10 --x End
+    n11 --x End
+    n12 --x End
+
+    
+
+---
+config:
+  look: classic
+  theme: forest
+  layout: dagre
+---
+flowchart TD
+    A{"Diamond"} --- n1["Rectangle"] & n2["Rounded"] & n3(["Stadium"])
+    n1 --x n4["Rounded"]
+    n2 --o n5["Hexagon"]
+    n3 --> n6["Parallelogram"]
+    n5 o--o n7["Trapezoid"]
+    n4 x--x n8["Lean Right"]
+    n6 <--> n9(("Circle"))
+    n8 --> n10["Rose"]
+    n7 --> n11["Pine"]
+    n9 --> n12["Peach"]
+    n2@{ shape: rounded}
+    n4@{ shape: rounded}
+    n5@{ shape: hex}
+    n6@{ shape: lean-l}
+    n7@{ shape: trap-b}
+    n8@{ shape: lean-r}
+
+     n10:::Rose
+     n11:::Pine
+     n12:::Peach
+    classDef Rose stroke-width:1px, stroke-dasharray:none, stroke:#FF5978, fill:#FFDFE5, color:#8E2236
+    classDef Pine stroke-width:1px, stroke-dasharray:none, stroke:#254336, fill:#27654A, color:#FFFFFF
+    classDef Peach stroke-width:1px, stroke-dasharray:none, stroke:#FBB35A, fill:#FFEFDB, color:#8F632D
+    n10 --x End
+    n11 --x End
+    n12 --x End
+
+    
+
+ + + + diff --git a/cypress/platform/knsv-reset.html b/cypress/platform/knsv-reset.html new file mode 100644 index 000000000..a9e653da0 --- /dev/null +++ b/cypress/platform/knsv-reset.html @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + + +

+    

+
+    
+  
+
diff --git a/cypress/platform/knsv2.html b/cypress/platform/knsv2.html
index ef130569b..b8174f323 100644
--- a/cypress/platform/knsv2.html
+++ b/cypress/platform/knsv2.html
@@ -91,23 +91,16 @@
     
 ---
 config:
-  layout: elk
+  look: handdrawn
+
 ---
-swimlane TB
-  %% swimlane 1 - A E
-  %% swimlane 2 - B
-  %% swimlane 3 - C D
-%% lane First
- A
-%% end
- A --> B(I am B, the wide one) --> C
- C --> D & F
+flowchart LR
+    n1["n1"] --- C
+    B("Continue") --> C(("Evaluate"))
+    C -- One --> D["Option 1"]
+    C -- Two --> E["Option 2"]
+    C -- Three --> F["fa:fa-car Option 3"]
 
- D --> E
- A --> E
- E --> B
-
-B@{ shape: diam}
     
 ---
@@ -139,6 +132,7 @@ flowchart LR
     
 ---
 config:
+  look: neo
   layout: elk
 ---
 flowchart LR
@@ -453,7 +447,7 @@ kanban
       mermaid.initialize({
         // theme: 'base',
         // theme: 'default',
-        // theme: 'forest',
+        theme: 'forest',
         // handDrawnSeed: 12,
         // look: 'handDrawn',
         // 'elk.nodePlacement.strategy': 'NETWORK_SIMPLEX',
@@ -461,7 +455,7 @@ kanban
         // layout: 'elk',
         // layout: 'fixed',
         // htmlLabels: false,
-        flowchart: { titleTopMargin: 10 },
+        flowchart: { titleTopMargin: 10, useMaxWidth: false },
         // fontFamily: 'Caveat',
         // fontFamily: 'Kalam',
         // fontFamily: 'courier',
diff --git a/cypress/platform/min-size-tester.html b/cypress/platform/min-size-tester.html
new file mode 100644
index 000000000..eecbbf290
--- /dev/null
+++ b/cypress/platform/min-size-tester.html
@@ -0,0 +1,171 @@
+
+  
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+
+    
+  
+
+  
+    
+
+
+
+ + + diff --git a/cypress/platform/neo-test.html b/cypress/platform/neo-test.html new file mode 100644 index 000000000..a23e74114 --- /dev/null +++ b/cypress/platform/neo-test.html @@ -0,0 +1,2537 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
neo-neoneo-darkneo-defaultneo-foresthanddrawn-defaultclassic-default
+ +
+
+
+              classNode
+            
+
+
+
+
+          %%{init: {"look": "neo", "theme": "neo", "fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode
+          
+
+
+          %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode
+        
+
+
+          %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode
+        
+
+
+          %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode
+        
+
+
+          %%{init: {"look": "handDrawn", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode
+        
+
+
+          %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode
+        
+
+ +
+
+
+              Filled classNode
+            
+
+
+
+
+          %%{init: {"look": "neo", "theme": "neo", "fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode {
+              +int number
+              method()
+            }
+          
+
+
+          %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode {
+              +int number
+              method()
+            }
+        
+
+
+          %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode {
+              +int number
+              method()
+            }
+        
+
+
+          %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode {
+              +int number
+              method()
+            }
+        
+
+
+          %%{init: {"look": "handDrawn", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode {
+              +int number
+              method()
+            }
+        
+
+
+          %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            class classNode {
+              +int number
+              method()
+            }
+        
+
+ +
+
+
+              classA --> classB
+            
+
+
+
+
+          %%{init: {"look": "neo", "theme": "neo", "fontFamily": "Arial"} }%%
+          classDiagram
+            class classA {
+              +int number
+              method()
+            }
+            class classB {
+              +int number
+              -string text
+              method()
+              another_method()
+            }
+            classA --> classB
+          
+
+
+          %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+          classDiagram
+            class classA {
+              +int number
+              method()
+            }
+            class classB {
+              +int number
+              -string text
+              method()
+              another_method()
+            }
+            classA --> classB
+        
+
+
+          %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            class classA {
+              +int number
+              method()
+            }
+            class classB {
+              +int number
+              -string text
+              method()
+              another_method()
+            }
+            classA --> classB
+        
+
+
+          %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+          classDiagram
+            class classA {
+              +int number
+              method()
+            }
+            class classB {
+              +int number
+              -string text
+              method()
+              another_method()
+            }
+            classA --> classB
+        
+
+
+          %%{init: {"look": "handDrawn", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            class classA {
+              +int number
+              method()
+            }
+            class classB {
+              +int number
+              -string text
+              method()
+              another_method()
+            }
+            classA --> classB
+        
+
+
+          %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            class classA {
+              +int number
+              method()
+            }
+            class classB {
+              +int number
+              -string text
+              method()
+              another_method()
+            }
+            classA --> classB
+        
+
+ +
+
+
+              nameSpace { classA --> classB } note
+            
+
+
+
+
+          %%{init: {"look": "neo", "theme": "neo", "fontFamily": "Arial"} }%%
+          classDiagram
+            namespace myNamespace {
+              class classA {
+                +int number
+                method()
+              }
+              class classB {
+                +int number
+                -string text
+                method()
+                another_method()
+              }
+            }
+            classA "1" o--> "*" classB : label
+            note for classB "This is a note for classB"
+          
+
+
+          %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+          classDiagram
+            namespace myNamespace {
+              class classA {
+                +int number
+                method()
+              }
+              class classB {
+                +int number
+                -string text
+                method()
+                another_method()
+              }
+            }
+            classA "1" o--> "*" classB : label
+            note for classB "This is a note for classB"
+        
+
+
+          %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            namespace myNamespace {
+              class classA {
+                +int number
+                method()
+              }
+              class classB {
+                +int number
+                -string text
+                method()
+                another_method()
+              }
+            }
+            classA "1" o--> "*" classB : label
+            note for classB "This is a note for classB"
+        
+
+
+          %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+          classDiagram
+            namespace myNamespace {
+              class classA {
+                +int number
+                method()
+              }
+              class classB {
+                +int number
+                -string text
+                method()
+                another_method()
+              }
+            }
+            classA "1" o--> "*" classB : label
+            note for classB "This is a note for classB"
+        
+
+
+          %%{init: {"look": "handDrawn", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            namespace myNamespace {
+              class classA {
+                +int number
+                method()
+              }
+              class classB {
+                +int number
+                -string text
+                method()
+                another_method()
+              }
+            }
+            classA "1" o--> "*" classB : label
+            note for classB "This is a note for classB"
+        
+
+
+          %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+          classDiagram
+            namespace myNamespace {
+              class classA {
+                +int number
+                method()
+              }
+              class classB {
+                +int number
+                -string text
+                method()
+                another_method()
+              }
+            }
+            classA "1" o--> "*" classB : label
+            note for classB "This is a note for classB"
+        
+
+ +
+
+
+              stateId
+            
+
+
+
+
+          %%{init: {"look": "neo", "theme": "neo", "fontFamily": "Arial"} }%%
+          stateDiagram-v2
+            stateId
+          
+
+
+          %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+          stateDiagram-v2
+            stateId
+        
+
+
+          %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+          stateDiagram-v2
+            stateId
+        
+
+
+          %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+          stateDiagram-v2
+            stateId
+        
+
+
+          %%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+          stateDiagram-v2
+            stateId
+        
+
+
+          %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+          stateDiagram-v2
+            stateId
+        
+
+ +
+
+
+              state "description text" as s2
+            
+
+
+
+
+          %%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              state "This is a state description" as s2
+        
+
+
+          %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              state "This is a state description" as s2
+        
+
+
+          %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              state "This is a state description" as s3
+        
+
+
+          %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              state "This is a state description" as s3
+        
+
+
+          %%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              state "This is a state description" as s4
+        
+
+
+          %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              state "This is a state description" as s4
+        
+
+ +
+
+
+              s2 :  description text
+            
+
+
+
+
+          %%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s21 : This is a state description
+        
+
+
+          %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s21 : This is a state description
+        
+
+
+          %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s22 : This is a state description
+        
+
+
+          %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s22 : This is a state description
+      
+
+
+          %%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s23 : This is a state description
+        
+
+
+          %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s23 : This is a state description
+        
+
+ +
+
+
+              s1 --> s2
+            
+
+
+
+
+          %%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s31 --> s32
+        
+
+
+          %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s31 --> s32
+        
+
+
+          %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s41 --> s42
+        
+
+
+          %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s51 --> s52
+        
+
+
+          %%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s61 --> s62
+        
+
+
+          %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              s61 --> s62
+        
+
+ +
+
+
+              s1 --> s2: A transition
+            
+
+
+
+
+          %%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              a1 --> a2: A transition
+        
+
+
+          %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              a1 --> a2: A transition
+        
+
+
+          %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              a3 --> a4: A transition
+        
+
+
+          %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              a5 --> a6: A transition
+      
+
+
+          %%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              a7 --> a8: A transition
+        
+
+
+          %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+            stateDiagram-v2
+              a7 --> a8: A transition
+      
+
+ +
+
+
+
+      [*] --> test
+    test --> [*]
+
+  
+
+
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+
+      
+
+
+%%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+
+      
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+
+      
+
+ +
+
+
+      [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+  
+
+
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+      
+
+
+%%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+      
+
+
+%%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+      
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+      
+
+ +
+
+
+
+
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+  
+
+
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+      
+
+
+%%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+      
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+      
+
+ +
+
+
+    [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+
+
+
+  
+
+
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+   [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+     stateDiagram-v2
+     [*] --> B1
+      B1 --> B2
+      B1 --> B3
+
+      state B1 {
+          [*] --> B11
+          B11 --> [*]
+      }
+      state B2 {
+          [*] --> B22
+          B22 --> [*]
+      }
+      state B3 {
+          [*] --> B33
+          B33 --> [*]
+      }
+        
+
+
+%%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+ stateDiagram-v2
+  [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+
+      
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+ stateDiagram-v2
+  [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+
+      
+
+ +
+
+
+              state if_state <<choice>>
+              [*] --> IsPositive
+              IsPositive --> if_state
+              if_state --> False: if n < 0
+              if_state --> True : if n >= 0
+            
+
+
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+                    stateDiagram-v2
+                      state if_state <<choice>>
+                      [*] --> IsPositive
+                      IsPositive --> if_state
+                      if_state --> False: if n < 0
+                      if_state --> True : if n >= 0
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+
+%%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+   state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+     stateDiagram-v2
+     state if_state <<choice>>
+      [*] --> IsPositive
+      IsPositive --> if_state
+      if_state --> False: if n < 0
+      if_state --> True : if n >= 0
+        
+
+
+%%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+ stateDiagram-v2
+   state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+ stateDiagram-v2
+   state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+ +
+
+
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+
+
+  
+
+
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+ +
+
+
+
+  TN1: The state with a note
+  note right of TN1
+      note text
+  end note
+  TN1 --> TN2
+  note left of TN2 : note text
+
+  
+
+
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+     TN1: The state with a note
+        note right of TN1
+            Important information! You can write
+            notes.
+        end note
+        TN1 --> TN2
+        note left of TN2 : This is the note to the left.
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+     TN1: The state with a note
+        note right of TN1
+            Important information! You can write
+            notes.
+        end note
+        TN1 --> TN2
+        note left of TN2 : This is the note to the left.
+
+      
+
+
+%%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+     TN3: The state with a note
+        note right of TN3
+            Important information! You can write
+            notes.
+        end note
+        TN3 --> TN4
+        note left of TN4 : This is the note to the left.
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+     TN3: The state with a note
+        note right of TN3
+            Important information! You can write
+            notes.
+        end note
+        TN3 --> TN4
+        note left of TN4 : This is the note to the left.
+      
+
+
+%%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+     TN5: The state with a note
+        note right of TN5
+            Important information! You can write
+            notes.
+        end note
+        TN5 --> TN6
+        note left of TN6 : This is the note to the left.
+
+      
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+     TN5: The state with a note
+        note right of TN5
+            Important information! You can write
+            notes.
+        end note
+        TN5 --> TN6
+        note left of TN6 : This is the note to the left.
+
+      
+
+ +
+
+
+[*] --> Active
+
+state Active {
+    [*] --> NumLockOff
+    NumLockOff --> NumLockOn : EvNumLockPressed
+    NumLockOn --> NumLockOff : EvNumLockPressed
+    --
+    [*] --> CapsLockOff
+    CapsLockOff --> CapsLockOn : EvCapsLockPressed
+    CapsLockOn --> CapsLockOff : EvCapsLockPressed
+    --
+    [*] --> ScrollLockOff
+    ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+    ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+}
+
+
+  
+
+
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+
+      
+
+
+%%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+      
+
+
+%%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+
+      
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+
+      
+
+ +
+
+
+direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+  
+
+
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+   direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+   direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+ +
+
+
+            flowchart LR
+            A[Start]
+          
+
+
+
+
+        %%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+        flowchart LR
+        A[Start]
+      
+
+
+        %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+        flowchart LR
+        A[Start]
+    
+
+
+        %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+        flowchart LR
+        A[Start]
+    
+
+
+        %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+        flowchart LR
+        A[Start]
+    
+
+
+        %%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+        flowchart LR
+        A[Start]
+    
+
+
+        %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+        flowchart LR
+        A[Start]
+    
+
+ +
+
+
+          flowchart LR
+            rounded(rounded)
+        
+
+
+
+
+      %%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+      flowchart LR
+        rounded(rounded)
+    
+
+
+      %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+      flowchart LR
+        rounded(rounded)
+  
+
+
+      %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+      flowchart LR
+        rounded(rounded)
+  
+
+
+      %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+      flowchart LR
+        rounded(rounded)
+  
+
+
+      %%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+      flowchart LR
+        rounded(rounded)
+  
+
+
+      %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+      flowchart LR
+        rounded(rounded)
+  
+
+ +
+
+
+          flowchart LR
+          A[Start] --Some text--> B(Continue)
+        
+
+
+
+
+      %%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+      flowchart LR
+        A[Start] --Some text--> B(Continue)
+    
+
+
+      %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+      flowchart LR
+        A[Start] --Some text--> B(Continue)
+  
+
+
+      %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+      flowchart LR
+        A[Start] --Some text--> B(Continue)
+    
+
+
+      %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+      flowchart LR
+        A[Start] --Some text--> B(Continue)
+  
+
+
+      %%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+      flowchart LR
+        A[Start] --Some text--> B(Continue)
+    
+
+
+      %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+      flowchart LR
+      A[Start] --Some text--> B(Continue)
+    
+
+ +
+
+
+          flowchart LR
+            A[Start] -->C{Evaluate}
+            C -- One --> D[Option 1]
+            C -- Two --> E[Option 2]
+            C -- Three --> F[fa:fa-car Option 3]
+        
+
+
+
+
+      %%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+      flowchart LR
+        A[Start] -->C{Evaluate}
+        C -- One --> D[Option 1]
+        C -- Two --> E[Option 2]
+        C -- Three --> F[fa:fa-car Option 3]
+    
+
+
+      %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+      flowchart LR
+        A[Start] -->C{Evaluate}
+        C -- One --> D[Option 1]
+        C -- Two --> E[Option 2]
+        C -- Three --> F[fa:fa-car Option 3]
+  
+
+
+      %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+      flowchart LR
+        A[Start] -->C{Evaluate}
+        C -- One --> D[Option 1]
+        C -- Two --> E[Option 2]
+        C -- Three --> F[fa:fa-car Option 3]
+    
+
+
+      %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+      flowchart LR
+        A[Start] -->C{Evaluate}
+        C -- One --> D[Option 1]
+        C -- Two --> E[Option 2]
+        C -- Three --> F[fa:fa-car Option 3]
+  
+
+
+      %%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+      flowchart LR
+        A[Start] -->C{Evaluate}
+        C -- One --> D[Option 1]
+        C -- Two --> E[Option 2]
+        C -- Three --> F[fa:fa-car Option 3]
+    
+
+
+      %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+      flowchart LR
+        A[Start] -->C{Evaluate}
+        C -- One --> D[Option 1]
+        C -- Two --> E[Option 2]
+        C -- Three --> F[fa:fa-car Option 3]
+    
+
+ +
+
+
+              flowchart LR
+                subgraph TOP
+                  direction TB
+                  subgraph B1
+                  direction RL
+                  i1 -->f1
+                end
+              end
+              A --> TOP --> B
+              B1 --> B2
+            
+
+
+
+
+          %%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+          flowchart LR
+            subgraph TOP
+              direction TB
+              subgraph B1
+                direction RL
+                i1 -->f1
+              end
+            end
+          A --> TOP --> B
+          B1 --> B2
+        
+
+
+          %%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+          flowchart LR
+            subgraph TOP
+              direction TB
+              subgraph B1
+                direction RL
+                i1 -->f1
+              end
+            end
+          A --> TOP --> B
+          B1 --> B2
+      
+
+
+          %%{init: {"look": "neo", "theme": "default","fontFamily": "Arial"} }%%
+          flowchart LR
+            subgraph TOP
+              direction TB
+              subgraph B1
+                direction RL
+                i1 -->f1
+              end
+            end
+          A --> TOP --> B
+          B1 --> B2
+        
+
+
+          %%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+          flowchart LR
+            subgraph TOP
+              direction TB
+              subgraph B1
+                direction RL
+                i1 -->f1
+              end
+            end
+          A --> TOP --> B
+          B1 --> B2
+      
+
+
+          %%{init: {"look": "handdrawn", "theme": "default","fontFamily": "Arial"} }%%
+          flowchart LR
+          subgraph TOP
+            direction TB
+            subgraph B1
+              direction RL
+              i1 -->f1
+            end
+          end
+        A --> TOP --> B
+        B1 --> B2
+        
+
+
+          %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+          flowchart LR
+          subgraph TOP
+            direction TB
+            subgraph B1
+              direction RL
+              i1 -->f1
+            end
+          end
+        A --> TOP --> B
+        B1 --> B2
+        
+
Additional ContentNew content 1New content 2New content 3New content 4
Additional ContentNew content 1New content 2New content 3New content 4
+ + + + diff --git a/cypress/platform/omkarht-new-padding.html b/cypress/platform/omkarht-new-padding.html new file mode 100644 index 000000000..86a501b67 --- /dev/null +++ b/cypress/platform/omkarht-new-padding.html @@ -0,0 +1,248 @@ + + + + + + + + + + + + + + + + + + + +

Test Diagram

+
+
+---
+config:
+  theme: neo
+  layout: dagre
+---
+flowchart TD
+    A{"Cylinder"} --- n1["Rectangle"] & n2["Rounded"] & n3(["Stadium"])
+    n1 --x n4["Rounded"]
+    n2 --o n5["Hexagon"]
+    n3 --> n6["Parallelogram"]
+    n5 o--o n7["Trapezoid"]
+    n4 x--x n8["Lean Right"]
+    n6 <--> n9(("Circle"))
+    n8 --> n10["Rose"]
+    n7 --> n11["Pine"]
+    n9 --> n12["Peach"]
+    n2@{ shape: rounded}
+    n4@{ shape: rounded}
+    n5@{ shape: hex}
+    n6@{ shape: lean-l}
+    n7@{ shape: trap-b}
+    n8@{ shape: lean-r}
+
+     n10:::Rose
+     n11:::Pine
+     n12:::Peach
+    classDef Rose stroke-width:1px, stroke-dasharray:none, stroke:#FF5978, fill:#FFDFE5, color:#8E2236
+    classDef Pine stroke-width:1px, stroke-dasharray:none, stroke:#254336, fill:#27654A, color:#FFFFFF
+    classDef Peach stroke-width:1px, stroke-dasharray:none, stroke:#FBB35A, fill:#FFEFDB, color:#8F632D
+    n10 --x End
+    n11 --x End
+    n12 --x End
+
+    
+ +
+        ---
+        config:
+          theme: neo
+          layout: dagre
+        ---
+        flowchart TD
+        n1["Cylinder"]
+        n1@{ shape: database}
+        
+            
+
+ + + + diff --git a/cypress/platform/per.html b/cypress/platform/per.html index e84cea2d0..009c9d39c 100644 --- a/cypress/platform/per.html +++ b/cypress/platform/per.html @@ -4,28 +4,60 @@ + + + + + + + + -
Security check
-
-flowchart LR
-A-->B
-        
-            mindmap
-          root
-            ch1
-            ch2
-        
Active + + state Active { + direction BT + [*] --> Inner + Inner --> NumLockOn : EvNumLockPressed + } + %% Outer --> Inner +
- - - - diff --git a/cypress/platform/refactor.html b/cypress/platform/refactor.html new file mode 100644 index 000000000..e8dcca2e5 --- /dev/null +++ b/cypress/platform/refactor.html @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/cypress/platform/saurabh.html b/cypress/platform/saurabh.html index 89b314e68..cdb711fb7 100644 --- a/cypress/platform/saurabh.html +++ b/cypress/platform/saurabh.html @@ -62,56 +62,23 @@
-      flowchart LR
-      A@{ icon: "fa:window-minimize", form: circle }
-      E@{ icon: "fa:window-minimize", form: circle }
-      B@{ icon: "fa:bell", form: circle }
-      B2@{ icon: "fa:bell", form: circle }
-      C@{ icon: "fa:address-book",  form: square  }
-      D@{ icon: "fa:star-half",  form: square  }
-      A --> E
-      B --> B2
-
+      flowchart
+          A --> A
+          subgraph B
+            B1 --> B1
+          end
+          subgraph C
+            subgraph C1
+              C2 --> C2
+              subgraph D
+                D1 --> D1
+              end
+              D --> D
+            end
+            C1 --> C1
+          end
 
     
-
-      flowchart TB
-       A --test2--> B2@{ icon: "fa:bell", form: "rounded", label: "B2 aiduaid uyawduad uaduabd uyduadb", pos: "b" }
-       B2 --test--> C
-       D --> B2 --> E
-       style B2 fill:#f9f,stroke:#333,stroke-width:4px
-  
-
-      flowchart BT
-       A --test2--> B2@{ icon: "fa:bell", form: "square", label: "B2", pos: "t", h: 40, w: 30 }
-       B2 --test--> C
-       D --> B2 --> E
-  
-
-      flowchart BT
-       A --test2--> B2@{ icon: "fa:bell", label: "B2 awiugdawu uydgayuiwd wuydguy", pos: "b", h: 40, w: 30 }
-       B2 --test--> C
-  
-
-      flowchart BT
-       A --test2--> B2@{ icon: "fa:bell", label: "B2 dawuygd ayuwgd uy", pos: "t", h: 40, w: 30 }
-       B2 --test--> C
-  
-
-      flowchart TB
-       A --> B2@{ icon: "fa:bell", form: "circle", label: "test augfuyfavf ydvaubfuac", pos: "t", w: 200, h: 100 } --> C
-  
-
-      flowchart TB
-       A --> B2@{ icon: "fa:bell", form: "circle", label: "test augfuyfavf ydvaubfuac", pos: "b", w: 200, h: 100 } --> C
-       D --> B2 --> E
-  
+ + diff --git a/cypress/platform/state-refactor-looks.html b/cypress/platform/state-refactor-looks.html new file mode 100644 index 000000000..1761d665a --- /dev/null +++ b/cypress/platform/state-refactor-looks.html @@ -0,0 +1,1576 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DagreDagre with roughDagre with neoELKELK with roughELK with neo
+ +
+
+
+      stateId
+  
+
+
+
+
+stateDiagram-v2
+    stateId
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+stateDiagram-v2
+    stateId
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+stateDiagram-v2
+    stateId
+
+      
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+stateDiagram-v2
+    stateId
+
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+stateDiagram-v2
+    stateId
+
+      
+
+
+%%{init: {"look": "neo", "layout": "elk"} }%%
+stateDiagram-v2
+    stateId
+
+      
+
+ +
+
+
+
+    state "description text" as s2
+  
+
+
+
+
+stateDiagram-v2
+    state "This is a state description" as s2
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+stateDiagram-v2
+    state "This is a state description" as s3
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+stateDiagram-v2
+    state "This is a state description" as s3
+      
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+stateDiagram-v2
+    state "This is a state description" as s4
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+stateDiagram-v2
+    state "This is a state description" as s5
+      
+
+
+%%{init: {"look": "neo", "layout": "elk"} }%%
+stateDiagram-v2
+    state "This is a state description" as s5
+      
+
+ +
+
+
+
+    s2 :  description text
+  
+
+
+
+
+stateDiagram-v2
+    s21 : This is a state description
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+stateDiagram-v2
+    s22 : This is a state description
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+stateDiagram-v2
+    s22 : This is a state description
+
+      
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+stateDiagram-v2
+    s23 : This is a state description
+
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+stateDiagram-v2
+    s24 : This is a state description
+
+      
+
+
+%%{init: {"look": "neo", "layout": "elk"} }%%
+stateDiagram-v2
+    s24 : This is a state description
+
+      
+
+ +
+
+
+
+    s1 --> s2
+
+  
+
+
+
+
+
+    stateDiagram-v2
+    s31 --> s32
+
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+
+   stateDiagram-v2
+    s41 --> s42
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+
+     stateDiagram-v2
+      s51 --> s52
+
+
+        
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+stateDiagram-v2
+    s61 --> s62
+
+
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+stateDiagram-v2
+    s71 --> s72
+
+
+      
+
+
+%%{init: {"look": "neo", "layout": "elk"} }%%
+stateDiagram-v2
+    s73 --> s74
+
+
+      
+
+ +
+
+
+
+    s1 --> s2: A transition
+
+  
+
+
+
+
+
+    stateDiagram-v2
+    a1 --> a2: A transition
+
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+
+   stateDiagram-v2
+    a3 --> a4: A transition
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+
+   stateDiagram-v2
+    a5 --> a6: A transition
+
+
+      
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+stateDiagram-v2
+    a7 --> a8: A transition
+
+
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+stateDiagram-v2
+   a9 --> a10: A transition
+
+
+      
+
+ +
+
+
+
+      [*] --> test
+    test --> [*]
+
+  
+
+
+
+
+
+    stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+
+   stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+
+   stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+
+      
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+stateDiagram-v2
+      [*] --> test
+    test --> [*]
+
+
+      
+
+ +
+
+
+
+      [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+  
+
+
+
+
+
+    stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+
+   stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+
+   stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+      
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+stateDiagram-v2
+      [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+      
+
+ +
+
+
+
+
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+  
+
+
+
+
+
+    stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+
+   stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+
+   stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+
+      
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+ stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+ stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+      
+
+ +
+
+
+    [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+
+
+
+  
+
+
+
+
+
+    stateDiagram-v2
+    [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+
+   stateDiagram-v2
+   [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+
+     stateDiagram-v2
+     [*] --> B1
+      B1 --> B2
+      B1 --> B3
+
+      state B1 {
+          [*] --> B11
+          B11 --> [*]
+      }
+      state B2 {
+          [*] --> B22
+          B22 --> [*]
+      }
+      state B3 {
+          [*] --> B33
+          B33 --> [*]
+      }
+        
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+ stateDiagram-v2
+  [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+ stateDiagram-v2
+[*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+      
+
+ +
+
+
+    state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+
+
+
+
+  
+
+
+
+
+
+    stateDiagram-v2
+    state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+
+   stateDiagram-v2
+   state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+
+     stateDiagram-v2
+     state if_state <<choice>>
+      [*] --> IsPositive
+      IsPositive --> if_state
+      if_state --> False: if n < 0
+      if_state --> True : if n >= 0
+        
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+ stateDiagram-v2
+   state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+ stateDiagram-v2
+ state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+ +
+
+
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+
+
+  
+
+
+
+
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+ +
+
+
+
+  TN1: The state with a note
+  note right of TN1
+      note text
+  end note
+  TN1 --> TN2
+  note left of TN2 : note text
+
+  
+
+
+
+
+   stateDiagram-v2
+     TN1: The state with a note
+        note right of TN1
+            Important information! You can write
+            notes.
+        end note
+        TN1 --> TN2
+        note left of TN2 : This is the note to the left.
+
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+   stateDiagram-v2
+     TN3: The state with a note
+        note right of TN3
+            Important information! You can write
+            notes.
+        end note
+        TN3 --> TN4
+        note left of TN4 : This is the note to the left.
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+   stateDiagram-v2
+     TN3: The state with a note
+        note right of TN3
+            Important information! You can write
+            notes.
+        end note
+        TN3 --> TN4
+        note left of TN4 : This is the note to the left.
+      
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+   stateDiagram-v2
+     TN5: The state with a note
+        note right of TN5
+            Important information! You can write
+            notes.
+        end note
+        TN5 --> TN6
+        note left of TN6 : This is the note to the left.
+
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+   stateDiagram-v2
+     TN7: The state with a note
+        note right of TN7
+            Important information! You can write
+            notes.
+        end note
+        TN7 --> TN8
+        note left of TN8 : This is the note to the left.
+      
+
+ +
+
+
+[*] --> Active
+
+state Active {
+    [*] --> NumLockOff
+    NumLockOff --> NumLockOn : EvNumLockPressed
+    NumLockOn --> NumLockOff : EvNumLockPressed
+    --
+    [*] --> CapsLockOff
+    CapsLockOff --> CapsLockOn : EvCapsLockPressed
+    CapsLockOn --> CapsLockOff : EvCapsLockPressed
+    --
+    [*] --> ScrollLockOff
+    ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+    ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+}
+
+
+  
+
+
+
+
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+      
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+      
+
+ +
+
+
+direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+  
+
+
+
+
+     stateDiagram-v2
+    direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "handdrawn"} }%%
+     stateDiagram-v2
+   direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "neo", "theme": "neo"} }%%
+     stateDiagram-v2
+   direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"handdrawn": false, "layout": "elk"} }%%
+     stateDiagram-v2
+    direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "handdrawn", "layout": "elk"} }%%
+     stateDiagram-v2
+    direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
Additional ContentNew content 1New content 2New content 3New content 4
+ + + + diff --git a/cypress/platform/state-refactor-neo-themes.html b/cypress/platform/state-refactor-neo-themes.html new file mode 100644 index 000000000..1995383c7 --- /dev/null +++ b/cypress/platform/state-refactor-neo-themes.html @@ -0,0 +1,1540 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
classic-defaultneo-neoneo-darkneo-forestneo-base
+ +
+
+
+      stateId
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default", "fontFamily": "Arial"} }%%
+stateDiagram-v2
+    stateId
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    stateId
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    stateId
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    stateId
+
+      
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    stateId
+
+      
+
+ +
+
+
+
+    state "description text" as s2
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    state "This is a state description" as s2
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    state "This is a state description" as s2
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    state "This is a state description" as s3
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    state "This is a state description" as s3
+      
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    state "This is a state description" as s4
+      
+
+ +
+
+
+
+    s2 :  description text
+  
+
+
+
+
+          %%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    s21 : This is a state description
+      
+
+
+          %%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    s21 : This is a state description
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    s22 : This is a state description
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    s22 : This is a state description
+
+      
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    s23 : This is a state description
+
+      
+
+ +
+
+
+
+    s1 --> s2
+
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    s31 --> s32
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    s31 --> s32
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+    s41 --> s42
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+     stateDiagram-v2
+      s51 --> s52
+
+
+        
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    s61 --> s62
+
+
+      
+
+ +
+
+
+
+    s1 --> s2: A transition
+
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    a1 --> a2: A transition
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    a1 --> a2: A transition
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+    a3 --> a4: A transition
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+    a5 --> a6: A transition
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+stateDiagram-v2
+    a7 --> a8: A transition
+
+
+      
+
+ +
+
+
+
+      [*] --> test
+    test --> [*]
+
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+
+      
+
+ +
+
+
+      [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+      
+
+ +
+
+
+
+
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+      
+
+ +
+
+
+    [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+
+
+
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+   [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+     stateDiagram-v2
+     [*] --> B1
+      B1 --> B2
+      B1 --> B3
+
+      state B1 {
+          [*] --> B11
+          B11 --> [*]
+      }
+      state B2 {
+          [*] --> B22
+          B22 --> [*]
+      }
+      state B3 {
+          [*] --> B33
+          B33 --> [*]
+      }
+        
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+ stateDiagram-v2
+  [*] --> B1
+    B1 --> B2
+    B1 --> B3
+
+    state B1 {
+        [*] --> B11
+        B11 --> [*]
+    }
+    state B2 {
+        [*] --> B22
+        B22 --> [*]
+    }
+    state B3 {
+        [*] --> B33
+        B33 --> [*]
+    }
+
+      
+
+ +
+
+
+    state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+
+
+
+
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+    stateDiagram-v2
+    state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+
+   stateDiagram-v2
+   state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+
+     stateDiagram-v2
+     state if_state <<choice>>
+      [*] --> IsPositive
+      IsPositive --> if_state
+      if_state --> False: if n < 0
+      if_state --> True : if n >= 0
+        
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+ stateDiagram-v2
+   state if_state <<choice>>
+    [*] --> IsPositive
+    IsPositive --> if_state
+    if_state --> False: if n < 0
+    if_state --> True : if n >= 0
+      
+
+ +
+
+
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+
+
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+    state fork_state <<fork>>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <<join>>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+
+ +
+
+
+
+  TN1: The state with a note
+  note right of TN1
+      note text
+  end note
+  TN1 --> TN2
+  note left of TN2 : note text
+
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+     TN1: The state with a note
+        note right of TN1
+            Important information! You can write
+            notes.
+        end note
+        TN1 --> TN2
+        note left of TN2 : This is the note to the left.
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+     TN1: The state with a note
+        note right of TN1
+            Important information! You can write
+            notes.
+        end note
+        TN1 --> TN2
+        note left of TN2 : This is the note to the left.
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+     TN3: The state with a note
+        note right of TN3
+            Important information! You can write
+            notes.
+        end note
+        TN3 --> TN4
+        note left of TN4 : This is the note to the left.
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+     TN3: The state with a note
+        note right of TN3
+            Important information! You can write
+            notes.
+        end note
+        TN3 --> TN4
+        note left of TN4 : This is the note to the left.
+      
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+   stateDiagram-v2
+     TN5: The state with a note
+        note right of TN5
+            Important information! You can write
+            notes.
+        end note
+        TN5 --> TN6
+        note left of TN6 : This is the note to the left.
+
+      
+
+ +
+
+
+[*] --> Active
+
+state Active {
+    [*] --> NumLockOff
+    NumLockOff --> NumLockOn : EvNumLockPressed
+    NumLockOn --> NumLockOff : EvNumLockPressed
+    --
+    [*] --> CapsLockOff
+    CapsLockOff --> CapsLockOn : EvCapsLockPressed
+    CapsLockOn --> CapsLockOff : EvCapsLockPressed
+    --
+    [*] --> ScrollLockOff
+    ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+    ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+}
+
+
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+      
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+
+      
+
+ +
+
+
+direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+  
+
+
+
+
+%%{init: {"look": "classic", "theme": "default","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "neo", "theme": "dark","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+   direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+   direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
+
+%%{init: {"look": "neo", "theme": "base","fontFamily": "Arial"} }%%
+     stateDiagram-v2
+    direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+
Additional ContentNew content 1New content 2New content 3New content 4
+ + + + diff --git a/cypress/platform/state-refactor.html b/cypress/platform/state-refactor.html index 8c04be7f6..fe0283b49 100644 --- a/cypress/platform/state-refactor.html +++ b/cypress/platform/state-refactor.html @@ -93,6 +93,7 @@ Dagre Dagre with rough + Dagre with neo ELK ELK with rough @@ -116,6 +117,14 @@ stateDiagram-v2
 %%{init: {"look": "handDrawn"} }%%
+stateDiagram-v2
+    stateId
+
+      
+ + +
+%%{init: {"look": "neo"} }%%
 stateDiagram-v2
     stateId
 
@@ -163,6 +172,13 @@ stateDiagram-v2
       
         
 %%{init: {"look": "handDrawn"} }%%
+stateDiagram-v2
+    state "This is a state description" as s3
+      
+ + +
+%%{init: {"look": "neo"} }%%
 stateDiagram-v2
     state "This is a state description" as s3
       
@@ -207,6 +223,14 @@ stateDiagram-v2
 %%{init: {"look": "handDrawn"} }%%
+stateDiagram-v2
+    s22 : This is a state description
+
+      
+ + +
+%%{init: {"look": "neo"} }%%
 stateDiagram-v2
     s22 : This is a state description
 
@@ -267,10 +291,20 @@ stateDiagram-v2
       
+
+  %%{init: {"look": "neo"} }%%
+
+     stateDiagram-v2
+      s51 --> s52
+
+
+        
+ +
 %%{init: {"handDrawn": false, "layout": "elk"} }%%
 stateDiagram-v2
-    s51 --> s52
+    s61 --> s62
 
 
       
@@ -279,7 +313,7 @@ stateDiagram-v2
 %%{init: {"look": "handDrawn", "layout": "elk"} }%%
 stateDiagram-v2
-    s61 --> s62
+    s71 --> s72
 
 
       
@@ -322,13 +356,23 @@ stateDiagram-v2 a3 --> a4: A transition +
+ + +
+%%{init: {"look": "neo"} }%%
+
+   stateDiagram-v2
+    a5 --> a6: A transition
+
+
       
 %%{init: {"handDrawn": false, "layout": "elk"} }%%
 stateDiagram-v2
-    a5 --> a6: A transition
+    a7 --> a8: A transition
 
 
       
@@ -337,7 +381,7 @@ stateDiagram-v2
 %%{init: {"look": "handDrawn", "layout": "elk"} }%%
 stateDiagram-v2
-   a7 --> a8: A transition
+   a9 --> a10: A transition
 
 
       
@@ -383,6 +427,17 @@ stateDiagram-v2 test --> [*] +
+ + +
+%%{init: {"look": "neo"} }%%
+
+   stateDiagram-v2
+       [*] --> test
+    test --> [*]
+
+
       
@@ -455,6 +510,20 @@ stateDiagram-v2 } + + + +
+%%{init: {"look": "neo"} }%%
+
+   stateDiagram-v2
+       [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
       
@@ -568,6 +637,31 @@ stateDiagram-v2 + + + +
+%%{init: {"look": "neo"} }%%
+
+   stateDiagram-v2
+    [*] --> Level1
+
+    state Level1 {
+        [*] --> Level2
+
+        state Level2 {
+            [*] --> level2
+            level2 --> Level3
+
+            state Level3 {
+                [*] --> level3
+                level3 --> [*]
+            }
+        }
+    }
+
+
+
       
@@ -698,6 +792,30 @@ stateDiagram-v2 +
+  %%{init: {"look": "neo"} }%%
+
+     stateDiagram-v2
+     [*] --> B1
+      B1 --> B2
+      B1 --> B3
+
+      state B1 {
+          [*] --> B11
+          B11 --> [*]
+      }
+      state B2 {
+          [*] --> B22
+          B22 --> [*]
+      }
+      state B3 {
+          [*] --> B33
+          B33 --> [*]
+      }
+        
+ + +
 %%{init: {"handDrawn": false, "layout": "elk"} }%%
  stateDiagram-v2
@@ -794,7 +912,19 @@ stateDiagram-v2
     if_state --> True : if n >= 0
       
- + +
+  %%{init: {"look": "neo"} }%%
+
+     stateDiagram-v2
+     state if_state <>
+      [*] --> IsPositive
+      IsPositive --> if_state
+      if_state --> False: if n < 0
+      if_state --> True : if n >= 0
+        
+ +
 %%{init: {"handDrawn": false, "layout": "elk"} }%%
  stateDiagram-v2
@@ -866,6 +996,23 @@ stateDiagram-v2
       
         
 %%{init: {"look": "handDrawn"} }%%
+   stateDiagram-v2
+    state fork_state <>
+      [*] --> fork_state
+      fork_state --> State2
+      fork_state --> State3
+
+      state join_state <>
+      State2 --> join_state
+      State3 --> join_state
+      join_state --> State4
+      State4 --> [*]
+
+      
+ + +
+%%{init: {"look": "neo"} }%%
    stateDiagram-v2
     state fork_state <>
       [*] --> fork_state
@@ -956,6 +1103,19 @@ stateDiagram-v2
       
         
 %%{init: {"look": "handDrawn"} }%%
+   stateDiagram-v2
+     TN3: The state with a note
+        note right of TN3
+            Important information! You can write
+            notes.
+        end note
+        TN3 --> TN4
+        note left of TN4 : This is the note to the left.
+      
+ + +
+%%{init: {"look": "neo"} }%%
    stateDiagram-v2
      TN3: The state with a note
         note right of TN3
@@ -1056,6 +1216,27 @@ state Active {
      stateDiagram-v2
     [*] --> Active
 
+    state Active {
+        [*] --> NumLockOff
+        NumLockOff --> NumLockOn : EvNumLockPressed
+        NumLockOn --> NumLockOff : EvNumLockPressed
+        --
+        [*] --> CapsLockOff
+        CapsLockOff --> CapsLockOn : EvCapsLockPressed
+        CapsLockOn --> CapsLockOff : EvCapsLockPressed
+        --
+        [*] --> ScrollLockOff
+        ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
+        ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
+    }
+      
+ + +
+%%{init: {"look": "neo"} }%%
+     stateDiagram-v2
+    [*] --> Active
+
     state Active {
         [*] --> NumLockOff
         NumLockOff --> NumLockOn : EvNumLockPressed
@@ -1161,6 +1342,21 @@ direction LR
         
 %%{init: {"look": "handDrawn"} }%%
      stateDiagram-v2
+   direction LR
+    [*] --> D1
+    D1 --> D2
+    D2 --> D3
+    state D3 {
+      direction TB
+      D11 --> D22
+    }
+    D2 --> D4
+      
+ + +
+%%{init: {"look": "neo"} }%%
+     stateDiagram-v2
    direction LR
     [*] --> D1
     D1 --> D2
diff --git a/cypress/platform/steph.html b/cypress/platform/steph.html
new file mode 100644
index 000000000..dfcaa1645
--- /dev/null
+++ b/cypress/platform/steph.html
@@ -0,0 +1,172 @@
+
+  
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+
+    
+  
+
+  
+    
+      %%{init: {"look": "neo", "theme": "neo","fontFamily": "Arial"} }%%
+flowchart
+      A[A really really really super long node] --> B & C
+      subgraph apa
+        D --> E
+      end
+      
+
+%%{init: {"look": "neo", "theme": "forest","fontFamily": "Arial",         "themeVariables": {
+          "useGradient": true,
+          "gradientStart": '#fff',
+          "gradientStop": '#ccc'
+        }} }%%
+stateDiagram-v2
+    stateId
+      
+
+flowchart LR
+    id1(Start)-->id2(Stop)
+    style id1 fill:#f9f,stroke:#333,stroke-width:4px
+    style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
+
+
+    
+ +
+      flowchart LR
+    A:::foo & B:::bar --> C:::foobar
+    classDef foo stroke:#f00
+    classDef bar stroke:#0f0
+    classDef ash color:red
+    class C ash
+    style C stroke:#00f, fill:black
+
+    
+ +
+flowchart TB
+    c1-->a2
+    subgraph one
+    a1-->a2
+    end
+    subgraph two
+    b1-->b2
+    end
+    subgraph three
+    c1-->c2
+    end
+    
+ +
+stateDiagram-v2
+    [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+
+
+    
+ + + + diff --git a/demos/architecture-dark.html b/demos/architecture-dark.html new file mode 100644 index 000000000..324789dd3 --- /dev/null +++ b/demos/architecture-dark.html @@ -0,0 +1,285 @@ + + + + + + Architecture Mermaid Quick Test Page + + + + + +

Architecture diagram demo

+

Simple diagram with groups

+
+      architecture-beta
+        group api(cloud)[API]
+
+        service db(database)[Database] in api
+        service disk1(disk)[Storage] in api
+        service disk2(disk)[Storage] in api
+        service server(server)[Server] in api
+        service gateway(internet)[Gateway]
+
+        db:L -- R:server
+        disk1:T -- B:server
+        disk2:T -- B:db
+        server:T -- B:gateway
+    
+
+ +

Groups within groups

+
+      architecture-beta
+        group api[API]
+        group public[Public API] in api
+        group private[Private API] in api
+
+
+        service serv1(server)[Server] in public
+
+
+        service serv2(server)[Server] in private
+        service db(database)[Database] in private
+
+        service gateway(internet)[Gateway] in api
+
+        serv1:B -- T:serv2
+
+        serv2:L -- R:db
+
+        serv1:L -- R:gateway
+    
+
+ +

Default icon (?) from unknown icon name

+
+      architecture-beta
+        service unknown(iconnamedoesntexist)[Unknown Icon]
+    
+
+ +

Split Direction

+
+      architecture-beta
+        service db(database)[Database]
+        service s3(disk)[Storage]
+        service serv1(server)[Server 1]
+        service serv2(server)[Server 2]
+        service disk(disk)[Disk]
+
+        db:L -- R:s3
+        serv1:L -- T:s3
+        serv2:L -- B:s3
+        serv1:T -- B:disk
+    
+
+ +

Arrow Tests

+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L <--> R:servL
+        servC:R <--> L:servR
+        servC:T <--> B:servT
+        servC:B <--> T:servB
+
+        servL:T <--> L:servT
+        servL:B <--> L:servB
+        servR:T <--> R:servT
+        servR:B <--> R:servB
+    
+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L <--> R:servL
+        servC:R <--> L:servR
+        servC:T <--> B:servT
+        servC:B <--> T:servB
+
+        servT:L <--> T:servL
+        servB:L <--> B:servL
+        servT:R <--> T:servR
+        servB:R <--> B:servR
+    
+
+ +

Group Edges

+
+      architecture-beta
+        group left_group(cloud)[Left]
+        group right_group(cloud)[Right]
+        group top_group(cloud)[Top]
+        group bottom_group(cloud)[Bottom]
+        group center_group(cloud)[Center]
+
+        service left_disk(disk)[Disk] in left_group
+        service right_disk(disk)[Disk] in right_group
+        service top_disk(disk)[Disk] in top_group
+        service bottom_disk(disk)[Disk] in bottom_group
+        service center_disk(disk)[Disk] in center_group
+
+        left_disk{group}:R <--> L:center_disk{group}
+        right_disk{group}:L <--> R:center_disk{group}
+        top_disk{group}:B <--> T:center_disk{group}
+        bottom_disk{group}:T <--> B:center_disk{group}
+  
+
+ +

Edge Label Test

+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L -[Label]- R:servL
+        servC:R -[Label]- L:servR
+        servC:T -[Label]- B:servT
+        servC:B -[Label]- T:servB
+
+        servL:T -[Label]- L:servT
+        servL:B -[Label]- L:servB
+        servR:T -[Label]- R:servT
+        servR:B -[Label]- R:servB
+    
+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L -[Label that is Long]- R:servL
+        servC:R -[Label that is Long]- L:servR
+        servC:T -[Label that is Long]- B:servT
+        servC:B -[Label that is Long]- T:servB
+
+        servL:T -[Label that is Long]- L:servT
+        servL:B -[Label that is Long]- L:servB
+        servR:T -[Label that is Long]- R:servT
+        servR:B -[Label that is Long]- R:servB
+    
+ +
+

Junction Demo

+
+      architecture-beta
+        service left_disk(disk)[Disk]
+        service top_disk(disk)[Disk]
+        service bottom_disk(disk)[Disk]
+        service top_gateway(internet)[Gateway]
+        service bottom_gateway(internet)[Gateway]
+        junction juncC
+        junction juncR
+
+        left_disk:R -- L:juncC
+        top_disk:B -- T:juncC
+        bottom_disk:T -- B:juncC
+        juncC:R -- L:juncR
+        top_gateway:B -- T:juncR
+        bottom_gateway:T -- B:juncR
+    
+
+ +

Junction Demo Groups

+
+      architecture-beta
+        group left
+        group right
+        service left_disk(disk)[Disk] in left
+        service top_disk(disk)[Disk] in left
+        service bottom_disk(disk)[Disk] in left
+        service top_gateway(internet)[Gateway] in right
+        service bottom_gateway(internet)[Gateway] in right
+        junction juncC in left
+        junction juncR in right
+
+        left_disk:R -- L:juncC
+        top_disk:B -- T:juncC
+        bottom_disk:T -- B:juncC
+
+
+        top_gateway:B <-- T:juncR
+        bottom_gateway:T <-- B:juncR
+
+        juncC{group}:R --> L:juncR{group}
+    
+
+ +

External Icons Demo

+
+    architecture-beta
+      service s3(logos:aws-s3)[Cloud Store]
+      service ec2(logos:aws-ec2)[Server]
+      service api(logos:aws-api-gateway)[Api Gateway]
+      service fa(fa:image)[Font Awesome Icon]
+    
+ + + + diff --git a/demos/architecture-mermaid-chart.html b/demos/architecture-mermaid-chart.html new file mode 100644 index 000000000..c611b3d5d --- /dev/null +++ b/demos/architecture-mermaid-chart.html @@ -0,0 +1,280 @@ + + + + + + Architecture Mermaid Quick Test Page + + + + + +

Architecture diagram demo

+

Simple diagram with groups

+
+      architecture-beta
+        group api(cloud)[API]
+
+        service db(database)[Database] in api
+        service disk1(disk)[Storage] in api
+        service disk2(disk)[Storage] in api
+        service server(server)[Server] in api
+        service gateway(internet)[Gateway]
+
+        db:L -- R:server
+        disk1:T -- B:server
+        disk2:T -- B:db
+        server:T -- B:gateway
+    
+
+ +

Groups within groups

+
+      architecture-beta
+        group api[API]
+        group public[Public API] in api
+        group private[Private API] in api
+
+
+        service serv1(server)[Server] in public
+
+
+        service serv2(server)[Server] in private
+        service db(database)[Database] in private
+
+        service gateway(internet)[Gateway] in api
+
+        serv1:B -- T:serv2
+
+        serv2:L -- R:db
+
+        serv1:L -- R:gateway
+    
+
+ +

Default icon (?) from unknown icon name

+
+      architecture-beta
+        service unknown(iconnamedoesntexist)[Unknown Icon]
+    
+
+ +

Split Direction

+
+      architecture-beta
+        service db(database)[Database]
+        service s3(disk)[Storage]
+        service serv1(server)[Server 1]
+        service serv2(server)[Server 2]
+        service disk(disk)[Disk]
+
+        db:L -- R:s3
+        serv1:L -- T:s3
+        serv2:L -- B:s3
+        serv1:T -- B:disk
+    
+
+ +

Arrow Tests

+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L <--> R:servL
+        servC:R <--> L:servR
+        servC:T <--> B:servT
+        servC:B <--> T:servB
+
+        servL:T <--> L:servT
+        servL:B <--> L:servB
+        servR:T <--> R:servT
+        servR:B <--> R:servB
+    
+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L <--> R:servL
+        servC:R <--> L:servR
+        servC:T <--> B:servT
+        servC:B <--> T:servB
+
+        servT:L <--> T:servL
+        servB:L <--> B:servL
+        servT:R <--> T:servR
+        servB:R <--> B:servR
+    
+
+ +

Group Edges

+
+      architecture-beta
+        group left_group(cloud)[Left]
+        group right_group(cloud)[Right]
+        group top_group(cloud)[Top]
+        group bottom_group(cloud)[Bottom]
+        group center_group(cloud)[Center]
+
+        service left_disk(disk)[Disk] in left_group
+        service right_disk(disk)[Disk] in right_group
+        service top_disk(disk)[Disk] in top_group
+        service bottom_disk(disk)[Disk] in bottom_group
+        service center_disk(disk)[Disk] in center_group
+
+        left_disk{group}:R <--> L:center_disk{group}
+        right_disk{group}:L <--> R:center_disk{group}
+        top_disk{group}:B <--> T:center_disk{group}
+        bottom_disk{group}:T <--> B:center_disk{group}
+  
+
+ +

Edge Label Test

+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L -[Label]- R:servL
+        servC:R -[Label]- L:servR
+        servC:T -[Label]- B:servT
+        servC:B -[Label]- T:servB
+
+        servL:T -[Label]- L:servT
+        servL:B -[Label]- L:servB
+        servR:T -[Label]- R:servT
+        servR:B -[Label]- R:servB
+    
+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L -[Label that is Long]- R:servL
+        servC:R -[Label that is Long]- L:servR
+        servC:T -[Label that is Long]- B:servT
+        servC:B -[Label that is Long]- T:servB
+
+        servL:T -[Label that is Long]- L:servT
+        servL:B -[Label that is Long]- L:servB
+        servR:T -[Label that is Long]- R:servT
+        servR:B -[Label that is Long]- R:servB
+    
+ +
+

Junction Demo

+
+      architecture-beta
+        service left_disk(disk)[Disk]
+        service top_disk(disk)[Disk]
+        service bottom_disk(disk)[Disk]
+        service top_gateway(internet)[Gateway]
+        service bottom_gateway(internet)[Gateway]
+        junction juncC
+        junction juncR
+
+        left_disk:R -- L:juncC
+        top_disk:B -- T:juncC
+        bottom_disk:T -- B:juncC
+        juncC:R -- L:juncR
+        top_gateway:B -- T:juncR
+        bottom_gateway:T -- B:juncR
+    
+
+ +

Junction Demo Groups

+
+      architecture-beta
+        group left
+        group right
+        service left_disk(disk)[Disk] in left
+        service top_disk(disk)[Disk] in left
+        service bottom_disk(disk)[Disk] in left
+        service top_gateway(internet)[Gateway] in right
+        service bottom_gateway(internet)[Gateway] in right
+        junction juncC in left
+        junction juncR in right
+
+        left_disk:R -- L:juncC
+        top_disk:B -- T:juncC
+        bottom_disk:T -- B:juncC
+
+
+        top_gateway:B <-- T:juncR
+        bottom_gateway:T <-- B:juncR
+
+        juncC{group}:R --> L:juncR{group}
+    
+
+ +

External Icons Demo

+
+    architecture-beta
+      service s3(logos:aws-s3)[Cloud Store]
+      service ec2(logos:aws-ec2)[Server]
+      service api(logos:aws-api-gateway)[Api Gateway]
+      service fa(fa:image)[Font Awesome Icon]
+    
+ + + + diff --git a/demos/architecture-neo-dark.html b/demos/architecture-neo-dark.html new file mode 100644 index 000000000..e229944c5 --- /dev/null +++ b/demos/architecture-neo-dark.html @@ -0,0 +1,284 @@ + + + + + + Architecture Mermaid Quick Test Page + + + + + +

Architecture diagram demo

+

Simple diagram with groups

+
+      architecture-beta
+        group api(cloud)[API]
+
+        service db(database)[Database] in api
+        service disk1(disk)[Storage] in api
+        service disk2(disk)[Storage] in api
+        service server(server)[Server] in api
+        service gateway(internet)[Gateway]
+
+        db:L -- R:server
+        disk1:T -- B:server
+        disk2:T -- B:db
+        server:T -- B:gateway
+    
+
+ +

Groups within groups

+
+      architecture-beta
+        group api[API]
+        group public[Public API] in api
+        group private[Private API] in api
+
+
+        service serv1(server)[Server] in public
+
+
+        service serv2(server)[Server] in private
+        service db(database)[Database] in private
+
+        service gateway(internet)[Gateway] in api
+
+        serv1:B -- T:serv2
+
+        serv2:L -- R:db
+
+        serv1:L -- R:gateway
+    
+
+ +

Default icon (?) from unknown icon name

+
+      architecture-beta
+        service unknown(iconnamedoesntexist)[Unknown Icon]
+    
+
+ +

Split Direction

+
+      architecture-beta
+        service db(database)[Database]
+        service s3(disk)[Storage]
+        service serv1(server)[Server 1]
+        service serv2(server)[Server 2]
+        service disk(disk)[Disk]
+
+        db:L -- R:s3
+        serv1:L -- T:s3
+        serv2:L -- B:s3
+        serv1:T -- B:disk
+    
+
+ +

Arrow Tests

+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L <--> R:servL
+        servC:R <--> L:servR
+        servC:T <--> B:servT
+        servC:B <--> T:servB
+
+        servL:T <--> L:servT
+        servL:B <--> L:servB
+        servR:T <--> R:servT
+        servR:B <--> R:servB
+    
+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L <--> R:servL
+        servC:R <--> L:servR
+        servC:T <--> B:servT
+        servC:B <--> T:servB
+
+        servT:L <--> T:servL
+        servB:L <--> B:servL
+        servT:R <--> T:servR
+        servB:R <--> B:servR
+    
+
+ +

Group Edges

+
+      architecture-beta
+        group left_group(cloud)[Left]
+        group right_group(cloud)[Right]
+        group top_group(cloud)[Top]
+        group bottom_group(cloud)[Bottom]
+        group center_group(cloud)[Center]
+
+        service left_disk(disk)[Disk] in left_group
+        service right_disk(disk)[Disk] in right_group
+        service top_disk(disk)[Disk] in top_group
+        service bottom_disk(disk)[Disk] in bottom_group
+        service center_disk(disk)[Disk] in center_group
+
+        left_disk{group}:R <--> L:center_disk{group}
+        right_disk{group}:L <--> R:center_disk{group}
+        top_disk{group}:B <--> T:center_disk{group}
+        bottom_disk{group}:T <--> B:center_disk{group}
+  
+
+ +

Edge Label Test

+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L -[Label]- R:servL
+        servC:R -[Label]- L:servR
+        servC:T -[Label]- B:servT
+        servC:B -[Label]- T:servB
+
+        servL:T -[Label]- L:servT
+        servL:B -[Label]- L:servB
+        servR:T -[Label]- R:servT
+        servR:B -[Label]- R:servB
+    
+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L -[Label that is Long]- R:servL
+        servC:R -[Label that is Long]- L:servR
+        servC:T -[Label that is Long]- B:servT
+        servC:B -[Label that is Long]- T:servB
+
+        servL:T -[Label that is Long]- L:servT
+        servL:B -[Label that is Long]- L:servB
+        servR:T -[Label that is Long]- R:servT
+        servR:B -[Label that is Long]- R:servB
+    
+ +
+

Junction Demo

+
+      architecture-beta
+        service left_disk(disk)[Disk]
+        service top_disk(disk)[Disk]
+        service bottom_disk(disk)[Disk]
+        service top_gateway(internet)[Gateway]
+        service bottom_gateway(internet)[Gateway]
+        junction juncC
+        junction juncR
+
+        left_disk:R -- L:juncC
+        top_disk:B -- T:juncC
+        bottom_disk:T -- B:juncC
+        juncC:R -- L:juncR
+        top_gateway:B -- T:juncR
+        bottom_gateway:T -- B:juncR
+    
+
+ +

Junction Demo Groups

+
+      architecture-beta
+        group left
+        group right
+        service left_disk(disk)[Disk] in left
+        service top_disk(disk)[Disk] in left
+        service bottom_disk(disk)[Disk] in left
+        service top_gateway(internet)[Gateway] in right
+        service bottom_gateway(internet)[Gateway] in right
+        junction juncC in left
+        junction juncR in right
+
+        left_disk:R -- L:juncC
+        top_disk:B -- T:juncC
+        bottom_disk:T -- B:juncC
+
+
+        top_gateway:B <-- T:juncR
+        bottom_gateway:T <-- B:juncR
+
+        juncC{group}:R --> L:juncR{group}
+    
+
+ +

External Icons Demo

+
+    architecture-beta
+      service s3(logos:aws-s3)[Cloud Store]
+      service ec2(logos:aws-ec2)[Server]
+      service api(logos:aws-api-gateway)[Api Gateway]
+      service fa(fa:image)[Font Awesome Icon]
+    
+ + + + diff --git a/demos/architecture-neo.html b/demos/architecture-neo.html new file mode 100644 index 000000000..0344f256a --- /dev/null +++ b/demos/architecture-neo.html @@ -0,0 +1,280 @@ + + + + + + Architecture Mermaid Quick Test Page + + + + + +

Architecture diagram demo

+

Simple diagram with groups

+
+      architecture-beta
+        group api(cloud)[API]
+
+        service db(database)[Database] in api
+        service disk1(disk)[Storage] in api
+        service disk2(disk)[Storage] in api
+        service server(server)[Server] in api
+        service gateway(internet)[Gateway]
+
+        db:L -- R:server
+        disk1:T -- B:server
+        disk2:T -- B:db
+        server:T -- B:gateway
+    
+
+ +

Groups within groups

+
+      architecture-beta
+        group api[API]
+        group public[Public API] in api
+        group private[Private API] in api
+
+
+        service serv1(server)[Server] in public
+
+
+        service serv2(server)[Server] in private
+        service db(database)[Database] in private
+
+        service gateway(internet)[Gateway] in api
+
+        serv1:B -- T:serv2
+
+        serv2:L -- R:db
+
+        serv1:L -- R:gateway
+    
+
+ +

Default icon (?) from unknown icon name

+
+      architecture-beta
+        service unknown(iconnamedoesntexist)[Unknown Icon]
+    
+
+ +

Split Direction

+
+      architecture-beta
+        service db(database)[Database]
+        service s3(disk)[Storage]
+        service serv1(server)[Server 1]
+        service serv2(server)[Server 2]
+        service disk(disk)[Disk]
+
+        db:L -- R:s3
+        serv1:L -- T:s3
+        serv2:L -- B:s3
+        serv1:T -- B:disk
+    
+
+ +

Arrow Tests

+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L <--> R:servL
+        servC:R <--> L:servR
+        servC:T <--> B:servT
+        servC:B <--> T:servB
+
+        servL:T <--> L:servT
+        servL:B <--> L:servB
+        servR:T <--> R:servT
+        servR:B <--> R:servB
+    
+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L <--> R:servL
+        servC:R <--> L:servR
+        servC:T <--> B:servT
+        servC:B <--> T:servB
+
+        servT:L <--> T:servL
+        servB:L <--> B:servL
+        servT:R <--> T:servR
+        servB:R <--> B:servR
+    
+
+ +

Group Edges

+
+      architecture-beta
+        group left_group(cloud)[Left]
+        group right_group(cloud)[Right]
+        group top_group(cloud)[Top]
+        group bottom_group(cloud)[Bottom]
+        group center_group(cloud)[Center]
+
+        service left_disk(disk)[Disk] in left_group
+        service right_disk(disk)[Disk] in right_group
+        service top_disk(disk)[Disk] in top_group
+        service bottom_disk(disk)[Disk] in bottom_group
+        service center_disk(disk)[Disk] in center_group
+
+        left_disk{group}:R <--> L:center_disk{group}
+        right_disk{group}:L <--> R:center_disk{group}
+        top_disk{group}:B <--> T:center_disk{group}
+        bottom_disk{group}:T <--> B:center_disk{group}
+  
+
+ +

Edge Label Test

+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L -[Label]- R:servL
+        servC:R -[Label]- L:servR
+        servC:T -[Label]- B:servT
+        servC:B -[Label]- T:servB
+
+        servL:T -[Label]- L:servT
+        servL:B -[Label]- L:servB
+        servR:T -[Label]- R:servT
+        servR:B -[Label]- R:servB
+    
+
+      architecture-beta
+        service servC(server)[Server 1]
+        service servL(server)[Server 2]
+        service servR(server)[Server 3]
+        service servT(server)[Server 4]
+        service servB(server)[Server 5]
+
+        servC:L -[Label that is Long]- R:servL
+        servC:R -[Label that is Long]- L:servR
+        servC:T -[Label that is Long]- B:servT
+        servC:B -[Label that is Long]- T:servB
+
+        servL:T -[Label that is Long]- L:servT
+        servL:B -[Label that is Long]- L:servB
+        servR:T -[Label that is Long]- R:servT
+        servR:B -[Label that is Long]- R:servB
+    
+ +
+

Junction Demo

+
+      architecture-beta
+        service left_disk(disk)[Disk]
+        service top_disk(disk)[Disk]
+        service bottom_disk(disk)[Disk]
+        service top_gateway(internet)[Gateway]
+        service bottom_gateway(internet)[Gateway]
+        junction juncC
+        junction juncR
+
+        left_disk:R -- L:juncC
+        top_disk:B -- T:juncC
+        bottom_disk:T -- B:juncC
+        juncC:R -- L:juncR
+        top_gateway:B -- T:juncR
+        bottom_gateway:T -- B:juncR
+    
+
+ +

Junction Demo Groups

+
+      architecture-beta
+        group left
+        group right
+        service left_disk(disk)[Disk] in left
+        service top_disk(disk)[Disk] in left
+        service bottom_disk(disk)[Disk] in left
+        service top_gateway(internet)[Gateway] in right
+        service bottom_gateway(internet)[Gateway] in right
+        junction juncC in left
+        junction juncR in right
+
+        left_disk:R -- L:juncC
+        top_disk:B -- T:juncC
+        bottom_disk:T -- B:juncC
+
+
+        top_gateway:B <-- T:juncR
+        bottom_gateway:T <-- B:juncR
+
+        juncC{group}:R --> L:juncR{group}
+    
+
+ +

External Icons Demo

+
+    architecture-beta
+      service s3(logos:aws-s3)[Cloud Store]
+      service ec2(logos:aws-ec2)[Server]
+      service api(logos:aws-api-gateway)[Api Gateway]
+      service fa(fa:image)[Font Awesome Icon]
+    
+ + + + diff --git a/demos/index.html b/demos/index.html index 07b51a313..8f0342219 100644 --- a/demos/index.html +++ b/demos/index.html @@ -91,6 +91,18 @@
  • Architecture

  • +
  • +

    Architecture-neo

    +
  • +
  • +

    Architecture-neo-dark

    +
  • +
  • +

    Architecture-mermaid-chart

    +
  • +
  • +

    Architecture-dark

    +
  • diff --git a/docs/config/faq.md b/docs/config/faq.md index c7ed6f210..db775e438 100644 --- a/docs/config/faq.md +++ b/docs/config/faq.md @@ -6,12 +6,12 @@ # Frequently Asked Questions -1. [How to add title to flowchart?](https://github.com/knsv/mermaid/issues/556#issuecomment-363182217) +1. [How to add title to flowchart?](https://github.com/mermaid-js/mermaid/issues/556#issuecomment-363182217) 2. [How to specify custom CSS file?](https://github.com/mermaidjs/mermaid.cli/pull/24#issuecomment-373402785) -3. [How to fix tooltip misplacement issue?](https://github.com/knsv/mermaid/issues/542#issuecomment-3343564621) -4. [How to specify gantt diagram xAxis format?](https://github.com/knsv/mermaid/issues/269#issuecomment-373229136) -5. [How to bind an event?](https://github.com/knsv/mermaid/issues/372) -6. [How to add newline in the text?](https://github.com/knsv/mermaid/issues/384#issuecomment-281339381) -7. [How to have special characters in link text?](https://github.com/knsv/mermaid/issues/407#issuecomment-329944735) -8. [How to change Flowchart curve style?](https://github.com/knsv/mermaid/issues/580#issuecomment-373929046) +3. [How to fix tooltip misplacement issue?](https://github.com/mermaid-js/mermaid/issues/542#issuecomment-3343564621) +4. [How to specify gantt diagram xAxis format?](https://github.com/mermaid-js/mermaid/issues/269#issuecomment-373229136) +5. [How to bind an event?](https://github.com/mermaid-js/mermaid/issues/372) +6. [How to add newline in the text?](https://github.com/mermaid-js/mermaid/issues/384#issuecomment-281339381) +7. [How to have special characters in link text?](https://github.com/mermaid-js/mermaid/issues/407#issuecomment-329944735) +8. [How to change Flowchart curve style?](https://github.com/mermaid-js/mermaid/issues/580#issuecomment-373929046) 9. [How to create a Flowchart end-Node that says "End"](https://github.com/mermaid-js/mermaid/issues/1444#issuecomment-639528897) diff --git a/docs/config/setup/README.md b/docs/config/setup/README.md index 0727321c8..68d17f3f4 100644 --- a/docs/config/setup/README.md +++ b/docs/config/setup/README.md @@ -4,7 +4,7 @@ > > ## Please edit the corresponding file in [/packages/mermaid/src/docs/config/setup/README.md](../../../packages/mermaid/src/docs/config/setup/README.md). -# mermaid +# @mermaid-chart/mermaid ## Modules diff --git a/docs/config/setup/classes/mermaid.UnknownDiagramError.md b/docs/config/setup/classes/mermaid.UnknownDiagramError.md index a3359c9d0..a7447968f 100644 --- a/docs/config/setup/classes/mermaid.UnknownDiagramError.md +++ b/docs/config/setup/classes/mermaid.UnknownDiagramError.md @@ -127,7 +127,7 @@ Error.prepareStackTrace #### Defined in -node_modules/.pnpm/@types+node\@20.16.11/node_modules/@types/node/globals.d.ts:98 +node_modules/.pnpm/@types+node\@20.16.5/node_modules/@types/node/globals.d.ts:98 --- @@ -141,7 +141,7 @@ Error.stackTraceLimit #### Defined in -node_modules/.pnpm/@types+node\@20.16.11/node_modules/@types/node/globals.d.ts:100 +node_modules/.pnpm/@types+node\@20.16.5/node_modules/@types/node/globals.d.ts:100 ## Methods @@ -168,4 +168,4 @@ Error.captureStackTrace #### Defined in -node_modules/.pnpm/@types+node\@20.16.11/node_modules/@types/node/globals.d.ts:91 +node_modules/.pnpm/@types+node\@20.16.5/node_modules/@types/node/globals.d.ts:91 diff --git a/docs/config/setup/interfaces/mermaid.LayoutData.md b/docs/config/setup/interfaces/mermaid.LayoutData.md index 5616e1c9a..2c343ff21 100644 --- a/docs/config/setup/interfaces/mermaid.LayoutData.md +++ b/docs/config/setup/interfaces/mermaid.LayoutData.md @@ -20,7 +20,7 @@ #### Defined in -[packages/mermaid/src/rendering-util/types.ts:144](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L144) +[packages/mermaid/src/rendering-util/types.ts:149](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L149) --- @@ -30,7 +30,7 @@ #### Defined in -[packages/mermaid/src/rendering-util/types.ts:143](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L143) +[packages/mermaid/src/rendering-util/types.ts:148](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L148) --- @@ -40,4 +40,4 @@ #### Defined in -[packages/mermaid/src/rendering-util/types.ts:142](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L142) +[packages/mermaid/src/rendering-util/types.ts:147](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L147) diff --git a/docs/config/setup/interfaces/mermaid.LayoutLoaderDefinition.md b/docs/config/setup/interfaces/mermaid.LayoutLoaderDefinition.md index 90a64187c..441eb9209 100644 --- a/docs/config/setup/interfaces/mermaid.LayoutLoaderDefinition.md +++ b/docs/config/setup/interfaces/mermaid.LayoutLoaderDefinition.md @@ -16,7 +16,7 @@ #### Defined in -[packages/mermaid/src/rendering-util/render.ts:24](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/render.ts#L24) +[packages/mermaid/src/rendering-util/render.ts:25](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/render.ts#L25) --- @@ -26,7 +26,7 @@ #### Defined in -[packages/mermaid/src/rendering-util/render.ts:23](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/render.ts#L23) +[packages/mermaid/src/rendering-util/render.ts:24](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/render.ts#L24) --- @@ -36,4 +36,4 @@ #### Defined in -[packages/mermaid/src/rendering-util/render.ts:22](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/render.ts#L22) +[packages/mermaid/src/rendering-util/render.ts:23](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/render.ts#L23) diff --git a/docs/config/setup/interfaces/mermaid.Mermaid.md b/docs/config/setup/interfaces/mermaid.Mermaid.md index f4e9eb4ec..523ff8e91 100644 --- a/docs/config/setup/interfaces/mermaid.Mermaid.md +++ b/docs/config/setup/interfaces/mermaid.Mermaid.md @@ -122,7 +122,7 @@ This function should be called before the run function. ### mermaidAPI -• **mermaidAPI**: `Readonly`<{ `defaultConfig`: [`MermaidConfig`](mermaid.MermaidConfig.md) = configApi.defaultConfig; `getConfig`: () => [`MermaidConfig`](mermaid.MermaidConfig.md) = configApi.getConfig; `getDiagramFromText`: (`text`: `string`, `metadata`: `Pick`<`DiagramMetadata`, `"title"`>) => `Promise`<`Diagram`> ; `getSiteConfig`: () => [`MermaidConfig`](mermaid.MermaidConfig.md) = configApi.getSiteConfig; `globalReset`: () => `void` ; `initialize`: (`userOptions`: [`MermaidConfig`](mermaid.MermaidConfig.md)) => `void` ; `parse`: (`text`: `string`, `parseOptions`: [`ParseOptions`](mermaid.ParseOptions.md) & { `suppressErrors`: `true` }) => `Promise`<[`ParseResult`](mermaid.ParseResult.md) | `false`>(`text`: `string`, `parseOptions?`: [`ParseOptions`](mermaid.ParseOptions.md)) => `Promise`<[`ParseResult`](mermaid.ParseResult.md)> ; `render`: (`id`: `string`, `text`: `string`, `svgContainingElement?`: `Element`) => `Promise`<[`RenderResult`](mermaid.RenderResult.md)> ; `reset`: () => `void` ; `setConfig`: (`conf`: [`MermaidConfig`](mermaid.MermaidConfig.md)) => [`MermaidConfig`](mermaid.MermaidConfig.md) = configApi.setConfig; `updateSiteConfig`: (`conf`: [`MermaidConfig`](mermaid.MermaidConfig.md)) => [`MermaidConfig`](mermaid.MermaidConfig.md) = configApi.updateSiteConfig }> +• **mermaidAPI**: `Readonly`<{ `defaultConfig`: [`MermaidConfig`](mermaid.MermaidConfig.md) = configApi.defaultConfig; `getConfig`: () => [`MermaidConfig`](mermaid.MermaidConfig.md) = configApi.getConfig; `getDiagramFromText`: (`text`: `string`, `metadata`: `Pick`<`DiagramMetadata`, `"title"`>) => `Promise`<`Diagram`> ; `getSiteConfig`: () => [`MermaidConfig`](mermaid.MermaidConfig.md) = configApi.getSiteConfig; `globalReset`: () => `void` ; `initialize`: (`userOptions`: [`MermaidConfig`](mermaid.MermaidConfig.md)) => `void` ; `parse`: (`text`: `string`, `parseOptions`: [`ParseOptions`](mermaid.ParseOptions.md) & { `suppressErrors`: `true` }) => `Promise`<[`ParseResult`](mermaid.ParseResult.md) & { `error?`: `unknown` }>(`text`: `string`, `parseOptions?`: [`ParseOptions`](mermaid.ParseOptions.md)) => `Promise`<[`ParseResult`](mermaid.ParseResult.md)> ; `render`: (`id`: `string`, `text`: `string`, `svgContainingElement?`: `Element`, `positions?`: `Positions`) => `Promise`<[`RenderResult`](mermaid.RenderResult.md)> ; `reset`: () => `void` ; `setConfig`: (`conf`: [`MermaidConfig`](mermaid.MermaidConfig.md)) => [`MermaidConfig`](mermaid.MermaidConfig.md) = configApi.setConfig; `updateSiteConfig`: (`conf`: [`MermaidConfig`](mermaid.MermaidConfig.md)) => [`MermaidConfig`](mermaid.MermaidConfig.md) = configApi.updateSiteConfig }> **`Deprecated`** @@ -136,11 +136,11 @@ Use [parse](mermaid.Mermaid.md#parse) and [render](mermaid.Mermaid.md#render) in ### parse -• **parse**: (`text`: `string`, `parseOptions`: [`ParseOptions`](mermaid.ParseOptions.md) & { `suppressErrors`: `true` }) => `Promise`<[`ParseResult`](mermaid.ParseResult.md) | `false`>(`text`: `string`, `parseOptions?`: [`ParseOptions`](mermaid.ParseOptions.md)) => `Promise`<[`ParseResult`](mermaid.ParseResult.md)> +• **parse**: (`text`: `string`, `parseOptions`: [`ParseOptions`](mermaid.ParseOptions.md) & { `suppressErrors`: `true` }) => `Promise`<[`ParseResult`](mermaid.ParseResult.md) & { `error?`: `unknown` }>(`text`: `string`, `parseOptions?`: [`ParseOptions`](mermaid.ParseOptions.md)) => `Promise`<[`ParseResult`](mermaid.ParseResult.md)> #### Type declaration -▸ (`text`, `parseOptions`): `Promise`<[`ParseResult`](mermaid.ParseResult.md) | `false`> +▸ (`text`, `parseOptions`): `Promise`<[`ParseResult`](mermaid.ParseResult.md) & { `error?`: `unknown` }> Parse the text and validate the syntax. @@ -153,7 +153,7 @@ Parse the text and validate the syntax. ##### Returns -`Promise`<[`ParseResult`](mermaid.ParseResult.md) | `false`> +`Promise`<[`ParseResult`](mermaid.ParseResult.md) & { `error?`: `unknown` }> An object with the `diagramType` set to type of the diagram if valid. Otherwise `false` if parseOptions.suppressErrors is `true`. @@ -272,19 +272,20 @@ Used to register external diagram types. ### render -• **render**: (`id`: `string`, `text`: `string`, `svgContainingElement?`: `Element`) => `Promise`<[`RenderResult`](mermaid.RenderResult.md)> +• **render**: (`id`: `string`, `text`: `string`, `svgContainingElement?`: `Element`, `positions?`: `Positions`) => `Promise`<[`RenderResult`](mermaid.RenderResult.md)> #### Type declaration -▸ (`id`, `text`, `svgContainingElement?`): `Promise`<[`RenderResult`](mermaid.RenderResult.md)> +▸ (`id`, `text`, `svgContainingElement?`, `positions?`): `Promise`<[`RenderResult`](mermaid.RenderResult.md)> ##### Parameters -| Name | Type | -| :---------------------- | :-------- | -| `id` | `string` | -| `text` | `string` | -| `svgContainingElement?` | `Element` | +| Name | Type | +| :---------------------- | :---------- | +| `id` | `string` | +| `text` | `string` | +| `svgContainingElement?` | `Element` | +| `positions?` | `Positions` | ##### Returns diff --git a/docs/config/setup/interfaces/mermaid.MermaidConfig.md b/docs/config/setup/interfaces/mermaid.MermaidConfig.md index 14c348145..c6a0ff0ce 100644 --- a/docs/config/setup/interfaces/mermaid.MermaidConfig.md +++ b/docs/config/setup/interfaces/mermaid.MermaidConfig.md @@ -16,7 +16,7 @@ #### Defined in -[packages/mermaid/src/config.type.ts:122](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L122) +[packages/mermaid/src/config.type.ts:133](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L133) --- @@ -26,7 +26,7 @@ #### Defined in -[packages/mermaid/src/config.type.ts:194](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L194) +[packages/mermaid/src/config.type.ts:205](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L205) --- @@ -39,7 +39,7 @@ This matters if you are using base tag settings. #### Defined in -[packages/mermaid/src/config.type.ts:141](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L141) +[packages/mermaid/src/config.type.ts:152](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L152) --- @@ -49,7 +49,7 @@ This matters if you are using base tag settings. #### Defined in -[packages/mermaid/src/config.type.ts:201](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L201) +[packages/mermaid/src/config.type.ts:212](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L212) --- @@ -59,7 +59,7 @@ This matters if you are using base tag settings. #### Defined in -[packages/mermaid/src/config.type.ts:198](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L198) +[packages/mermaid/src/config.type.ts:209](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L209) --- @@ -69,7 +69,7 @@ This matters if you are using base tag settings. #### Defined in -[packages/mermaid/src/config.type.ts:187](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L187) +[packages/mermaid/src/config.type.ts:198](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L198) --- @@ -79,7 +79,7 @@ This matters if you are using base tag settings. #### Defined in -[packages/mermaid/src/config.type.ts:113](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L113) +[packages/mermaid/src/config.type.ts:124](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L124) --- @@ -93,7 +93,7 @@ You can set this attribute to base the seed on a static string. #### Defined in -[packages/mermaid/src/config.type.ts:181](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L181) +[packages/mermaid/src/config.type.ts:192](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L192) --- @@ -111,7 +111,7 @@ should not change unless content is changed. #### Defined in -[packages/mermaid/src/config.type.ts:174](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L174) +[packages/mermaid/src/config.type.ts:185](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L185) --- @@ -121,7 +121,7 @@ should not change unless content is changed. #### Defined in -[packages/mermaid/src/config.type.ts:202](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L202) +[packages/mermaid/src/config.type.ts:213](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L213) --- @@ -139,7 +139,7 @@ should not change unless content is changed. #### Defined in -[packages/mermaid/src/config.type.ts:91](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L91) +[packages/mermaid/src/config.type.ts:102](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L102) --- @@ -149,7 +149,7 @@ should not change unless content is changed. #### Defined in -[packages/mermaid/src/config.type.ts:189](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L189) +[packages/mermaid/src/config.type.ts:200](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L200) --- @@ -159,7 +159,7 @@ should not change unless content is changed. #### Defined in -[packages/mermaid/src/config.type.ts:182](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L182) +[packages/mermaid/src/config.type.ts:193](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L193) --- @@ -173,7 +173,7 @@ See #### Defined in -[packages/mermaid/src/config.type.ts:121](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L121) +[packages/mermaid/src/config.type.ts:132](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L132) --- @@ -183,7 +183,7 @@ See #### Defined in -[packages/mermaid/src/config.type.ts:204](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L204) +[packages/mermaid/src/config.type.ts:215](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L215) --- @@ -197,7 +197,7 @@ If set to true, ignores legacyMathML. #### Defined in -[packages/mermaid/src/config.type.ts:163](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L163) +[packages/mermaid/src/config.type.ts:174](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L174) --- @@ -207,7 +207,7 @@ If set to true, ignores legacyMathML. #### Defined in -[packages/mermaid/src/config.type.ts:184](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L184) +[packages/mermaid/src/config.type.ts:195](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L195) --- @@ -217,7 +217,7 @@ If set to true, ignores legacyMathML. #### Defined in -[packages/mermaid/src/config.type.ts:197](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L197) +[packages/mermaid/src/config.type.ts:208](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L208) --- @@ -229,7 +229,7 @@ Defines the seed to be used when using handDrawn look. This is important for the #### Defined in -[packages/mermaid/src/config.type.ts:76](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L76) +[packages/mermaid/src/config.type.ts:87](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L87) --- @@ -239,7 +239,7 @@ Defines the seed to be used when using handDrawn look. This is important for the #### Defined in -[packages/mermaid/src/config.type.ts:114](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L114) +[packages/mermaid/src/config.type.ts:125](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L125) --- @@ -249,7 +249,7 @@ Defines the seed to be used when using handDrawn look. This is important for the #### Defined in -[packages/mermaid/src/config.type.ts:185](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L185) +[packages/mermaid/src/config.type.ts:196](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L196) --- @@ -259,7 +259,7 @@ Defines the seed to be used when using handDrawn look. This is important for the #### Defined in -[packages/mermaid/src/config.type.ts:196](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L196) +[packages/mermaid/src/config.type.ts:207](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L207) --- @@ -271,7 +271,7 @@ Defines which layout algorithm to use for rendering the diagram. #### Defined in -[packages/mermaid/src/config.type.ts:81](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L81) +[packages/mermaid/src/config.type.ts:92](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L92) --- @@ -286,7 +286,7 @@ fall back to legacy rendering for KaTeX. #### Defined in -[packages/mermaid/src/config.type.ts:156](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L156) +[packages/mermaid/src/config.type.ts:167](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L167) --- @@ -298,19 +298,19 @@ This option decides the amount of logging to be used by mermaid. #### Defined in -[packages/mermaid/src/config.type.ts:127](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L127) +[packages/mermaid/src/config.type.ts:138](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L138) --- ### look -• `Optional` **look**: `"classic"` | `"handDrawn"` +• `Optional` **look**: `"neo"` | `"classic"` | `"handDrawn"` Defines which main look to use for the diagram. #### Defined in -[packages/mermaid/src/config.type.ts:71](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L71) +[packages/mermaid/src/config.type.ts:82](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L82) --- @@ -320,7 +320,7 @@ Defines which main look to use for the diagram. #### Defined in -[packages/mermaid/src/config.type.ts:205](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L205) +[packages/mermaid/src/config.type.ts:216](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L216) --- @@ -332,7 +332,7 @@ Defines the maximum number of edges that can be drawn in a graph. #### Defined in -[packages/mermaid/src/config.type.ts:90](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L90) +[packages/mermaid/src/config.type.ts:101](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L101) --- @@ -344,7 +344,7 @@ The maximum allowed size of the users text diagram #### Defined in -[packages/mermaid/src/config.type.ts:85](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L85) +[packages/mermaid/src/config.type.ts:96](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L96) --- @@ -354,7 +354,7 @@ The maximum allowed size of the users text diagram #### Defined in -[packages/mermaid/src/config.type.ts:195](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L195) +[packages/mermaid/src/config.type.ts:206](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L206) --- @@ -364,7 +364,7 @@ The maximum allowed size of the users text diagram #### Defined in -[packages/mermaid/src/config.type.ts:200](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L200) +[packages/mermaid/src/config.type.ts:211](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L211) --- @@ -374,7 +374,7 @@ The maximum allowed size of the users text diagram #### Defined in -[packages/mermaid/src/config.type.ts:190](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L190) +[packages/mermaid/src/config.type.ts:201](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L201) --- @@ -384,7 +384,7 @@ The maximum allowed size of the users text diagram #### Defined in -[packages/mermaid/src/config.type.ts:191](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L191) +[packages/mermaid/src/config.type.ts:202](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L202) --- @@ -394,7 +394,7 @@ The maximum allowed size of the users text diagram #### Defined in -[packages/mermaid/src/config.type.ts:193](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L193) +[packages/mermaid/src/config.type.ts:204](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L204) --- @@ -404,7 +404,7 @@ The maximum allowed size of the users text diagram #### Defined in -[packages/mermaid/src/config.type.ts:199](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L199) +[packages/mermaid/src/config.type.ts:210](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L210) --- @@ -418,7 +418,7 @@ This prevents malicious graph directives from overriding a site's default securi #### Defined in -[packages/mermaid/src/config.type.ts:148](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L148) +[packages/mermaid/src/config.type.ts:159](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L159) --- @@ -430,7 +430,7 @@ Level of trust for parsed diagram #### Defined in -[packages/mermaid/src/config.type.ts:131](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L131) +[packages/mermaid/src/config.type.ts:142](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L142) --- @@ -440,7 +440,7 @@ Level of trust for parsed diagram #### Defined in -[packages/mermaid/src/config.type.ts:183](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L183) +[packages/mermaid/src/config.type.ts:194](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L194) --- @@ -452,7 +452,7 @@ Dictates whether mermaid starts on Page load #### Defined in -[packages/mermaid/src/config.type.ts:135](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L135) +[packages/mermaid/src/config.type.ts:146](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L146) --- @@ -462,7 +462,7 @@ Dictates whether mermaid starts on Page load #### Defined in -[packages/mermaid/src/config.type.ts:188](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L188) +[packages/mermaid/src/config.type.ts:199](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L199) --- @@ -475,13 +475,13 @@ This is useful when you want to control how to handle syntax errors in your appl #### Defined in -[packages/mermaid/src/config.type.ts:211](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L211) +[packages/mermaid/src/config.type.ts:222](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L222) --- ### theme -• `Optional` **theme**: `"default"` | `"base"` | `"dark"` | `"forest"` | `"neutral"` | `"null"` +• `Optional` **theme**: `"default"` | `"base"` | `"dark"` | `"forest"` | `"neutral"` | `"neo"` | `"neo-dark"` | `"redux"` | `"redux-dark"` | `"mc"` | `"null"` Theme, the CSS style sheet. You may also use `themeCSS` to override this value. @@ -498,7 +498,7 @@ You may also use `themeCSS` to override this value. #### Defined in -[packages/mermaid/src/config.type.ts:66](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L66) +[packages/mermaid/src/config.type.ts:77](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L77) --- @@ -508,7 +508,7 @@ You may also use `themeCSS` to override this value. #### Defined in -[packages/mermaid/src/config.type.ts:65](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L65) +[packages/mermaid/src/config.type.ts:76](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L76) --- @@ -518,7 +518,7 @@ You may also use `themeCSS` to override this value. #### Defined in -[packages/mermaid/src/config.type.ts:186](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L186) +[packages/mermaid/src/config.type.ts:197](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L197) --- @@ -528,7 +528,7 @@ You may also use `themeCSS` to override this value. #### Defined in -[packages/mermaid/src/config.type.ts:203](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L203) +[packages/mermaid/src/config.type.ts:214](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L214) --- @@ -538,4 +538,4 @@ You may also use `themeCSS` to override this value. #### Defined in -[packages/mermaid/src/config.type.ts:192](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L192) +[packages/mermaid/src/config.type.ts:203](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L203) diff --git a/docs/config/setup/interfaces/mermaid.ParseOptions.md b/docs/config/setup/interfaces/mermaid.ParseOptions.md index 717e35565..589ef807c 100644 --- a/docs/config/setup/interfaces/mermaid.ParseOptions.md +++ b/docs/config/setup/interfaces/mermaid.ParseOptions.md @@ -19,4 +19,4 @@ The `parseError` function will not be called. #### Defined in -[packages/mermaid/src/types.ts:59](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L59) +[packages/mermaid/src/types.ts:66](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L66) diff --git a/docs/config/setup/interfaces/mermaid.ParseResult.md b/docs/config/setup/interfaces/mermaid.ParseResult.md index 9f90b6dd4..c75683d9b 100644 --- a/docs/config/setup/interfaces/mermaid.ParseResult.md +++ b/docs/config/setup/interfaces/mermaid.ParseResult.md @@ -10,6 +10,18 @@ ## Properties +### code + +• **code**: `string` + +The mermaid code after extracting the config. + +#### Defined in + +[packages/mermaid/src/types.ts:74](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L74) + +--- + ### config • **config**: [`MermaidConfig`](mermaid.MermaidConfig.md) @@ -18,16 +30,46 @@ The config passed as YAML frontmatter or directives #### Defined in +[packages/mermaid/src/types.ts:78](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L78) + +--- + +### diagram + +• `Optional` **diagram**: `Diagram` + +#### Defined in + +[packages/mermaid/src/types.ts:80](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L80) + +--- + +### error + +• `Optional` **error**: `unknown` + +The error that occurred during parsing, if any. + +#### Defined in + +[packages/mermaid/src/types.ts:84](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L84) + +--- + +### success + +• **success**: `boolean` + +#### Defined in + [packages/mermaid/src/types.ts:70](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L70) --- -### diagramType +### title -• **diagramType**: `string` - -The diagram type, e.g. 'flowchart', 'sequence', etc. +• `Optional` **title**: `string` #### Defined in -[packages/mermaid/src/types.ts:66](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L66) +[packages/mermaid/src/types.ts:79](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L79) diff --git a/docs/config/setup/interfaces/mermaid.RenderResult.md b/docs/config/setup/interfaces/mermaid.RenderResult.md index f882b7af4..8e759ea26 100644 --- a/docs/config/setup/interfaces/mermaid.RenderResult.md +++ b/docs/config/setup/interfaces/mermaid.RenderResult.md @@ -39,7 +39,7 @@ bindFunctions?.(div); // To call bindFunctions only if it's present. #### Defined in -[packages/mermaid/src/types.ts:98](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L98) +[packages/mermaid/src/types.ts:113](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L113) --- @@ -51,7 +51,7 @@ The diagram type, e.g. 'flowchart', 'sequence', etc. #### Defined in -[packages/mermaid/src/types.ts:88](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L88) +[packages/mermaid/src/types.ts:103](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L103) --- @@ -63,4 +63,4 @@ The svg code for the rendered graph. #### Defined in -[packages/mermaid/src/types.ts:84](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L84) +[packages/mermaid/src/types.ts:99](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L99) diff --git a/docs/config/setup/modules/mermaid.md b/docs/config/setup/modules/mermaid.md index 60c219f2d..78cb90f69 100644 --- a/docs/config/setup/modules/mermaid.md +++ b/docs/config/setup/modules/mermaid.md @@ -67,7 +67,7 @@ #### Defined in -[packages/mermaid/src/diagram-api/types.ts:130](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L130) +[packages/mermaid/src/diagram-api/types.ts:157](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L157) --- @@ -77,7 +77,7 @@ #### Defined in -[packages/mermaid/src/diagram-api/types.ts:132](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L132) +[packages/mermaid/src/diagram-api/types.ts:159](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L159) ## Variables @@ -88,3 +88,77 @@ #### Defined in [packages/mermaid/src/mermaid.ts:442](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L442) + +## Functions + +### calcIntersect + +▸ **calcIntersect**(`nodeId`, `point`): `Point` | `Promise`<`Point`> + +#### Parameters + +| Name | Type | +| :------- | :------- | +| `nodeId` | `string` | +| `point` | `Point` | + +#### Returns + +`Point` | `Promise`<`Point`> + +#### Defined in + +[packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js:172](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js#L172) + +--- + +### calcIntersections + +▸ **calcIntersections**(`startNodeId`, `endNodeId`, `startNodeSize`, `endNodeSize`): `IntersectionPoint`\[] + +#### Parameters + +| Name | Type | +| :-------------------- | :---------------------- | +| `startNodeId` | `string` | +| `endNodeId` | `undefined` \| `string` | +| `startNodeSize` | `NodePosition` | +| `endNodeSize` | `Object` | +| `endNodeSize.height?` | `number` | +| `endNodeSize.width?` | `number` | +| `endNodeSize.x` | `number` | +| `endNodeSize.y` | `number` | + +#### Returns + +`IntersectionPoint`\[] + +**`Throws`** + +If the start node doesn't exist in the nodeDB (e.g. `render` hasn't been called yet) + +#### Defined in + +[packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js:115](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js#L115) + +--- + +### calcNodeIntersections + +▸ **calcNodeIntersections**(`targetNodeId`, `_node1`, `_node2`): `IntersectionPoint`\[] | `Promise`<`IntersectionPoint`\[]> + +#### Parameters + +| Name | Type | +| :------------- | :------------------------------------------------------------------------------------------------ | +| `targetNodeId` | `any` | +| `_node1` | `Pick`<`Node`, `"width"` \| `"height"` \| `"x"` \| `"y"` \| `"id"` \| `"shape"` \| `"intersect"`> | +| `_node2` | `Pick`<`Node`, `"width"` \| `"height"` \| `"x"` \| `"y"` \| `"id"` \| `"shape"` \| `"intersect"`> | + +#### Returns + +`IntersectionPoint`\[] | `Promise`<`IntersectionPoint`\[]> + +#### Defined in + +[packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js:78](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js#L78) diff --git a/docs/ecosystem/integrations-community.md b/docs/ecosystem/integrations-community.md index b12e148a9..101252303 100644 --- a/docs/ecosystem/integrations-community.md +++ b/docs/ecosystem/integrations-community.md @@ -44,6 +44,7 @@ To add an integration to this list, see the [Integrations - create page](./integ - [Deepdwn](https://billiam.itch.io/deepdwn) ✅ - [Doctave](https://www.doctave.com/) ✅ - [Mermaid in Markdown code blocks](https://docs.doctave.com/components/mermaid) ✅ +- [Forgejo](https://forgejo.org/) ✅ - [GitBook](https://gitbook.com) - [Mermaid Plugin](https://github.com/JozoVilcek/gitbook-plugin-mermaid) - [Mermaid plugin for GitBook](https://github.com/wwformat/gitbook-plugin-mermaid-pdf) @@ -99,8 +100,7 @@ Blogging frameworks and platforms - [Nextra](https://nextra.site/) - [Mermaid](https://nextra.site/docs/guide/mermaid) - [WordPress](https://wordpress.org) - - [WordPress Markdown Editor](https://wordpress.org/plugins/wp-githuber-md) - - [WP-ReliableMD](https://wordpress.org/plugins/wp-reliablemd/) + - [MerPRess](https://wordpress.org/plugins/merpress/) ### CMS/ECM diff --git a/docs/intro/index.md b/docs/intro/index.md index 5a71b45a4..35707ee8f 100644 --- a/docs/intro/index.md +++ b/docs/intro/index.md @@ -49,7 +49,7 @@ For a more detailed introduction to Mermaid and some of its more basic uses, loo 🌐 [CDN](https://www.jsdelivr.com/package/npm/mermaid) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](../community/contributing.md) | 🔌 [Plug-Ins](../ecosystem/integrations-community.md) -> 🖖 Keep a steady pulse: mermaid needs more Collaborators, [Read More](https://github.com/knsv/mermaid/issues/866). +> 🖖 Keep a steady pulse: mermaid needs more Collaborators, [Read More](https://github.com/mermaid-js/mermaid/issues/866). :trophy: **Mermaid was nominated and won the [JS Open Source Awards (2019)](https://osawards.com/javascript/#nominees) in the category "The most exciting use of technology"!!!** @@ -453,7 +453,7 @@ A quick note from Knut Sveidqvist: > > _Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._ > -> _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_ +> _Thank you to the ever-growing list of [contributors](https://github.com/mermaid-js/mermaid/graphs/contributors) that brought the project this far!_ --- diff --git a/docs/syntax/flowchart.md b/docs/syntax/flowchart.md index 3837e77de..40ee2ef63 100644 --- a/docs/syntax/flowchart.md +++ b/docs/syntax/flowchart.md @@ -1183,6 +1183,91 @@ flowchart TB B --> D ``` +### Attaching an ID to Edges + +Mermaid now supports assigning IDs to edges, similar to how IDs and metadata can be attached to nodes. This feature lays the groundwork for more advanced styling, classes, and animation capabilities on edges. + +**Syntax:** + +To give an edge an ID, prepend the edge syntax with the ID followed by an `@` character. For example: + +```mermaid-example +flowchart LR + A e1@–> B +``` + +```mermaid +flowchart LR + A e1@–> B +``` + +In this example, `e1` is the ID of the edge connecting `A` to `B`. You can then use this ID in later definitions or style statements, just like with nodes. + +### Turning an Animation On + +Once you have assigned an ID to an edge, you can turn on animations for that edge by defining the edge’s properties: + +```mermaid-example +flowchart LR + A e1@==> B + e1@{ animate: true } +``` + +```mermaid +flowchart LR + A e1@==> B + e1@{ animate: true } +``` + +This tells Mermaid that the edge `e1` should be animated. + +### Selecting Type of Animation + +In the initial version, two animation speeds are supported: `fast` and `slow`. Selecting a specific animation type is a shorthand for enabling animation and setting the animation speed in one go. + +**Examples:** + +```mermaid-example +flowchart LR + A e1@–> B + e1@{ animation: fast } +``` + +```mermaid +flowchart LR + A e1@–> B + e1@{ animation: fast } +``` + +This is equivalent to `{ animate: true, animation: fast }`. + +### Using classDef Statements for Animations + +You can also animate edges by assigning a class to them and then defining animation properties in a `classDef` statement. For example: + +```mermaid-example +flowchart LR + A e1@–> B + classDef animate stroke-dasharray: 9,5,stroke-dashoffset: 900,animation: dash 25s linear infinite; + class e1 animate +``` + +```mermaid +flowchart LR + A e1@–> B + classDef animate stroke-dasharray: 9,5,stroke-dashoffset: 900,animation: dash 25s linear infinite; + class e1 animate +``` + +In this snippet: + +- `e1@-->` creates an edge with ID `e1`. +- `classDef animate` defines a class named `animate` with styling and animation properties. +- `class e1 animate` applies the `animate` class to the edge `e1`. + +**Note on Escaping Commas:** +When setting the `stroke-dasharray` property, remember to escape commas as `\,` since commas are used as delimiters in Mermaid’s style definitions. + ## New arrow types There are new types of arrows supported: @@ -1707,8 +1792,7 @@ graph LR ``` For a full list of available curves, including an explanation of custom curves, refer to -the [Shapes](https://github.com/d3/d3-shape/blob/main/README.md#curves) documentation in the -[d3-shape](https://github.com/d3/d3-shape/) project. +the [Shapes](https://d3js.org/d3-shape/curve) documentation in the [d3-shape](https://github.com/d3/d3-shape/) project. ### Styling a node diff --git a/docs/syntax/gantt.md b/docs/syntax/gantt.md index cdaf0c2ac..ff6be97aa 100644 --- a/docs/syntax/gantt.md +++ b/docs/syntax/gantt.md @@ -500,7 +500,7 @@ mermaid.ganttConfig = { sectionFontSize: 24, // Font size for sections numberSectionStyles: 1, // The number of alternating section styles axisFormat: '%d/%m', // Date/time format of the axis - tickInterval: '1 week', // Axis ticks + tickInterval: '1week', // Axis ticks topAxis: true, // When this flag is set, date labels will be added to the top of the chart displayMode: 'compact', // Turns compact mode on weekday: 'sunday', // On which day a week-based interval should start diff --git a/docs/syntax/timeline.md b/docs/syntax/timeline.md index 3d476c41d..4f055a56d 100644 --- a/docs/syntax/timeline.md +++ b/docs/syntax/timeline.md @@ -18,7 +18,7 @@ timeline 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -28,7 +28,7 @@ timeline 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -67,7 +67,7 @@ timeline title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -76,7 +76,7 @@ timeline title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -198,7 +198,7 @@ However, if there is no section defined, then we have two possibilities: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -208,7 +208,7 @@ However, if there is no section defined, then we have two possibilities: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -239,7 +239,7 @@ let us look at same example, where we have disabled the multiColor option. title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -250,7 +250,7 @@ let us look at same example, where we have disabled the multiColor option. title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -278,7 +278,7 @@ Now let's override the default values for the `cScale0` to `cScale2` variables: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -296,7 +296,7 @@ Now let's override the default values for the `cScale0` to `cScale2` variables: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -329,7 +329,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -342,7 +342,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -357,7 +357,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -370,7 +370,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -385,7 +385,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -398,7 +398,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -413,7 +413,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -426,7 +426,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -441,7 +441,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -454,7 +454,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram diff --git a/packages/mermaid-example-diagram/package.json b/packages/mermaid-example-diagram/package.json index 28cb54b9e..b1e1c3b98 100644 --- a/packages/mermaid-example-diagram/package.json +++ b/packages/mermaid-example-diagram/package.json @@ -43,7 +43,7 @@ }, "devDependencies": { "concurrently": "^8.2.2", - "mermaid": "workspace:*", + "@mermaid-chart/mermaid": "workspace:*", "rimraf": "^5.0.5" }, "files": [ diff --git a/packages/mermaid-example-diagram/src/detector.ts b/packages/mermaid-example-diagram/src/detector.ts index 54b9d555b..feda60e4e 100644 --- a/packages/mermaid-example-diagram/src/detector.ts +++ b/packages/mermaid-example-diagram/src/detector.ts @@ -1,4 +1,4 @@ -import type { ExternalDiagramDefinition } from 'mermaid'; +import type { ExternalDiagramDefinition } from '@mermaid-chart/mermaid'; const id = 'example-diagram'; diff --git a/packages/mermaid-layout-elk/CHANGELOG.md b/packages/mermaid-layout-elk/CHANGELOG.md index dd5115cde..319d6b828 100644 --- a/packages/mermaid-layout-elk/CHANGELOG.md +++ b/packages/mermaid-layout-elk/CHANGELOG.md @@ -1,5 +1,11 @@ # @mermaid-js/layout-elk +## 0.1.7 + +### Patch Changes + +- [#6090](https://github.com/mermaid-js/mermaid/pull/6090) [`654097c`](https://github.com/mermaid-js/mermaid/commit/654097c43801b2d606bc3d2bef8c6fbc3301e9e4) Thanks [@knsv](https://github.com/knsv)! - fix: Updated offset calculations for diamond shape when handling intersections + ## 0.1.6 ### Patch Changes diff --git a/packages/mermaid-layout-elk/package.json b/packages/mermaid-layout-elk/package.json index dad981fb3..3cd1c2117 100644 --- a/packages/mermaid-layout-elk/package.json +++ b/packages/mermaid-layout-elk/package.json @@ -1,6 +1,6 @@ { - "name": "@mermaid-js/layout-elk", - "version": "0.1.6", + "name": "@mermaid-chart/layout-elk", + "version": "0.1.7-b.1", "description": "ELK layout engine for mermaid", "module": "dist/mermaid-layout-elk.core.mjs", "types": "dist/layouts.d.ts", @@ -34,10 +34,10 @@ }, "devDependencies": { "@types/d3": "^7.4.3", - "mermaid": "workspace:^" + "@mermaid-chart/mermaid": "workspace:^" }, "peerDependencies": { - "mermaid": "^11.0.0" + "@mermaid-chart/mermaid": "^11.0.0" }, "files": [ "dist" diff --git a/packages/mermaid-layout-elk/src/layouts.ts b/packages/mermaid-layout-elk/src/layouts.ts index dc48ccbfa..3f412464a 100644 --- a/packages/mermaid-layout-elk/src/layouts.ts +++ b/packages/mermaid-layout-elk/src/layouts.ts @@ -1,4 +1,4 @@ -import type { LayoutLoaderDefinition } from 'mermaid'; +import type { LayoutLoaderDefinition } from '@mermaid-chart/mermaid'; const loader = async () => await import(`./render.js`); const algos = ['elk.stress', 'elk.force', 'elk.mrtree', 'elk.sporeOverlap']; diff --git a/packages/mermaid-layout-elk/src/render.ts b/packages/mermaid-layout-elk/src/render.ts index 1d628d2a3..0405947bc 100644 --- a/packages/mermaid-layout-elk/src/render.ts +++ b/packages/mermaid-layout-elk/src/render.ts @@ -1,6 +1,13 @@ +import type { + InternalHelpers, + LayoutData, + RenderOptions, + SVG, + SVGGroup, +} from '@mermaid-chart/mermaid'; +// @ts-ignore TODO: Investigate D3 issue import { curveLinear } from 'd3'; import ELK from 'elkjs/lib/elk.bundled.js'; -import type { InternalHelpers, LayoutData, RenderOptions, SVG, SVGGroup } from 'mermaid'; import { type TreeData, findCommonAncestor } from './find-common-ancestor.js'; type Node = LayoutData['nodes'][number]; @@ -71,6 +78,7 @@ export const render = async ( const boundingBox = childNodeEl.node()!.getBBox(); child.domId = childNodeEl; child.calcIntersect = node.calcIntersect; + child.intersect = node.intersect; child.width = boundingBox.width; child.height = boundingBox.height; } else { @@ -300,7 +308,7 @@ export const render = async ( linkIdCnt[linkIdBase]++; log.info('abc78 new entry', linkIdBase, linkIdCnt[linkIdBase]); } - const linkId = linkIdBase + '_' + linkIdCnt[linkIdBase]; + const linkId = linkIdBase; // + '_' + linkIdCnt[linkIdBase]; edge.id = linkId; log.info('abc78 new link id to be used is', linkIdBase, linkId, linkIdCnt[linkIdBase]); const linkNameStart = 'LS_' + edge.start; @@ -470,6 +478,317 @@ export const render = async ( } } + function intersectLine( + p1: { y: number; x: number }, + p2: { y: number; x: number }, + q1: { x: any; y: any }, + q2: { x: any; y: any } + ) { + log.debug('UIO intersectLine', p1, p2, q1, q2); + // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994, + // p7 and p473. + + // let a1, a2, b1, b2, c1, c2; + // let r1, r2, r3, r4; + // let denom, offset, num; + // let x, y; + + // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x + + // b1 y + c1 = 0. + const a1 = p2.y - p1.y; + const b1 = p1.x - p2.x; + const c1 = p2.x * p1.y - p1.x * p2.y; + + // Compute r3 and r4. + const r3 = a1 * q1.x + b1 * q1.y + c1; + const r4 = a1 * q2.x + b1 * q2.y + c1; + + const epsilon = 1e-6; + + // Check signs of r3 and r4. If both point 3 and point 4 lie on + // same side of line 1, the line segments do not intersect. + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return /*DON'T_INTERSECT*/; + } + + // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0 + const a2 = q2.y - q1.y; + const b2 = q1.x - q2.x; + const c2 = q2.x * q1.y - q1.x * q2.y; + + // Compute r1 and r2 + const r1 = a2 * p1.x + b2 * p1.y + c2; + const r2 = a2 * p2.x + b2 * p2.y + c2; + + // Check signs of r1 and r2. If both point 1 and point 2 lie + // on same side of second line segment, the line segments do + // not intersect. + if (Math.abs(r1) < epsilon && Math.abs(r2) < epsilon && sameSign(r1, r2)) { + return /*DON'T_INTERSECT*/; + } + + // Line segments intersect: compute intersection point. + const denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return /*COLLINEAR*/; + } + + const offset = Math.abs(denom / 2); + + // The denom/2 is to get rounding instead of truncating. It + // is added or subtracted to the numerator, depending upon the + // sign of the numerator. + let num = b1 * c2 - b2 * c1; + const x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + + num = a2 * c1 - a1 * c2; + const y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + + return { x: x, y: y }; + } + + function sameSign(r1: number, r2: number) { + return r1 * r2 > 0; + } + const diamondIntersection = ( + bounds: { x: any; y: any; width: any; height: any }, + outsidePoint: { x: number; y: number }, + insidePoint: any + ) => { + const x1 = bounds.x; + const y1 = bounds.y; + + const w = bounds.width - 0.1; //+ bounds.padding; + const h = bounds.height - 0.1; // + bounds.padding; + + const polyPoints = [ + { x: x1, y: y1 - h / 2 }, + { x: x1 + w / 2, y: y1 }, + { x: x1, y: y1 + h / 2 }, + { x: x1 - w / 2, y: y1 }, + ]; + log.debug( + `APA16 diamondIntersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node-bounds : x:${bounds.x} y:${bounds.y} w:${bounds.width} h:${bounds.height}`, + JSON.stringify(polyPoints) + ); + + const intersections = []; + + let minX = Number.POSITIVE_INFINITY; + let minY = Number.POSITIVE_INFINITY; + + polyPoints.forEach(function (entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + + const left = x1 - w / 2 - minX; + const top = y1 - h / 2 - minY; + + for (let i = 0; i < polyPoints.length; i++) { + const p1 = polyPoints[i]; + const p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + const intersect = intersectLine( + bounds, + outsidePoint, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + + if (intersect) { + intersections.push(intersect); + } + } + + if (!intersections.length) { + return bounds; + } + + log.debug('UIO intersections', intersections); + + if (intersections.length > 1) { + // More intersections, find the one nearest to edge end point + intersections.sort(function (p, q) { + const pdx = p.x - outsidePoint.x; + const pdy = p.y - outsidePoint.y; + const distp = Math.sqrt(pdx * pdx + pdy * pdy); + + const qdx = q.x - outsidePoint.x; + const qdy = q.y - outsidePoint.y; + const distq = Math.sqrt(qdx * qdx + qdy * qdy); + + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + + return intersections[0]; + }; + + const intersection = ( + node: { x: any; y: any; width: number; height: number }, + outsidePoint: { x: number; y: number }, + insidePoint: { x: number; y: number } + ) => { + log.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + + const dx = Math.abs(x - insidePoint.x); + // const dy = Math.abs(y - insidePoint.y); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + // Intersection is top or bottom of rect. + const q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = (R * q) / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q, + }; + + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + + log.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); // cspell: disable-line + + return res; + } else { + // Intersection onn sides of rect + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + // r = outsidePoint.x - w - x; + r = x - w - outsidePoint.x; + } + const q = (Q * r) / R; + // OK let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x + dx - w; + // OK let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : outsidePoint.x + r; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + // let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : outsidePoint.x + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + log.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + + return { x: _x, y: _y }; + } + }; + const outsideNode = ( + node: { x: any; y: any; width: number; height: number }, + point: { x: number; y: number } + ) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point.x - x); + const dy = Math.abs(point.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; + }; + /** + * This function will take a path and node where the last point(s) in the path is inside the node + * and return an update path ending by the border of the node. + */ + // const cutPathAtIntersect2 = (node: any, _points: any[], offset: any, bounds: any) => { + // // Iterate over the points in the path and check if the point is inside the node + // const points: any[] = []; + // let lastPointOutside = _points[0]; + // let isInside = false; + // _points.forEach((point: any) => { + // const int = node.intersect(point); + // // console.log('UIO cutPathAtIntersect2 Points:', point, 'int', int); + // }); + // return points; + // }; + /** + * This function will take a path and node where the last point(s) in the path is inside the node + * and return an update path ending by the border of the node. + */ + const cutPathAtIntersect = ( + _points: any[], + bounds: { x: any; y: any; width: any; height: any; padding: any }, + isDiamond: boolean + ) => { + log.debug('APA18 cutPathAtIntersect Points:', _points, 'node:', bounds, 'isDiamond', isDiamond); + const points: any[] = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point: any) => { + // check if point is inside the boundary rect + if (!outsideNode(bounds, point) && !isInside) { + // First point inside the rect found + // Calc the intersection coord between the point anf the last point outside the rect + let inter; + + if (isDiamond) { + const inter2 = diamondIntersection(bounds, lastPointOutside, point); + const distance = Math.sqrt( + (lastPointOutside.x - inter2.x) ** 2 + (lastPointOutside.y - inter2.y) ** 2 + ); + if (distance > 1) { + inter = inter2; + } + } + if (!inter) { + inter = intersection(bounds, lastPointOutside, point); + } + + // Check case where the intersection is the same as the last point + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || (p.x === inter.x && p.y === inter.y); + }); + // if (!pointPresent) { + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } else { + log.debug('abc88 no intersect', inter, points); + } + // points.push(inter); + isInside = true; + } else { + // Outside + log.debug('abc88 outside', point, lastPointOutside, points); + lastPointOutside = point; + // points.push(point); + if (!isInside) { + points.push(point); + } + } + }); + return points; + }; + // @ts-ignore - ELK is not typed const elk = new ELK(); const element = svg.select('g'); @@ -726,7 +1045,6 @@ export const render = async ( startNode.innerHTML ); } - if (startNode.calcIntersect) { // console.log( // 'APA13 calculating start intersection start node', @@ -749,6 +1067,7 @@ export const render = async ( }, edge.points[0] ); + // const intersection = startNode.intersect(edge.points[0]); if (distance(intersection, edge.points[0]) > epsilon) { edge.points.unshift(intersection); @@ -764,6 +1083,8 @@ export const render = async ( }, edge.points[edge.points.length - 1] ); + console.log('APA13 intersection2', endNode); + const intersection2 = endNode.intersect(edge.points[edge.points.length - 1]); // if (edge.id === 'L_n4_C_10_0') { // console.log('APA14 lineData', edge.points, 'intersection:', intersection); // console.log( @@ -778,6 +1099,9 @@ export const render = async ( // console.log('APA13! distance ok\npoints:', edge.points); } } + // Add coordinates of the start node and end node to the edge points as insert edge will remove those + edge.points.unshift({ x: endNode.x, y: endNode.y }); + edge.points.push({ x: endNode.x, y: endNode.y }); const paths = insertEdge( edgesEl, diff --git a/packages/mermaid-zenuml/package.json b/packages/mermaid-zenuml/package.json index 192f4e0c4..12320c765 100644 --- a/packages/mermaid-zenuml/package.json +++ b/packages/mermaid-zenuml/package.json @@ -36,7 +36,7 @@ "@zenuml/core": "^3.23.27" }, "devDependencies": { - "mermaid": "workspace:^" + "@mermaid-chart/mermaid": "workspace:^" }, "peerDependencies": { "mermaid": "^10 || ^11" diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 71abdfdb4..922061a4b 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -1,6 +1,6 @@ { - "name": "mermaid", - "version": "11.4.1", + "name": "@mermaid-chart/mermaid", + "version": "11.4.1-b.12", "description": "Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.", "type": "module", "module": "./dist/mermaid.core.mjs", @@ -52,7 +52,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/mermaid-js/mermaid" + "url": "https://github.com/Mermaid-Chart/mermaid" }, "author": "Knut Sveidqvist", "license": "MIT", @@ -69,7 +69,7 @@ "dependencies": { "@braintree/sanitize-url": "^7.0.1", "@iconify/utils": "^2.1.32", - "@mermaid-js/parser": "workspace:^", + "@mermaid-js/parser": "^0.3.1-rc.1", "@types/d3": "^7.4.3", "cytoscape": "^3.29.2", "cytoscape-cose-bilkent": "^4.1.0", @@ -105,6 +105,8 @@ "@types/prettier": "^3.0.0", "@types/stylis": "^4.2.5", "@types/uuid": "^9.0.8", + "@typescript-eslint/eslint-plugin": "^7.3.1", + "@typescript-eslint/parser": "^7.3.1", "ajv": "^8.12.0", "chokidar": "^3.6.0", "concurrently": "^8.2.2", @@ -134,8 +136,5 @@ "files": [ "dist/", "README.md" - ], - "publishConfig": { - "access": "public" - } + ] } diff --git a/packages/mermaid/scripts/docs.mts b/packages/mermaid/scripts/docs.mts index 073a3c1a9..eaaa5a1f5 100644 --- a/packages/mermaid/scripts/docs.mts +++ b/packages/mermaid/scripts/docs.mts @@ -53,12 +53,13 @@ import mm from 'micromatch'; // @ts-ignore No typescript declaration file import flatmap from 'unist-util-flatmap'; import { visit } from 'unist-util-visit'; +import { fileURLToPath } from 'url'; // short-circuit `.schema.yaml` imports, so that we can safely import `shapes.js` register('./loadHook.mjs', import.meta.url); const { shapesDefs } = await import('../src/rendering-util/rendering-elements/shapes.js'); - -export const MERMAID_RELEASE_VERSION = JSON.parse(readFileSync('../mermaid/package.json', 'utf8')) +const packageJsonPath = join(fileURLToPath(import.meta.url), '../../package.json'); +export const MERMAID_RELEASE_VERSION = JSON.parse(readFileSync(packageJsonPath, 'utf8')) .version as string; const MERMAID_MAJOR_VERSION = MERMAID_RELEASE_VERSION.split('.')[0]; const CDN_URL = 'https://cdn.jsdelivr.net/npm'; // 'https://unpkg.com'; diff --git a/packages/mermaid/src/Diagram.ts b/packages/mermaid/src/Diagram.ts index fb423b9b0..1f14cc890 100644 --- a/packages/mermaid/src/Diagram.ts +++ b/packages/mermaid/src/Diagram.ts @@ -53,8 +53,8 @@ export class Diagram { public renderer: DiagramDefinition['renderer'] ) {} - async render(id: string, version: string) { - await this.renderer.draw(this.text, id, version, this); + async render(id: string, version: string, positions?: any) { + await this.renderer.draw(this.text, id, version, this, positions); } getParser() { diff --git a/packages/mermaid/src/config.type.ts b/packages/mermaid/src/config.type.ts index 86281cd52..d93e2abc2 100644 --- a/packages/mermaid/src/config.type.ts +++ b/packages/mermaid/src/config.type.ts @@ -61,14 +61,25 @@ export interface MermaidConfig { * You may also use `themeCSS` to override this value. * */ - theme?: 'default' | 'base' | 'dark' | 'forest' | 'neutral' | 'null'; + theme?: + | 'default' + | 'base' + | 'dark' + | 'forest' + | 'neutral' + | 'neo' + | 'neo-dark' + | 'redux' + | 'redux-dark' + | 'mc' + | 'null'; themeVariables?: any; themeCSS?: string; /** * Defines which main look to use for the diagram. * */ - look?: 'classic' | 'handDrawn'; + look?: 'classic' | 'handDrawn' | 'neo'; /** * Defines the seed to be used when using handDrawn look. This is important for the automated tests as they will always find differences without the seed. The default value is 0 which gives a random seed. * @@ -261,7 +272,12 @@ export interface FlowchartDiagramConfig extends BaseDiagramConfig { * Defines how mermaid renders curves for flowcharts. * */ - curve?: 'basis' | 'linear' | 'cardinal'; + curve?: 'basis' | 'linear' | 'cardinal' | 'rounded'; + /** + * Highlights the points in an edge for debugging. + * + */ + edgeDebug?: boolean; /** * Represents the padding between the labels and the shape * @@ -754,6 +770,11 @@ export interface StateDiagramConfig extends BaseDiagramConfig { edgeLengthFactor?: string; compositTitleSize?: number; radius?: number; + /** + * Defines how mermaid renders curves for flowcharts. + * + */ + curve?: 'basis' | 'linear' | 'cardinal' | 'rounded'; /** * Decides which rendering engine that is to be used for the rendering. * diff --git a/packages/mermaid/src/dagre-wrapper/clusters.js b/packages/mermaid/src/dagre-wrapper/clusters.js index 2c7746876..e5a2ef316 100644 --- a/packages/mermaid/src/dagre-wrapper/clusters.js +++ b/packages/mermaid/src/dagre-wrapper/clusters.js @@ -15,6 +15,8 @@ const rect = (parent, node) => { const shapeSvg = parent .insert('g') .attr('class', 'cluster' + (node.class ? ' ' + node.class : '')) + .attr('data-et', 'cluster') + .attr('data-id', node.id) .attr('id', node.id); // add the rect diff --git a/packages/mermaid/src/dagre-wrapper/edgeMarker.ts b/packages/mermaid/src/dagre-wrapper/edgeMarker.ts index 778a7708d..fdd19dc72 100644 --- a/packages/mermaid/src/dagre-wrapper/edgeMarker.ts +++ b/packages/mermaid/src/dagre-wrapper/edgeMarker.ts @@ -29,6 +29,7 @@ const arrowTypesMap = { arrow_cross: 'cross', arrow_point: 'point', arrow_barb: 'barb', + arrow_neo: 'barbNeo', arrow_circle: 'circle', aggregation: 'aggregation', extension: 'extension', diff --git a/packages/mermaid/src/dagre-wrapper/edges.js b/packages/mermaid/src/dagre-wrapper/edges.js index 1a72328e8..07da64c7c 100644 --- a/packages/mermaid/src/dagre-wrapper/edges.js +++ b/packages/mermaid/src/dagre-wrapper/edges.js @@ -39,7 +39,7 @@ export const insertEdgeLabel = (elem, edge) => { const edgeLabel = elem.insert('g').attr('class', 'edgeLabel'); // Create inner g, label, this will be positioned now for centering the text - const label = edgeLabel.insert('g').attr('class', 'label'); + const label = edgeLabel.insert('g').attr('class', 'label').attr('data-id', edge.id); label.node().appendChild(labelElement); // Center the label @@ -423,6 +423,8 @@ export const insertEdge = function (elem, e, edge, clusterDb, diagramType, graph .append('path') .attr('d', lineFunction(lineData)) .attr('id', edge.id) + // MC + .attr('data-edge', 'true') .attr('class', ' ' + strokeClasses + (edge.classes ? ' ' + edge.classes : '')) .attr('style', edge.style); diff --git a/packages/mermaid/src/dagre-wrapper/nodes.js b/packages/mermaid/src/dagre-wrapper/nodes.js index 2677fd785..084172fb0 100644 --- a/packages/mermaid/src/dagre-wrapper/nodes.js +++ b/packages/mermaid/src/dagre-wrapper/nodes.js @@ -1156,6 +1156,10 @@ export const insertNode = async (elem, node, renderOptions) => { el.attr('class', 'node default ' + node.class); } + // MC Special + newEl.attr('data-node', 'true'); + newEl.attr('data-id', node.id); + nodeElems[node.id] = newEl; if (node.haveCallback) { diff --git a/packages/mermaid/src/diagram-api/diagramAPI.ts b/packages/mermaid/src/diagram-api/diagramAPI.ts index df4514adf..ac70e3b42 100644 --- a/packages/mermaid/src/diagram-api/diagramAPI.ts +++ b/packages/mermaid/src/diagram-api/diagramAPI.ts @@ -1,16 +1,16 @@ -import { addDetector } from './detectType.js'; -import { log as _log, setLogLevel as _setLogLevel } from '../logger.js'; import { + defaultConfig as _defaultConfig, getConfig as _getConfig, setConfig as _setConfig, - defaultConfig as _defaultConfig, setSiteConfig as _setSiteConfig, } from '../config.js'; import { sanitizeText as _sanitizeText } from '../diagrams/common/common.js'; +import * as _commonDb from '../diagrams/common/commonDb.js'; +import { log as _log, setLogLevel as _setLogLevel } from '../logger.js'; import { setupGraphViewbox as _setupGraphViewbox } from '../setupGraphViewbox.js'; import { addStylesForDiagram } from '../styles.js'; +import { addDetector } from './detectType.js'; import type { DiagramDefinition, DiagramDetector } from './types.js'; -import * as _commonDb from '../diagrams/common/commonDb.js'; /* Packaging and exposing resources for external diagrams so that they can import diff --git a/packages/mermaid/src/diagram-api/types.ts b/packages/mermaid/src/diagram-api/types.ts index fdb175e52..71ac28188 100644 --- a/packages/mermaid/src/diagram-api/types.ts +++ b/packages/mermaid/src/diagram-api/types.ts @@ -105,6 +105,30 @@ export interface ExternalDiagramDefinition { export type DiagramDetector = (text: string, config?: MermaidConfig) => boolean; export type DiagramLoader = () => Promise<{ id: string; diagram: DiagramDefinition }>; +/* Types for the positions used in the free layout engine */ +interface Point { + x: number; + y: number; +} + +export interface IntersectionPoint extends Point { + pos: 't' | 'b' | 'l' | 'r'; +} + +export interface NodePosition extends Point { + width?: number; + height?: number; +} + +export interface EdgePoints { + points: Point[]; +} + +export interface Positions { + nodes: Record; + edges: Record; +} + /** * Type for function draws diagram in the tag with id: id based on the graph definition in text. * @@ -117,7 +141,10 @@ export type DrawDefinition = ( text: string, id: string, version: string, - diagramObject: Diagram + diagramObject: Diagram, + // Todo: types from positions when logic is done + // MC Special + positions?: any ) => void | Promise; export interface ParserDefinition { diff --git a/packages/mermaid/src/diagrams/architecture/architectureStyles.ts b/packages/mermaid/src/diagrams/architecture/architectureStyles.ts index 7f494ecd1..e913f13de 100644 --- a/packages/mermaid/src/diagrams/architecture/architectureStyles.ts +++ b/packages/mermaid/src/diagrams/architecture/architectureStyles.ts @@ -20,10 +20,10 @@ const getStyles: DiagramStylesProvider = (options: ArchitectureStyleOptions) => stroke-dasharray: 8; } .node-icon-text { - display: flex; + display: flex; align-items: center; } - + .node-icon-text > div { color: #fff; margin: 1px; @@ -33,6 +33,9 @@ const getStyles: DiagramStylesProvider = (options: ArchitectureStyleOptions) => display: -webkit-box; -webkit-box-orient: vertical; } + .architecture-services, .architecture-edges, .architecture-groups { + font-size: 16px; + } `; export default getStyles; diff --git a/packages/mermaid/src/diagrams/block/styles.ts b/packages/mermaid/src/diagrams/block/styles.ts index bdc7614a1..dc5d27d8f 100644 --- a/packages/mermaid/src/diagrams/block/styles.ts +++ b/packages/mermaid/src/diagrams/block/styles.ts @@ -105,7 +105,6 @@ const getStyles = (options: BlockChartStyleOptions) => } .node .cluster { - // fill: ${fade(options.mainBkg, 0.5)}; fill: ${fade(options.clusterBkg, 0.5)}; stroke: ${fade(options.clusterBorder, 0.2)}; box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; diff --git a/packages/mermaid/src/diagrams/class/classDb.ts b/packages/mermaid/src/diagrams/class/classDb.ts index 569943736..b2c3c944c 100644 --- a/packages/mermaid/src/diagrams/class/classDb.ts +++ b/packages/mermaid/src/diagrams/class/classDb.ts @@ -24,713 +24,716 @@ import type { Interface, } from './classTypes.js'; import type { Node, Edge } from '../../rendering-util/types.js'; +import type { DiagramDB } from '../../diagram-api/types.js'; const MERMAID_DOM_ID_PREFIX = 'classId-'; - -let relations: ClassRelation[] = []; -let classes = new Map(); -const styleClasses = new Map(); -let notes: ClassNote[] = []; -let interfaces: Interface[] = []; let classCounter = 0; -let namespaces = new Map(); -let namespaceCounter = 0; - -let functions: any[] = []; const sanitizeText = (txt: string) => common.sanitizeText(txt, getConfig()); -const splitClassNameAndType = function (_id: string) { - const id = common.sanitizeText(_id, getConfig()); - let genericType = ''; - let className = id; +export class ClassDB implements DiagramDB { + private relations: ClassRelation[] = []; + private classes = new Map(); + private readonly styleClasses = new Map(); + private notes: ClassNote[] = []; + private interfaces: Interface[] = []; + // private static classCounter = 0; + private namespaces = new Map(); + private namespaceCounter = 0; - if (id.indexOf('~') > 0) { - const split = id.split('~'); - className = sanitizeText(split[0]); - genericType = sanitizeText(split[1]); + private functions: any[] = []; + + constructor() { + this.functions.push(this.setupToolTips.bind(this)); + this.clear(); + + // Needed for JISON since it only supports direct properties + this.addRelation = this.addRelation.bind(this); + this.addClassesToNamespace = this.addClassesToNamespace.bind(this); + this.addNamespace = this.addNamespace.bind(this); + this.setCssClass = this.setCssClass.bind(this); + this.addMembers = this.addMembers.bind(this); + this.addClass = this.addClass.bind(this); + this.setClassLabel = this.setClassLabel.bind(this); + this.addAnnotation = this.addAnnotation.bind(this); + this.addMember = this.addMember.bind(this); + this.cleanupLabel = this.cleanupLabel.bind(this); + this.addNote = this.addNote.bind(this); + this.defineClass = this.defineClass.bind(this); + this.setDirection = this.setDirection.bind(this); + this.setLink = this.setLink.bind(this); + this.bindFunctions = this.bindFunctions.bind(this); + this.clear = this.clear.bind(this); + + this.setTooltip = this.setTooltip.bind(this); + this.setClickEvent = this.setClickEvent.bind(this); + this.setCssStyle = this.setCssStyle.bind(this); } - return { className: className, type: genericType }; -}; + private splitClassNameAndType(_id: string) { + const id = common.sanitizeText(_id, getConfig()); + let genericType = ''; + let className = id; -export const setClassLabel = function (_id: string, label: string) { - const id = common.sanitizeText(_id, getConfig()); - if (label) { - label = sanitizeText(label); - } - - const { className } = splitClassNameAndType(id); - classes.get(className)!.label = label; - classes.get(className)!.text = - `${label}${classes.get(className)!.type ? `<${classes.get(className)!.type}>` : ''}`; -}; - -/** - * Function called by parser when a node definition has been found. - * - * @param id - Id of the class to add - * @public - */ -export const addClass = function (_id: string) { - const id = common.sanitizeText(_id, getConfig()); - const { className, type } = splitClassNameAndType(id); - // Only add class if not exists - if (classes.has(className)) { - return; - } - // alert('Adding class: ' + className); - const name = common.sanitizeText(className, getConfig()); - // alert('Adding class after: ' + name); - classes.set(name, { - id: name, - type: type, - label: name, - text: `${name}${type ? `<${type}>` : ''}`, - shape: 'classBox', - cssClasses: 'default', - methods: [], - members: [], - annotations: [], - styles: [], - domId: MERMAID_DOM_ID_PREFIX + name + '-' + classCounter, - } as ClassNode); - - classCounter++; -}; - -const addInterface = function (label: string, classId: string) { - const classInterface: Interface = { - id: `interface${interfaces.length}`, - label, - classId, - }; - - interfaces.push(classInterface); -}; - -/** - * Function to lookup domId from id in the graph definition. - * - * @param id - class ID to lookup - * @public - */ -export const lookUpDomId = function (_id: string): string { - const id = common.sanitizeText(_id, getConfig()); - if (classes.has(id)) { - return classes.get(id)!.domId; - } - throw new Error('Class not found: ' + id); -}; - -export const clear = function () { - relations = []; - classes = new Map(); - notes = []; - interfaces = []; - functions = []; - functions.push(setupToolTips); - namespaces = new Map(); - namespaceCounter = 0; - direction = 'TB'; - commonClear(); -}; - -export const getClass = function (id: string): ClassNode { - return classes.get(id)!; -}; - -export const getClasses = function (): ClassMap { - return classes; -}; - -export const getRelations = function (): ClassRelation[] { - return relations; -}; - -export const getNotes = function () { - return notes; -}; - -export const addRelation = function (classRelation: ClassRelation) { - log.debug('Adding relation: ' + JSON.stringify(classRelation)); - // Due to relationType cannot just check if it is equal to 'none' or it complains, can fix this later - const invalidTypes = [ - relationType.LOLLIPOP, - relationType.AGGREGATION, - relationType.COMPOSITION, - relationType.DEPENDENCY, - relationType.EXTENSION, - ]; - - if ( - classRelation.relation.type1 === relationType.LOLLIPOP && - !invalidTypes.includes(classRelation.relation.type2) - ) { - addClass(classRelation.id2); - addInterface(classRelation.id1, classRelation.id2); - classRelation.id1 = `interface${interfaces.length - 1}`; - } else if ( - classRelation.relation.type2 === relationType.LOLLIPOP && - !invalidTypes.includes(classRelation.relation.type1) - ) { - addClass(classRelation.id1); - addInterface(classRelation.id2, classRelation.id1); - classRelation.id2 = `interface${interfaces.length - 1}`; - } else { - addClass(classRelation.id1); - addClass(classRelation.id2); - } - - classRelation.id1 = splitClassNameAndType(classRelation.id1).className; - classRelation.id2 = splitClassNameAndType(classRelation.id2).className; - - classRelation.relationTitle1 = common.sanitizeText( - classRelation.relationTitle1.trim(), - getConfig() - ); - - classRelation.relationTitle2 = common.sanitizeText( - classRelation.relationTitle2.trim(), - getConfig() - ); - - relations.push(classRelation); -}; - -/** - * Adds an annotation to the specified class Annotations mark special properties of the given type - * (like 'interface' or 'service') - * - * @param className - The class name - * @param annotation - The name of the annotation without any brackets - * @public - */ -export const addAnnotation = function (className: string, annotation: string) { - const validatedClassName = splitClassNameAndType(className).className; - classes.get(validatedClassName)!.annotations.push(annotation); -}; - -/** - * Adds a member to the specified class - * - * @param className - The class name - * @param member - The full name of the member. If the member is enclosed in `<>` it is - * treated as an annotation If the member is ending with a closing bracket ) it is treated as a - * method Otherwise the member will be treated as a normal property - * @public - */ -export const addMember = function (className: string, member: string) { - addClass(className); - - const validatedClassName = splitClassNameAndType(className).className; - const theClass = classes.get(validatedClassName)!; - - if (typeof member === 'string') { - // Member can contain white spaces, we trim them out - const memberString = member.trim(); - - if (memberString.startsWith('<<') && memberString.endsWith('>>')) { - // its an annotation - theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); - } else if (memberString.indexOf(')') > 0) { - //its a method - theClass.methods.push(new ClassMember(memberString, 'method')); - } else if (memberString) { - theClass.members.push(new ClassMember(memberString, 'attribute')); - } - } -}; - -export const addMembers = function (className: string, members: string[]) { - if (Array.isArray(members)) { - members.reverse(); - members.forEach((member) => addMember(className, member)); - } -}; - -export const addNote = function (text: string, className: string) { - const note = { - id: `note${notes.length}`, - class: className, - text: text, - }; - notes.push(note); -}; - -export const cleanupLabel = function (label: string) { - if (label.startsWith(':')) { - label = label.substring(1); - } - return sanitizeText(label.trim()); -}; - -/** - * Called by parser when assigning cssClass to a class - * - * @param ids - Comma separated list of ids - * @param className - Class to add - */ -export const setCssClass = function (ids: string, className: string) { - ids.split(',').forEach(function (_id) { - let id = _id; - if (/\d/.exec(_id[0])) { - id = MERMAID_DOM_ID_PREFIX + id; - } - const classNode = classes.get(id); - if (classNode) { - classNode.cssClasses += ' ' + className; - } - }); -}; - -export const defineClass = function (ids: string[], style: string[]) { - for (const id of ids) { - let styleClass = styleClasses.get(id); - if (styleClass === undefined) { - styleClass = { id, styles: [], textStyles: [] }; - styleClasses.set(id, styleClass); + if (id.indexOf('~') > 0) { + const split = id.split('~'); + className = sanitizeText(split[0]); + genericType = sanitizeText(split[1]); } - if (style) { - style.forEach(function (s) { - if (/color/.exec(s)) { - const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill'); - styleClass.textStyles.push(newStyle); + return { className: className, type: genericType }; + } + + public setClassLabel(_id: string, label: string) { + const id = common.sanitizeText(_id, getConfig()); + if (label) { + label = sanitizeText(label); + } + + const { className } = this.splitClassNameAndType(id); + this.classes.get(className)!.label = label; + this.classes.get(className)!.text = + `${label}${this.classes.get(className)!.type ? `<${this.classes.get(className)!.type}>` : ''}`; + } + + /** + * Function called by parser when a node definition has been found. + * + * @param id - Id of the class to add + * @public + */ + public addClass(_id: string) { + const id = common.sanitizeText(_id, getConfig()); + const { className, type } = this.splitClassNameAndType(id); + // Only add class if not exists + if (this.classes.has(className)) { + return; + } + // alert('Adding class: ' + className); + const name = common.sanitizeText(className, getConfig()); + // alert('Adding class after: ' + name); + this.classes.set(name, { + id: name, + type: type, + label: name, + text: `${name}${type ? `<${type}>` : ''}`, + shape: 'classBox', + cssClasses: 'default', + methods: [], + members: [], + annotations: [], + styles: [], + domId: MERMAID_DOM_ID_PREFIX + name + '-' + classCounter, + } as ClassNode); + + classCounter++; + } + + private addInterface(label: string, classId: string) { + const classInterface: Interface = { + id: `interface${this.interfaces.length}`, + label, + classId, + }; + + this.interfaces.push(classInterface); + } + + /** + * Function to lookup domId from id in the graph definition. + * + * @param id - class ID to lookup + * @public + */ + public lookUpDomId(_id: string): string { + const id = common.sanitizeText(_id, getConfig()); + if (this.classes.has(id)) { + return this.classes.get(id)!.domId; + } + throw new Error('Class not found: ' + id); + } + + public clear() { + this.relations = []; + this.classes = new Map(); + this.notes = []; + this.interfaces = []; + this.functions = []; + this.functions.push(this.setupToolTips.bind(this)); + this.namespaces = new Map(); + this.namespaceCounter = 0; + this.direction = 'TB'; + commonClear(); + } + + public getClass(id: string): ClassNode { + return this.classes.get(id)!; + } + + public getClasses(): ClassMap { + return this.classes; + } + + public getRelations(): ClassRelation[] { + return this.relations; + } + + public getNotes() { + return this.notes; + } + + public addRelation(classRelation: ClassRelation) { + log.debug('Adding relation: ' + JSON.stringify(classRelation)); + // Due to relationType cannot just check if it is equal to 'none' or it complains, can fix this later + const invalidTypes = [ + this.relationType.LOLLIPOP, + this.relationType.AGGREGATION, + this.relationType.COMPOSITION, + this.relationType.DEPENDENCY, + this.relationType.EXTENSION, + ]; + + if ( + classRelation.relation.type1 === this.relationType.LOLLIPOP && + !invalidTypes.includes(classRelation.relation.type2) + ) { + this.addClass(classRelation.id2); + this.addInterface(classRelation.id1, classRelation.id2); + classRelation.id1 = `interface${this.interfaces.length - 1}`; + } else if ( + classRelation.relation.type2 === this.relationType.LOLLIPOP && + !invalidTypes.includes(classRelation.relation.type1) + ) { + this.addClass(classRelation.id1); + this.addInterface(classRelation.id2, classRelation.id1); + classRelation.id2 = `interface${this.interfaces.length - 1}`; + } else { + this.addClass(classRelation.id1); + this.addClass(classRelation.id2); + } + + classRelation.id1 = this.splitClassNameAndType(classRelation.id1).className; + classRelation.id2 = this.splitClassNameAndType(classRelation.id2).className; + + classRelation.relationTitle1 = common.sanitizeText( + classRelation.relationTitle1.trim(), + getConfig() + ); + + classRelation.relationTitle2 = common.sanitizeText( + classRelation.relationTitle2.trim(), + getConfig() + ); + + this.relations.push(classRelation); + } + + /** + * Adds an annotation to the specified class Annotations mark special properties of the given type + * (like 'interface' or 'service') + * + * @param className - The class name + * @param annotation - The name of the annotation without any brackets + * @public + */ + public addAnnotation(className: string, annotation: string) { + const validatedClassName = this.splitClassNameAndType(className).className; + this.classes.get(validatedClassName)!.annotations.push(annotation); + } + + /** + * Adds a member to the specified class + * + * @param className - The class name + * @param member - The full name of the member. If the member is enclosed in `<>` it is + * treated as an annotation If the member is ending with a closing bracket ) it is treated as a + * method Otherwise the member will be treated as a normal property + * @public + */ + public addMember(className: string, member: string) { + this.addClass(className); + + const validatedClassName = this.splitClassNameAndType(className).className; + const theClass = this.classes.get(validatedClassName)!; + + if (typeof member === 'string') { + // Member can contain white spaces, we trim them out + const memberString = member.trim(); + + if (memberString.startsWith('<<') && memberString.endsWith('>>')) { + // its an annotation + theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); + } else if (memberString.indexOf(')') > 0) { + //its a method + theClass.methods.push(new ClassMember(memberString, 'method')); + } else if (memberString) { + theClass.members.push(new ClassMember(memberString, 'attribute')); + } + } + } + + public addMembers(className: string, members: string[]) { + if (Array.isArray(members)) { + members.reverse(); + members.forEach((member) => this.addMember(className, member)); + } + } + + public addNote(text: string, className: string) { + const note = { + id: `note${this.notes.length}`, + class: className, + text: text, + }; + this.notes.push(note); + } + + public cleanupLabel(label: string) { + if (label.startsWith(':')) { + label = label.substring(1); + } + return sanitizeText(label.trim()); + } + + /** + * Called by parser when assigning cssClass to a class + * + * @param ids - Comma separated list of ids + * @param className - Class to add + */ + public setCssClass(ids: string, className: string) { + ids.split(',').forEach((_id) => { + let id = _id; + if (/\d/.exec(_id[0])) { + id = MERMAID_DOM_ID_PREFIX + id; + } + const classNode = this.classes.get(id); + if (classNode) { + classNode.cssClasses += ' ' + className; + } + }); + } + + public defineClass(ids: string[], style: string[]) { + for (const id of ids) { + let styleClass = this.styleClasses.get(id); + if (styleClass === undefined) { + styleClass = { id, styles: [], textStyles: [] }; + this.styleClasses.set(id, styleClass); + } + + if (style) { + style.forEach((s) => { + if (/color/.exec(s)) { + const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill'); + styleClass.textStyles.push(newStyle); + } + styleClass.styles.push(s); + }); + } + + this.classes.forEach((value) => { + if (value.cssClasses.includes(id)) { + value.styles.push(...style.flatMap((s) => s.split(','))); } - styleClass.styles.push(s); }); } + } - classes.forEach((value) => { - if (value.cssClasses.includes(id)) { - value.styles.push(...style.flatMap((s) => s.split(','))); + /** + * Called by parser when a tooltip is found, e.g. a clickable element. + * + * @param ids - Comma separated list of ids + * @param tooltip - Tooltip to add + */ + public setTooltip(ids: string, tooltip?: string) { + ids.split(',').forEach((id) => { + if (tooltip !== undefined) { + this.classes.get(id)!.tooltip = sanitizeText(tooltip); } }); } -}; -/** - * Called by parser when a tooltip is found, e.g. a clickable element. - * - * @param ids - Comma separated list of ids - * @param tooltip - Tooltip to add - */ -const setTooltip = function (ids: string, tooltip?: string) { - ids.split(',').forEach(function (id) { - if (tooltip !== undefined) { - classes.get(id)!.tooltip = sanitizeText(tooltip); + public getTooltip(id: string, namespace?: string) { + if (namespace && this.namespaces.has(namespace)) { + return this.namespaces.get(namespace)!.classes.get(id)!.tooltip; } - }); -}; -export const getTooltip = function (id: string, namespace?: string) { - if (namespace && namespaces.has(namespace)) { - return namespaces.get(namespace)!.classes.get(id)!.tooltip; + return this.classes.get(id)!.tooltip; } - return classes.get(id)!.tooltip; -}; - -/** - * Called by parser when a link is found. Adds the URL to the vertex data. - * - * @param ids - Comma separated list of ids - * @param linkStr - URL to create a link for - * @param target - Target of the link, _blank by default as originally defined in the svgDraw.js file - */ -export const setLink = function (ids: string, linkStr: string, target: string) { - const config = getConfig(); - ids.split(',').forEach(function (_id) { - let id = _id; - if (/\d/.exec(_id[0])) { - id = MERMAID_DOM_ID_PREFIX + id; - } - const theClass = classes.get(id); - if (theClass) { - theClass.link = utils.formatUrl(linkStr, config); - if (config.securityLevel === 'sandbox') { - theClass.linkTarget = '_top'; - } else if (typeof target === 'string') { - theClass.linkTarget = sanitizeText(target); - } else { - theClass.linkTarget = '_blank'; + /** + * Called by parser when a link is found. Adds the URL to the vertex data. + * + * @param ids - Comma separated list of ids + * @param linkStr - URL to create a link for + * @param target - Target of the link, _blank by default as originally defined in the svgDraw.js file + */ + public setLink(ids: string, linkStr: string, target: string) { + const config = getConfig(); + ids.split(',').forEach((_id) => { + let id = _id; + if (/\d/.exec(_id[0])) { + id = MERMAID_DOM_ID_PREFIX + id; } - } - }); - setCssClass(ids, 'clickable'); -}; - -/** - * Called by parser when a click definition is found. Registers an event handler. - * - * @param ids - Comma separated list of ids - * @param functionName - Function to be called on click - * @param functionArgs - Function args the function should be called with - */ -export const setClickEvent = function (ids: string, functionName: string, functionArgs: string) { - ids.split(',').forEach(function (id) { - setClickFunc(id, functionName, functionArgs); - classes.get(id)!.haveCallback = true; - }); - setCssClass(ids, 'clickable'); -}; - -const setClickFunc = function (_domId: string, functionName: string, functionArgs: string) { - const domId = common.sanitizeText(_domId, getConfig()); - const config = getConfig(); - if (config.securityLevel !== 'loose') { - return; - } - if (functionName === undefined) { - return; - } - - const id = domId; - if (classes.has(id)) { - const elemId = lookUpDomId(id); - let argList: string[] = []; - if (typeof functionArgs === 'string') { - /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */ - argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); - for (let i = 0; i < argList.length; i++) { - let item = argList[i].trim(); - /* Removes all double quotes at the start and end of an argument */ - /* This preserves all starting and ending whitespace inside */ - if (item.startsWith('"') && item.endsWith('"')) { - item = item.substr(1, item.length - 2); + const theClass = this.classes.get(id); + if (theClass) { + theClass.link = utils.formatUrl(linkStr, config); + if (config.securityLevel === 'sandbox') { + theClass.linkTarget = '_top'; + } else if (typeof target === 'string') { + theClass.linkTarget = sanitizeText(target); + } else { + theClass.linkTarget = '_blank'; } - argList[i] = item; - } - } - - /* if no arguments passed into callback, default to passing in id */ - if (argList.length === 0) { - argList.push(elemId); - } - - functions.push(function () { - const elem = document.querySelector(`[id="${elemId}"]`); - if (elem !== null) { - elem.addEventListener( - 'click', - function () { - utils.runFunc(functionName, ...argList); - }, - false - ); } }); - } -}; - -export const bindFunctions = function (element: Element) { - functions.forEach(function (fun) { - fun(element); - }); -}; - -export const lineType = { - LINE: 0, - DOTTED_LINE: 1, -}; - -export const relationType = { - AGGREGATION: 0, - EXTENSION: 1, - COMPOSITION: 2, - DEPENDENCY: 3, - LOLLIPOP: 4, -}; - -const setupToolTips = function (element: Element) { - let tooltipElem: Selection = - select('.mermaidTooltip'); - // @ts-expect-error - Incorrect types - if ((tooltipElem._groups || tooltipElem)[0][0] === null) { - tooltipElem = select('body').append('div').attr('class', 'mermaidTooltip').style('opacity', 0); + this.setCssClass(ids, 'clickable'); } - const svg = select(element).select('svg'); - - const nodes = svg.selectAll('g.node'); - nodes - .on('mouseover', function () { - const el = select(this); - const title = el.attr('title'); - // Don't try to draw a tooltip if no data is provided - if (title === null) { - return; - } - // @ts-ignore - getBoundingClientRect is not part of the d3 type definition - const rect = this.getBoundingClientRect(); - - tooltipElem.transition().duration(200).style('opacity', '.9'); - tooltipElem - .text(el.attr('title')) - .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px') - .style('top', window.scrollY + rect.top - 14 + document.body.scrollTop + 'px'); - tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, '
    ')); - el.classed('hover', true); - }) - .on('mouseout', function () { - tooltipElem.transition().duration(500).style('opacity', 0); - const el = select(this); - el.classed('hover', false); + /** + * Called by parser when a click definition is found. Registers an event handler. + * + * @param ids - Comma separated list of ids + * @param functionName - Function to be called on click + * @param functionArgs - Function args the function should be called with + */ + public setClickEvent(ids: string, functionName: string, functionArgs: string) { + ids.split(',').forEach((id) => { + this.setClickFunc(id, functionName, functionArgs); + this.classes.get(id)!.haveCallback = true; }); -}; -functions.push(setupToolTips); - -let direction = 'TB'; -const getDirection = () => direction; -const setDirection = (dir: string) => { - direction = dir; -}; - -/** - * Function called by parser when a namespace definition has been found. - * - * @param id - Id of the namespace to add - * @public - */ -export const addNamespace = function (id: string) { - if (namespaces.has(id)) { - return; + this.setCssClass(ids, 'clickable'); } - namespaces.set(id, { - id: id, - classes: new Map(), - children: {}, - domId: MERMAID_DOM_ID_PREFIX + id + '-' + namespaceCounter, - } as NamespaceNode); + private setClickFunc(_domId: string, functionName: string, functionArgs: string) { + const domId = common.sanitizeText(_domId, getConfig()); + const config = getConfig(); + if (config.securityLevel !== 'loose') { + return; + } + if (functionName === undefined) { + return; + } - namespaceCounter++; -}; + const id = domId; + if (this.classes.has(id)) { + const elemId = this.lookUpDomId(id); + let argList: string[] = []; + if (typeof functionArgs === 'string') { + /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */ + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + /* Removes all double quotes at the start and end of an argument */ + /* This preserves all starting and ending whitespace inside */ + if (item.startsWith('"') && item.endsWith('"')) { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } -const getNamespace = function (name: string): NamespaceNode { - return namespaces.get(name)!; -}; + /* if no arguments passed into callback, default to passing in id */ + if (argList.length === 0) { + argList.push(elemId); + } -const getNamespaces = function (): NamespaceMap { - return namespaces; -}; - -/** - * Function called by parser when a namespace definition has been found. - * - * @param id - Id of the namespace to add - * @param classNames - Ids of the class to add - * @public - */ -export const addClassesToNamespace = function (id: string, classNames: string[]) { - if (!namespaces.has(id)) { - return; - } - for (const name of classNames) { - const { className } = splitClassNameAndType(name); - classes.get(className)!.parent = id; - namespaces.get(id)!.classes.set(className, classes.get(className)!); - } -}; - -export const setCssStyle = function (id: string, styles: string[]) { - const thisClass = classes.get(id); - if (!styles || !thisClass) { - return; - } - for (const s of styles) { - if (s.includes(',')) { - thisClass.styles.push(...s.split(',')); - } else { - thisClass.styles.push(s); + this.functions.push(() => { + const elem = document.querySelector(`[id="${elemId}"]`); + if (elem !== null) { + elem.addEventListener( + 'click', + () => { + utils.runFunc(functionName, ...argList); + }, + false + ); + } + }); } } -}; -/** - * Gets the arrow marker for a type index - * - * @param type - The type to look for - * @returns The arrow marker - */ -function getArrowMarker(type: number) { - let marker; - switch (type) { - case 0: - marker = 'aggregation'; - break; - case 1: - marker = 'extension'; - break; - case 2: - marker = 'composition'; - break; - case 3: - marker = 'dependency'; - break; - case 4: - marker = 'lollipop'; - break; - default: - marker = 'none'; + public bindFunctions(element: Element) { + this.functions.forEach((fun) => { + fun(element); + }); } - return marker; -} -export const getData = () => { - const nodes: Node[] = []; - const edges: Edge[] = []; - const config = getConfig(); + public readonly lineType = { + LINE: 0, + DOTTED_LINE: 1, + }; - for (const namespaceKey of namespaces.keys()) { - const namespace = namespaces.get(namespaceKey); - if (namespace) { - const node: Node = { - id: namespace.id, - label: namespace.id, - isGroup: true, - padding: config.class!.padding ?? 16, - // parent node must be one of [rect, roundedWithTitle, noteGroup, divider] - shape: 'rect', - cssStyles: ['fill: none', 'stroke: black'], + public readonly relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3, + LOLLIPOP: 4, + }; + + private readonly setupToolTips = (element: Element) => { + let tooltipElem: Selection = + select('.mermaidTooltip'); + // @ts-expect-error - Incorrect types + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = select('body') + .append('div') + .attr('class', 'mermaidTooltip') + .style('opacity', 0); + } + + const svg = select(element).select('svg'); + + const nodes = svg.selectAll('g.node'); + nodes + .on('mouseover', (event: MouseEvent) => { + const el = select(event.currentTarget as HTMLElement); + const title = el.attr('title'); + // Don't try to draw a tooltip if no data is provided + if (title === null) { + return; + } + // @ts-ignore - getBoundingClientRect is not part of the d3 type definition + const rect = this.getBoundingClientRect(); + + tooltipElem.transition().duration(200).style('opacity', '.9'); + tooltipElem + .text(el.attr('title')) + .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px') + .style('top', window.scrollY + rect.top - 14 + document.body.scrollTop + 'px'); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, '
    ')); + el.classed('hover', true); + }) + .on('mouseout', (event: MouseEvent) => { + tooltipElem.transition().duration(500).style('opacity', 0); + const el = select(event.currentTarget as HTMLElement); + el.classed('hover', false); + }); + }; + + private direction = 'TB'; + public getDirection() { + return this.direction; + } + public setDirection(dir: string) { + this.direction = dir; + } + + /** + * Function called by parser when a namespace definition has been found. + * + * @param id - Id of the namespace to add + * @public + */ + public addNamespace(id: string) { + if (this.namespaces.has(id)) { + return; + } + + this.namespaces.set(id, { + id: id, + classes: new Map(), + children: {}, + domId: MERMAID_DOM_ID_PREFIX + id + '-' + this.namespaceCounter, + } as NamespaceNode); + + this.namespaceCounter++; + } + + public getNamespace(name: string): NamespaceNode { + return this.namespaces.get(name)!; + } + + public getNamespaces(): NamespaceMap { + return this.namespaces; + } + + /** + * Function called by parser when a namespace definition has been found. + * + * @param id - Id of the namespace to add + * @param classNames - Ids of the class to add + * @public + */ + public addClassesToNamespace(id: string, classNames: string[]) { + if (!this.namespaces.has(id)) { + return; + } + for (const name of classNames) { + const { className } = this.splitClassNameAndType(name); + this.classes.get(className)!.parent = id; + this.namespaces.get(id)!.classes.set(className, this.classes.get(className)!); + } + } + + public setCssStyle(id: string, styles: string[]) { + const thisClass = this.classes.get(id); + if (!styles || !thisClass) { + return; + } + for (const s of styles) { + if (s.includes(',')) { + thisClass.styles.push(...s.split(',')); + } else { + thisClass.styles.push(s); + } + } + } + + /** + * Gets the arrow marker for a type index + * + * @param type - The type to look for + * @returns The arrow marker + */ + private getArrowMarker(type: number) { + let marker; + switch (type) { + case 0: + marker = 'aggregation'; + break; + case 1: + marker = 'extension'; + break; + case 2: + marker = 'composition'; + break; + case 3: + marker = 'dependency'; + break; + case 4: + marker = 'lollipop'; + break; + default: + marker = 'none'; + } + return marker; + } + + public getData() { + const nodes: Node[] = []; + const edges: Edge[] = []; + const config = getConfig(); + + for (const namespaceKey of this.namespaces.keys()) { + const namespace = this.namespaces.get(namespaceKey); + if (namespace) { + const node: Node = { + id: namespace.id, + label: namespace.id, + isGroup: true, + padding: config.class!.padding ?? 16, + // parent node must be one of [rect, roundedWithTitle, noteGroup, divider] + shape: 'rect', + cssStyles: ['fill: none', 'stroke: black'], + look: config.look, + }; + nodes.push(node); + } + } + + for (const classKey of this.classes.keys()) { + const classNode = this.classes.get(classKey); + if (classNode) { + const node = classNode as unknown as Node; + node.parentId = classNode.parent; + node.look = config.look; + nodes.push(node); + } + } + + let cnt = 0; + for (const note of this.notes) { + cnt++; + const noteNode: Node = { + id: note.id, + label: note.text, + isGroup: false, + shape: 'note', + padding: config.class!.padding ?? 6, + cssStyles: [ + 'text-align: left', + 'white-space: nowrap', + `fill: ${config.themeVariables.noteBkgColor}`, + `stroke: ${config.themeVariables.noteBorderColor}`, + ], look: config.look, }; - nodes.push(node); + nodes.push(noteNode); + + const noteClassId = this.classes.get(note.class)?.id ?? ''; + + if (noteClassId) { + const edge: Edge = { + id: `edgeNote${cnt}`, + start: note.id, + end: noteClassId, + type: 'normal', + thickness: 'normal', + classes: 'relation', + arrowTypeStart: 'none', + arrowTypeEnd: 'none', + arrowheadStyle: '', + labelStyle: [''], + style: ['fill: none'], + pattern: 'dotted', + look: config.look, + }; + edges.push(edge); + } } - } - for (const classKey of classes.keys()) { - const classNode = classes.get(classKey); - if (classNode) { - const node = classNode as unknown as Node; - node.parentId = classNode.parent; - node.look = config.look; - nodes.push(node); + for (const _interface of this.interfaces) { + const interfaceNode: Node = { + id: _interface.id, + label: _interface.label, + isGroup: false, + shape: 'rect', + cssStyles: ['opacity: 0;'], + look: config.look, + }; + nodes.push(interfaceNode); } - } - let cnt = 0; - for (const note of notes) { - cnt++; - const noteNode: Node = { - id: note.id, - label: note.text, - isGroup: false, - shape: 'note', - padding: config.class!.padding ?? 6, - cssStyles: [ - 'text-align: left', - 'white-space: nowrap', - `fill: ${config.themeVariables.noteBkgColor}`, - `stroke: ${config.themeVariables.noteBorderColor}`, - ], - look: config.look, - }; - nodes.push(noteNode); - - const noteClassId = classes.get(note.class)?.id ?? ''; - - if (noteClassId) { + cnt = 0; + for (const classRelation of this.relations) { + cnt++; const edge: Edge = { - id: `edgeNote${cnt}`, - start: note.id, - end: noteClassId, + id: getEdgeId(classRelation.id1, classRelation.id2, { + prefix: 'id', + counter: cnt, + }), + start: classRelation.id1, + end: classRelation.id2, type: 'normal', + label: classRelation.title, + labelpos: 'c', thickness: 'normal', classes: 'relation', - arrowTypeStart: 'none', - arrowTypeEnd: 'none', + arrowTypeStart: this.getArrowMarker(classRelation.relation.type1), + arrowTypeEnd: this.getArrowMarker(classRelation.relation.type2), + startLabelRight: + classRelation.relationTitle1 === 'none' ? '' : classRelation.relationTitle1, + endLabelLeft: classRelation.relationTitle2 === 'none' ? '' : classRelation.relationTitle2, arrowheadStyle: '', - labelStyle: [''], - style: ['fill: none'], - pattern: 'dotted', + labelStyle: ['display: inline-block'], + style: classRelation.style || '', + pattern: classRelation.relation.lineType == 1 ? 'dashed' : 'solid', look: config.look, }; edges.push(edge); } + + return { nodes, edges, other: {}, config, direction: this.getDirection() }; } - for (const _interface of interfaces) { - const interfaceNode: Node = { - id: _interface.id, - label: _interface.label, - isGroup: false, - shape: 'rect', - cssStyles: ['opacity: 0;'], - look: config.look, - }; - nodes.push(interfaceNode); - } - - cnt = 0; - for (const classRelation of relations) { - cnt++; - const edge: Edge = { - id: getEdgeId(classRelation.id1, classRelation.id2, { - prefix: 'id', - counter: cnt, - }), - start: classRelation.id1, - end: classRelation.id2, - type: 'normal', - label: classRelation.title, - labelpos: 'c', - thickness: 'normal', - classes: 'relation', - arrowTypeStart: getArrowMarker(classRelation.relation.type1), - arrowTypeEnd: getArrowMarker(classRelation.relation.type2), - startLabelRight: classRelation.relationTitle1 === 'none' ? '' : classRelation.relationTitle1, - endLabelLeft: classRelation.relationTitle2 === 'none' ? '' : classRelation.relationTitle2, - arrowheadStyle: '', - labelStyle: ['display: inline-block'], - style: classRelation.style || '', - pattern: classRelation.relation.lineType == 1 ? 'dashed' : 'solid', - look: config.look, - }; - edges.push(edge); - } - - return { nodes, edges, other: {}, config, direction: getDirection() }; -}; - -export default { - setAccTitle, - getAccTitle, - getAccDescription, - setAccDescription, - getConfig: () => getConfig().class, - addClass, - bindFunctions, - clear, - getClass, - getClasses, - getNotes, - addAnnotation, - addNote, - getRelations, - addRelation, - getDirection, - setDirection, - addMember, - addMembers, - cleanupLabel, - lineType, - relationType, - setClickEvent, - setCssClass, - defineClass, - setLink, - getTooltip, - setTooltip, - lookUpDomId, - setDiagramTitle, - getDiagramTitle, - setClassLabel, - addNamespace, - addClassesToNamespace, - getNamespace, - getNamespaces, - setCssStyle, - getData, -}; + public setAccTitle = setAccTitle; + public getAccTitle = getAccTitle; + public setAccDescription = setAccDescription; + public getAccDescription = getAccDescription; + public setDiagramTitle = setDiagramTitle; + public getDiagramTitle = getDiagramTitle; + public getConfig = () => getConfig().class; +} diff --git a/packages/mermaid/src/diagrams/class/classDiagram-styles.spec.js b/packages/mermaid/src/diagrams/class/classDiagram-styles.spec.js index 18bdaade5..71f322478 100644 --- a/packages/mermaid/src/diagrams/class/classDiagram-styles.spec.js +++ b/packages/mermaid/src/diagrams/class/classDiagram-styles.spec.js @@ -1,9 +1,11 @@ import { parser } from './parser/classDiagram.jison'; -import classDb from './classDb.js'; +import { ClassDB } from './classDb.js'; describe('class diagram, ', function () { describe('when parsing data from a classDiagram it', function () { + let classDb; beforeEach(function () { + classDb = new ClassDB(); parser.yy = classDb; parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/class/classDiagram-v2.ts b/packages/mermaid/src/diagrams/class/classDiagram-v2.ts index 6a3747e41..9111fe658 100644 --- a/packages/mermaid/src/diagrams/class/classDiagram-v2.ts +++ b/packages/mermaid/src/diagrams/class/classDiagram-v2.ts @@ -1,13 +1,15 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; // @ts-ignore: JISON doesn't support types import parser from './parser/classDiagram.jison'; -import db from './classDb.js'; +import { ClassDB } from './classDb.js'; import styles from './styles.js'; import renderer from './classRenderer-v3-unified.js'; export const diagram: DiagramDefinition = { parser, - db, + get db() { + return new ClassDB(); + }, renderer, styles, init: (cnf) => { @@ -15,6 +17,5 @@ export const diagram: DiagramDefinition = { cnf.class = {}; } cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; - db.clear(); }, }; diff --git a/packages/mermaid/src/diagrams/class/classDiagram.spec.ts b/packages/mermaid/src/diagrams/class/classDiagram.spec.ts index 40027f27e..35a37f903 100644 --- a/packages/mermaid/src/diagrams/class/classDiagram.spec.ts +++ b/packages/mermaid/src/diagrams/class/classDiagram.spec.ts @@ -1,6 +1,7 @@ +/* eslint-disable @typescript-eslint/unbound-method -- Broken for Vitest mocks, see https://github.com/vitest-dev/eslint-plugin-vitest/pull/286 */ // @ts-expect-error Jison doesn't export types import { parser } from './parser/classDiagram.jison'; -import classDb from './classDb.js'; +import { ClassDB } from './classDb.js'; import { vi, describe, it, expect } from 'vitest'; import type { ClassMap, NamespaceNode } from './classTypes.js'; const spyOn = vi.spyOn; @@ -10,8 +11,9 @@ const abstractCssStyle = 'font-style:italic;'; describe('given a basic class diagram, ', function () { describe('when parsing class definition', function () { + let classDb: ClassDB; beforeEach(function () { - classDb.clear(); + classDb = new ClassDB(); parser.yy = classDb; }); it('should handle classes within namespaces', () => { @@ -564,8 +566,9 @@ class C13["With Città foreign language"] }); describe('when parsing class defined in brackets', function () { + let classDb: ClassDB; beforeEach(function () { - classDb.clear(); + classDb = new ClassDB(); parser.yy = classDb; }); @@ -656,8 +659,9 @@ class C13["With Città foreign language"] }); describe('when parsing comments', function () { + let classDb: ClassDB; beforeEach(function () { - classDb.clear(); + classDb = new ClassDB(); parser.yy = classDb; }); @@ -746,8 +750,9 @@ foo() }); describe('when parsing click statements', function () { + let classDb: ClassDB; beforeEach(function () { - classDb.clear(); + classDb = new ClassDB(); parser.yy = classDb; }); it('should handle href link', function () { @@ -857,8 +862,9 @@ foo() }); describe('when parsing annotations', function () { + let classDb: ClassDB; beforeEach(function () { - classDb.clear(); + classDb = new ClassDB(); parser.yy = classDb; }); @@ -921,8 +927,9 @@ foo() describe('given a class diagram with members and methods ', function () { describe('when parsing members', function () { + let classDb: ClassDB; beforeEach(function () { - classDb.clear(); + classDb = new ClassDB(); parser.yy = classDb; }); @@ -980,8 +987,9 @@ describe('given a class diagram with members and methods ', function () { }); describe('when parsing method definition', function () { + let classDb: ClassDB; beforeEach(function () { - classDb.clear(); + classDb = new ClassDB(); parser.yy = classDb; }); @@ -1067,8 +1075,9 @@ describe('given a class diagram with members and methods ', function () { describe('given a class diagram with generics, ', function () { describe('when parsing valid generic classes', function () { + let classDb: ClassDB; beforeEach(function () { - classDb.clear(); + classDb = new ClassDB(); parser.yy = classDb; }); @@ -1180,8 +1189,9 @@ namespace space { describe('given a class diagram with relationships, ', function () { describe('when parsing basic relationships', function () { + let classDb: ClassDB; beforeEach(function () { - classDb.clear(); + classDb = new ClassDB(); parser.yy = classDb; }); @@ -1714,7 +1724,9 @@ class Class2 }); describe('when parsing classDiagram with text labels', () => { + let classDb: ClassDB; beforeEach(function () { + classDb = new ClassDB(); parser.yy = classDb; parser.yy.clear(); }); @@ -1897,3 +1909,40 @@ class C13["With Città foreign language"] }); }); }); + +describe('class db class', () => { + let classDb: ClassDB; + beforeEach(() => { + classDb = new ClassDB(); + }); + // This is to ensure that functions used in class JISON are exposed as function from ClassDB + it('should have functions used in class JISON as own property', () => { + const functionsUsedInParser = [ + 'addRelation', + 'cleanupLabel', + 'setAccTitle', + 'setAccDescription', + 'addClassesToNamespace', + 'addNamespace', + 'setCssClass', + 'addMembers', + 'addClass', + 'setClassLabel', + 'addAnnotation', + 'addMember', + 'addNote', + 'defineClass', + 'setDirection', + 'relationType', + 'lineType', + 'setClickEvent', + 'setTooltip', + 'setLink', + 'setCssStyle', + ] as const satisfies (keyof ClassDB)[]; + + for (const fun of functionsUsedInParser) { + expect(Object.hasOwn(classDb, fun)).toBe(true); + } + }); +}); diff --git a/packages/mermaid/src/diagrams/class/classDiagram.ts b/packages/mermaid/src/diagrams/class/classDiagram.ts index 6a3747e41..9111fe658 100644 --- a/packages/mermaid/src/diagrams/class/classDiagram.ts +++ b/packages/mermaid/src/diagrams/class/classDiagram.ts @@ -1,13 +1,15 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; // @ts-ignore: JISON doesn't support types import parser from './parser/classDiagram.jison'; -import db from './classDb.js'; +import { ClassDB } from './classDb.js'; import styles from './styles.js'; import renderer from './classRenderer-v3-unified.js'; export const diagram: DiagramDefinition = { parser, - db, + get db() { + return new ClassDB(); + }, renderer, styles, init: (cnf) => { @@ -15,6 +17,5 @@ export const diagram: DiagramDefinition = { cnf.class = {}; } cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; - db.clear(); }, }; diff --git a/packages/mermaid/src/diagrams/class/classRenderer-v3-unified.ts b/packages/mermaid/src/diagrams/class/classRenderer-v3-unified.ts index 670f93f16..353abfb19 100644 --- a/packages/mermaid/src/diagrams/class/classRenderer-v3-unified.ts +++ b/packages/mermaid/src/diagrams/class/classRenderer-v3-unified.ts @@ -38,7 +38,13 @@ export const getClasses = function ( return diagramObj.db.getClasses(); }; -export const draw = async function (text: string, id: string, _version: string, diag: any) { +export const draw = async function ( + text: string, + id: string, + _version: string, + diag: any, + positions: any +) { log.info('REF0:'); log.info('Drawing class diagram (v3)', id); const { securityLevel, state: conf, layout } = getConfig(); @@ -60,7 +66,7 @@ export const draw = async function (text: string, id: string, _version: string, data4Layout.rankSpacing = conf?.rankSpacing || 50; data4Layout.markers = ['aggregation', 'extension', 'composition', 'dependency', 'lollipop']; data4Layout.diagramId = id; - await render(data4Layout, svg); + await render(data4Layout, svg, positions); const padding = 8; utils.insertTitle( svg, diff --git a/packages/mermaid/src/diagrams/class/parser/class.spec.js b/packages/mermaid/src/diagrams/class/parser/class.spec.js index d611dfc02..fe0077a29 100644 --- a/packages/mermaid/src/diagrams/class/parser/class.spec.js +++ b/packages/mermaid/src/diagrams/class/parser/class.spec.js @@ -1,8 +1,10 @@ import { parser } from './classDiagram.jison'; -import classDb from '../classDb.js'; +import { ClassDB } from '../classDb.js'; describe('class diagram', function () { + let classDb; beforeEach(function () { + classDb = new ClassDB(); parser.yy = classDb; parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.spec.ts b/packages/mermaid/src/diagrams/flowchart/flowDb.spec.ts index 5983bf04c..ca97b98ba 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.spec.ts +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.spec.ts @@ -1,9 +1,11 @@ -import flowDb from './flowDb.js'; +import { FlowDB } from './flowDb.js'; import type { FlowSubGraph } from './types.js'; describe('flow db subgraphs', () => { + let flowDb: FlowDB; let subgraphs: FlowSubGraph[]; beforeEach(() => { + flowDb = new FlowDB(); subgraphs = [ { nodes: ['a', 'b', 'c', 'e'] }, { nodes: ['f', 'g', 'h'] }, @@ -44,8 +46,9 @@ describe('flow db subgraphs', () => { }); describe('flow db addClass', () => { + let flowDb: FlowDB; beforeEach(() => { - flowDb.clear(); + flowDb = new FlowDB(); }); it('should detect many classes', () => { flowDb.addClass('a,b', ['stroke-width: 8px']); @@ -65,3 +68,33 @@ describe('flow db addClass', () => { expect(classes.get('a')?.styles).toEqual(['stroke-width: 8px']); }); }); + +describe('flow db class', () => { + let flowDb: FlowDB; + beforeEach(() => { + flowDb = new FlowDB(); + }); + // This is to ensure that functions used in flow JISON are exposed as function from FlowDB + it('should have functions used in flow JISON as own property', () => { + const functionsUsedInParser = [ + 'setDirection', + 'addSubGraph', + 'setAccTitle', + 'setAccDescription', + 'addVertex', + 'addLink', + 'setClass', + 'destructLink', + 'addClass', + 'setClickEvent', + 'setTooltip', + 'setLink', + 'updateLink', + 'updateLinkInterpolate', + ] as const satisfies (keyof FlowDB)[]; + + for (const fun of functionsUsedInParser) { + expect(Object.hasOwn(flowDb, fun)).toBe(true); + } + }); +}); diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.ts b/packages/mermaid/src/diagrams/flowchart/flowDb.ts index 1dbc789c9..4da63d582 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.ts +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.ts @@ -1,11 +1,13 @@ import { select } from 'd3'; -import utils, { getEdgeId } from '../../utils.js'; -import { getConfig, defaultConfig } from '../../diagram-api/diagramAPI.js'; -import common from '../common/common.js'; -import { isValidShape, type ShapeID } from '../../rendering-util/rendering-elements/shapes.js'; -import type { Node, Edge } from '../../rendering-util/types.js'; -import { log } from '../../logger.js'; import * as yaml from 'js-yaml'; +import { getConfig, defaultConfig } from '../../diagram-api/diagramAPI.js'; +import type { DiagramDB } from '../../diagram-api/types.js'; +import { log } from '../../logger.js'; +import { isValidShape, type ShapeID } from '../../rendering-util/rendering-elements/shapes.js'; +import type { Edge, Node } from '../../rendering-util/types.js'; +import type { EdgeMetaData, NodeMetaData } from '../../types.js'; +import utils, { getEdgeId } from '../../utils.js'; +import common from '../common/common.js'; import { setAccTitle, getAccTitle, @@ -16,1048 +18,1131 @@ import { getDiagramTitle, } from '../common/commonDb.js'; import type { - FlowVertex, FlowClass, - FlowSubGraph, - FlowText, FlowEdge, FlowLink, + FlowSubGraph, + FlowText, + FlowVertex, FlowVertexTypeParam, } from './types.js'; -import type { NodeMetaData } from '../../types.js'; + +interface LinkData { + id: string; +} const MERMAID_DOM_ID_PREFIX = 'flowchart-'; -let vertexCounter = 0; -let config = getConfig(); -let vertices = new Map(); -let edges: FlowEdge[] & { defaultInterpolate?: string; defaultStyle?: string[] } = []; -let classes = new Map(); -let subGraphs: FlowSubGraph[] = []; -let subGraphLookup = new Map(); -let tooltips = new Map(); -let subCount = 0; -let firstGraphFlag = true; -let direction: string; -let version: string; // As in graph +// We are using arrow functions assigned to class instance fields instead of methods as they are required by flow JISON +export class FlowDB implements DiagramDB { + private vertexCounter = 0; + private config = getConfig(); + private vertices = new Map(); + private edges: FlowEdge[] & { defaultInterpolate?: string; defaultStyle?: string[] } = []; + private classes = new Map(); + private subGraphs: FlowSubGraph[] = []; + private subGraphLookup = new Map(); + private tooltips = new Map(); + private subCount = 0; + private firstGraphFlag = true; + private direction: string | undefined; + private version: string | undefined; // As in graph + private secCount = -1; + private posCrossRef: number[] = []; -// Functions to be run after graph rendering -let funs: ((element: Element) => void)[] = []; // cspell:ignore funs + // Functions to be run after graph rendering + private funs: ((element: Element) => void)[] = []; // cspell:ignore funs -const sanitizeText = (txt: string) => common.sanitizeText(txt, config); + constructor() { + this.funs.push(this.setupToolTips.bind(this)); -/** - * Function to lookup domId from id in the graph definition. - * - * @param id - id of the node - */ -export const lookUpDomId = function (id: string) { - for (const vertex of vertices.values()) { - if (vertex.id === id) { - return vertex.domId; - } - } - return id; -}; + // Needed for JISON since it only supports direct properties + this.addVertex = this.addVertex.bind(this); + this.firstGraph = this.firstGraph.bind(this); + this.setDirection = this.setDirection.bind(this); + this.addSubGraph = this.addSubGraph.bind(this); + this.addLink = this.addLink.bind(this); + this.setLink = this.setLink.bind(this); + this.updateLink = this.updateLink.bind(this); + this.addClass = this.addClass.bind(this); + this.setClass = this.setClass.bind(this); + this.destructLink = this.destructLink.bind(this); + this.setClickEvent = this.setClickEvent.bind(this); + this.setTooltip = this.setTooltip.bind(this); + this.updateLinkInterpolate = this.updateLinkInterpolate.bind(this); + this.setClickFun = this.setClickFun.bind(this); + this.bindFunctions = this.bindFunctions.bind(this); -/** - * Function called by parser when a node definition has been found - */ -export const addVertex = function ( - id: string, - textObj: FlowText, - type: FlowVertexTypeParam, - style: string[], - classes: string[], - dir: string, - props = {}, - shapeData: any -) { - // console.log('addVertex', id, shapeData); - if (!id || id.trim().length === 0) { - return; - } - let txt; - - let vertex = vertices.get(id); - if (vertex === undefined) { - vertex = { - id, - labelType: 'text', - domId: MERMAID_DOM_ID_PREFIX + id + '-' + vertexCounter, - styles: [], - classes: [], + this.lex = { + firstGraph: this.firstGraph.bind(this), }; - vertices.set(id, vertex); - } - vertexCounter++; - if (textObj !== undefined) { - config = getConfig(); - txt = sanitizeText(textObj.text.trim()); - vertex.labelType = textObj.type; - // strip quotes if string starts and ends with a quote - if (txt.startsWith('"') && txt.endsWith('"')) { - txt = txt.substring(1, txt.length - 1); - } - vertex.text = txt; - } else { - if (vertex.text === undefined) { - vertex.text = id; - } - } - if (type !== undefined) { - vertex.type = type; - } - if (style !== undefined && style !== null) { - style.forEach(function (s) { - vertex.styles.push(s); - }); - } - if (classes !== undefined && classes !== null) { - classes.forEach(function (s) { - vertex.classes.push(s); - }); - } - if (dir !== undefined) { - vertex.dir = dir; - } - if (vertex.props === undefined) { - vertex.props = props; - } else if (props !== undefined) { - Object.assign(vertex.props, props); + this.clear(); + this.setGen('gen-2'); } - if (shapeData !== undefined) { - let yamlData; - // detect if shapeData contains a newline character - // console.log('shapeData', shapeData); - if (!shapeData.includes('\n')) { - // console.log('yamlData shapeData has no new lines', shapeData); - yamlData = '{\n' + shapeData + '\n}'; + private sanitizeText(txt: string) { + return common.sanitizeText(txt, this.config); + } + + /** + * Function to lookup domId from id in the graph definition. + * + * @param id - id of the node + */ + public lookUpDomId(id: string) { + for (const vertex of this.vertices.values()) { + if (vertex.id === id) { + return vertex.domId; + } + } + return id; + } + + /** + * Function called by parser when a node definition has been found + */ + public addVertex( + id: string, + textObj: FlowText, + type: FlowVertexTypeParam, + style: string[], + classes: string[], + dir: string, + props = {}, + metadata: any + ) { + if (!id || id.trim().length === 0) { + return; + } + // Extract the metadata from the shapeData, the syntax for adding metadata for nodes and edges is the same + // so at this point we don't know if it's a node or an edge, but we can still extract the metadata + let doc; + if (metadata !== undefined) { + let yamlData; + // detect if shapeData contains a newline character + if (!metadata.includes('\n')) { + yamlData = '{\n' + metadata + '\n}'; + } else { + yamlData = metadata + '\n'; + } + doc = yaml.load(yamlData, { schema: yaml.JSON_SCHEMA }) as NodeMetaData; + } + + // Check if this is an edge + const edge = this.edges.find((e) => e.id === id); + if (edge) { + const edgeDoc = doc as EdgeMetaData; + if (edgeDoc?.animate !== undefined) { + edge.animate = edgeDoc.animate; + } + if (edgeDoc?.animation !== undefined) { + edge.animation = edgeDoc.animation; + } + return; + } + + let txt; + + let vertex = this.vertices.get(id); + if (vertex === undefined) { + vertex = { + id, + labelType: 'text', + domId: MERMAID_DOM_ID_PREFIX + id + '-' + this.vertexCounter, + styles: [], + classes: [], + }; + this.vertices.set(id, vertex); + } + this.vertexCounter++; + + if (textObj !== undefined) { + this.config = getConfig(); + txt = this.sanitizeText(textObj.text.trim()); + vertex.labelType = textObj.type; + // strip quotes if string starts and ends with a quote + if (txt.startsWith('"') && txt.endsWith('"')) { + txt = txt.substring(1, txt.length - 1); + } + vertex.text = txt; } else { - // console.log('yamlData shapeData has new lines', shapeData); - yamlData = shapeData + '\n'; - } - // console.log('yamlData', yamlData); - const doc = yaml.load(yamlData, { schema: yaml.JSON_SCHEMA }) as NodeMetaData; - if (doc.shape) { - if (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes('_')) { - throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`); - } else if (!isValidShape(doc.shape)) { - throw new Error(`No such shape: ${doc.shape}.`); - } - vertex.type = doc?.shape; - } - - if (doc?.label) { - vertex.text = doc?.label; - } - if (doc?.icon) { - vertex.icon = doc?.icon; - if (!doc.label?.trim() && vertex.text === id) { - vertex.text = ''; + if (vertex.text === undefined) { + vertex.text = id; } } - if (doc?.form) { - vertex.form = doc?.form; + if (type !== undefined) { + vertex.type = type; } - if (doc?.pos) { - vertex.pos = doc?.pos; + if (style !== undefined && style !== null) { + style.forEach((s) => { + vertex.styles.push(s); + }); } - if (doc?.img) { - vertex.img = doc?.img; - if (!doc.label?.trim() && vertex.text === id) { - vertex.text = ''; + if (classes !== undefined && classes !== null) { + classes.forEach((s) => { + vertex.classes.push(s); + }); + } + if (dir !== undefined) { + vertex.dir = dir; + } + if (vertex.props === undefined) { + vertex.props = props; + } else if (props !== undefined) { + Object.assign(vertex.props, props); + } + + if (doc !== undefined) { + if (doc.shape) { + if (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes('_')) { + throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`); + } else if (!isValidShape(doc.shape)) { + throw new Error(`No such shape: ${doc.shape}.`); + } + vertex.type = doc?.shape; + } + + if (doc?.label) { + vertex.text = doc?.label; + } + if (doc?.icon) { + vertex.icon = doc?.icon; + if (!doc.label?.trim() && vertex.text === id) { + vertex.text = ''; + } + } + if (doc?.form) { + vertex.form = doc?.form; + } + if (doc?.pos) { + vertex.pos = doc?.pos; + } + if (doc?.img) { + vertex.img = doc?.img; + if (!doc.label?.trim() && vertex.text === id) { + vertex.text = ''; + } + } + if (doc?.constraint) { + vertex.constraint = doc.constraint; + } + if (doc.w) { + vertex.assetWidth = Number(doc.w); + } + if (doc.h) { + vertex.assetHeight = Number(doc.h); } } - if (doc?.constraint) { - vertex.constraint = doc.constraint; - } - if (doc.w) { - vertex.assetWidth = Number(doc.w); - } - if (doc.h) { - vertex.assetHeight = Number(doc.h); - } - } -}; - -/** - * Function called by parser when a link/edge definition has been found - * - */ -export const addSingleLink = function (_start: string, _end: string, type: any) { - const start = _start; - const end = _end; - - const edge: FlowEdge = { start: start, end: end, type: undefined, text: '', labelType: 'text' }; - log.info('abc78 Got edge...', edge); - const linkTextObj = type.text; - - if (linkTextObj !== undefined) { - edge.text = sanitizeText(linkTextObj.text.trim()); - - // strip quotes if string starts and ends with a quote - if (edge.text.startsWith('"') && edge.text.endsWith('"')) { - edge.text = edge.text.substring(1, edge.text.length - 1); - } - edge.labelType = linkTextObj.type; } - if (type !== undefined) { - edge.type = type.type; - edge.stroke = type.stroke; - edge.length = type.length > 10 ? 10 : type.length; - } + /** + * Function called by parser when a link/edge definition has been found + * + */ + public addSingleLink(_start: string, _end: string, type: any, id?: string) { + const start = _start; + const end = _end; - if (edges.length < (config.maxEdges ?? 500)) { - log.info('Pushing edge...'); - edges.push(edge); - } else { - throw new Error( - `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config.maxEdges}. + const edge: FlowEdge = { + start: start, + end: end, + type: undefined, + text: '', + labelType: 'text', + classes: [], + isUserDefinedId: false, + }; + log.info('abc78 Got edge...', edge); + const linkTextObj = type.text; + + if (linkTextObj !== undefined) { + edge.text = this.sanitizeText(linkTextObj.text.trim()); + + // strip quotes if string starts and ends with a quote + if (edge.text.startsWith('"') && edge.text.endsWith('"')) { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; + } + + if (type !== undefined) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length > 10 ? 10 : type.length; + } + if (id && !this.edges.some((e) => e.id === id)) { + edge.id = id; + edge.isUserDefinedId = true; + } else { + const existingLinks = this.edges.filter((e) => e.start === edge.start && e.end === edge.end); + if (existingLinks.length === 0) { + edge.id = getEdgeId(edge.start, edge.end, { counter: 0, prefix: 'L' }); + } else { + edge.id = getEdgeId(edge.start, edge.end, { + counter: existingLinks.length + 1, + prefix: 'L', + }); + } + } + + if (this.edges.length < (this.config.maxEdges ?? 500)) { + log.info('Pushing edge...'); + this.edges.push(edge); + } else { + throw new Error( + `Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}. Initialize mermaid with maxEdges set to a higher number to allow more edges. You cannot set this config via configuration inside the diagram as it is a secure config. You have to call mermaid.initialize.` - ); - } -}; - -export const addLink = function (_start: string[], _end: string[], type: unknown) { - log.info('addLink', _start, _end, type); - for (const start of _start) { - for (const end of _end) { - addSingleLink(start, end, type); - } - } -}; - -/** - * Updates a link's line interpolation algorithm - * - */ -export const updateLinkInterpolate = function ( - positions: ('default' | number)[], - interpolate: string -) { - positions.forEach(function (pos) { - if (pos === 'default') { - edges.defaultInterpolate = interpolate; - } else { - edges[pos].interpolate = interpolate; - } - }); -}; - -/** - * Updates a link with a style - * - */ -export const updateLink = function (positions: ('default' | number)[], style: string[]) { - positions.forEach(function (pos) { - if (typeof pos === 'number' && pos >= edges.length) { - throw new Error( - `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${ - edges.length - 1 - }. (Help: Ensure that the index is within the range of existing edges.)` ); } - if (pos === 'default') { - edges.defaultStyle = style; - } else { - // if (utils.isSubstringInArray('fill', style) === -1) { - // style.push('fill:none'); - // } - edges[pos].style = style; - // if edges[pos].style does have fill not set, set it to none - if ( - (edges[pos]?.style?.length ?? 0) > 0 && - !edges[pos]?.style?.some((s) => s?.startsWith('fill')) - ) { - edges[pos]?.style?.push('fill:none'); - } - } - }); -}; + } -export const addClass = function (ids: string, style: string[]) { - ids.split(',').forEach(function (id) { - let classNode = classes.get(id); - if (classNode === undefined) { - classNode = { id, styles: [], textStyles: [] }; - classes.set(id, classNode); - } + private isLinkData(value: unknown): value is LinkData { + return ( + value !== null && + typeof value === 'object' && + 'id' in value && + typeof (value as LinkData).id === 'string' + ); + } - if (style !== undefined && style !== null) { - style.forEach(function (s) { - if (/color/.exec(s)) { - const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill'); - classNode.textStyles.push(newStyle); + public addLink(_start: string[], _end: string[], linkData: unknown) { + const id = this.isLinkData(linkData) ? linkData.id.replace('@', '') : undefined; + + log.info('addLink', _start, _end, id); + + // for a group syntax like A e1@--> B & C, only the first edge should have an the userDefined id + // the rest of the edges should have auto generated ids + for (const start of _start) { + for (const end of _end) { + //use the id only for last node in _start and and first node in _end + const isLastStart = start === _start[_start.length - 1]; + const isFirstEnd = end === _end[0]; + if (isLastStart && isFirstEnd) { + this.addSingleLink(start, end, linkData, id); + } else { + this.addSingleLink(start, end, linkData, undefined); } - classNode.styles.push(s); - }); - } - }); -}; - -/** - * Called by parser when a graph definition is found, stores the direction of the chart. - * - */ -export const setDirection = function (dir: string) { - direction = dir; - if (/.*/.exec(direction)) { - direction = 'LR'; - } - if (/.*v/.exec(direction)) { - direction = 'TB'; - } - if (direction === 'TD') { - direction = 'TB'; - } -}; - -/** - * Called by parser when a special node is found, e.g. a clickable element. - * - * @param ids - Comma separated list of ids - * @param className - Class to add - */ -export const setClass = function (ids: string, className: string) { - for (const id of ids.split(',')) { - const vertex = vertices.get(id); - if (vertex) { - vertex.classes.push(className); - } - const subGraph = subGraphLookup.get(id); - if (subGraph) { - subGraph.classes.push(className); - } - } -}; - -const setTooltip = function (ids: string, tooltip: string) { - if (tooltip === undefined) { - return; - } - tooltip = sanitizeText(tooltip); - for (const id of ids.split(',')) { - tooltips.set(version === 'gen-1' ? lookUpDomId(id) : id, tooltip); - } -}; - -const setClickFun = function (id: string, functionName: string, functionArgs: string) { - const domId = lookUpDomId(id); - // if (_id[0].match(/\d/)) id = MERMAID_DOM_ID_PREFIX + id; - if (getConfig().securityLevel !== 'loose') { - return; - } - if (functionName === undefined) { - return; - } - let argList: string[] = []; - if (typeof functionArgs === 'string') { - /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */ - argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); - for (let i = 0; i < argList.length; i++) { - let item = argList[i].trim(); - /* Removes all double quotes at the start and end of an argument */ - /* This preserves all starting and ending whitespace inside */ - if (item.startsWith('"') && item.endsWith('"')) { - item = item.substr(1, item.length - 2); } - argList[i] = item; } } - /* if no arguments passed into callback, default to passing in id */ - if (argList.length === 0) { - argList.push(id); + /** + * Updates a link's line interpolation algorithm + */ + public updateLinkInterpolate(positions: ('default' | number)[], interpolate: string) { + positions.forEach((pos) => { + if (pos === 'default') { + this.edges.defaultInterpolate = interpolate; + } else { + this.edges[pos].interpolate = interpolate; + } + }); } - const vertex = vertices.get(id); - if (vertex) { - vertex.haveCallback = true; - funs.push(function () { - const elem = document.querySelector(`[id="${domId}"]`); - if (elem !== null) { - elem.addEventListener( - 'click', - function () { - utils.runFunc(functionName, ...argList); - }, - false + /** + * Updates a link with a style + * + */ + public updateLink(positions: ('default' | number)[], style: string[]) { + positions.forEach((pos) => { + if (typeof pos === 'number' && pos >= this.edges.length) { + throw new Error( + `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${ + this.edges.length - 1 + }. (Help: Ensure that the index is within the range of existing edges.)` ); } - }); - } -}; - -/** - * Called by parser when a link is found. Adds the URL to the vertex data. - * - * @param ids - Comma separated list of ids - * @param linkStr - URL to create a link for - * @param target - Target attribute for the link - */ -export const setLink = function (ids: string, linkStr: string, target: string) { - ids.split(',').forEach(function (id) { - const vertex = vertices.get(id); - if (vertex !== undefined) { - vertex.link = utils.formatUrl(linkStr, config); - vertex.linkTarget = target; - } - }); - setClass(ids, 'clickable'); -}; - -export const getTooltip = function (id: string) { - return tooltips.get(id); -}; - -/** - * Called by parser when a click definition is found. Registers an event handler. - * - * @param ids - Comma separated list of ids - * @param functionName - Function to be called on click - * @param functionArgs - Arguments to be passed to the function - */ -export const setClickEvent = function (ids: string, functionName: string, functionArgs: string) { - ids.split(',').forEach(function (id) { - setClickFun(id, functionName, functionArgs); - }); - setClass(ids, 'clickable'); -}; - -export const bindFunctions = function (element: Element) { - funs.forEach(function (fun) { - fun(element); - }); -}; -export const getDirection = function () { - return direction.trim(); -}; -/** - * Retrieval function for fetching the found nodes after parsing has completed. - * - */ -export const getVertices = function () { - return vertices; -}; - -/** - * Retrieval function for fetching the found links after parsing has completed. - * - */ -export const getEdges = function () { - return edges; -}; - -/** - * Retrieval function for fetching the found class definitions after parsing has completed. - * - */ -export const getClasses = function () { - return classes; -}; - -const setupToolTips = function (element: Element) { - let tooltipElem = select('.mermaidTooltip'); - // @ts-ignore TODO: fix this - if ((tooltipElem._groups || tooltipElem)[0][0] === null) { - // @ts-ignore TODO: fix this - tooltipElem = select('body').append('div').attr('class', 'mermaidTooltip').style('opacity', 0); - } - - const svg = select(element).select('svg'); - - const nodes = svg.selectAll('g.node'); - nodes - .on('mouseover', function () { - const el = select(this); - const title = el.attr('title'); - - // Don't try to draw a tooltip if no data is provided - if (title === null) { - return; - } - const rect = (this as Element)?.getBoundingClientRect(); - - tooltipElem.transition().duration(200).style('opacity', '.9'); - tooltipElem - .text(el.attr('title')) - .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px') - .style('top', window.scrollY + rect.bottom + 'px'); - tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, '
    ')); - el.classed('hover', true); - }) - .on('mouseout', function () { - tooltipElem.transition().duration(500).style('opacity', 0); - const el = select(this); - el.classed('hover', false); - }); -}; -funs.push(setupToolTips); - -/** - * Clears the internal graph db so that a new graph can be parsed. - * - */ -export const clear = function (ver = 'gen-1') { - vertices = new Map(); - classes = new Map(); - edges = []; - funs = [setupToolTips]; - subGraphs = []; - subGraphLookup = new Map(); - subCount = 0; - tooltips = new Map(); - firstGraphFlag = true; - version = ver; - config = getConfig(); - commonClear(); -}; - -export const setGen = (ver: string) => { - version = ver || 'gen-2'; -}; - -export const defaultStyle = function () { - return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;'; -}; - -export const addSubGraph = function ( - _id: { text: string }, - list: string[], - _title: { text: string; type: string } -) { - let id: string | undefined = _id.text.trim(); - let title = _title.text; - if (_id === _title && /\s/.exec(_title.text)) { - id = undefined; - } - - function uniq(a: any[]) { - const prims: any = { boolean: {}, number: {}, string: {} }; - const objs: any[] = []; - - let dir; // = undefined; direction.trim(); - const nodeList = a.filter(function (item) { - const type = typeof item; - if (item.stmt && item.stmt === 'dir') { - dir = item.value; - return false; - } - if (item.trim() === '') { - return false; - } - if (type in prims) { - return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); + if (pos === 'default') { + this.edges.defaultStyle = style; } else { - return objs.includes(item) ? false : objs.push(item); + this.edges[pos].style = style; + // if edges[pos].style does have fill not set, set it to none + if ( + (this.edges[pos]?.style?.length ?? 0) > 0 && + !this.edges[pos]?.style?.some((s) => s?.startsWith('fill')) + ) { + this.edges[pos]?.style?.push('fill:none'); + } } }); - return { nodeList, dir }; } - const { nodeList, dir } = uniq(list.flat()); - if (version === 'gen-1') { - for (let i = 0; i < nodeList.length; i++) { - nodeList[i] = lookUpDomId(nodeList[i]); + public addClass(ids: string, _style: string[]) { + const style = _style + .join() + .replace(/\\,/g, '§§§') + .replace(/,/g, ';') + .replace(/§§§/g, ',') + .split(';'); + ids.split(',').forEach((id) => { + let classNode = this.classes.get(id); + if (classNode === undefined) { + classNode = { id, styles: [], textStyles: [] }; + this.classes.set(id, classNode); + } + + if (style !== undefined && style !== null) { + style.forEach((s) => { + if (/color/.exec(s)) { + const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill'); + classNode.textStyles.push(newStyle); + } + classNode.styles.push(s); + }); + } + }); + } + + /** + * Called by parser when a graph definition is found, stores the direction of the chart. + * + */ + public setDirection(dir: string) { + this.direction = dir; + if (/.*/.exec(this.direction)) { + this.direction = 'LR'; + } + if (/.*v/.exec(this.direction)) { + this.direction = 'TB'; + } + if (this.direction === 'TD') { + this.direction = 'TB'; } } - id = id ?? 'subGraph' + subCount; - title = title || ''; - title = sanitizeText(title); - subCount = subCount + 1; - const subGraph = { - id: id, - nodes: nodeList, - title: title.trim(), - classes: [], - dir, - labelType: _title.type, - }; - - log.info('Adding', subGraph.id, subGraph.nodes, subGraph.dir); - - // Remove the members in the new subgraph if they already belong to another subgraph - subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; - subGraphs.push(subGraph); - subGraphLookup.set(id, subGraph); - return id; -}; - -const getPosForId = function (id: string) { - for (const [i, subGraph] of subGraphs.entries()) { - if (subGraph.id === id) { - return i; + /** + * Called by parser when a special node is found, e.g. a clickable element. + * + * @param ids - Comma separated list of ids + * @param className - Class to add + */ + public setClass(ids: string, className: string) { + for (const id of ids.split(',')) { + const vertex = this.vertices.get(id); + if (vertex) { + vertex.classes.push(className); + } + const edge = this.edges.find((e) => e.id === id); + if (edge) { + edge.classes.push(className); + } + const subGraph = this.subGraphLookup.get(id); + if (subGraph) { + subGraph.classes.push(className); + } } } - return -1; -}; -let secCount = -1; -const posCrossRef: number[] = []; -const indexNodes2 = function (id: string, pos: number): { result: boolean; count: number } { - const nodes = subGraphs[pos].nodes; - secCount = secCount + 1; - if (secCount > 2000) { + + public setTooltip(ids: string, tooltip: string) { + if (tooltip === undefined) { + return; + } + tooltip = this.sanitizeText(tooltip); + for (const id of ids.split(',')) { + this.tooltips.set(this.version === 'gen-1' ? this.lookUpDomId(id) : id, tooltip); + } + } + + private setClickFun(id: string, functionName: string, functionArgs: string) { + const domId = this.lookUpDomId(id); + // if (_id[0].match(/\d/)) id = MERMAID_DOM_ID_PREFIX + id; + if (getConfig().securityLevel !== 'loose') { + return; + } + if (functionName === undefined) { + return; + } + let argList: string[] = []; + if (typeof functionArgs === 'string') { + /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */ + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + /* Removes all double quotes at the start and end of an argument */ + /* This preserves all starting and ending whitespace inside */ + if (item.startsWith('"') && item.endsWith('"')) { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + + /* if no arguments passed into callback, default to passing in id */ + if (argList.length === 0) { + argList.push(id); + } + + const vertex = this.vertices.get(id); + if (vertex) { + vertex.haveCallback = true; + this.funs.push(() => { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + 'click', + () => { + utils.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } + } + + /** + * Called by parser when a link is found. Adds the URL to the vertex data. + * + * @param ids - Comma separated list of ids + * @param linkStr - URL to create a link for + * @param target - Target attribute for the link + */ + public setLink(ids: string, linkStr: string, target: string) { + ids.split(',').forEach((id) => { + const vertex = this.vertices.get(id); + if (vertex !== undefined) { + vertex.link = utils.formatUrl(linkStr, this.config); + vertex.linkTarget = target; + } + }); + this.setClass(ids, 'clickable'); + } + + public getTooltip(id: string) { + return this.tooltips.get(id); + } + + /** + * Called by parser when a click definition is found. Registers an event handler. + * + * @param ids - Comma separated list of ids + * @param functionName - Function to be called on click + * @param functionArgs - Arguments to be passed to the function + */ + public setClickEvent(ids: string, functionName: string, functionArgs: string) { + ids.split(',').forEach((id) => { + this.setClickFun(id, functionName, functionArgs); + }); + this.setClass(ids, 'clickable'); + } + + public bindFunctions(element: Element) { + this.funs.forEach((fun) => { + fun(element); + }); + } + public getDirection() { + return this.direction?.trim(); + } + /** + * Retrieval function for fetching the found nodes after parsing has completed. + * + */ + public getVertices() { + return this.vertices; + } + + /** + * Retrieval function for fetching the found links after parsing has completed. + * + */ + public getEdges() { + return this.edges; + } + + /** + * Retrieval function for fetching the found class definitions after parsing has completed. + * + */ + public getClasses() { + return this.classes; + } + + private setupToolTips(element: Element) { + let tooltipElem = select('.mermaidTooltip'); + // @ts-ignore TODO: fix this + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + // @ts-ignore TODO: fix this + tooltipElem = select('body') + .append('div') + .attr('class', 'mermaidTooltip') + .style('opacity', 0); + } + + const svg = select(element).select('svg'); + + const nodes = svg.selectAll('g.node'); + nodes + .on('mouseover', (e: MouseEvent) => { + const el = select(e.currentTarget as Element); + const title = el.attr('title'); + + // Don't try to draw a tooltip if no data is provided + if (title === null) { + return; + } + const rect = (e.currentTarget as Element)?.getBoundingClientRect(); + + tooltipElem.transition().duration(200).style('opacity', '.9'); + tooltipElem + .text(el.attr('title')) + .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px') + .style('top', window.scrollY + rect.bottom + 'px'); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, '
    ')); + el.classed('hover', true); + }) + .on('mouseout', (e: MouseEvent) => { + tooltipElem.transition().duration(500).style('opacity', 0); + const el = select(e.currentTarget as Element); + el.classed('hover', false); + }); + } + + /** + * Clears the internal graph db so that a new graph can be parsed. + * + */ + public clear(ver = 'gen-2') { + this.vertices = new Map(); + this.classes = new Map(); + this.edges = []; + this.funs = [this.setupToolTips.bind(this)]; + this.subGraphs = []; + this.subGraphLookup = new Map(); + this.subCount = 0; + this.tooltips = new Map(); + this.firstGraphFlag = true; + this.version = ver; + this.config = getConfig(); + commonClear(); + } + + public setGen(ver: string) { + this.version = ver || 'gen-2'; + } + + public defaultStyle() { + return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;'; + } + + public addSubGraph( + _id: { text: string }, + list: string[], + _title: { text: string; type: string } + ) { + let id: string | undefined = _id.text.trim(); + let title = _title.text; + if (_id === _title && /\s/.exec(_title.text)) { + id = undefined; + } + + const uniq = (a: any[]) => { + const prims: any = { boolean: {}, number: {}, string: {} }; + const objs: any[] = []; + + let dir; // = undefined; direction.trim(); + const nodeList = a.filter(function (item) { + const type = typeof item; + if (item.stmt && item.stmt === 'dir') { + dir = item.value; + return false; + } + if (item.trim() === '') { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList, dir }; + }; + + const { nodeList, dir } = uniq(list.flat()); + if (this.version === 'gen-1') { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = this.lookUpDomId(nodeList[i]); + } + } + + id = id ?? 'subGraph' + this.subCount; + title = title || ''; + title = this.sanitizeText(title); + this.subCount = this.subCount + 1; + const subGraph = { + id: id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type, + }; + + log.info('Adding', subGraph.id, subGraph.nodes, subGraph.dir); + + // Remove the members in the new subgraph if they already belong to another subgraph + subGraph.nodes = this.makeUniq(subGraph, this.subGraphs).nodes; + this.subGraphs.push(subGraph); + this.subGraphLookup.set(id, subGraph); + return id; + } + + private getPosForId(id: string) { + for (const [i, subGraph] of this.subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; + } + + private indexNodes2(id: string, pos: number): { result: boolean; count: number } { + const nodes = this.subGraphs[pos].nodes; + this.secCount = this.secCount + 1; + if (this.secCount > 2000) { + return { + result: false, + count: 0, + }; + } + this.posCrossRef[this.secCount] = pos; + // Check if match + if (this.subGraphs[pos].id === id) { + return { + result: true, + count: 0, + }; + } + + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = this.getPosForId(nodes[count]); + // Ignore regular nodes (pos will be -1) + if (childPos >= 0) { + const res = this.indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count, + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { result: false, - count: 0, - }; - } - posCrossRef[secCount] = pos; - // Check if match - if (subGraphs[pos].id === id) { - return { - result: true, - count: 0, + count: posCount, }; } - let count = 0; - let posCount = 1; - while (count < nodes.length) { - const childPos = getPosForId(nodes[count]); - // Ignore regular nodes (pos will be -1) - if (childPos >= 0) { - const res = indexNodes2(id, childPos); - if (res.result) { - return { - result: true, - count: posCount + res.count, - }; - } else { - posCount = posCount + res.count; - } - } - count = count + 1; + public getDepthFirstPos(pos: number) { + return this.posCrossRef[pos]; } - - return { - result: false, - count: posCount, - }; -}; - -export const getDepthFirstPos = function (pos: number) { - return posCrossRef[pos]; -}; -export const indexNodes = function () { - secCount = -1; - if (subGraphs.length > 0) { - indexNodes2('none', subGraphs.length - 1); - } -}; - -export const getSubGraphs = function () { - return subGraphs; -}; - -export const firstGraph = () => { - if (firstGraphFlag) { - firstGraphFlag = false; - return true; - } - return false; -}; - -const destructStartLink = (_str: string): FlowLink => { - let str = _str.trim(); - let type = 'arrow_open'; - - switch (str[0]) { - case '<': - type = 'arrow_point'; - str = str.slice(1); - break; - case 'x': - type = 'arrow_cross'; - str = str.slice(1); - break; - case 'o': - type = 'arrow_circle'; - str = str.slice(1); - break; - } - - let stroke = 'normal'; - - if (str.includes('=')) { - stroke = 'thick'; - } - - if (str.includes('.')) { - stroke = 'dotted'; - } - - return { type, stroke }; -}; - -const countChar = (char: string, str: string) => { - const length = str.length; - let count = 0; - for (let i = 0; i < length; ++i) { - if (str[i] === char) { - ++count; + public indexNodes() { + this.secCount = -1; + if (this.subGraphs.length > 0) { + this.indexNodes2('none', this.subGraphs.length - 1); } } - return count; -}; -const destructEndLink = (_str: string) => { - const str = _str.trim(); - let line = str.slice(0, -1); - let type = 'arrow_open'; - - switch (str.slice(-1)) { - case 'x': - type = 'arrow_cross'; - if (str.startsWith('x')) { - type = 'double_' + type; - line = line.slice(1); - } - break; - case '>': - type = 'arrow_point'; - if (str.startsWith('<')) { - type = 'double_' + type; - line = line.slice(1); - } - break; - case 'o': - type = 'arrow_circle'; - if (str.startsWith('o')) { - type = 'double_' + type; - line = line.slice(1); - } - break; + public getSubGraphs() { + return this.subGraphs; } - let stroke = 'normal'; - let length = line.length - 1; - - if (line.startsWith('=')) { - stroke = 'thick'; + public firstGraph() { + if (this.firstGraphFlag) { + this.firstGraphFlag = false; + return true; + } + return false; } - if (line.startsWith('~')) { - stroke = 'invisible'; - } + private destructStartLink(_str: string): FlowLink { + let str = _str.trim(); + let type = 'arrow_open'; - const dots = countChar('.', line); - - if (dots) { - stroke = 'dotted'; - length = dots; - } - - return { type, stroke, length }; -}; - -export const destructLink = (_str: string, _startStr: string) => { - const info = destructEndLink(_str); - let startInfo; - if (_startStr) { - startInfo = destructStartLink(_startStr); - - if (startInfo.stroke !== info.stroke) { - return { type: 'INVALID', stroke: 'INVALID' }; + switch (str[0]) { + case '<': + type = 'arrow_point'; + str = str.slice(1); + break; + case 'x': + type = 'arrow_cross'; + str = str.slice(1); + break; + case 'o': + type = 'arrow_circle'; + str = str.slice(1); + break; } - if (startInfo.type === 'arrow_open') { - // -- xyz --> - take arrow type from ending - startInfo.type = info.type; - } else { - // x-- xyz --> - not supported - if (startInfo.type !== info.type) { + let stroke = 'normal'; + + if (str.includes('=')) { + stroke = 'thick'; + } + + if (str.includes('.')) { + stroke = 'dotted'; + } + + return { type, stroke }; + } + + private countChar(char: string, str: string) { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; + } + + private destructEndLink(_str: string) { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = 'arrow_open'; + + switch (str.slice(-1)) { + case 'x': + type = 'arrow_cross'; + if (str.startsWith('x')) { + type = 'double_' + type; + line = line.slice(1); + } + break; + case '>': + type = 'arrow_point'; + if (str.startsWith('<')) { + type = 'double_' + type; + line = line.slice(1); + } + break; + case 'o': + type = 'arrow_circle'; + if (str.startsWith('o')) { + type = 'double_' + type; + line = line.slice(1); + } + break; + } + + let stroke = 'normal'; + let length = line.length - 1; + + if (line.startsWith('=')) { + stroke = 'thick'; + } + + if (line.startsWith('~')) { + stroke = 'invisible'; + } + + const dots = this.countChar('.', line); + + if (dots) { + stroke = 'dotted'; + length = dots; + } + + return { type, stroke, length }; + } + + public destructLink(_str: string, _startStr: string) { + const info = this.destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = this.destructStartLink(_startStr); + + if (startInfo.stroke !== info.stroke) { return { type: 'INVALID', stroke: 'INVALID' }; } - startInfo.type = 'double_' + startInfo.type; + if (startInfo.type === 'arrow_open') { + // -- xyz --> - take arrow type from ending + startInfo.type = info.type; + } else { + // x-- xyz --> - not supported + if (startInfo.type !== info.type) { + return { type: 'INVALID', stroke: 'INVALID' }; + } + + startInfo.type = 'double_' + startInfo.type; + } + + if (startInfo.type === 'double_arrow') { + startInfo.type = 'double_arrow_point'; + } + + startInfo.length = info.length; + return startInfo; } - if (startInfo.type === 'double_arrow') { - startInfo.type = 'double_arrow_point'; - } - - startInfo.length = info.length; - return startInfo; + return info; } - return info; -}; - -// Todo optimizer this by caching existing nodes -const exists = (allSgs: FlowSubGraph[], _id: string) => { - for (const sg of allSgs) { - if (sg.nodes.includes(_id)) { - return true; + // Todo optimizer this by caching existing nodes + public exists(allSgs: FlowSubGraph[], _id: string) { + for (const sg of allSgs) { + if (sg.nodes.includes(_id)) { + return true; + } } + return false; } - return false; -}; -/** - * Deletes an id from all subgraphs - * - */ -const makeUniq = (sg: FlowSubGraph, allSubgraphs: FlowSubGraph[]) => { - const res: string[] = []; - sg.nodes.forEach((_id, pos) => { - if (!exists(allSubgraphs, _id)) { - res.push(sg.nodes[pos]); - } - }); - return { nodes: res }; -}; - -export const lex = { - firstGraph, -}; - -const getTypeFromVertex = (vertex: FlowVertex): ShapeID => { - if (vertex.img) { - return 'imageSquare'; - } - if (vertex.icon) { - if (vertex.form === 'circle') { - return 'iconCircle'; - } - if (vertex.form === 'square') { - return 'iconSquare'; - } - if (vertex.form === 'rounded') { - return 'iconRounded'; - } - return 'icon'; - } - switch (vertex.type) { - case 'square': - case undefined: - return 'squareRect'; - case 'round': - return 'roundedRect'; - case 'ellipse': - // @ts-expect-error -- Ellipses are broken, see https://github.com/mermaid-js/mermaid/issues/5976 - return 'ellipse'; - default: - return vertex.type; - } -}; - -const findNode = (nodes: Node[], id: string) => nodes.find((node) => node.id === id); -const destructEdgeType = (type: string | undefined) => { - let arrowTypeStart = 'none'; - let arrowTypeEnd = 'arrow_point'; - switch (type) { - case 'arrow_point': - case 'arrow_circle': - case 'arrow_cross': - arrowTypeEnd = type; - break; - - case 'double_arrow_point': - case 'double_arrow_circle': - case 'double_arrow_cross': - arrowTypeStart = type.replace('double_', ''); - arrowTypeEnd = arrowTypeStart; - break; - } - return { arrowTypeStart, arrowTypeEnd }; -}; - -const addNodeFromVertex = ( - vertex: FlowVertex, - nodes: Node[], - parentDB: Map, - subGraphDB: Map, - config: any, - look: string -) => { - const parentId = parentDB.get(vertex.id); - const isGroup = subGraphDB.get(vertex.id) ?? false; - - const node = findNode(nodes, vertex.id); - if (node) { - node.cssStyles = vertex.styles; - node.cssCompiledStyles = getCompiledStyles(vertex.classes); - node.cssClasses = vertex.classes.join(' '); - } else { - const baseNode = { - id: vertex.id, - label: vertex.text, - labelStyle: '', - parentId, - padding: config.flowchart?.padding || 8, - cssStyles: vertex.styles, - cssCompiledStyles: getCompiledStyles(['default', 'node', ...vertex.classes]), - cssClasses: 'default ' + vertex.classes.join(' '), - dir: vertex.dir, - domId: vertex.domId, - look, - link: vertex.link, - linkTarget: vertex.linkTarget, - tooltip: getTooltip(vertex.id), - icon: vertex.icon, - pos: vertex.pos, - img: vertex.img, - assetWidth: vertex.assetWidth, - assetHeight: vertex.assetHeight, - constraint: vertex.constraint, - }; - if (isGroup) { - nodes.push({ - ...baseNode, - isGroup: true, - shape: 'rect', - }); - } else { - nodes.push({ - ...baseNode, - isGroup: false, - shape: getTypeFromVertex(vertex), - }); - } - } -}; - -function getCompiledStyles(classDefs: string[]) { - let compiledStyles: string[] = []; - for (const customClass of classDefs) { - const cssClass = classes.get(customClass); - if (cssClass?.styles) { - compiledStyles = [...compiledStyles, ...(cssClass.styles ?? [])].map((s) => s.trim()); - } - if (cssClass?.textStyles) { - compiledStyles = [...compiledStyles, ...(cssClass.textStyles ?? [])].map((s) => s.trim()); - } - } - return compiledStyles; -} - -export const getData = () => { - const config = getConfig(); - const nodes: Node[] = []; - const edges: Edge[] = []; - - const subGraphs = getSubGraphs(); - const parentDB = new Map(); - const subGraphDB = new Map(); - - // Setup the subgraph data for adding nodes - for (let i = subGraphs.length - 1; i >= 0; i--) { - const subGraph = subGraphs[i]; - if (subGraph.nodes.length > 0) { - subGraphDB.set(subGraph.id, true); - } - for (const id of subGraph.nodes) { - parentDB.set(id, subGraph.id); - } - } - - // Data is setup, add the nodes - for (let i = subGraphs.length - 1; i >= 0; i--) { - const subGraph = subGraphs[i]; - nodes.push({ - id: subGraph.id, - label: subGraph.title, - labelStyle: '', - parentId: parentDB.get(subGraph.id), - padding: 8, - cssCompiledStyles: getCompiledStyles(subGraph.classes), - cssClasses: subGraph.classes.join(' '), - shape: 'rect', - dir: subGraph.dir, - isGroup: true, - look: config.look, + /** + * Deletes an id from all subgraphs + * + */ + public makeUniq(sg: FlowSubGraph, allSubgraphs: FlowSubGraph[]) { + const res: string[] = []; + sg.nodes.forEach((_id, pos) => { + if (!this.exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } }); + return { nodes: res }; } - const n = getVertices(); - n.forEach((vertex) => { - addNodeFromVertex(vertex, nodes, parentDB, subGraphDB, config, config.look || 'classic'); - }); + public lex: { firstGraph: typeof FlowDB.prototype.firstGraph }; - const e = getEdges(); - e.forEach((rawEdge, index) => { - const { arrowTypeStart, arrowTypeEnd } = destructEdgeType(rawEdge.type); - const styles = [...(e.defaultStyle ?? [])]; - - if (rawEdge.style) { - styles.push(...rawEdge.style); + private getTypeFromVertex(vertex: FlowVertex): ShapeID { + if (vertex.img) { + return 'imageSquare'; } - const edge: Edge = { - id: getEdgeId(rawEdge.start, rawEdge.end, { counter: index, prefix: 'L' }), - start: rawEdge.start, - end: rawEdge.end, - type: rawEdge.type ?? 'normal', - label: rawEdge.text, - labelpos: 'c', - thickness: rawEdge.stroke, - minlen: rawEdge.length, - classes: - rawEdge?.stroke === 'invisible' - ? '' - : 'edge-thickness-normal edge-pattern-solid flowchart-link', - arrowTypeStart: rawEdge?.stroke === 'invisible' ? 'none' : arrowTypeStart, - arrowTypeEnd: rawEdge?.stroke === 'invisible' ? 'none' : arrowTypeEnd, - arrowheadStyle: 'fill: #333', - labelStyle: styles, - style: styles, - pattern: rawEdge.stroke, - look: config.look, - }; - edges.push(edge); - }); + if (vertex.icon) { + if (vertex.form === 'circle') { + return 'iconCircle'; + } + if (vertex.form === 'square') { + return 'iconSquare'; + } + if (vertex.form === 'rounded') { + return 'iconRounded'; + } + return 'icon'; + } + switch (vertex.type) { + case 'square': + case undefined: + return 'squareRect'; + case 'round': + return 'roundedRect'; + case 'ellipse': + // @ts-expect-error -- Ellipses are broken, see https://github.com/mermaid-js/mermaid/issues/5976 + return 'ellipse'; + default: + return vertex.type; + } + } - return { nodes, edges, other: {}, config }; -}; + private findNode(nodes: Node[], id: string) { + return nodes.find((node) => node.id === id); + } + private destructEdgeType(type: string | undefined) { + let arrowTypeStart = 'none'; + let arrowTypeEnd = 'arrow_point'; + switch (type) { + case 'arrow_open': + case 'arrow_point': + case 'arrow_circle': + case 'arrow_cross': + arrowTypeEnd = type; + break; -export default { - defaultConfig: () => defaultConfig.flowchart, - setAccTitle, - getAccTitle, - getAccDescription, - getData, - setAccDescription, - addVertex, - lookUpDomId, - addLink, - updateLinkInterpolate, - updateLink, - addClass, - setDirection, - setClass, - setTooltip, - getTooltip, - setClickEvent, - setLink, - bindFunctions, - getDirection, - getVertices, - getEdges, - getClasses, - clear, - setGen, - defaultStyle, - addSubGraph, - getDepthFirstPos, - indexNodes, - getSubGraphs, - destructLink, - lex, - exists, - makeUniq, - setDiagramTitle, - getDiagramTitle, -}; + case 'double_arrow_point': + case 'double_arrow_circle': + case 'double_arrow_cross': + arrowTypeStart = type.replace('double_', ''); + arrowTypeEnd = arrowTypeStart; + break; + } + return { arrowTypeStart, arrowTypeEnd }; + } + + private addNodeFromVertex( + vertex: FlowVertex, + nodes: Node[], + parentDB: Map, + subGraphDB: Map, + config: any, + look: string + ) { + const parentId = parentDB.get(vertex.id); + const isGroup = subGraphDB.get(vertex.id) ?? false; + + const node = this.findNode(nodes, vertex.id); + if (node) { + node.cssStyles = vertex.styles; + node.cssCompiledStyles = this.getCompiledStyles(vertex.classes); + node.cssClasses = vertex.classes.join(' '); + } else { + const baseNode = { + id: vertex.id, + label: vertex.text, + labelStyle: '', + parentId, + padding: config.flowchart?.padding || 8, + cssStyles: vertex.styles, + cssCompiledStyles: this.getCompiledStyles(['default', 'node', ...vertex.classes]), + cssClasses: 'default ' + vertex.classes.join(' '), + dir: vertex.dir, + domId: vertex.domId, + look, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: this.getTooltip(vertex.id), + icon: vertex.icon, + pos: vertex.pos, + img: vertex.img, + assetWidth: vertex.assetWidth, + assetHeight: vertex.assetHeight, + constraint: vertex.constraint, + }; + if (isGroup) { + nodes.push({ + ...baseNode, + isGroup: true, + shape: 'rect', + }); + } else { + nodes.push({ + ...baseNode, + isGroup: false, + shape: this.getTypeFromVertex(vertex), + }); + } + } + } + + private getCompiledStyles(classDefs: string[]) { + let compiledStyles: string[] = []; + for (const customClass of classDefs) { + const cssClass = this.classes.get(customClass); + if (cssClass?.styles) { + compiledStyles = [...compiledStyles, ...(cssClass.styles ?? [])].map((s) => s.trim()); + } + if (cssClass?.textStyles) { + compiledStyles = [...compiledStyles, ...(cssClass.textStyles ?? [])].map((s) => s.trim()); + } + } + return compiledStyles; + } + + public getData() { + const config = getConfig(); + const nodes: Node[] = []; + const edges: Edge[] = []; + + const subGraphs = this.getSubGraphs(); + const parentDB = new Map(); + const subGraphDB = new Map(); + + // Setup the subgraph data for adding nodes + for (let i = subGraphs.length - 1; i >= 0; i--) { + const subGraph = subGraphs[i]; + if (subGraph.nodes.length > 0) { + subGraphDB.set(subGraph.id, true); + } + for (const id of subGraph.nodes) { + parentDB.set(id, subGraph.id); + } + } + + // Data is setup, add the nodes + for (let i = subGraphs.length - 1; i >= 0; i--) { + const subGraph = subGraphs[i]; + nodes.push({ + id: subGraph.id, + label: subGraph.title, + labelStyle: '', + parentId: parentDB.get(subGraph.id), + padding: 8, + cssCompiledStyles: this.getCompiledStyles(subGraph.classes), + cssClasses: subGraph.classes.join(' '), + shape: 'rect', + dir: subGraph.dir, + isGroup: true, + look: config.look, + }); + } + + const n = this.getVertices(); + n.forEach((vertex) => { + this.addNodeFromVertex(vertex, nodes, parentDB, subGraphDB, config, config.look || 'classic'); + }); + + const e = this.getEdges(); + e.forEach((rawEdge, index) => { + const { arrowTypeStart, arrowTypeEnd } = this.destructEdgeType(rawEdge.type); + const styles = [...(e.defaultStyle ?? [])]; + + if (rawEdge.style) { + styles.push(...rawEdge.style); + } + + const edge: Edge = { + id: getEdgeId(rawEdge.start, rawEdge.end, { counter: index, prefix: 'L' }, rawEdge.id), + isUserDefinedId: rawEdge.isUserDefinedId, + start: rawEdge.start, + end: rawEdge.end, + type: rawEdge.type ?? 'normal', + label: rawEdge.text, + labelpos: 'c', + thickness: rawEdge.stroke, + minlen: rawEdge.length, + classes: + rawEdge?.stroke === 'invisible' + ? '' + : 'edge-thickness-normal edge-pattern-solid flowchart-link', + arrowTypeStart: + rawEdge?.stroke === 'invisible' || rawEdge?.type === 'arrow_open' + ? 'none' + : arrowTypeStart, + arrowTypeEnd: + rawEdge?.stroke === 'invisible' || rawEdge?.type === 'arrow_open' ? 'none' : arrowTypeEnd, + arrowheadStyle: 'fill: #333', + cssCompiledStyles: this.getCompiledStyles(rawEdge.classes), + labelStyle: styles, + style: styles, + pattern: rawEdge.stroke, + look: config.look, + curve: config.flowchart?.curve, + showPoints: config.flowchart?.edgeDebug, + animate: rawEdge.animate, + animation: rawEdge.animation, + }; + + edges.push(edge); + }); + + return { nodes, edges, other: {}, config }; + } + + public defaultConfig() { + return defaultConfig.flowchart; + } + public setAccTitle = setAccTitle; + public setAccDescription = setAccDescription; + public setDiagramTitle = setDiagramTitle; + public getAccTitle = getAccTitle; + public getAccDescription = getAccDescription; + public getDiagramTitle = getDiagramTitle; +} diff --git a/packages/mermaid/src/diagrams/flowchart/flowDiagram.ts b/packages/mermaid/src/diagrams/flowchart/flowDiagram.ts index 67cdf918f..588e9f3ba 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDiagram.ts +++ b/packages/mermaid/src/diagrams/flowchart/flowDiagram.ts @@ -1,14 +1,17 @@ import type { MermaidConfig } from '../../config.type.js'; import { setConfig } from '../../diagram-api/diagramAPI.js'; -import flowDb from './flowDb.js'; +import { FlowDB } from './flowDb.js'; import renderer from './flowRenderer-v3-unified.js'; // @ts-ignore: JISON doesn't support types -import flowParser from './parser/flow.jison'; +//import flowParser from './parser/flow.jison'; +import flowParser from './parser/flowParser.ts'; import flowStyles from './styles.js'; export const diagram = { parser: flowParser, - db: flowDb, + get db() { + return new FlowDB(); + }, renderer, styles: flowStyles, init: (cnf: MermaidConfig) => { @@ -20,7 +23,5 @@ export const diagram = { } cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; setConfig({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } }); - flowDb.clear(); - flowDb.setGen('gen-2'); }, }; diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v3-unified.ts b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v3-unified.ts index 6cc15258d..3816ec900 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v3-unified.ts +++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v3-unified.ts @@ -7,7 +7,6 @@ import { getRegisteredLayoutAlgorithm, render } from '../../rendering-util/rende import { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js'; import type { LayoutData } from '../../rendering-util/types.js'; import utils from '../../utils.js'; -import { getDirection } from './flowDb.js'; export const getClasses = function ( text: string, @@ -16,7 +15,13 @@ export const getClasses = function ( return diagramObj.db.getClasses(); }; -export const draw = async function (text: string, id: string, _version: string, diag: any) { +export const draw = async function ( + text: string, + id: string, + _version: string, + diag: any, + positions: any +) { log.info('REF0:'); log.info('Drawing state diagram (v2)', id); const { securityLevel, flowchart: conf, layout } = getConfig(); @@ -37,10 +42,11 @@ export const draw = async function (text: string, id: string, _version: string, log.debug('Data: ', data4Layout); // Create the root SVG const svg = getDiagramElement(id, securityLevel); - const direction = getDirection(); + const direction = diag.db.getDirection(); data4Layout.type = diag.type; data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout); + if (data4Layout.layoutAlgorithm === 'dagre' && layout === 'elk') { log.warn( 'flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback.' @@ -53,7 +59,7 @@ export const draw = async function (text: string, id: string, _version: string, data4Layout.diagramId = id; log.debug('REF1:', data4Layout); - await render(data4Layout, svg); + await render(data4Layout, svg, positions); const padding = data4Layout.config.flowchart?.diagramPadding ?? 8; utils.insertTitle( svg, diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-arrows.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-arrows.spec.js index e89398ab4..8538c4bab 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-arrows.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-arrows.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -8,7 +8,7 @@ setConfig({ describe('[Arrows] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-comments.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-comments.spec.js index 9c2a740af..99462f8db 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-comments.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-comments.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; import { cleanupComments } from '../../../diagram-api/comments.js'; @@ -9,7 +9,7 @@ setConfig({ describe('[Comments] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-direction.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-direction.spec.js index ce6b0b0c4..560bc2a1b 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-direction.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-direction.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -8,7 +8,7 @@ setConfig({ describe('when parsing directions', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js index 4ae289bad..f8c7a5162 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -39,10 +39,31 @@ const doubleEndedEdges = [ { edgeStart: '<==', edgeEnd: '==>', stroke: 'thick', type: 'double_arrow_point' }, { edgeStart: '<-.', edgeEnd: '.->', stroke: 'dotted', type: 'double_arrow_point' }, ]; +const regularEdges = [ + { edgeStart: '--', edgeEnd: '--x', stroke: 'normal', type: 'arrow_cross' }, + { edgeStart: '==', edgeEnd: '==x', stroke: 'thick', type: 'arrow_cross' }, + { edgeStart: '-.', edgeEnd: '.-x', stroke: 'dotted', type: 'arrow_cross' }, + { edgeStart: '--', edgeEnd: '--o', stroke: 'normal', type: 'arrow_circle' }, + { edgeStart: '==', edgeEnd: '==o', stroke: 'thick', type: 'arrow_circle' }, + { edgeStart: '-.', edgeEnd: '.-o', stroke: 'dotted', type: 'arrow_circle' }, + { edgeStart: '--', edgeEnd: '-->', stroke: 'normal', type: 'arrow_point' }, + { edgeStart: '==', edgeEnd: '==>', stroke: 'thick', type: 'arrow_point' }, + { edgeStart: '-.', edgeEnd: '.->', stroke: 'dotted', type: 'arrow_point' }, + + { edgeStart: '--', edgeEnd: '----x', stroke: 'normal', type: 'arrow_cross' }, + { edgeStart: '==', edgeEnd: '====x', stroke: 'thick', type: 'arrow_cross' }, + { edgeStart: '-.', edgeEnd: '...-x', stroke: 'dotted', type: 'arrow_cross' }, + { edgeStart: '--', edgeEnd: '----o', stroke: 'normal', type: 'arrow_circle' }, + { edgeStart: '==', edgeEnd: '====o', stroke: 'thick', type: 'arrow_circle' }, + { edgeStart: '-.', edgeEnd: '...-o', stroke: 'dotted', type: 'arrow_circle' }, + { edgeStart: '--', edgeEnd: '---->', stroke: 'normal', type: 'arrow_point' }, + { edgeStart: '==', edgeEnd: '====>', stroke: 'thick', type: 'arrow_point' }, + { edgeStart: '-.', edgeEnd: '...->', stroke: 'dotted', type: 'arrow_point' }, +]; describe('[Edges] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); }); @@ -67,6 +88,74 @@ describe('[Edges] when parsing', () => { expect(edges[0].type).toBe('arrow_circle'); }); + describe('edges with ids', function () { + describe('open ended edges with ids and labels', function () { + regularEdges.forEach((edgeType) => { + it(`should handle ${edgeType.stroke} ${edgeType.type} with no text`, function () { + const res = flow.parser.parse( + `flowchart TD;\nA e1@${edgeType.edgeStart}${edgeType.edgeEnd} B;` + ); + const vert = flow.parser.yy.getVertices(); + const edges = flow.parser.yy.getEdges(); + expect(vert.get('A').id).toBe('A'); + expect(vert.get('B').id).toBe('B'); + expect(edges.length).toBe(1); + expect(edges[0].id).toBe('e1'); + expect(edges[0].start).toBe('A'); + expect(edges[0].end).toBe('B'); + expect(edges[0].type).toBe(`${edgeType.type}`); + expect(edges[0].text).toBe(''); + expect(edges[0].stroke).toBe(`${edgeType.stroke}`); + }); + it(`should handle ${edgeType.stroke} ${edgeType.type} with text`, function () { + const res = flow.parser.parse( + `flowchart TD;\nA e1@${edgeType.edgeStart}${edgeType.edgeEnd} B;` + ); + const vert = flow.parser.yy.getVertices(); + const edges = flow.parser.yy.getEdges(); + expect(vert.get('A').id).toBe('A'); + expect(vert.get('B').id).toBe('B'); + expect(edges.length).toBe(1); + expect(edges[0].id).toBe('e1'); + expect(edges[0].start).toBe('A'); + expect(edges[0].end).toBe('B'); + expect(edges[0].type).toBe(`${edgeType.type}`); + expect(edges[0].text).toBe(''); + expect(edges[0].stroke).toBe(`${edgeType.stroke}`); + }); + }); + it('should handle normal edges where you also have a node with metadata', function () { + const res = flow.parser.parse(`flowchart LR +A id1@-->B +A@{ shape: 'rect' } +`); + const edges = flow.parser.yy.getEdges(); + + expect(edges[0].id).toBe('id1'); + }); + }); + describe('double ended edges with ids and labels', function () { + doubleEndedEdges.forEach((edgeType) => { + it(`should handle ${edgeType.stroke} ${edgeType.type} with text`, function () { + const res = flow.parser.parse( + `flowchart TD;\nA e1@${edgeType.edgeStart} label ${edgeType.edgeEnd} B;` + ); + const vert = flow.parser.yy.getVertices(); + const edges = flow.parser.yy.getEdges(); + expect(vert.get('A').id).toBe('A'); + expect(vert.get('B').id).toBe('B'); + expect(edges.length).toBe(1); + expect(edges[0].id).toBe('e1'); + expect(edges[0].start).toBe('A'); + expect(edges[0].end).toBe('B'); + expect(edges[0].type).toBe(`${edgeType.type}`); + expect(edges[0].text).toBe('label'); + expect(edges[0].stroke).toBe(`${edgeType.stroke}`); + }); + }); + }); + }); + describe('edges', function () { doubleEndedEdges.forEach((edgeType) => { it(`should handle ${edgeType.stroke} ${edgeType.type} with no text`, function () { diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-huge.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-huge.spec.js index 8931c6ee1..e512ba86a 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-huge.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-huge.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -8,7 +8,7 @@ setConfig({ describe('[Text] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-interactions.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-interactions.spec.js index cb3f48cca..1b75803af 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-interactions.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-interactions.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; import { vi } from 'vitest'; const spyOn = vi.spyOn; @@ -9,7 +9,9 @@ setConfig({ }); describe('[Interactions] when parsing', () => { + let flowDb; beforeEach(function () { + flowDb = new FlowDB(); flow.parser.yy = flowDb; flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-lines.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-lines.spec.js index ec157e646..6b1bc7fbb 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-lines.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-lines.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -8,7 +8,7 @@ setConfig({ describe('[Lines] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-md-string.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-md-string.spec.js index 55e749a22..18bf42a21 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-md-string.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-md-string.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -8,7 +8,7 @@ setConfig({ describe('parsing a flow chart with markdown strings', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-node-data.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-node-data.spec.js index 1669cfada..60620d8b2 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-node-data.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-node-data.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -8,7 +8,7 @@ setConfig({ describe('when parsing directions', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); @@ -251,7 +251,7 @@ describe('when parsing directions', function () { expect(data4Layout.nodes[0].shape).toEqual('squareRect'); expect(data4Layout.nodes[0].label).toEqual('This is a
    multiline string'); }); - it(' should be possible to use } in strings', function () { + it('should be possible to use } in strings', function () { const res = flow.parser.parse(`flowchart TB A@{ label: "This is a string with }" @@ -264,7 +264,7 @@ describe('when parsing directions', function () { expect(data4Layout.nodes[0].shape).toEqual('squareRect'); expect(data4Layout.nodes[0].label).toEqual('This is a string with }'); }); - it(' should be possible to use @ in strings', function () { + it('should be possible to use @ in strings', function () { const res = flow.parser.parse(`flowchart TB A@{ label: "This is a string with @" @@ -277,7 +277,7 @@ describe('when parsing directions', function () { expect(data4Layout.nodes[0].shape).toEqual('squareRect'); expect(data4Layout.nodes[0].label).toEqual('This is a string with @'); }); - it(' should be possible to use @ in strings', function () { + it('should be possible to use @ in strings', function () { const res = flow.parser.parse(`flowchart TB A@{ label: "This is a string with}" @@ -290,4 +290,126 @@ describe('when parsing directions', function () { expect(data4Layout.nodes[0].shape).toEqual('squareRect'); expect(data4Layout.nodes[0].label).toEqual('This is a string with}'); }); + + it('should be possible to use @ syntax to add labels on multi nodes', function () { + const res = flow.parser.parse(`flowchart TB + n2["label for n2"] & n4@{ label: "labe for n4"} & n5@{ label: "labe for n5"} + `); + + const data4Layout = flow.parser.yy.getData(); + expect(data4Layout.nodes.length).toBe(3); + expect(data4Layout.nodes[0].label).toEqual('label for n2'); + expect(data4Layout.nodes[1].label).toEqual('labe for n4'); + expect(data4Layout.nodes[2].label).toEqual('labe for n5'); + }); + + it('should be possible to use @ syntax to add labels on multi nodes with edge/link', function () { + const res = flow.parser.parse(`flowchart TD + A["A"] --> B["for B"] & C@{ label: "for c"} & E@{label : "for E"} + D@{label: "for D"} + `); + + const data4Layout = flow.parser.yy.getData(); + expect(data4Layout.nodes.length).toBe(5); + expect(data4Layout.nodes[0].label).toEqual('A'); + expect(data4Layout.nodes[1].label).toEqual('for B'); + expect(data4Layout.nodes[2].label).toEqual('for c'); + expect(data4Layout.nodes[3].label).toEqual('for E'); + expect(data4Layout.nodes[4].label).toEqual('for D'); + }); + + it('should be possible to use @ syntax in labels', function () { + const res = flow.parser.parse(`flowchart TD + A["@A@"] --> B["@for@ B@"] & C@{ label: "@for@ c@"} & E{"\`@for@ E@\`"} & D(("@for@ D@")) + H1{{"@for@ H@"}} + H2{{"\`@for@ H@\`"}} + Q1{"@for@ Q@"} + Q2{"\`@for@ Q@\`"} + AS1>"@for@ AS@"] + AS2>"\`@for@ AS@\`"] + `); + + const data4Layout = flow.parser.yy.getData(); + expect(data4Layout.nodes.length).toBe(11); + expect(data4Layout.nodes[0].label).toEqual('@A@'); + expect(data4Layout.nodes[1].label).toEqual('@for@ B@'); + expect(data4Layout.nodes[2].label).toEqual('@for@ c@'); + expect(data4Layout.nodes[3].label).toEqual('@for@ E@'); + expect(data4Layout.nodes[4].label).toEqual('@for@ D@'); + expect(data4Layout.nodes[5].label).toEqual('@for@ H@'); + expect(data4Layout.nodes[6].label).toEqual('@for@ H@'); + expect(data4Layout.nodes[7].label).toEqual('@for@ Q@'); + expect(data4Layout.nodes[8].label).toEqual('@for@ Q@'); + expect(data4Layout.nodes[9].label).toEqual('@for@ AS@'); + expect(data4Layout.nodes[10].label).toEqual('@for@ AS@'); + }); + + it('should handle unique edge creation with using @ and &', function () { + const res = flow.parser.parse(`flowchart TD + A & B e1@--> C & D + A1 e2@--> C1 & D1 + `); + + const data4Layout = flow.parser.yy.getData(); + expect(data4Layout.nodes.length).toBe(7); + expect(data4Layout.edges.length).toBe(6); + expect(data4Layout.edges[0].id).toEqual('L_A_C_0'); + expect(data4Layout.edges[1].id).toEqual('L_A_D_0'); + expect(data4Layout.edges[2].id).toEqual('e1'); + expect(data4Layout.edges[3].id).toEqual('L_B_D_0'); + expect(data4Layout.edges[4].id).toEqual('e2'); + expect(data4Layout.edges[5].id).toEqual('L_A1_D1_0'); + }); + + it('should handle redefine same edge ids again', function () { + const res = flow.parser.parse(`flowchart TD + A & B e1@--> C & D + A1 e1@--> C1 & D1 + `); + + const data4Layout = flow.parser.yy.getData(); + expect(data4Layout.nodes.length).toBe(7); + expect(data4Layout.edges.length).toBe(6); + expect(data4Layout.edges[0].id).toEqual('L_A_C_0'); + expect(data4Layout.edges[1].id).toEqual('L_A_D_0'); + expect(data4Layout.edges[2].id).toEqual('e1'); + expect(data4Layout.edges[3].id).toEqual('L_B_D_0'); + expect(data4Layout.edges[4].id).toEqual('L_A1_C1_0'); + expect(data4Layout.edges[5].id).toEqual('L_A1_D1_0'); + }); + + it('should handle overriding edge animate again', function () { + const res = flow.parser.parse(`flowchart TD + A e1@--> B + C e2@--> D + E e3@--> F + e1@{ animate: true } + e2@{ animate: false } + e3@{ animate: true } + e3@{ animate: false } + `); + + const data4Layout = flow.parser.yy.getData(); + expect(data4Layout.nodes.length).toBe(6); + expect(data4Layout.edges.length).toBe(3); + expect(data4Layout.edges[0].id).toEqual('e1'); + expect(data4Layout.edges[0].animate).toEqual(true); + expect(data4Layout.edges[1].id).toEqual('e2'); + expect(data4Layout.edges[1].animate).toEqual(false); + expect(data4Layout.edges[2].id).toEqual('e3'); + expect(data4Layout.edges[2].animate).toEqual(false); + }); + + it.skip('should be possible to use @ syntax to add labels with trail spaces', function () { + const res = flow.parser.parse( + `flowchart TB + n2["label for n2"] & n4@{ label: "labe for n4"} & n5@{ label: "labe for n5"} ` + ); + + const data4Layout = flow.parser.yy.getData(); + expect(data4Layout.nodes.length).toBe(3); + expect(data4Layout.nodes[0].label).toEqual('label for n2'); + expect(data4Layout.nodes[1].label).toEqual('labe for n4'); + expect(data4Layout.nodes[2].label).toEqual('labe for n5'); + }); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-singlenode.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-singlenode.spec.js index f6ed123d7..89e0cc621 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-singlenode.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-singlenode.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -31,7 +31,7 @@ const specialChars = ['#', ':', '0', '&', ',', '*', '.', '\\', 'v', '-', '/', '_ describe('[Singlenodes] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js index 22fd48a33..316b035b0 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -8,7 +8,7 @@ setConfig({ describe('[Style] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-text.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-text.spec.js index 3754766f4..606414a11 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-text.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-text.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -8,7 +8,7 @@ setConfig({ describe('[Text] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-vertice-chaining.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-vertice-chaining.spec.js index a5b6a2b6d..5a560b7dd 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-vertice-chaining.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-vertice-chaining.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -8,7 +8,7 @@ setConfig({ describe('when parsing flowcharts', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow.jison b/packages/mermaid/src/diagrams/flowchart/parser/flow.jison index b3df82fa5..7b2f4386a 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow.jison +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow.jison @@ -141,6 +141,7 @@ that id. .*direction\s+RL[^\n]* return 'direction_rl'; .*direction\s+LR[^\n]* return 'direction_lr'; +[^\s\"]+\@(?=[^\{\"]) { return 'LINK_ID'; } [0-9]+ return 'NUM'; \# return 'BRKT'; ":::" return 'STYLE_SEPARATOR'; @@ -201,7 +202,9 @@ that id. "*" return 'MULT'; "#" return 'BRKT'; "&" return 'AMP'; -([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|\-(?=[^\>\-\.])|=(?!=))+ return 'NODE_STRING'; +([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|\-(?=[^\>\-\.])|=(?!=))+ { + return 'NODE_STRING'; +} "-" return 'MINUS' [\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]| [\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]| @@ -361,7 +364,7 @@ spaceList statement : vertexStatement separator - { /* console.warn('finat vs', $vertexStatement.nodes); */ $$=$vertexStatement.nodes} + { $$=$vertexStatement.nodes} | styleStatement separator {$$=[];} | linkStyleStatement separator @@ -396,7 +399,7 @@ shapeData: ; vertexStatement: vertexStatement link node shapeData - { /* console.warn('vs shapeData',$vertexStatement.stmt,$node, $shapeData);*/ yy.addVertex($node[0],undefined,undefined,undefined, undefined,undefined, undefined,$shapeData); yy.addLink($vertexStatement.stmt,$node,$link); $$ = { stmt: $node, nodes: $node.concat($vertexStatement.nodes) } } + { /* console.warn('vs shapeData',$vertexStatement.stmt,$node, $shapeData);*/ yy.addVertex($node[$node.length-1],undefined,undefined,undefined, undefined,undefined, undefined,$shapeData); yy.addLink($vertexStatement.stmt,$node,$link); $$ = { stmt: $node, nodes: $node.concat($vertexStatement.nodes) } } | vertexStatement link node { /*console.warn('vs',$vertexStatement.stmt,$node);*/ yy.addLink($vertexStatement.stmt,$node,$link); $$ = { stmt: $node, nodes: $node.concat($vertexStatement.nodes) } } | vertexStatement link node spaceList @@ -404,7 +407,7 @@ vertexStatement: vertexStatement link node shapeData |node spaceList { /*console.warn('vertexStatement: node spaceList', $node);*/ $$ = {stmt: $node, nodes:$node }} |node shapeData { /*console.warn('vertexStatement: node shapeData', $node[0], $shapeData);*/ - yy.addVertex($node[0],undefined,undefined,undefined, undefined,undefined, undefined,$shapeData); + yy.addVertex($node[$node.length-1],undefined,undefined,undefined, undefined,undefined, undefined,$shapeData); $$ = {stmt: $node, nodes:$node, shapeData: $shapeData} } |node { /* console.warn('vertexStatement: single node', $node); */ $$ = {stmt: $node, nodes:$node }} @@ -413,7 +416,7 @@ vertexStatement: vertexStatement link node shapeData node: styledVertex { /*console.warn('nod', $styledVertex);*/ $$ = [$styledVertex];} | node shapeData spaceList AMP spaceList styledVertex - { yy.addVertex($node[0],undefined,undefined,undefined, undefined,undefined, undefined,$shapeData); $$ = $node.concat($styledVertex); /*console.warn('pip2', $node[0], $styledVertex, $$);*/ } + { yy.addVertex($node[$node.length-1],undefined,undefined,undefined, undefined,undefined, undefined,$shapeData); $$ = $node.concat($styledVertex); /*console.warn('pip2', $node[0], $styledVertex, $$);*/ } | node spaceList AMP spaceList styledVertex { $$ = $node.concat($styledVertex); /*console.warn('pip', $node[0], $styledVertex, $$);*/ } ; @@ -472,6 +475,8 @@ link: linkStatement arrowText {$$ = $linkStatement;} | START_LINK edgeText LINK {var inf = yy.destructLink($LINK, $START_LINK); $$ = {"type":inf.type,"stroke":inf.stroke,"length":inf.length,"text":$edgeText};} + | LINK_ID START_LINK edgeText LINK + {var inf = yy.destructLink($LINK, $START_LINK); $$ = {"type":inf.type,"stroke":inf.stroke,"length":inf.length,"text":$edgeText, "id": $LINK_ID};} ; edgeText: edgeTextToken @@ -487,6 +492,8 @@ edgeText: edgeTextToken linkStatement: LINK {var inf = yy.destructLink($LINK);$$ = {"type":inf.type,"stroke":inf.stroke,"length":inf.length};} + | LINK_ID LINK + {var inf = yy.destructLink($LINK);$$ = {"type":inf.type,"stroke":inf.stroke,"length":inf.length, "id": $LINK_ID};} ; arrowText: diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow.spec.js index 8081c8fe4..6ea36d179 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { cleanupComments } from '../../../diagram-api/comments.js'; import { setConfig } from '../../../config.js'; @@ -9,7 +9,7 @@ setConfig({ describe('parsing a flow chart', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flowParser.ts b/packages/mermaid/src/diagrams/flowchart/parser/flowParser.ts new file mode 100644 index 000000000..acf4fa525 --- /dev/null +++ b/packages/mermaid/src/diagrams/flowchart/parser/flowParser.ts @@ -0,0 +1,12 @@ +// @ts-ignore: JISON doesn't support types +import flowJisonParser from './flow.jison'; + +const newParser = Object.assign({}, flowJisonParser); + +newParser.parse = (src: string): unknown => { + // remove the trailing whitespace after closing curly braces when ending a line break + const newSrc = src.replace(/}\s*\n/g, '}\n'); + return flowJisonParser.parse(newSrc); +}; + +export default newParser; diff --git a/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js index 12b2e4a39..9339a6e2c 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js @@ -1,5 +1,5 @@ -import flowDb from '../flowDb.js'; -import flow from './flow.jison'; +import { FlowDB } from '../flowDb.js'; +import flow from './flowParser.ts'; import { setConfig } from '../../../config.js'; setConfig({ @@ -8,7 +8,7 @@ setConfig({ describe('when parsing subgraphs', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDB(); flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); diff --git a/packages/mermaid/src/diagrams/flowchart/styles.ts b/packages/mermaid/src/diagrams/flowchart/styles.ts index ade9613fb..5dc1e4ec9 100644 --- a/packages/mermaid/src/diagrams/flowchart/styles.ts +++ b/packages/mermaid/src/diagrams/flowchart/styles.ts @@ -16,6 +16,7 @@ export interface FlowChartStyleOptions { tertiaryColor: string; textColor: string; titleColor: string; + strokeWidth: string; } const fade = (color: string, opacity: number) => { @@ -57,17 +58,11 @@ const getStyles = (options: FlowChartStyleOptions) => .node path { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; - stroke-width: 1px; + stroke-width: ${options.strokeWidth}px; } .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { text-anchor: middle; } - // .flowchart-label .text-outer-tspan { - // text-anchor: middle; - // } - // .flowchart-label .text-inner-tspan { - // text-anchor: start; - // } .node .katex path { fill: #000; @@ -95,7 +90,7 @@ const getStyles = (options: FlowChartStyleOptions) => .edgePath .path { stroke: ${options.lineColor}; - stroke-width: 2.0px; + stroke-width: ${options.strokeWidth}px; } .flowchart-link { @@ -125,7 +120,7 @@ const getStyles = (options: FlowChartStyleOptions) => .cluster rect { fill: ${options.clusterBkg}; stroke: ${options.clusterBorder}; - stroke-width: 1px; + stroke-width: ${options.strokeWidth}px; } .cluster text { diff --git a/packages/mermaid/src/diagrams/flowchart/types.ts b/packages/mermaid/src/diagrams/flowchart/types.ts index b2c5cf620..54156091b 100644 --- a/packages/mermaid/src/diagrams/flowchart/types.ts +++ b/packages/mermaid/src/diagrams/flowchart/types.ts @@ -53,6 +53,7 @@ export interface FlowText { } export interface FlowEdge { + isUserDefinedId: boolean; start: string; end: string; interpolate?: string; @@ -62,6 +63,10 @@ export interface FlowEdge { length?: number; text: string; labelType: 'text'; + classes: string[]; + id?: string; + animation?: 'fast' | 'slow'; + animate?: boolean; } export interface FlowClass { diff --git a/packages/mermaid/src/diagrams/gantt/styles.js b/packages/mermaid/src/diagrams/gantt/styles.js index 626ed4e0f..5b53a1b07 100644 --- a/packages/mermaid/src/diagrams/gantt/styles.js +++ b/packages/mermaid/src/diagrams/gantt/styles.js @@ -1,7 +1,7 @@ const getStyles = (options) => ` .mermaid-main-font { - font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + font-family: ${options.fontFamily}; } .exclude-range { @@ -45,7 +45,7 @@ const getStyles = (options) => .sectionTitle { text-anchor: start; - font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + font-family: ${options.fontFamily}; } @@ -86,13 +86,13 @@ const getStyles = (options) => .taskText { text-anchor: middle; - font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + font-family: ${options.fontFamily}; } .taskTextOutsideRight { fill: ${options.taskTextDarkColor}; text-anchor: start; - font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + font-family: ${options.fontFamily}; } .taskTextOutsideLeft { @@ -248,7 +248,7 @@ const getStyles = (options) => text-anchor: middle; font-size: 18px; fill: ${options.titleColor || options.textColor}; - font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + font-family: ${options.fontFamily}; } `; diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts index 6fed435ac..54aa40a78 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts @@ -4,11 +4,13 @@ import parser from './parser/sankey.jison'; import db from './sankeyDB.js'; import renderer from './sankeyRenderer.js'; import { prepareTextForParsing } from './sankeyUtils.js'; +import sankeyStyles from './styles.js'; const originalParse = parser.parse.bind(parser); parser.parse = (text: string) => originalParse(prepareTextForParsing(text)); export const diagram: DiagramDefinition = { + styles: sankeyStyles, parser, db, renderer, diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts index a981a346e..5e3f04173 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts @@ -136,7 +136,6 @@ export const draw = function (text: string, id: string, _version: string, diagOb svg .append('g') .attr('class', 'node-labels') - .attr('font-family', 'sans-serif') .attr('font-size', 14) .selectAll('text') .data(graph.nodes) diff --git a/packages/mermaid/src/diagrams/sankey/styles.js b/packages/mermaid/src/diagrams/sankey/styles.js new file mode 100644 index 000000000..eafb62b05 --- /dev/null +++ b/packages/mermaid/src/diagrams/sankey/styles.js @@ -0,0 +1,6 @@ +const getStyles = (options) => + `.label { + font-family: ${options.fontFamily}; + }`; + +export default getStyles; diff --git a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts index 951d84b86..fa2ac6a1f 100644 --- a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts +++ b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts @@ -237,7 +237,7 @@ interface NoteModel { * @param elem - The diagram to draw to. * @param noteModel - Note model options. */ -const drawNote = async function (elem: any, noteModel: NoteModel) { +const drawNote = async function (elem: any, noteModel: NoteModel, id: string) { bounds.bumpVerticalPos(conf.boxMargin); noteModel.height = conf.boxMargin; noteModel.starty = bounds.getVerticalPos(); @@ -248,6 +248,8 @@ const drawNote = async function (elem: any, noteModel: NoteModel) { rect.class = 'note'; const g = elem.append('g'); + g.attr('data-et', 'note'); + g.attr('data-id', 'i' + id); const rectElem = svgDraw.drawRect(g, rect); const textObj = svgDrawCommon.getTextObj(); textObj.x = noteModel.startx; @@ -447,6 +449,11 @@ const drawMessage = async function (diagram, msgModel, lineStartY: number, diagO line.attr('class', 'messageLine0'); } + line.attr('data-et', 'message'); + line.attr('data-id', 'i' + msgModel.id); + line.attr('data-from', msgModel.from); + line.attr('data-to', msgModel.to); + let url = ''; if (conf.arrowMarkerAbsolute) { url = @@ -865,7 +872,7 @@ export const draw = async function (_text: string, id: string, _version: string, case diagObj.db.LINETYPE.NOTE: bounds.resetVerticalPos(); noteModel = msg.noteModel; - await drawNote(diagram, noteModel); + await drawNote(diagram, noteModel, msg.id); break; case diagObj.db.LINETYPE.ACTIVE_START: bounds.newActivation(msg, diagram, actors); @@ -884,7 +891,7 @@ export const draw = async function (_text: string, id: string, _version: string, break; case diagObj.db.LINETYPE.LOOP_END: loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram, loopModel, 'loop', conf); + await svgDraw.drawLoop(diagram, loopModel, 'loop', conf, msg); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -910,7 +917,7 @@ export const draw = async function (_text: string, id: string, _version: string, break; case diagObj.db.LINETYPE.OPT_END: loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram, loopModel, 'opt', conf); + await svgDraw.drawLoop(diagram, loopModel, 'opt', conf, msg); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -934,7 +941,7 @@ export const draw = async function (_text: string, id: string, _version: string, break; case diagObj.db.LINETYPE.ALT_END: loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram, loopModel, 'alt', conf); + await svgDraw.drawLoop(diagram, loopModel, 'alt', conf, msg); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -960,7 +967,7 @@ export const draw = async function (_text: string, id: string, _version: string, break; case diagObj.db.LINETYPE.PAR_END: loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram, loopModel, 'par', conf); + await svgDraw.drawLoop(diagram, loopModel, 'par', conf, msg); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -993,7 +1000,7 @@ export const draw = async function (_text: string, id: string, _version: string, break; case diagObj.db.LINETYPE.CRITICAL_END: loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram, loopModel, 'critical', conf); + await svgDraw.drawLoop(diagram, loopModel, 'critical', conf, msg); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -1008,7 +1015,7 @@ export const draw = async function (_text: string, id: string, _version: string, break; case diagObj.db.LINETYPE.BREAK_END: loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram, loopModel, 'break', conf); + await svgDraw.drawLoop(diagram, loopModel, 'break', conf, msg); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -1018,6 +1025,9 @@ export const draw = async function (_text: string, id: string, _version: string, msgModel.starty = bounds.getVerticalPos(); msgModel.sequenceIndex = sequenceIndex; msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); + msgModel.id = msg.id; + msgModel.from = msg.from; + msgModel.to = msg.to; const lineStartY = await boundMessage(diagram, msgModel); adjustCreatedDestroyedData( msg, @@ -1087,6 +1097,18 @@ export const draw = async function (_text: string, id: string, _version: string, const requiredBoxSize = drawActorsPopup(diagram, actors, actorKeys, doc); const { bounds: box } = bounds.getBounds(); + if (box.startx === undefined) { + box.startx = 0; + } + if (box.starty === undefined) { + box.starty = 0; + } + if (box.stopx === undefined) { + box.stopx = 0; + } + if (box.stopy === undefined) { + box.stopy = 0; + } if (box.startx === undefined) { box.startx = 0; diff --git a/packages/mermaid/src/diagrams/sequence/svgDraw.js b/packages/mermaid/src/diagrams/sequence/svgDraw.js index c681c9491..2af03bbbe 100644 --- a/packages/mermaid/src/diagrams/sequence/svgDraw.js +++ b/packages/mermaid/src/diagrams/sequence/svgDraw.js @@ -348,7 +348,9 @@ const drawActorTypeParticipant = function (elem, actor, conf, isFooter) { .attr('class', 'actor-line 200') .attr('stroke-width', '0.5px') .attr('stroke', '#999') - .attr('name', actor.name); + .attr('name', actor.name) + .attr('data-et', 'life-line') + .attr('data-id', actor.name); g = boxplusLineGroup.append('g'); actor.actorCnt = actorCnt; @@ -390,6 +392,11 @@ const drawActorTypeParticipant = function (elem, actor, conf, isFooter) { } } + if (!isFooter) { + g.attr('data-et', 'participant'); + g.attr('data-id', actor.name); + } + _drawTextCandidateFunc(conf, hasKatex(actor.description))( actor.description, g, @@ -430,7 +437,9 @@ const drawActorTypeActor = function (elem, actor, conf, isFooter) { .attr('class', 'actor-line 200') .attr('stroke-width', '0.5px') .attr('stroke', '#999') - .attr('name', actor.name); + .attr('name', actor.name) + .attr('data-et', 'life-line') + .attr('data-id', actor.name); actor.actorCnt = actorCnt; } @@ -444,6 +453,10 @@ const drawActorTypeActor = function (elem, actor, conf, isFooter) { actElem.attr('class', cssClass); actElem.attr('name', actor.name); + if (!isFooter) { + actElem.attr('data-et', 'participant').attr('data-id', actor.name); + } + const rect = svgDrawCommon.getNoteRect(); rect.x = actor.x; rect.y = actorY; @@ -567,7 +580,7 @@ export const drawActivation = function (elem, bounds, verticalPos, conf, actorAc * @param {any} conf - Diagram configuration * @returns {any} */ -export const drawLoop = async function (elem, loopModel, labelText, conf) { +export const drawLoop = async function (elem, loopModel, labelText, conf, msg) { const { boxMargin, boxTextMargin, @@ -577,7 +590,10 @@ export const drawLoop = async function (elem, loopModel, labelText, conf) { messageFontSize: fontSize, messageFontWeight: fontWeight, } = conf; - const g = elem.append('g'); + const g = elem + .append('g') + .attr('data-et', 'control-structure') + .attr('data-id', 'i' + msg.id); const drawLoopLine = function (startx, starty, stopx, stopy) { return g .append('line') diff --git a/packages/mermaid/src/diagrams/state/dataFetcher.js b/packages/mermaid/src/diagrams/state/dataFetcher.js index 921544ff2..92bb34251 100644 --- a/packages/mermaid/src/diagrams/state/dataFetcher.js +++ b/packages/mermaid/src/diagrams/state/dataFetcher.js @@ -54,16 +54,46 @@ export function stateDomId(itemId = '', counter = 0, type = '', typeSpacer = DOM return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`; } -const setupDoc = (parentParsedItem, doc, diagramStates, nodes, edges, altFlag, look, classes) => { +const setupDoc = ( + parentParsedItem, + doc, + diagramStates, + nodes, + edges, + altFlag, + look, + classes, + config +) => { // graphItemCount = 0; log.trace('items', doc); doc.forEach((item) => { switch (item.stmt) { case STMT_STATE: - dataFetcher(parentParsedItem, item, diagramStates, nodes, edges, altFlag, look, classes); + dataFetcher( + parentParsedItem, + item, + diagramStates, + nodes, + edges, + altFlag, + look, + classes, + config + ); break; case DEFAULT_STATE_TYPE: - dataFetcher(parentParsedItem, item, diagramStates, nodes, edges, altFlag, look, classes); + dataFetcher( + parentParsedItem, + item, + diagramStates, + nodes, + edges, + altFlag, + look, + classes, + config + ); break; case STMT_RELATION: { @@ -75,7 +105,8 @@ const setupDoc = (parentParsedItem, doc, diagramStates, nodes, edges, altFlag, l edges, altFlag, look, - classes + classes, + config ); dataFetcher( parentParsedItem, @@ -85,7 +116,8 @@ const setupDoc = (parentParsedItem, doc, diagramStates, nodes, edges, altFlag, l edges, altFlag, look, - classes + classes, + config ); const edgeData = { id: 'edge' + graphItemCount, @@ -102,6 +134,7 @@ const setupDoc = (parentParsedItem, doc, diagramStates, nodes, edges, altFlag, l thickness: G_EDGE_THICKNESS, classes: CSS_EDGE, look, + curve: config.state?.curve, }; edges.push(edgeData); graphItemCount++; @@ -181,7 +214,8 @@ export const dataFetcher = ( edges, altFlag, look, - classes + classes, + config ) => { const itemId = parsedItem.id; const dbState = diagramStates.get(itemId); @@ -362,6 +396,7 @@ export const dataFetcher = ( labelType: G_EDGE_LABELTYPE, thickness: G_EDGE_THICKNESS, look, + curve: config.state?.curve, }); } else { insertOrUpdateNode(nodes, nodeData, classes); @@ -369,7 +404,17 @@ export const dataFetcher = ( } if (parsedItem.doc) { log.trace('Adding nodes children '); - setupDoc(parsedItem, parsedItem.doc, diagramStates, nodes, edges, !altFlag, look, classes); + setupDoc( + parsedItem, + parsedItem.doc, + diagramStates, + nodes, + edges, + !altFlag, + look, + classes, + config + ); } }; diff --git a/packages/mermaid/src/diagrams/state/stateDb.js b/packages/mermaid/src/diagrams/state/stateDb.js index 1f12425e6..c66465941 100644 --- a/packages/mermaid/src/diagrams/state/stateDb.js +++ b/packages/mermaid/src/diagrams/state/stateDb.js @@ -221,7 +221,7 @@ const extract = (_doc) => { const config = getConfig(); const look = config.look; resetDataFetching(); - dataFetcher(undefined, getRootDocV2(), diagramStates, nodes, edges, true, look, classes); + dataFetcher(undefined, getRootDocV2(), diagramStates, nodes, edges, true, look, classes, config); nodes.forEach((node) => { if (Array.isArray(node.label)) { // add the rest as description diff --git a/packages/mermaid/src/diagrams/state/stateDiagram-v2.ts b/packages/mermaid/src/diagrams/state/stateDiagram-v2.ts index a27fc1879..8fd98e930 100644 --- a/packages/mermaid/src/diagrams/state/stateDiagram-v2.ts +++ b/packages/mermaid/src/diagrams/state/stateDiagram-v2.ts @@ -15,6 +15,5 @@ export const diagram: DiagramDefinition = { cnf.state = {}; } cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; - db.clear(); }, }; diff --git a/packages/mermaid/src/diagrams/state/stateDiagram.ts b/packages/mermaid/src/diagrams/state/stateDiagram.ts index 643e847ce..bd8383287 100644 --- a/packages/mermaid/src/diagrams/state/stateDiagram.ts +++ b/packages/mermaid/src/diagrams/state/stateDiagram.ts @@ -15,6 +15,5 @@ export const diagram: DiagramDefinition = { cnf.state = {}; } cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; - db.clear(); }, }; diff --git a/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts b/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts index 109417c03..96622fd59 100644 --- a/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts +++ b/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts @@ -40,9 +40,16 @@ export const getClasses = function ( return diagramObj.db.getClasses(); }; -export const draw = async function (text: string, id: string, _version: string, diag: any) { - log.info('REF0:'); +export const draw = async function ( + text: string, + id: string, + _version: string, + diag: any, + positions: any +) { + log.info('REF0:', positions); log.info('Drawing state diagram (v2)', id); + log.info('Diagram Configuration:', getConfig()); const { securityLevel, state: conf, layout } = getConfig(); // Extracting the data from the parsed structure into a more usable form // Not related to the refactoring, but this is the first step in the rendering process @@ -64,10 +71,14 @@ export const draw = async function (text: string, id: string, _version: string, data4Layout.nodeSpacing = conf?.nodeSpacing || 50; data4Layout.rankSpacing = conf?.rankSpacing || 50; - data4Layout.markers = ['barb']; + const config = getConfig(); + if (config.look === 'neo') { + data4Layout.markers = ['barbNeo']; + } else { + data4Layout.markers = ['barb']; + } data4Layout.diagramId = id; - // console.log('REF1:', data4Layout); - await render(data4Layout, svg); + await render(data4Layout, svg, positions); const padding = 8; utils.insertTitle( svg, diff --git a/packages/mermaid/src/diagrams/state/styles.js b/packages/mermaid/src/diagrams/state/styles.js index 05d530ee3..b7f516dfd 100644 --- a/packages/mermaid/src/diagrams/state/styles.js +++ b/packages/mermaid/src/diagrams/state/styles.js @@ -104,14 +104,21 @@ g.stateGroup line { } .node circle.state-end { - fill: ${options.innerEndBackground}; + fill: ${options.stateBkg || options.mainBkg}; stroke: ${options.background}; - stroke-width: 1.5 + stroke-width: 1.5; } + +[data-look="neo"].node circle.state-end { + filter: none; + stroke:${options.background}; + fill: ${options.lineColor}; +} + .end-state-inner { fill: ${options.compositeBackground || options.background}; - // stroke: ${options.background}; - stroke-width: 1.5 + stroke: ${options.background}; + stroke-width: 1.5; } .node rect { @@ -119,6 +126,13 @@ g.stateGroup line { stroke: ${options.stateBorder || options.nodeBorder}; stroke-width: 1px; } + +.node-rect-neo { + fill: ${options.stateBkg || options.mainBkg}; + stroke: none; + stroke-width: 1px; +} + .node polygon { fill: ${options.mainBkg}; stroke: ${options.stateBorder || options.nodeBorder};; @@ -136,26 +150,26 @@ g.stateGroup line { .cluster-label, .nodeLabel { color: ${options.stateLabelColor}; - // line-height: 1; + line-height: 1.0; } .statediagram-cluster rect.outer { - rx: 5px; - ry: 5px; + rx: ${options.radius}px; + ry: ${options.radius}px; } .statediagram-state .divider { stroke: ${options.stateBorder || options.nodeBorder}; } .statediagram-state .title-state { - rx: 5px; - ry: 5px; + rx: ${options.radius}px; + ry: ${options.radius}px; } .statediagram-cluster.statediagram-cluster .inner { fill: ${options.compositeBackground || options.background}; } .statediagram-cluster.statediagram-cluster-alt .inner { - fill: ${options.altBackground ? options.altBackground : '#efefef'}; + fill: ${options.altBackground ? options.altBackground : '#f0f0f0'}; } .statediagram-cluster .inner { @@ -164,9 +178,16 @@ g.stateGroup line { } .statediagram-state rect.basic { - rx: 5px; - ry: 5px; + rx: ${options.radius}px; + ry: ${options.radius}px; } + + +.state-shadow-neo { + filter: ${options.dropShadow}; +} + + .statediagram-state rect.divider { stroke-dasharray: 10,10; fill: ${options.altBackground ? options.altBackground : '#efefef'}; @@ -198,6 +219,11 @@ g.stateGroup line { .statediagram-note .nodeLabel { color: ${options.noteTextColor}; } + +.node.statediagram-note rect { + stroke: ${options.noteBorderColor} !important; +} + .statediagram .edgeLabel { color: red; // ${options.noteTextColor}; } diff --git a/packages/mermaid/src/diagrams/user-journey/styles.js b/packages/mermaid/src/diagrams/user-journey/styles.js index 998a73894..a0528294f 100644 --- a/packages/mermaid/src/diagrams/user-journey/styles.js +++ b/packages/mermaid/src/diagrams/user-journey/styles.js @@ -1,7 +1,6 @@ const getStyles = (options) => `.label { - font-family: 'trebuchet ms', verdana, arial, sans-serif; - font-family: var(--mermaid-font-family); + font-family: ${options.fontFamily}; color: ${options.textColor}; } .mouth { @@ -14,6 +13,7 @@ const getStyles = (options) => .legend { fill: ${options.textColor}; + font-family: ${options.fontFamily}; } .label text { @@ -79,8 +79,7 @@ const getStyles = (options) => text-align: center; max-width: 200px; padding: 2px; - font-family: 'trebuchet ms', verdana, arial, sans-serif; - font-family: var(--mermaid-font-family); + font-family: ${options.fontFamily}; font-size: 12px; background: ${options.tertiaryColor}; border: 1px solid ${options.border2}; diff --git a/packages/mermaid/src/docs/config/faq.md b/packages/mermaid/src/docs/config/faq.md index 698061def..6d1261fc1 100644 --- a/packages/mermaid/src/docs/config/faq.md +++ b/packages/mermaid/src/docs/config/faq.md @@ -1,11 +1,11 @@ # Frequently Asked Questions -1. [How to add title to flowchart?](https://github.com/knsv/mermaid/issues/556#issuecomment-363182217) +1. [How to add title to flowchart?](https://github.com/mermaid-js/mermaid/issues/556#issuecomment-363182217) 1. [How to specify custom CSS file?](https://github.com/mermaidjs/mermaid.cli/pull/24#issuecomment-373402785) -1. [How to fix tooltip misplacement issue?](https://github.com/knsv/mermaid/issues/542#issuecomment-3343564621) -1. [How to specify gantt diagram xAxis format?](https://github.com/knsv/mermaid/issues/269#issuecomment-373229136) -1. [How to bind an event?](https://github.com/knsv/mermaid/issues/372) -1. [How to add newline in the text?](https://github.com/knsv/mermaid/issues/384#issuecomment-281339381) -1. [How to have special characters in link text?](https://github.com/knsv/mermaid/issues/407#issuecomment-329944735) -1. [How to change Flowchart curve style?](https://github.com/knsv/mermaid/issues/580#issuecomment-373929046) +1. [How to fix tooltip misplacement issue?](https://github.com/mermaid-js/mermaid/issues/542#issuecomment-3343564621) +1. [How to specify gantt diagram xAxis format?](https://github.com/mermaid-js/mermaid/issues/269#issuecomment-373229136) +1. [How to bind an event?](https://github.com/mermaid-js/mermaid/issues/372) +1. [How to add newline in the text?](https://github.com/mermaid-js/mermaid/issues/384#issuecomment-281339381) +1. [How to have special characters in link text?](https://github.com/mermaid-js/mermaid/issues/407#issuecomment-329944735) +1. [How to change Flowchart curve style?](https://github.com/mermaid-js/mermaid/issues/580#issuecomment-373929046) 1. [How to create a Flowchart end-Node that says "End"](https://github.com/mermaid-js/mermaid/issues/1444#issuecomment-639528897) diff --git a/packages/mermaid/src/docs/ecosystem/integrations-community.md b/packages/mermaid/src/docs/ecosystem/integrations-community.md index 6cff12aac..74096ed78 100644 --- a/packages/mermaid/src/docs/ecosystem/integrations-community.md +++ b/packages/mermaid/src/docs/ecosystem/integrations-community.md @@ -39,6 +39,7 @@ To add an integration to this list, see the [Integrations - create page](./integ - [Deepdwn](https://billiam.itch.io/deepdwn) ✅ - [Doctave](https://www.doctave.com/) ✅ - [Mermaid in Markdown code blocks](https://docs.doctave.com/components/mermaid) ✅ +- [Forgejo](https://forgejo.org/) ✅ - [GitBook](https://gitbook.com) - [Mermaid Plugin](https://github.com/JozoVilcek/gitbook-plugin-mermaid) - [Mermaid plugin for GitBook](https://github.com/wwformat/gitbook-plugin-mermaid-pdf) @@ -94,8 +95,7 @@ Blogging frameworks and platforms - [Nextra](https://nextra.site/) - [Mermaid](https://nextra.site/docs/guide/mermaid) - [WordPress](https://wordpress.org) - - [WordPress Markdown Editor](https://wordpress.org/plugins/wp-githuber-md) - - [WP-ReliableMD](https://wordpress.org/plugins/wp-reliablemd/) + - [MerPRess](https://wordpress.org/plugins/merpress/) ### CMS/ECM diff --git a/packages/mermaid/src/docs/intro/index.md b/packages/mermaid/src/docs/intro/index.md index 627efdaa1..3742d3f05 100644 --- a/packages/mermaid/src/docs/intro/index.md +++ b/packages/mermaid/src/docs/intro/index.md @@ -44,7 +44,7 @@ For a more detailed introduction to Mermaid and some of its more basic uses, loo 🌐 [CDN](https://www.jsdelivr.com/package/npm/mermaid) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](../community/contributing.md) | 🔌 [Plug-Ins](../ecosystem/integrations-community.md) -> 🖖 Keep a steady pulse: mermaid needs more Collaborators, [Read More](https://github.com/knsv/mermaid/issues/866). +> 🖖 Keep a steady pulse: mermaid needs more Collaborators, [Read More](https://github.com/mermaid-js/mermaid/issues/866). :trophy: **Mermaid was nominated and won the [JS Open Source Awards (2019)](https://osawards.com/javascript/#nominees) in the category "The most exciting use of technology"!!!** @@ -208,7 +208,7 @@ A quick note from Knut Sveidqvist: > > _Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._ > -> _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_ +> _Thank you to the ever-growing list of [contributors](https://github.com/mermaid-js/mermaid/graphs/contributors) that brought the project this far!_ --- diff --git a/packages/mermaid/src/docs/package.json b/packages/mermaid/src/docs/package.json index 7cfb8ab6c..60b8b74d0 100644 --- a/packages/mermaid/src/docs/package.json +++ b/packages/mermaid/src/docs/package.json @@ -20,7 +20,7 @@ "@vueuse/core": "^10.9.0", "font-awesome": "^4.7.0", "jiti": "^1.21.0", - "mermaid": "workspace:^", + "@mermaid-chart/mermaid": "workspace:^", "vue": "^3.4.21" }, "devDependencies": { diff --git a/packages/mermaid/src/docs/syntax/flowchart.md b/packages/mermaid/src/docs/syntax/flowchart.md index 829b71c2d..2ddad4795 100644 --- a/packages/mermaid/src/docs/syntax/flowchart.md +++ b/packages/mermaid/src/docs/syntax/flowchart.md @@ -711,6 +711,67 @@ flowchart TB B --> D ``` +### Attaching an ID to Edges + +Mermaid now supports assigning IDs to edges, similar to how IDs and metadata can be attached to nodes. This feature lays the groundwork for more advanced styling, classes, and animation capabilities on edges. + +**Syntax:** + +To give an edge an ID, prepend the edge syntax with the ID followed by an `@` character. For example: + +```mermaid +flowchart LR + A e1@–> B +``` + +In this example, `e1` is the ID of the edge connecting `A` to `B`. You can then use this ID in later definitions or style statements, just like with nodes. + +### Turning an Animation On + +Once you have assigned an ID to an edge, you can turn on animations for that edge by defining the edge’s properties: + +```mermaid +flowchart LR + A e1@==> B + e1@{ animate: true } +``` + +This tells Mermaid that the edge `e1` should be animated. + +### Selecting Type of Animation + +In the initial version, two animation speeds are supported: `fast` and `slow`. Selecting a specific animation type is a shorthand for enabling animation and setting the animation speed in one go. + +**Examples:** + +```mermaid +flowchart LR + A e1@–> B + e1@{ animation: fast } +``` + +This is equivalent to `{ animate: true, animation: fast }`. + +### Using classDef Statements for Animations + +You can also animate edges by assigning a class to them and then defining animation properties in a `classDef` statement. For example: + +```mermaid +flowchart LR + A e1@–> B + classDef animate stroke-dasharray: 9,5,stroke-dashoffset: 900,animation: dash 25s linear infinite; + class e1 animate +``` + +In this snippet: + +- `e1@-->` creates an edge with ID `e1`. +- `classDef animate` defines a class named `animate` with styling and animation properties. +- `class e1 animate` applies the `animate` class to the edge `e1`. + +**Note on Escaping Commas:** +When setting the `stroke-dasharray` property, remember to escape commas as `\,` since commas are used as delimiters in Mermaid’s style definitions. + ## New arrow types There are new types of arrows supported: @@ -1074,8 +1135,7 @@ graph LR ``` For a full list of available curves, including an explanation of custom curves, refer to -the [Shapes](https://github.com/d3/d3-shape/blob/main/README.md#curves) documentation in the -[d3-shape](https://github.com/d3/d3-shape/) project. +the [Shapes](https://d3js.org/d3-shape/curve) documentation in the [d3-shape](https://github.com/d3/d3-shape/) project. ### Styling a node diff --git a/packages/mermaid/src/docs/syntax/gantt.md b/packages/mermaid/src/docs/syntax/gantt.md index 01a9f041d..eab35d09f 100644 --- a/packages/mermaid/src/docs/syntax/gantt.md +++ b/packages/mermaid/src/docs/syntax/gantt.md @@ -390,7 +390,7 @@ mermaid.ganttConfig = { sectionFontSize: 24, // Font size for sections numberSectionStyles: 1, // The number of alternating section styles axisFormat: '%d/%m', // Date/time format of the axis - tickInterval: '1 week', // Axis ticks + tickInterval: '1week', // Axis ticks topAxis: true, // When this flag is set, date labels will be added to the top of the chart displayMode: 'compact', // Turns compact mode on weekday: 'sunday', // On which day a week-based interval should start diff --git a/packages/mermaid/src/docs/syntax/timeline.md b/packages/mermaid/src/docs/syntax/timeline.md index 165fd6260..abd320355 100644 --- a/packages/mermaid/src/docs/syntax/timeline.md +++ b/packages/mermaid/src/docs/syntax/timeline.md @@ -12,7 +12,7 @@ timeline 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -51,7 +51,7 @@ timeline title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -134,7 +134,7 @@ However, if there is no section defined, then we have two possibilities: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -165,7 +165,7 @@ let us look at same example, where we have disabled the multiColor option. title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter ``` @@ -193,7 +193,7 @@ Now let's override the default values for the `cScale0` to `cScale2` variables: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -226,7 +226,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -241,7 +241,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -256,7 +256,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -271,7 +271,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram @@ -286,7 +286,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: title History of Social Media Platform 2002 : LinkedIn 2004 : Facebook : Google - 2005 : Youtube + 2005 : YouTube 2006 : Twitter 2007 : Tumblr 2008 : Instagram diff --git a/packages/mermaid/src/mermaid.ts b/packages/mermaid/src/mermaid.ts index e9fc9196a..ae92a36f5 100644 --- a/packages/mermaid/src/mermaid.ts +++ b/packages/mermaid/src/mermaid.ts @@ -2,7 +2,6 @@ * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid * functionality and to render the diagrams to svg code! */ -import { registerIconPacks } from './rendering-util/icons.js'; import { dedent } from 'ts-dedent'; import type { MermaidConfig } from './config.type.js'; import { detectType, registerLazyLoadedDiagrams } from './diagram-api/detectType.js'; @@ -14,6 +13,7 @@ import type { UnknownDiagramError } from './errors.js'; import type { InternalHelpers } from './internals.js'; import { log } from './logger.js'; import { mermaidAPI } from './mermaidAPI.js'; +import { registerIconPacks } from './rendering-util/icons.js'; import type { LayoutLoaderDefinition, RenderOptions } from './rendering-util/render.js'; import { registerLayoutLoaders } from './rendering-util/render.js'; import type { LayoutData } from './rendering-util/types.js'; @@ -178,7 +178,7 @@ const runThrowsErrors = async function ( log.debug('Detected early reinit: ', init); } try { - const { svg, bindFunctions } = await render(id, txt, element); + const { svg, bindFunctions } = await render(id, txt, element, undefined); element.innerHTML = svg; if (postRenderCallback) { await postRenderCallback(id); @@ -325,7 +325,7 @@ const executeQueue = async () => { * Parse the text and validate the syntax. * @param text - The mermaid diagram definition. * @param parseOptions - Options for parsing. @see {@link ParseOptions} - * @returns If valid, {@link ParseResult} otherwise `false` if parseOptions.suppressErrors is `true`. + * @returns If valid, {@link Diagram} otherwise `false` if parseOptions.suppressErrors is `true`. * @throws Error if the diagram is invalid and parseOptions.suppressErrors is false or not set. * * @example @@ -347,11 +347,11 @@ const parse: typeof mermaidAPI.parse = async (text, parseOptions) => { const performCall = () => new Promise((res, rej) => { mermaidAPI.parse(text, parseOptions).then( - (r) => { + (result) => { // This resolves for the promise for the queue handling - res(r); + res(result); // This fulfills the promise sent to the value back to the original caller - resolve(r); + resolve(result); }, (e) => { log.error('Error parsing', e); @@ -389,13 +389,13 @@ const parse: typeof mermaidAPI.parse = async (text, parseOptions) => { * element will be removed when rendering is completed. * @returns Returns the SVG Definition and BindFunctions. */ -const render: typeof mermaidAPI.render = (id, text, container) => { +const render: typeof mermaidAPI.render = (id, text, container, positions) => { return new Promise((resolve, reject) => { // This promise will resolve when the mermaidAPI.render call is done. // It will be queued first and will be executed when it is first in line const performCall = () => new Promise((res, rej) => { - mermaidAPI.render(id, text, container).then( + mermaidAPI.render(id, text, container, positions).then( (r) => { // This resolves for the promise for the queue handling res(r); @@ -457,3 +457,9 @@ const mermaid: Mermaid = { }; export default mermaid; + +export { + calcIntersections, + calcNodeIntersections, + calcIntersect, +} from './rendering-util/layout-algorithms/fixed/index.js'; diff --git a/packages/mermaid/src/mermaidAPI.spec.ts b/packages/mermaid/src/mermaidAPI.spec.ts index 5bd1b1dfc..b07786a81 100644 --- a/packages/mermaid/src/mermaidAPI.spec.ts +++ b/packages/mermaid/src/mermaidAPI.spec.ts @@ -1,4 +1,4 @@ -import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { assert, beforeEach, describe, expect, it, vi } from 'vitest'; // ------------------------------------- // Mocks and mocking @@ -35,7 +35,7 @@ vi.mock('./diagrams/sequence/sequenceRenderer.js'); import assignWithDepth from './assignWithDepth.js'; import type { MermaidConfig } from './config.type.js'; -import mermaid from './mermaid.js'; +import mermaid, { type ParseResult } from './mermaid.js'; import mermaidAPI, { appendDivSvgG, cleanUpSvgCode, @@ -69,6 +69,8 @@ import { compile, serialize } from 'stylis'; import { Diagram } from './Diagram.js'; import { decodeEntities, encodeEntities } from './utils.js'; import { toBase64 } from './utils/base64.js'; +import { ClassDB } from './diagrams/class/classDb.js'; +import { FlowDB } from './diagrams/flowchart/flowDb.js'; /** * @see https://vitest.dev/guide/mocking.html Mock part of a module @@ -444,9 +446,14 @@ describe('mermaidAPI', () => { '\ndefault' + '\n.classDef1 > * { style1-1 !important; }' + '\n.classDef1 span { style1-1 !important; }'; - expect(getStyles).toHaveBeenCalledWith('flowchart-v2', expectedStyles, { - fontFamily: 'serif', - }); + expect(getStyles).toHaveBeenCalledWith( + 'flowchart-v2', + expectedStyles, + { + fontFamily: 'serif', + }, + 'someId' + ); }); it('calls getStyles to get css for all graph, user css styles, and config theme variables', () => { @@ -686,86 +693,99 @@ describe('mermaidAPI', () => { }); it('returns false for invalid definition with silent option', async () => { await expect( - mermaidAPI.parse('this is not a mermaid diagram definition', { suppressErrors: true }) + mermaidAPI + .parse('this is not a mermaid diagram definition', { suppressErrors: true }) + .then((result) => result.success) ).resolves.toBe(false); }); it('resolves for valid definition', async () => { - await expect(mermaidAPI.parse('graph TD;A--x|text including URL space|B;')).resolves - .toMatchInlineSnapshot(` + await expect( + mermaidAPI + .parse('graph TD;A--x|text including URL space|B;') + .then((p) => ({ config: p.config })) + ).resolves.toMatchInlineSnapshot(` { "config": {}, - "diagramType": "flowchart-v2", } `); }); it('returns config when defined in frontmatter', async () => { await expect( - mermaidAPI.parse(`--- + mermaidAPI + .parse( + `--- config: theme: base flowchart: htmlLabels: true --- -graph TD;A--x|text including URL space|B;`) +graph TD;A--x|text including URL space|B;` + ) + .then((p) => ({ config: p.config })) ).resolves.toMatchInlineSnapshot(` - { - "config": { - "flowchart": { - "htmlLabels": true, - }, - "theme": "base", - }, - "diagramType": "flowchart-v2", - } -`); + { + "config": { + "flowchart": { + "htmlLabels": true, + }, + "theme": "base", + }, + } + `); }); it('returns config when defined in directive', async () => { await expect( - mermaidAPI.parse(`%%{init: { 'theme': 'base' } }%% -graph TD;A--x|text including URL space|B;`) + mermaidAPI + .parse( + `%%{init: { 'theme': 'base' } }%% +graph TD;A--x|text including URL space|B;` + ) + .then((p) => ({ config: p.config })) ).resolves.toMatchInlineSnapshot(` - { - "config": { - "theme": "base", - }, - "diagramType": "flowchart-v2", - } -`); + { + "config": { + "theme": "base", + }, + } + `); }); it('returns merged config when defined in frontmatter and directive', async () => { await expect( - mermaidAPI.parse(`--- + mermaidAPI + .parse( + `--- config: theme: forest flowchart: htmlLabels: true --- %%{init: { 'theme': 'base' } }%% -graph TD;A--x|text including URL space|B;`) +graph TD;A--x|text including URL space|B;` + ) + .then((p) => ({ config: p.config })) ).resolves.toMatchInlineSnapshot(` - { - "config": { - "flowchart": { - "htmlLabels": true, - }, - "theme": "base", - }, - "diagramType": "flowchart-v2", - } -`); + { + "config": { + "flowchart": { + "htmlLabels": true, + }, + "theme": "base", + }, + } + `); }); - it('returns true for valid definition with silent option', async () => { await expect( - mermaidAPI.parse('graph TD;A--x|text including URL space|B;', { suppressErrors: true }) + mermaidAPI + .parse('graph TD;A--x|text including URL space|B;', { suppressErrors: true }) + .then((p) => ({ config: (p as ParseResult).config })) ).resolves.toMatchInlineSnapshot(` - { - "config": {}, - "diagramType": "flowchart-v2", - } - `); + { + "config": {}, + } + `); }); }); @@ -832,5 +852,93 @@ graph TD;A--x|text including URL space|B;`) expect(diagram).toBeInstanceOf(Diagram); expect(diagram.type).toBe('flowchart-v2'); }); + + it('should not modify db when rendering different diagrams', async () => { + const flowDiagram1 = await mermaidAPI.getDiagramFromText( + `flowchart LR + A -- text --> B -- text2 --> C` + ); + const flowDiagram2 = await mermaidAPI.getDiagramFromText( + `flowchart TD + A -- text --> B -- text2 --> C` + ); + // Since flowDiagram will return new Db object each time, we can compare the db to be different. + expect(flowDiagram1.db).not.toBe(flowDiagram2.db); + assert(flowDiagram1.db instanceof FlowDB); + assert(flowDiagram2.db instanceof FlowDB); + expect(flowDiagram1.db.getDirection()).not.toEqual(flowDiagram2.db.getDirection()); + + const classDiagram1 = await mermaidAPI.getDiagramFromText( + `classDiagram + direction TB + class Student { + -idCard : IdCard + } + class IdCard{ + -id : int + -name : string + } + class Bike{ + -id : int + -name : string + } + Student "1" --o "1" IdCard : carries + Student "1" --o "1" Bike : rides` + ); + const classDiagram2 = await mermaidAPI.getDiagramFromText( + `classDiagram + direction LR + class Student { + -idCard : IdCard + } + class IdCard{ + -id : int + -name : string + } + class Bike{ + -id : int + -name : string + } + Student "1" --o "1" IdCard : carries + Student "1" --o "1" Bike : rides` + ); + // Since classDiagram will return new Db object each time, we can compare the db to be different. + expect(classDiagram1.db).not.toBe(classDiagram2.db); + assert(classDiagram1.db instanceof ClassDB); + assert(classDiagram2.db instanceof ClassDB); + expect(classDiagram1.db.getDirection()).not.toEqual(classDiagram2.db.getDirection()); + + const sequenceDiagram1 = await mermaidAPI.getDiagramFromText( + `sequenceDiagram + Alice->>+John: Hello John, how are you? + Alice->>+John: John, can you hear me? + John-->>-Alice: Hi Alice, I can hear you! + John-->>-Alice: I feel great!` + ); + const sequenceDiagram2 = await mermaidAPI.getDiagramFromText( + `sequenceDiagram + Alice->>+John: Hello John, how are you? + Alice->>+John: John, can you hear me? + John-->>-Alice: Hi Alice, I can hear you! + John-->>-Alice: I feel great!` + ); + // Since sequenceDiagram will return same Db object each time, we can compare the db to be same. + expect(sequenceDiagram1.db).toBe(sequenceDiagram2.db); + }); + }); + + // Sequence Diagram currently uses a singleton DB, so this test will fail + it.fails('should not modify db when rendering different sequence diagrams', async () => { + const sequenceDiagram1 = await mermaidAPI.getDiagramFromText( + `sequenceDiagram + Alice->>Bob: Hello Bob, how are you? + Bob-->>John: How about you John?` + ); + const sequenceDiagram2 = await mermaidAPI.getDiagramFromText( + `sequenceDiagram + Alice->>Bob: Hello Bob, how are you? + Bob-->>John: How about you John?` + ); + expect(sequenceDiagram1.db).not.toBe(sequenceDiagram2.db); }); }); diff --git a/packages/mermaid/src/mermaidAPI.ts b/packages/mermaid/src/mermaidAPI.ts index 910ecb5e8..fd78547b3 100644 --- a/packages/mermaid/src/mermaidAPI.ts +++ b/packages/mermaid/src/mermaidAPI.ts @@ -14,7 +14,7 @@ import assignWithDepth from './assignWithDepth.js'; import * as configApi from './config.js'; import type { MermaidConfig } from './config.type.js'; import { addDiagrams } from './diagram-api/diagram-orchestration.js'; -import type { DiagramMetadata, DiagramStyleClassDef } from './diagram-api/types.js'; +import type { DiagramMetadata, DiagramStyleClassDef, Positions } from './diagram-api/types.js'; import { Diagram } from './Diagram.js'; import { evaluate } from './diagrams/common/common.js'; import errorRenderer from './diagrams/error/errorRenderer.js'; @@ -27,7 +27,7 @@ import type { D3Element, ParseOptions, ParseResult, RenderResult } from './types import { decodeEntities } from './utils.js'; import { toBase64 } from './utils/base64.js'; -const MAX_TEXTLENGTH = 50_000; +const MAX_TEXTLENGTH = 100_000; const MAX_TEXTLENGTH_EXCEEDED_MSG = 'graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa'; @@ -68,17 +68,23 @@ function processAndSetConfigs(text: string) { async function parse( text: string, parseOptions: ParseOptions & { suppressErrors: true } -): Promise; +): Promise; async function parse(text: string, parseOptions?: ParseOptions): Promise; -async function parse(text: string, parseOptions?: ParseOptions): Promise { +async function parse( + text: string, + parseOptions?: ParseOptions +): Promise { addDiagrams(); + let code = ''; + let title = undefined; + let config: MermaidConfig = {}; try { - const { code, config } = processAndSetConfigs(text); + ({ code, config, title } = processAndSetConfigs(text)); const diagram = await getDiagramFromText(code); - return { diagramType: diagram.type, config }; + return { diagram, code, config, title, success: true }; } catch (error) { if (parseOptions?.suppressErrors) { - return false; + return { code, config, title, success: false, error }; } throw error; } @@ -164,7 +170,7 @@ export const createUserStyles = ( svgId: string ): string => { const userCSSstyles = createCssStyles(config, classDefs); - const allStyles = getStyles(graphType, userCSSstyles, config.themeVariables); + const allStyles = getStyles(graphType, userCSSstyles, config.themeVariables, svgId); // Now turn all of the styles into a (compiled) string that starts with the id // use the stylis library to compile the css, turn the results into a valid CSS string (serialize(...., stringify)) @@ -306,7 +312,8 @@ export const removeExistingElements = ( const render = async function ( id: string, text: string, - svgContainingElement?: Element + svgContainingElement?: Element, + positions?: Positions ): Promise { addDiagrams(); @@ -422,7 +429,7 @@ const render = async function ( // ------------------------------------------------------------------------------- // Draw the diagram with the renderer try { - await diag.renderer.draw(text, id, version, diag); + await diag.renderer.draw(text, id, version, diag, positions); } catch (e) { if (config.suppressErrorRendering) { removeTempElements(); @@ -496,12 +503,12 @@ function initialize(userOptions: MermaidConfig = {}) { options.themeVariables ); } else if (options) { - options.themeVariables = theme.default.getThemeVariables(options.themeVariables); + options.themeVariables = theme.neo.getThemeVariables(options.themeVariables); } const config = typeof options === 'object' ? configApi.setSiteConfig(options) : configApi.getSiteConfig(); - + // console.log('IPI config', config.themeVariables.useGradient); setLogLevel(config.logLevel); addDiagrams(); } diff --git a/packages/mermaid/src/rendering-util/createText.ts b/packages/mermaid/src/rendering-util/createText.ts index cc189e46e..9d84600c4 100644 --- a/packages/mermaid/src/rendering-util/createText.ts +++ b/packages/mermaid/src/rendering-util/createText.ts @@ -18,8 +18,9 @@ function applyStyle(dom, styleFn) { } } -async function addHtmlSpan(element, node, width, classes, addBackground = false) { +async function addHtmlSpan(element, node, _width, classes, addBackground = false) { const fo = element.append('foreignObject'); + const width = _width < 0 ? 0 : _width; // This is not the final width but used in order to make sure the foreign // object in firefox gets a width at all. The final width is fetched from the div fo.attr('width', `${10 * width}px`); @@ -38,7 +39,9 @@ async function addHtmlSpan(element, node, width, classes, addBackground = false) applyStyle(div, node.labelStyle); div.style('display', 'table-cell'); - div.style('white-space', 'nowrap'); + // KS: Why is this here? + // div.style('white-space', 'nowrap'); + div.style('white-space', 'wrap'); div.style('line-height', '1.5'); div.style('max-width', width + 'px'); div.style('text-align', 'center'); diff --git a/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js b/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js index 6f1fa7d3b..c117fe6c2 100644 --- a/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js +++ b/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js @@ -55,7 +55,7 @@ const recursiveRender = async (_elem, graph, diagramType, id, parentCluster, sit const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); // data.clusterPositioning = true; log.trace( - 'Setting data for parent cluster XXX\n Node.id = ', + 'Setting data for parent cluster IPI\n Node.id = ', v, '\n data=', data.height, @@ -96,7 +96,7 @@ const recursiveRender = async (_elem, graph, diagramType, id, parentCluster, sit // node.height = o.diff; node.diff = o.diff || 0; log.info( - 'New compound node after recursive render XAX', + 'New compound node after recursive render IPI', v, 'width', // node, diff --git a/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js b/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js new file mode 100644 index 000000000..145424e48 --- /dev/null +++ b/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js @@ -0,0 +1,414 @@ +import insertMarkers from '../../rendering-elements/markers.js'; +import { insertNode, positionNode, clear as clearNodes } from '../../rendering-elements/nodes.js'; +import { + insertCluster, + clear as clearClusters, + positionCluster, +} from '../../rendering-elements/clusters.js'; +import { + insertEdgeLabel, + positionEdgeLabel, + insertEdge, + clear as clearEdges, +} from '../../rendering-elements/edges.js'; +import { select } from 'd3'; +import { getConfig } from '../../../diagram-api/diagramAPI.js'; + +/** + * @typedef {import('../../types.js').Node} Node + * @typedef {import('../../../types.js').Point} Point + * @typedef {import('../../../diagram-api/types.js').NodePosition} NodePosition + * @typedef {import('../../../diagram-api/types.js').IntersectionPoint} IntersectionPoint + */ + +/** @type {Map} */ +let nodeDB = new Map(); + +// const fixInterSections = (points, startNodeId, endNodeId) => { +// const startNode = nodeDB.get(startNodeId); +// const endNode = nodeDB.get(endNodeId); +// // Get the intersections +// const startIntersection = startNode.intersect(points[1]); +// const endIntersection = endNode.intersect(points[points.length - 2]); + +// // Replace the first and last points with their respective intersections +// const fixedPoints = [startIntersection, ...points.slice(1, -1), endIntersection]; + +// return points; +// }; + +/** + * @param {Pick} node + * @param {Point} point + * @returns {IntersectionPoint} + */ +const calcIntersectionPoint = (node, point) => { + const intersection = node.intersect(point); + + const dx = point.x - node.x; + const dy = point.y - node.y; + + const angleRad = Math.atan2(dy, dx); + const angleDeg = angleRad * (180 / Math.PI); + + const halfWidth = node.width / 2; + const halfHeight = node.height / 2; + const criticalAngleRad = Math.atan2(halfHeight, halfWidth); + const criticalAngleDeg = criticalAngleRad * (180 / Math.PI); + + let pos; + if (angleDeg >= -criticalAngleDeg && angleDeg <= criticalAngleDeg) { + pos = 'r'; // Right + } else if (angleDeg > criticalAngleDeg && angleDeg <= 180 - criticalAngleDeg) { + pos = 'b'; // Bottom + } else if (angleDeg < -criticalAngleDeg && angleDeg >= -180 + criticalAngleDeg) { + pos = 't'; // Top + } else { + pos = 'l'; // Left + } + + return { x: intersection.x, y: intersection.y, pos }; +}; + +/** + * @param {Pick} _node1 + * @param {Pick} _node2 + * @returns {Promise | IntersectionPoint[]} + */ +export const calcNodeIntersections = async (targetNodeId, _node1, _node2) => { + // CReate new nodes in order not to require a rendered diagram + const fakeParent = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + const parent = select(fakeParent); + let node1 = Object.assign({}, _node1); + let node2 = Object.assign({}, _node2); + + if (!targetNodeId || targetNodeId === _node1.id) { + await insertNode(parent, node1, 'TB'); + } else { + node1 = Object.assign({}, nodeDB.get(_node1.id)); + } + if (!targetNodeId || targetNodeId === _node2.id) { + await insertNode(parent, node2, 'TB'); + } else { + node2 = Object.assign({}, nodeDB.get(_node2.id)); + } + + // Insert node will not give any widths as the element is not in the DOM + node1.width = _node1.width ?? 50; + node1.height = _node1.height ?? 50; + node2.width = _node2.width ?? 50; + node2.height = _node2.height ?? 50; + + const startIntersection = calcIntersectionPoint(node1, { x: node2.x, y: node2.y }); + const endIntersection = calcIntersectionPoint(node2, { x: node1.x, y: node1.y }); + return [startIntersection, endIntersection]; +}; + +/** + * @param {string} startNodeId + * @param {string | undefined} endNodeId + * @param {NodePosition} startNodeSize + * @param {{width?: number, height?: number, x: number, y: number}} endNodeSize + * @returns {IntersectionPoint[]} + * @throws {Error} If the start node doesn't exist in the nodeDB (e.g. `render` hasn't been called yet) + */ +export const calcIntersections = (startNodeId, endNodeId, startNodeSize, endNodeSize) => { + const startNode = nodeDB.get(startNodeId); + if (!startNode) { + throw new Error("Start node doesn't exist in the nodeDB"); + } + if (startNodeSize) { + startNode.x = startNodeSize.x; + startNode.y = startNodeSize.y; + startNode.width = startNodeSize.width; + startNode.height = startNodeSize.height; + } + + // If no end node it provided but you have an endNode size + // We are adding an edge to a new node + if (!endNodeId && endNodeSize) { + const startIntersection = calcIntersectionPoint(startNode, { + x: endNodeSize.x, + y: endNodeSize.y, + }); + const endIntersection = { x: endNodeSize.x, y: endNodeSize.x, pos: 'c' }; + return [startIntersection, endIntersection]; + } + + // Check for self loop + if (startNodeId === endNodeId) { + const intersection = calcIntersectionPoint(startNode, { + x: startNode.x + startNode.width / 2 + 20, + y: startNode.y + startNode.height / 2, + }); + + const forthY = startNode.height / 4; + return [ + { x: intersection.x, y: startNode.y - forthY, pos: 'r' }, + { x: intersection.x, y: startNode.y + forthY, pos: 'r' }, + ]; + } + + const endNode = nodeDB.get(endNodeId); + if (endNodeSize && endNode) { + endNode.x = endNodeSize.x; + endNode.y = endNodeSize.y; + endNode.width = endNodeSize.width; + endNode.height = endNodeSize.height; + // Get the intersections + const startIntersection = calcIntersectionPoint(startNode, { x: endNode.x, y: endNode.y }); + const endIntersection = calcIntersectionPoint(endNode, { x: startNode.x, y: startNode.y }); + return [startIntersection, endIntersection]; + } + return []; +}; + +/** + * @param {string} nodeId + * @param {Pick} node + * @param {Point} point + * @returns {Promise | Point} + */ +export const calcIntersect = async (nodeId, point) => { + let node = nodeDB.get(nodeId); + + if (!node) { + // CReate new nodes in order not to require a rendered diagram + const fakeParent = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + const parent = select(fakeParent); + node = Object.assign({}, point); + node.shape = 'rect'; + + await insertNode(parent, node, 'TB'); + + // Insert node will not give any widths as the element is not in the DOM + node.width = 50; + node.height = 50; + node.width = 50; + node.height = 50; + } + + if (!node) { + throw new Error("Start node doesn't exist in the nodeDB"); + } + const intersection = calcIntersectionPoint(node, point); + return intersection; +}; + +const doRender = async (_elem, data4Layout, siteConfig, positions) => { + const elem = _elem.insert('g').attr('class', 'root'); + elem.insert('g').attr('class', 'clusters'); + const nodes = elem.insert('g').attr('class', 'nodes'); + const edgePaths = elem.insert('g').attr('class', 'edgePaths'); + const edgeLabels = elem.insert('g').attr('class', 'edgeLabels'); + + if (!positions?.nodes || !positions?.edges) { + positions = {}; + if (!positions?.nodes) { + positions.nodes = {}; + } + if (!positions?.edges) { + positions.edges = {}; + } + } + // Extract children info + const childDB = new Map(); + data4Layout.nodes.map(function (node) { + if (node.parentId) { + const children = childDB.get(node.parentId) || []; + children.push(node); + childDB.set(node.parentId, children); + } + }); + + // calculate next available position + let maxY = 0; + data4Layout.nodes.map(function (node) { + const pos = positions.nodes[node.id]; + if (pos) { + let y = pos.y; + if (pos.height) { + y += pos.height; + } else if (node.height) { + y += node.height; + } + + maxY = Math.max(y, maxY); + } + }); + + // Add positions for nodes that lack them + let xPos = 0; + function calculatePosition(node, positions, childDB) { + // console.log('STO calculatePosition', node.id, maxY); + const children = childDB.get(node.id) || []; + // log.info('STO calculatePosition', node.id, children.length); + // We have a subgraph without position + if (children.length > 0) { + let minX = 10000; + let maxX = -10000; + let minYP = 10000; + let maxYP = -10000; + for (const child of children) { + const width = child.width || 150; + const height = child.height || 50; + // log.info('BBB node child 1', child.id, width, height); + calculatePosition(child, positions, childDB); + // console.log( + // 'STO node child 2', + // child.id, + // positions.nodes[child.id].x, + // positions.nodes[child.id].y, + // positions.nodes[child.id].width + // ); + minX = Math.min(positions.nodes[child.id].x - width / 2, minX); + maxX = Math.max(positions.nodes[child.id].x + width / 2, maxX); + minYP = Math.min(positions.nodes[child.id].y - height / 2, minYP); + maxYP = Math.max(positions.nodes[child.id].y + height / 2, maxYP); + } + if (!positions.nodes[node.id]) { + // console.log( + // 'STO calculatePosition SUBGRAPH SIZE', + // node.id, + // 'y:', + // maxY - 10, + // 'minX:', + // minX, + // 'maxX:', + // maxX + // ); + positions.nodes[node.id] = { + x: minX + (maxX - minX) / 2, + y: maxY + 120, + width: maxX - minX + 20, + height: maxYP - minYP + 30, + }; + } + } else { + if (!positions.nodes[node.id]) { + // Simple case + // console.log('STO calculatePosition NODE SIZE', node.id, xPos, maxY, 'y:', maxY + 120); + positions.nodes[node.id] = { x: xPos, y: maxY + 120 }; + xPos = xPos + 175; + } + } + } + data4Layout.nodes.map(function (node) { + if (!node.parentId) { + calculatePosition(node, positions, childDB); + } + }); + + // Insert nodes, this will insert them into the dom and each node will get a size. The size is updated + // to the abstract node and is later used by dagre for the layout + + nodeDB = new Map(); + await Promise.all( + data4Layout.nodes.map(async function (node) { + let pos = positions.nodes[node.id]; + node.height = pos?.height || 0; + node.width = pos?.width || 0; + + if (node.isGroup) { + node.x = 0; + node.y = 0; + await insertCluster(nodes, node, { config: siteConfig, dir: 'TB' }); + // Don't set the coordinates before they "layout", this will mess up the positioning + if (pos) { + node.x = pos?.x || 0; + node.y = pos?.y || 0; + } + } else { + if (pos) { + node.x = pos?.x || 0; + node.y = pos?.y || 0; + } + await insertNode(nodes, node, { config: siteConfig, dir: 'TB' }); + } + nodeDB.set(node.id, node); + }) + ); + + for (const edge of data4Layout.edges) { + edge.x = edge?.x || 0; + edge.y = edge?.y || 0; + await insertEdgeLabel(edgeLabels, edge); + } + + // log.info('############################################# XXX'); + // log.info('### Layout ### XXX'); + // log.info('############################################# XXX'); + + // Position the nodes + + data4Layout.nodes.map((node) => { + if (node.isGroup) { + positionCluster(node); + } else { + positionNode(node); + } + }); + + // Insert the edges and position the edge labels + const edgePositions = Object.assign({}, positions.edges); + for (const edge of data4Layout.edges) { + if (!positions.edges[edge.id]) { + const startNode = positions.nodes[edge.start]; + const endNode = positions.nodes[edge.end]; + // Edge Flickering fix while deleting node. + let existingEdge = {}; + for (const key in edgePositions) { + if (edgePositions[key].start === edge.start && edgePositions[key].end === edge.end) { + existingEdge = edgePositions[key]; + delete edgePositions[key]; + break; + } + } + if (existingEdge?.points) { + positions.edges[edge.id] = { + ...existingEdge, + }; + } else { + positions.edges[edge.id] = { + points: [ + { x: startNode.x, y: startNode.y }, + { x: (startNode.x + endNode.x) / 2, y: (startNode.y + endNode.y) / 2 }, + { x: endNode.x, y: endNode.y }, + ], + start: edge.start, + end: edge.end, + }; + } + } + + edge.points = positions.edges[edge.id].points; + const paths = insertEdge(edgePaths, edge, {}, data4Layout.type, {}, {}, data4Layout.diagramId); + paths.updatedPath = paths.originalPath; + positionEdgeLabel(edge, paths); + } + if (window) { + // TODO: Remove this now that we can do: + // import { calcIntersections, calcNodeIntersections } from '@mermaid-chart/mermaid'; + window.calcIntersections = calcIntersections; + window.calcNodeIntersections = calcNodeIntersections; + } + return { elem, diff: 0 }; +}; +/** + * ############################################################### + * Render the graph + * ############################################################### + */ +export const render = async (data4Layout, svg, _internalHelpers, _algorithm, positions) => { + const element = svg.select('g'); + // Org + insertMarkers(element, data4Layout.markers, data4Layout.type, data4Layout.diagramId); + clearNodes(); + clearEdges(); + clearClusters(); + // clearGraphlib(); + + // log.warn('Graph at first:', JSON.stringify(graphlibJson.write(graph))); + const siteConfig = getConfig(); + await doRender(element, data4Layout, siteConfig, positions); +}; diff --git a/packages/mermaid/src/rendering-util/render.ts b/packages/mermaid/src/rendering-util/render.ts index b975e7bf9..374efbb95 100644 --- a/packages/mermaid/src/rendering-util/render.ts +++ b/packages/mermaid/src/rendering-util/render.ts @@ -1,7 +1,7 @@ -import type { SVG } from '../diagram-api/types.js'; -import type { InternalHelpers } from '../internals.js'; -import { internalHelpers } from '../internals.js'; +import type { Positions, SVG } from '../diagram-api/types.js'; import { log } from '../logger.js'; +import { internalHelpers } from '../internals.js'; +import type { InternalHelpers } from '../internals.js'; import type { LayoutData } from './types.js'; export interface RenderOptions { @@ -13,7 +13,8 @@ export interface LayoutAlgorithm { layoutData: LayoutData, svg: SVG, helpers: InternalHelpers, - options?: RenderOptions + options?: RenderOptions, + positions?: Positions ): Promise; } @@ -39,21 +40,83 @@ const registerDefaultLayoutLoaders = () => { name: 'dagre', loader: async () => await import('./layout-algorithms/dagre/index.js'), }, + { + name: 'fixed', + loader: async () => await import('./layout-algorithms/fixed/index.js'), + }, ]); }; registerDefaultLayoutLoaders(); -export const render = async (data4Layout: LayoutData, svg: SVG) => { +export const render = async (data4Layout: LayoutData, svg: SVG, positions?: any) => { if (!(data4Layout.layoutAlgorithm in layoutAlgorithms)) { throw new Error(`Unknown layout algorithm: ${data4Layout.layoutAlgorithm}`); } const layoutDefinition = layoutAlgorithms[data4Layout.layoutAlgorithm]; const layoutRenderer = await layoutDefinition.loader(); - return layoutRenderer.render(data4Layout, svg, internalHelpers, { - algorithm: layoutDefinition.algorithm, - }); + + const { theme, themeVariables } = data4Layout.config; + const { useGradient, gradientStart, gradientStop } = themeVariables; + + svg + .append('defs') + .append('filter') + .attr('id', 'drop-shadow') + .attr('height', '130%') + .attr('width', '130%') + .append('feDropShadow') + .attr('dx', '4') + .attr('dy', '4') + .attr('stdDeviation', 0) + .attr('flood-opacity', '0.06') + .attr('flood-color', `${theme === 'redux' ? '#000000' : '#FFFFFF'}`); + + svg + .append('defs') + .append('filter') + .attr('id', 'drop-shadow-small') + .attr('height', '150%') + .attr('width', '150%') + .append('feDropShadow') + .attr('dx', '2') + .attr('dy', '2') + .attr('stdDeviation', 0) + .attr('flood-opacity', '0.06') + .attr('flood-color', `${theme === 'redux' ? '#000000' : '#FFFFFF'}`); + + if (useGradient) { + const gradient = svg + .append('linearGradient') + .attr('id', svg.attr('id') + '-gradient') + .attr('gradientUnits', 'objectBoundingBox') // Changed to objectBoundingBox for relative sizing + .attr('x1', '0%') + .attr('y1', '0%') + .attr('x2', '100%') + .attr('y2', '0%'); + + gradient + .append('svg:stop') + .attr('offset', '0%') + .attr('stop-color', gradientStart) + .attr('stop-opacity', 1); + + gradient + .append('svg:stop') + .attr('offset', '100%') // Adjusted to 100% to ensure full gradient spread + .attr('stop-color', gradientStop) + .attr('stop-opacity', 1); + } + return layoutRenderer.render( + data4Layout, + svg, + internalHelpers, + { + algorithm: layoutDefinition.algorithm, + }, + positions + ); }; /** diff --git a/packages/mermaid/src/rendering-util/rendering-elements/clusters.js b/packages/mermaid/src/rendering-util/rendering-elements/clusters.js index 1dd87d438..a81e40da3 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/clusters.js +++ b/packages/mermaid/src/rendering-util/rendering-elements/clusters.js @@ -23,6 +23,8 @@ const rect = async (parent, node) => { .insert('g') .attr('class', 'cluster ' + node.cssClasses) .attr('id', node.id) + .attr('data-id', node.id) + .attr('data-et', 'cluster') .attr('data-look', node.look); const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels); @@ -171,6 +173,7 @@ const roundedWithTitle = async (parent, node) => { .insert('g') .attr('class', node.cssClasses) .attr('id', node.id) + .attr('data-et', 'cluster') .attr('data-id', node.id) .attr('data-look', node.look); @@ -402,6 +405,9 @@ const divider = (parent, node) => { .insert('g') .attr('class', node.cssClasses) .attr('id', node.id) + .attr('data-et', 'node') + .attr('data-node', 'true') + .attr('data-id', node.id) .attr('data-look', node.look); // add the rect @@ -434,7 +440,12 @@ const divider = (parent, node) => { rect = shapeSvg.insert(() => roughOuterNode, ':first-child'); } else { rect = outerRectG.insert('rect', ':first-child'); - const outerRectClass = 'divider'; + let outerRectClass = 'outer'; + if (node.look === 'neo') { + outerRectClass = 'divider'; + } else { + outerRectClass = 'divider'; + } // center the rect around its coordinate rect diff --git a/packages/mermaid/src/rendering-util/rendering-elements/edgeMarker.ts b/packages/mermaid/src/rendering-util/rendering-elements/edgeMarker.ts index 5371ac32d..d28a33bbb 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/edgeMarker.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/edgeMarker.ts @@ -15,13 +15,14 @@ export const addEdgeMarkers = ( edge: Pick, url: string, id: string, - diagramType: string + diagramType: string, + useMargin = false ) => { if (edge.arrowTypeStart) { - addEdgeMarker(svgPath, 'start', edge.arrowTypeStart, url, id, diagramType); + addEdgeMarker(svgPath, 'start', edge.arrowTypeStart, url, id, diagramType, useMargin); } if (edge.arrowTypeEnd) { - addEdgeMarker(svgPath, 'end', edge.arrowTypeEnd, url, id, diagramType); + addEdgeMarker(svgPath, 'end', edge.arrowTypeEnd, url, id, diagramType, useMargin); } }; @@ -37,15 +38,19 @@ const arrowTypesMap = { lollipop: 'lollipop', } as const; +const arrowTypesWithMarginSupport = ['cross', 'point', 'circle']; + const addEdgeMarker = ( svgPath: SVG, position: 'start' | 'end', arrowType: string, url: string, id: string, - diagramType: string + diagramType: string, + useMargin = false ) => { const endMarkerType = arrowTypesMap[arrowType as keyof typeof arrowTypesMap]; + const marginSupport = arrowTypesWithMarginSupport.includes(endMarkerType); if (!endMarkerType) { log.warn(`Unknown arrow type: ${arrowType}`); @@ -53,5 +58,9 @@ const addEdgeMarker = ( } const suffix = position === 'start' ? 'Start' : 'End'; - svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); + const offset = useMargin && marginSupport ? '-margin' : ''; + svgPath.attr( + `marker-${position}`, + `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix}${offset})` + ); }; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/edges.js b/packages/mermaid/src/rendering-util/rendering-elements/edges.js index 7cbce9347..946150c8b 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/edges.js +++ b/packages/mermaid/src/rendering-util/rendering-elements/edges.js @@ -3,13 +3,17 @@ import { evaluate } from '../../diagrams/common/common.js'; import { log } from '../../logger.js'; import { createText } from '../createText.js'; import utils from '../../utils.js'; -import { getLineFunctionsWithOffset } from '../../utils/lineWithOffset.js'; +import { + getLineFunctionsWithOffset, + markerOffsets, + markerOffsets2, +} from '../../utils/lineWithOffset.js'; import { getSubGraphTitleMargins } from '../../utils/subGraphTitleMargins.js'; -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { curveBasis, curveLinear, line, select } from 'd3'; +import { curveBasis, curveLinear, curveCardinal, line, select } from 'd3'; import rough from 'roughjs'; import createLabel from './createLabel.js'; import { addEdgeMarkers } from './edgeMarker.ts'; +import { isLabelStyle } from './shapes/handDrawnShapeStyles.js'; const edgeLabels = new Map(); const terminalLabels = new Map(); @@ -39,7 +43,7 @@ export const insertEdgeLabel = async (elem, edge) => { const edgeLabel = elem.insert('g').attr('class', 'edgeLabel'); // Create inner g, label, this will be positioned now for centering the text - const label = edgeLabel.insert('g').attr('class', 'label'); + const label = edgeLabel.insert('g').attr('class', 'label').attr('data-id', edge.id); label.node().appendChild(labelElement); // Center the label @@ -336,236 +340,36 @@ const cutPathAtIntersect = (_points, boundaryNode) => { return points; }; -const adjustForArrowHeads = function (lineData, size = 5, shouldLog = false) { - const newLineData = [...lineData]; - const lastPoint = lineData[lineData.length - 1]; - const secondLastPoint = lineData[lineData.length - 2]; +const generateDashArray = (len, oValueS, oValueE) => { + const middleLength = len - oValueS - oValueE; + const dashLength = 2; // Length of each dash + const gapLength = 2; // Length of each gap + const dashGapPairLength = dashLength + gapLength; - const distanceBetweenLastPoints = Math.sqrt( - (lastPoint.x - secondLastPoint.x) ** 2 + (lastPoint.y - secondLastPoint.y) ** 2 - ); + // Calculate number of complete dash-gap pairs that can fit + const numberOfPairs = Math.floor(middleLength / dashGapPairLength); - if (shouldLog) { - log.debug('APA14 distanceBetweenLastPoints', distanceBetweenLastPoints); - } - if (distanceBetweenLastPoints < size) { - // Calculate the direction vector from the last point to the second last point - const directionX = secondLastPoint.x - lastPoint.x; - const directionY = secondLastPoint.y - lastPoint.y; + // Generate the middle pattern array + const middlePattern = Array(numberOfPairs).fill(`${dashLength} ${gapLength}`).join(' '); - // Normalize the direction vector - const magnitude = Math.sqrt(directionX ** 2 + directionY ** 2); - const normalizedX = directionX / magnitude; - const normalizedY = directionY / magnitude; + // Combine all parts + const dashArray = `0 ${oValueS} ${middlePattern} ${oValueE}`; - // Calculate the new position for the second last point - const adjustedSecondLastPoint = { - x: lastPoint.x + normalizedX * size, - y: lastPoint.y + normalizedY * size, - }; - - // Replace the second last point in the new line data - newLineData[newLineData.length - 2] = adjustedSecondLastPoint; - } - - return newLineData; + return dashArray; }; -function extractCornerPoints(points) { - const cornerPoints = []; - const cornerPointPositions = []; - for (let i = 1; i < points.length - 1; i++) { - const prev = points[i - 1]; - const curr = points[i]; - const next = points[i + 1]; - if ( - prev.x === curr.x && - curr.y === next.y && - Math.abs(curr.x - next.x) > 5 && - Math.abs(curr.y - prev.y) > 5 - ) { - cornerPoints.push(curr); - cornerPointPositions.push(i); - } else if ( - prev.y === curr.y && - curr.x === next.x && - Math.abs(curr.x - prev.x) > 5 && - Math.abs(curr.y - next.y) > 5 - ) { - cornerPoints.push(curr); - cornerPointPositions.push(i); - } - } - return { cornerPoints, cornerPointPositions }; -} - -const findAdjacentPoint = function (pointA, pointB, distance) { - const xDiff = pointB.x - pointA.x; - const yDiff = pointB.y - pointA.y; - const length = Math.sqrt(xDiff * xDiff + yDiff * yDiff); - const ratio = distance / length; - return { x: pointB.x - ratio * xDiff, y: pointB.y - ratio * yDiff }; -}; - -const fixCorners = function (lineData) { - const { cornerPointPositions } = extractCornerPoints(lineData); - const newLineData = []; - for (let i = 0; i < lineData.length; i++) { - if (cornerPointPositions.includes(i)) { - const prevPoint = lineData[i - 1]; - const nextPoint = lineData[i + 1]; - const cornerPoint = lineData[i]; - - const newPrevPoint = findAdjacentPoint(prevPoint, cornerPoint, 5); - const newNextPoint = findAdjacentPoint(nextPoint, cornerPoint, 5); - - const xDiff = newNextPoint.x - newPrevPoint.x; - const yDiff = newNextPoint.y - newPrevPoint.y; - newLineData.push(newPrevPoint); - - const a = Math.sqrt(2) * 2; - let newCornerPoint = { x: cornerPoint.x, y: cornerPoint.y }; - if (Math.abs(nextPoint.x - prevPoint.x) > 10 && Math.abs(nextPoint.y - prevPoint.y) >= 10) { - log.debug( - 'Corner point fixing', - Math.abs(nextPoint.x - prevPoint.x), - Math.abs(nextPoint.y - prevPoint.y) - ); - const r = 5; - if (cornerPoint.x === newPrevPoint.x) { - newCornerPoint = { - x: xDiff < 0 ? newPrevPoint.x - r + a : newPrevPoint.x + r - a, - y: yDiff < 0 ? newPrevPoint.y - a : newPrevPoint.y + a, - }; - } else { - newCornerPoint = { - x: xDiff < 0 ? newPrevPoint.x - a : newPrevPoint.x + a, - y: yDiff < 0 ? newPrevPoint.y - r + a : newPrevPoint.y + r - a, - }; - } - } else { - log.debug( - 'Corner point skipping fixing', - Math.abs(nextPoint.x - prevPoint.x), - Math.abs(nextPoint.y - prevPoint.y) - ); - } - newLineData.push(newCornerPoint, newNextPoint); - } else { - newLineData.push(lineData[i]); - } - } - return newLineData; -}; - -export const generateRoundedPath = (points, radius, endPosition) => { - if (points.length < 2) { - return ''; - } - - // console.trace('here', points); - const path = []; - const startPoint = points[0]; - - path.push(`M ${startPoint.x},${startPoint.y}`); - - for (let i = 1; i < points.length - 1; i++) { - const currPoint = points[i]; - const nextPoint = points[i + 1]; - const prevPoint = points[i - 1]; - - // Calculate vectors - const v1 = { x: currPoint.x - prevPoint.x, y: currPoint.y - prevPoint.y }; - const v2 = { x: nextPoint.x - currPoint.x, y: nextPoint.y - currPoint.y }; - - // Normalize vectors - const v1Length = Math.hypot(v1.x, v1.y); - const v2Length = Math.hypot(v2.x, v2.y); - const v1Normalized = { x: v1.x / v1Length, y: v1.y / v1Length }; - const v2Normalized = { x: v2.x / v2Length, y: v2.y / v2Length }; - - // Calculate tangent points - const tangentLength = Math.min(radius, v1Length / 2, v2Length / 2); - const tangent1 = { - x: currPoint.x - v1Normalized.x * tangentLength, - y: currPoint.y - v1Normalized.y * tangentLength, - }; - const tangent2 = { - x: currPoint.x + v2Normalized.x * tangentLength, - y: currPoint.y + v2Normalized.y * tangentLength, - }; - - if (endPosition) { - const { bottomY, leftX, rightX, topY } = endPosition; - if (startPoint.pos === 'b' && tangent1.y > topY) { - tangent1.y = topY; - tangent2.y = topY; - currPoint.y = topY; - } - if (startPoint.pos === 't' && tangent1.y < bottomY) { - tangent1.y = bottomY; - tangent2.y = bottomY; - currPoint.y = bottomY; - } - if (startPoint.pos === 'l' && tangent1.x < rightX) { - tangent1.x = rightX; - tangent2.x = rightX; - currPoint.x = rightX; - } - if (startPoint.pos === 'r' && tangent1.x > leftX) { - tangent1.x = leftX; - tangent2.x = leftX; - currPoint.x = leftX; - } - if (tangent2.x && tangent2.y && tangent1.x && tangent1.y) { - path.push( - `L ${tangent1.x},${tangent1.y}`, - `Q ${currPoint.x},${currPoint.y} ${tangent2.x},${tangent2.y}` - ); - } - } else { - if (tangent2.x && tangent2.y && tangent1.x && tangent1.y) { - path.push( - `L ${tangent1.x},${tangent1.y}`, - `Q ${currPoint.x},${currPoint.y} ${tangent2.x},${tangent2.y}` - ); - } - } - } - // Last point - const lastPoint = points[points.length - 1]; - if (endPosition) { - if (startPoint.pos === 'b') { - if (endPosition?.topY && points[1].y > endPosition?.topY && points[2].y > endPosition?.topY) { - points[1].y = endPosition?.topY; - points[2].y = endPosition?.topY; - } - path.push(`L ${lastPoint.x},${endPosition.topY}`); - } - if (startPoint.pos === 't') { - if (points[1].y < endPosition.bottomY) { - points[1].y = endPosition.bottomY; - points[2].y = endPosition.bottomY; - } - path.push(`L ${lastPoint.x},${endPosition.bottomY}`); - } - if (startPoint.pos === 'l') { - path.push(`L ${endPosition.rightX},${lastPoint.y}`); - } - if (startPoint.pos === 'r') { - path.push(`L ${endPosition.leftX},${lastPoint.y}`); - } - } else { - path.push(`L ${lastPoint.x},${lastPoint.y}`); - } - return path.join(' '); -}; - export const insertEdge = function (elem, edge, clusterDb, diagramType, startNode, endNode, id) { const { handDrawnSeed } = getConfig(); let points = edge.points; let pointsHasChanged = false; const tail = startNode; var head = endNode; + const edgeClassStyles = []; + for (const key in edge.cssCompiledStyles) { + if (isLabelStyle(key)) { + continue; + } + edgeClassStyles.push(edge.cssCompiledStyles[key]); + } if (head.intersect && tail.intersect) { points = points.slice(1, edge.points.length - 1); @@ -581,6 +385,7 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod ); points.push(head.intersect(points[points.length - 1])); } + const pointsStr = btoa(JSON.stringify(points)); if (edge.toCluster) { log.info('to cluster abc88', clusterDb.get(edge.toCluster)); points = cutPathAtIntersect(edge.points, clusterDb.get(edge.toCluster).node); @@ -600,18 +405,27 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod } let lineData = points.filter((p) => !Number.isNaN(p.y)); - lineData = adjustForArrowHeads(lineData, 4, edge.id === 'L_n4_C_10_0'); - lineData = fixCorners(lineData); - // if (edge.id === 'L_n4_C_10_0') { - // console.log('APA14 lineData', lineData); - // } - // lineData = adjustForArrowHeads(lineData); + //lineData = fixCorners(lineData); let curve = curveBasis; - // let curve = curveLinear; - if (edge.curve) { - curve = edge.curve; + curve = curveLinear; + switch (edge.curve) { + case 'linear': + curve = curveLinear; + break; + case 'basis': + curve = curveBasis; + break; + case 'cardinal': + curve = curveCardinal; + break; + default: + curve = curveLinear; } + // if (edge.curve) { + // curve = edge.curve; + // } + const { x, y } = getLineFunctionsWithOffset(edge); const lineFunction = line().x(x).y(y).curve(curve); // const lineFunction = line().curve(curve); @@ -644,9 +458,13 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod strokeClasses += ' edge-pattern-solid'; } let svgPath; - let linePath = lineFunction(lineData); - // let linePath = generateRoundedPath(lineData, 5); + let linePath = + edge.curve === 'rounded' + ? // ? generateRoundedPath(applyMarkerOffsetsToPoints(lineData, edge), 5) + generateRoundedPath(lineData, 5) + : lineFunction(lineData); const edgeStyles = Array.isArray(edge.style) ? edge.style : [edge.style]; + let animatedEdge = false; if (edge.look === 'handDrawn') { const rc = rough.svg(elem); Object.assign([], lineData); @@ -667,17 +485,60 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod svgPath.attr('d', d); elem.node().appendChild(svgPath.node()); } else { + const stylesFromClasses = edgeClassStyles.join(';'); + const styles = edgeStyles ? edgeStyles.reduce((acc, style) => acc + style + ';', '') : ''; + let animationClass = ''; + if (edge.animate) { + animationClass = ' edge-animation-fast'; + } + if (edge.animation) { + animationClass = ' edge-animation-' + edge.animation; + } svgPath = elem .append('path') .attr('d', linePath) .attr('id', edge.id) - .attr('class', ' ' + strokeClasses + (edge.classes ? ' ' + edge.classes : '')) - .attr('style', edgeStyles ? edgeStyles.reduce((acc, style) => acc + ';' + style, '') : ''); + .attr( + 'class', + ' ' + + strokeClasses + + (edge.classes ? ' ' + edge.classes : '') + + (animationClass ? animationClass : '') + ) + + .attr( + 'style', + (stylesFromClasses ? stylesFromClasses + ';' + styles + ';' : styles) + + ';' + + (edgeStyles ? edgeStyles.reduce((acc, style) => acc + ';' + style, '') : '') + ); + + animatedEdge = + edge.animate === true || !!edge.animation || stylesFromClasses.includes('animation'); + const len = svgPath.node().getTotalLength(); + const oValueS = markerOffsets2[edge.arrowTypeStart] || 0; + const oValueE = markerOffsets2[edge.arrowTypeEnd] || 0; + + if (edge.look === 'neo' && !animatedEdge) { + const dashArray = + edge.pattern === 'dotted' + ? generateDashArray(len, oValueS, oValueE) + : `0 ${oValueS} ${len - oValueS - oValueE} ${oValueE}`; + + // No offset needed because we already start with a zero-length dash that effectively sets us up for a gap at the start. + const mOffset = `stroke-dasharray: ${dashArray}; stroke-dashoffset: 0;`; + svgPath.attr('style', mOffset + svgPath.attr('style')); + } } - // DEBUG code, DO NOT REMOVE - // adds a red circle at each edge coordinate - // points.forEach((point) => { + // MC Special + svgPath.attr('data-edge', true); + svgPath.attr('data-et', 'edge'); + svgPath.attr('data-id', edge.id); + svgPath.attr('data-points', pointsStr); + + // DEBUG code, adds a red circle at each edge coordinate + // cornerPoints.forEach((point) => { // elem // .append('circle') // .style('stroke', 'red') @@ -686,6 +547,17 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod // .attr('cx', point.x) // .attr('cy', point.y); // }); + if (edge.showPoints) { + lineData.forEach((point) => { + elem + .append('circle') + .style('stroke', 'red') + .style('fill', 'red') + .attr('r', 1) + .attr('cx', point.x) + .attr('cy', point.y); + }); + } let url = ''; if (getConfig().flowchart.arrowMarkerAbsolute || getConfig().state.arrowMarkerAbsolute) { @@ -700,7 +572,9 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod log.info('arrowTypeStart', edge.arrowTypeStart); log.info('arrowTypeEnd', edge.arrowTypeEnd); - addEdgeMarkers(svgPath, edge, url, id, diagramType); + const useMargin = !animatedEdge && edge?.look === 'neo'; + + addEdgeMarkers(svgPath, edge, url, id, diagramType, useMargin); let paths = {}; if (pointsHasChanged) { @@ -709,3 +583,134 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod paths.originalPath = edge.points; return paths; }; + +/** + * Generates SVG path data with rounded corners from an array of points. + * @param {Array} points - Array of points in the format [{x: Number, y: Number}, ...] + * @param {Number} radius - The radius of the rounded corners + * @returns {String} - SVG path data string + */ +function generateRoundedPath(points, radius) { + if (points.length < 2) { + return ''; + } + + let path = ''; + const size = points.length; + const epsilon = 1e-5; + + for (let i = 0; i < size; i++) { + const currPoint = points[i]; + const prevPoint = points[i - 1]; + const nextPoint = points[i + 1]; + + if (i === 0) { + // Move to the first point + path += `M${currPoint.x},${currPoint.y}`; + } else if (i === size - 1) { + // Last point, draw a straight line to the final point + path += `L${currPoint.x},${currPoint.y}`; + } else { + // Calculate vectors for incoming and outgoing segments + const dx1 = currPoint.x - prevPoint.x; + const dy1 = currPoint.y - prevPoint.y; + const dx2 = nextPoint.x - currPoint.x; + const dy2 = nextPoint.y - currPoint.y; + + const len1 = Math.hypot(dx1, dy1); + const len2 = Math.hypot(dx2, dy2); + + // Prevent division by zero + if (len1 < epsilon || len2 < epsilon) { + path += `L${currPoint.x},${currPoint.y}`; + continue; + } + + // Normalize the vectors + const nx1 = dx1 / len1; + const ny1 = dy1 / len1; + const nx2 = dx2 / len2; + const ny2 = dy2 / len2; + + // Calculate the angle between the vectors + const dot = nx1 * nx2 + ny1 * ny2; + // Clamp the dot product to avoid numerical issues with acos + const clampedDot = Math.max(-1, Math.min(1, dot)); + const angle = Math.acos(clampedDot); + + // Skip rounding if the angle is too small or too close to 180 degrees + if (angle < epsilon || Math.abs(Math.PI - angle) < epsilon) { + path += `L${currPoint.x},${currPoint.y}`; + continue; + } + + // Calculate the distance to offset the control point + const cutLen = Math.min(radius / Math.sin(angle / 2), len1 / 2, len2 / 2); + + // Calculate the start and end points of the curve + const startX = currPoint.x - nx1 * cutLen; + const startY = currPoint.y - ny1 * cutLen; + const endX = currPoint.x + nx2 * cutLen; + const endY = currPoint.y + ny2 * cutLen; + + // Draw the line to the start of the curve + path += `L${startX},${startY}`; + + // Draw the quadratic Bezier curve + path += `Q${currPoint.x},${currPoint.y} ${endX},${endY}`; + } + } + + return path; +} +// Helper function to calculate delta and angle between two points +function calculateDeltaAndAngle(point1, point2) { + if (!point1 || !point2) { + return { angle: 0, deltaX: 0, deltaY: 0 }; + } + const deltaX = point2.x - point1.x; + const deltaY = point2.y - point1.y; + const angle = Math.atan2(deltaY, deltaX); + return { angle, deltaX, deltaY }; +} + +// Function to adjust the first and last points of the points array +function applyMarkerOffsetsToPoints(points, edge) { + // Copy the points array to avoid mutating the original data + const newPoints = points.map((point) => ({ ...point })); + + // Handle the first point (start of the edge) + if (points.length >= 2 && markerOffsets[edge.arrowTypeStart]) { + const offsetValue = markerOffsets[edge.arrowTypeStart]; + + const point1 = points[0]; + const point2 = points[1]; + + const { angle } = calculateDeltaAndAngle(point1, point2); + + const offsetX = offsetValue * Math.cos(angle); + const offsetY = offsetValue * Math.sin(angle); + + newPoints[0].x = point1.x + offsetX; + newPoints[0].y = point1.y + offsetY; + } + + // Handle the last point (end of the edge) + const n = points.length; + if (n >= 2 && markerOffsets[edge.arrowTypeEnd]) { + const offsetValue = markerOffsets[edge.arrowTypeEnd]; + + const point1 = points[n - 1]; + const point2 = points[n - 2]; + + const { angle } = calculateDeltaAndAngle(point2, point1); + + const offsetX = offsetValue * Math.cos(angle); + const offsetY = offsetValue * Math.sin(angle); + + newPoints[n - 1].x = point1.x - offsetX; + newPoints[n - 1].y = point1.y - offsetY; + } + + return newPoints; +} diff --git a/packages/mermaid/src/rendering-util/rendering-elements/markers.js b/packages/mermaid/src/rendering-util/rendering-elements/markers.js index b2592e20e..7797f13e8 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/markers.js +++ b/packages/mermaid/src/rendering-util/rendering-elements/markers.js @@ -158,33 +158,65 @@ const point = (elem, type, id) => { .append('marker') .attr('id', id + '_' + type + '-pointEnd') .attr('class', 'marker ' + type) - .attr('viewBox', '0 0 10 10') - .attr('refX', 5) - .attr('refY', 5) + .attr('viewBox', '0 0 11.5 14') + .attr('refX', 7.75) // Adjust to position the arrowhead relative to the line + .attr('refY', 7) // Half of 14 for vertical center .attr('markerUnits', 'userSpaceOnUse') - .attr('markerWidth', 8) - .attr('markerHeight', 8) + .attr('markerWidth', 10.5) + .attr('markerHeight', 14) .attr('orient', 'auto') .append('path') - .attr('d', 'M 0 0 L 10 5 L 0 10 z') + .attr('d', 'M 0 0 L 11.5 7 L 0 14 z') .attr('class', 'arrowMarkerPath') - .style('stroke-width', 1) + .style('stroke-width', 0) .style('stroke-dasharray', '1,0'); elem .append('marker') .attr('id', id + '_' + type + '-pointStart') .attr('class', 'marker ' + type) - .attr('viewBox', '0 0 10 10') - .attr('refX', 4.5) - .attr('refY', 5) + .attr('viewBox', '0 0 11.5 14') + .attr('refX', 4) + .attr('refY', 7) .attr('markerUnits', 'userSpaceOnUse') - .attr('markerWidth', 8) - .attr('markerHeight', 8) + .attr('markerWidth', 11.5) + .attr('markerHeight', 14) + .attr('orient', 'auto') + .append('polygon') + .attr('points', '0,7 11.5,14 11.5,0') + .attr('class', 'arrowMarkerPath') + .style('stroke-width', 0) + .style('stroke-dasharray', '1,0'); + elem + .append('marker') + .attr('id', id + '_' + type + '-pointEnd-margin') + .attr('class', 'marker ' + type) + .attr('viewBox', '0 0 11.5 14') + .attr('refX', 11.5) // Adjust to position the arrowhead relative to the line + .attr('refY', 7) // Half of 14 for vertical center + .attr('markerUnits', 'userSpaceOnUse') + .attr('markerWidth', 10.5) + .attr('markerHeight', 14) .attr('orient', 'auto') .append('path') - .attr('d', 'M 0 5 L 10 10 L 10 0 z') + .attr('d', 'M 0 0 L 11.5 7 L 0 14 z') .attr('class', 'arrowMarkerPath') - .style('stroke-width', 1) + .style('stroke-width', 0) + .style('stroke-dasharray', '1,0'); + elem + .append('marker') + .attr('id', id + '_' + type + '-pointStart-margin') + .attr('class', 'marker ' + type) + .attr('viewBox', '0 0 11.5 14') + .attr('refX', 1) + .attr('refY', 7) + .attr('markerUnits', 'userSpaceOnUse') + .attr('markerWidth', 11.5) + .attr('markerHeight', 14) + .attr('orient', 'auto') + .append('polygon') + .attr('points', '0,7 11.5,14 11.5,0') + .attr('class', 'arrowMarkerPath') + .style('stroke-width', 0) .style('stroke-dasharray', '1,0'); }; const circle = (elem, type, id) => { @@ -193,18 +225,18 @@ const circle = (elem, type, id) => { .attr('id', id + '_' + type + '-circleEnd') .attr('class', 'marker ' + type) .attr('viewBox', '0 0 10 10') - .attr('refX', 11) - .attr('refY', 5) + .attr('refY', 5) // What!!!?? + .attr('refX', 10.75) .attr('markerUnits', 'userSpaceOnUse') - .attr('markerWidth', 11) - .attr('markerHeight', 11) + .attr('markerWidth', 14) + .attr('markerHeight', 14) .attr('orient', 'auto') .append('circle') .attr('cx', '5') .attr('cy', '5') .attr('r', '5') .attr('class', 'arrowMarkerPath') - .style('stroke-width', 1) + .style('stroke-width', 0) .style('stroke-dasharray', '1,0'); elem @@ -212,18 +244,55 @@ const circle = (elem, type, id) => { .attr('id', id + '_' + type + '-circleStart') .attr('class', 'marker ' + type) .attr('viewBox', '0 0 10 10') - .attr('refX', -1) + .attr('refX', 0) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') - .attr('markerWidth', 11) - .attr('markerHeight', 11) + .attr('markerWidth', 14) + .attr('markerHeight', 14) .attr('orient', 'auto') .append('circle') .attr('cx', '5') .attr('cy', '5') .attr('r', '5') .attr('class', 'arrowMarkerPath') - .style('stroke-width', 1) + .style('stroke-width', 0) + .style('stroke-dasharray', '1,0'); + elem + .append('marker') + .attr('id', id + '_' + type + '-circleEnd-margin') + .attr('class', 'marker ' + type) + .attr('viewBox', '0 0 10 10') + .attr('refY', 5) // What!!!?? + .attr('refX', 12.25) + .attr('markerUnits', 'userSpaceOnUse') + .attr('markerWidth', 14) + .attr('markerHeight', 14) + .attr('orient', 'auto') + .append('circle') + .attr('cx', '5') + .attr('cy', '5') + .attr('r', '5') + .attr('class', 'arrowMarkerPath') + .style('stroke-width', 0) + .style('stroke-dasharray', '1,0'); + + elem + .append('marker') + .attr('id', id + '_' + type + '-circleStart-margin') + .attr('class', 'marker ' + type) + .attr('viewBox', '0 0 10 10') + .attr('refX', -2) + .attr('refY', 5) + .attr('markerUnits', 'userSpaceOnUse') + .attr('markerWidth', 14) + .attr('markerHeight', 14) + .attr('orient', 'auto') + .append('circle') + .attr('cx', '5') + .attr('cy', '5') + .attr('r', '5') + .attr('class', 'arrowMarkerPath') + .style('stroke-width', 0) .style('stroke-dasharray', '1,0'); }; const cross = (elem, type, id) => { @@ -231,36 +300,65 @@ const cross = (elem, type, id) => { .append('marker') .attr('id', id + '_' + type + '-crossEnd') .attr('class', 'marker cross ' + type) - .attr('viewBox', '0 0 11 11') - .attr('refX', 12) - .attr('refY', 5.2) + .attr('viewBox', '0 0 15 15') + .attr('refX', 17.7) + .attr('refY', 7.5) .attr('markerUnits', 'userSpaceOnUse') - .attr('markerWidth', 11) - .attr('markerHeight', 11) + .attr('markerWidth', 12) + .attr('markerHeight', 12) .attr('orient', 'auto') .append('path') - // .attr('stroke', 'black') - .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9') + .attr('d', 'M 1,1 L 14,14 M 1,14 L 14,1') .attr('class', 'arrowMarkerPath') - .style('stroke-width', 2) - .style('stroke-dasharray', '1,0'); + .style('stroke-width', 2.5); elem .append('marker') .attr('id', id + '_' + type + '-crossStart') .attr('class', 'marker cross ' + type) - .attr('viewBox', '0 0 11 11') - .attr('refX', -1) - .attr('refY', 5.2) + .attr('viewBox', '0 0 15 15') + .attr('refX', -3.5) + .attr('refY', 7.5) .attr('markerUnits', 'userSpaceOnUse') - .attr('markerWidth', 11) - .attr('markerHeight', 11) + .attr('markerWidth', 12) + .attr('markerHeight', 12) .attr('orient', 'auto') .append('path') - // .attr('stroke', 'black') - .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9') + .attr('d', 'M 1,1 L 14,14 M 1,14 L 14,1') .attr('class', 'arrowMarkerPath') - .style('stroke-width', 2) + .style('stroke-width', 2.5) + .style('stroke-dasharray', '1,0'); + elem + .append('marker') + .attr('id', id + '_' + type + '-crossEnd-margin') + .attr('class', 'marker cross ' + type) + .attr('viewBox', '0 0 15 15') + .attr('refX', 17.7) + .attr('refY', 7.5) + .attr('markerUnits', 'userSpaceOnUse') + .attr('markerWidth', 12) + .attr('markerHeight', 12) + .attr('orient', 'auto') + .append('path') + .attr('d', 'M 1,1 L 14,14 M 1,14 L 14,1') + .attr('class', 'arrowMarkerPath') + .style('stroke-width', 2.5); + + elem + .append('marker') + .attr('id', id + '_' + type + '-crossStart-margin') + .attr('class', 'marker cross ' + type) + .attr('viewBox', '0 0 15 15') + .attr('refX', -3.5) + .attr('refY', 7.5) + .attr('markerUnits', 'userSpaceOnUse') + .attr('markerWidth', 12) + .attr('markerHeight', 12) + .attr('orient', 'auto') + .append('path') + .attr('d', 'M 1,1 L 14,14 M 1,14 L 14,1') + .attr('class', 'arrowMarkerPath') + .style('stroke-width', 2.5) .style('stroke-dasharray', '1,0'); }; const barb = (elem, type, id) => { @@ -277,6 +375,20 @@ const barb = (elem, type, id) => { .append('path') .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z'); }; +const barbNeo = (elem, type, id) => { + elem + .append('defs') + .append('marker') + .attr('id', id + '_' + type + '-barbEnd') + .attr('refX', 19) + .attr('refY', 7) + .attr('markerWidth', 20) + .attr('markerHeight', 14) + .attr('markerUnits', 'strokeWidth') + .attr('orient', 'auto') + .append('path') + .attr('d', 'M 19,7 L11,14 L13,7 L11,0 Z'); +}; // TODO rename the class diagram markers to something shape descriptive and semantic free const markers = { @@ -289,5 +401,6 @@ const markers = { circle, cross, barb, + barbNeo, }; export default insertMarkers; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/nodes.ts b/packages/mermaid/src/rendering-util/rendering-elements/nodes.ts index 5af6cd17a..da82d95eb 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/nodes.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/nodes.ts @@ -3,6 +3,7 @@ import { shapes } from './shapes.js'; import type { Node, NonClusterNode, ShapeRenderOptions } from '../types.js'; import type { SVGGroup } from '../../mermaid.js'; import type { D3Selection } from '../../types.js'; +import { handleUndefinedAttr } from '../../utils.js'; import type { graphlib } from 'dagre-d3-es'; type ShapeHandler = (typeof shapes)[keyof typeof shapes]; @@ -50,6 +51,12 @@ export async function insertNode( el = await shapeHandler(elem, node, renderOptions); newEl = el; } + // MC Special + newEl.attr('data-id', node.id); + newEl.attr('data-node', true); + newEl.attr('data-et', 'node'); + newEl.attr('data-look', handleUndefinedAttr(node.look)); + if (node.tooltip) { el.attr('title', node.tooltip); } @@ -76,7 +83,7 @@ export const positionNode = (node: ReturnType) => { 'Transforming node', node.diff, node, - 'translate(' + (node.x - node.width / 2 - 5) + ', ' + node.width / 2 + ')' + 'translate(' + (node.x - +(node.diff || 0) - node.width / 2) + ', ' + node.width / 2 + ')' ); const padding = 8; const diff = node.diff || 0; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/bowTieRect.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/bowTieRect.ts index e7fb64875..a92a44d33 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/bowTieRect.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/bowTieRect.ts @@ -15,7 +15,9 @@ function generateArcPoints( ry: number, clockwise: boolean ) { - const numPoints = 20; + // this must be an odd number, so that the midpoint is included + // otherwise the width of the bowtie will be off + const numPoints = 21; // Calculate midpoint const midX = (x1 + x2) / 2; const midY = (y1 + y2) / 2; @@ -80,16 +82,56 @@ function getPoints(w: number, h: number, rx: number, ry: number) { ...generateArcPoints(w / 2, h / 2, w / 2, -h / 2, rx, ry, true), ]; } + +/** + * Calculates the sagitta of an arc of an ellipse given its chord and radii. + * + * @param chord - The chord of the arc (e.g. the line connecting the two points on the circle) + * @param radiusX - The x-radius of the ellipse. + * @param radiusY - The y-radius of the ellipse. + */ +function calculateArcSagitta(chord: number, radiusX: number, radiusY: number) { + const [semiMajorAxis, semiMinorAxis] = [radiusX, radiusY].sort((a, b) => b - a); + return semiMinorAxis * (1 - Math.sqrt(1 - (chord / semiMajorAxis / 2) ** 2)); +} + export async function bowTieRect(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + + const calcTotalHeight = (labelHeight: number) => labelHeight + labelPaddingY * 2; + const calcEllipseRadius = (totalHeight: number) => { + const ry = totalHeight / 2; + const rx = ry / (2.5 + totalHeight / 50); + return [rx, ry]; + }; + + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + if (node.width || node.height) { + node.height = Math.max((node?.height ?? 0) - labelPaddingY * 2, 10); + const totalHeight = calcTotalHeight(node.height); + const [rx, ry] = calcEllipseRadius(totalHeight); + node.width = Math.max( + (node?.width ?? 0) - labelPaddingX * 2 - calculateArcSagitta(totalHeight, rx, ry), + 10 + ); + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const w = bbox.width + node.padding + 20; - const h = bbox.height + node.padding; - const ry = h / 2; - const rx = ry / (2.5 + h / 50); + const totalHeight = calcTotalHeight(node?.height ? node?.height : bbox.height); + const [rx, ry] = calcEllipseRadius(totalHeight); + const sagitta = calculateArcSagitta(totalHeight, rx, ry); + const totalWidth = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2 + sagitta; + const w = totalWidth - sagitta; + const h = totalHeight; // let shape: d3.Selection; const { cssStyles } = node; @@ -107,7 +149,7 @@ export async function bowTieRect(parent: D3Selecti const bowTieRectShapePath = rc.path(bowTieRectPath, options); const bowTieRectShape = shapeSvg.insert(() => bowTieRectShapePath, ':first-child'); - bowTieRectShape.attr('class', 'basic label-container'); + bowTieRectShape.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { bowTieRectShape.selectAll('path').attr('style', cssStyles); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/card.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/card.ts index d1ba0a0c1..9b6426431 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/card.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/card.ts @@ -9,17 +9,19 @@ import type { D3Selection } from '../../../types.js'; import type { Bounds, Point } from '../../../types.js'; function getPoints(w: number, h: number, padding: number) { + const NOTCH_SIZE = 12; const left = 0; const right = w; const top = -h; const bottom = 0; + return [ - { x: left + padding, y: top }, + { x: left + NOTCH_SIZE, y: top }, { x: right, y: top }, { x: right, y: bottom }, { x: left, y: bottom }, - { x: left, y: top + padding }, - { x: left + padding, y: top }, + { x: left, y: top + NOTCH_SIZE }, + { x: left + NOTCH_SIZE, y: top }, ]; } export async function card(parent: D3Selection, node: Node) { diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/circle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/circle.ts index 80b59bdc1..5d81b9d9e 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/circle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/circle.ts @@ -11,9 +11,19 @@ import type { Bounds, Point } from '../../../types.js'; export async function circle(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; - const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node)); + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + const padding = node.padding ?? 0; + const labelPadding = node.look === 'neo' ? 16 : padding; + if (node.width || node.height) { + node.width = (node.width ?? 6) - labelPadding * 2; + node.height = node.width; + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const radius = bbox.width / 2 + halfPadding; + const radius = (node?.width ? node?.width / 2 : bbox.width / 2) + labelPadding * 2; let circleElem; const { cssStyles } = node; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts index a01774f9f..3237950fb 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts @@ -13,9 +13,13 @@ import type { Bounds, Point } from '../../../types.js'; export async function classBox(parent: D3Selection, node: Node) { const config = getConfig(); + const { themeVariables } = config; + const { useGradient } = themeVariables; + const PADDING = config.class!.padding ?? 12; const GAP = PADDING; const useHtmlLabels = node.useHtmlLabels ?? evaluate(config.htmlLabels) ?? true; + // Treat node as classNode const classNode = node as unknown as ClassNode; classNode.annotations = classNode.annotations ?? []; @@ -50,15 +54,25 @@ export async function classBox(parent: D3Selection options.fillStyle = 'solid'; } - const w = bbox.width; - let h = bbox.height; + const w = Math.max(node.width ?? 0, bbox.width); + let h = Math.max(node.height ?? 0, bbox.height); + const nodeHeightGreater = (node.height ?? 0) > bbox.height; if (classNode.members.length === 0 && classNode.methods.length === 0) { h += GAP; } else if (classNode.members.length > 0 && classNode.methods.length === 0) { h += GAP * 2; } + const x = -w / 2; const y = -h / 2; + let extraHeight = renderExtraBox + ? PADDING * 2 + : classNode.members.length === 0 && classNode.methods.length === 0 + ? -PADDING + : 0; + if (nodeHeightGreater) { + extraHeight = PADDING * 2; + } // Create and center rectangle const roughRect = rc.rectangle( @@ -71,13 +85,7 @@ export async function classBox(parent: D3Selection ? -PADDING / 2 : 0), w + 2 * PADDING, - h + - 2 * PADDING + - (renderExtraBox - ? PADDING * 2 - : classNode.members.length === 0 && classNode.methods.length === 0 - ? -PADDING - : 0), + h + 2 * PADDING + extraHeight, options ); @@ -86,6 +94,31 @@ export async function classBox(parent: D3Selection const rectBBox = rect.node()!.getBBox(); // Rect is centered so now adjust labels. + const annotationGroupHeight = + (shapeSvg.select('.annotation-group').node() as SVGGraphicsElement).getBBox().height - + (renderExtraBox ? PADDING / 2 : 0) || 0; + const labelGroupHeight = + (shapeSvg.select('.label-group').node() as SVGGraphicsElement).getBBox().height - + (renderExtraBox ? PADDING / 2 : 0) || 0; + const membersGroupHeight = + (shapeSvg.select('.members-group').node() as SVGGraphicsElement).getBBox().height - + (renderExtraBox ? PADDING / 2 : 0) || 0; + + // Y value in the middle of the first line and remaining space. + const methodsAreaPlacement = + (annotationGroupHeight + + labelGroupHeight + + y + + PADDING - + (y - + PADDING - + (renderExtraBox + ? PADDING + : classNode.members.length === 0 && classNode.methods.length === 0 + ? -PADDING / 2 + : 0))) / + 2; + // TODO: Fix types shapeSvg.selectAll('.text').each((_: any, i: number, nodes: any) => { const text = select(nodes[i]); @@ -111,6 +144,30 @@ export async function classBox(parent: D3Selection : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0); + if (text.attr('class').includes('methods-group')) { + if (nodeHeightGreater) { + newTranslateY = + Math.max( + methodsAreaPlacement, + annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + GAP * 2 + PADDING + ) + + GAP * 2; + } else { + newTranslateY = + annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + GAP * 4 + PADDING; + } + } + if ( + classNode.members.length === 0 && + classNode.methods.length === 0 && + config.class?.hideEmptyMembersBox + ) { + if (classNode.annotations.length > 0) { + newTranslateY = translateY - GAP; + } else { + newTranslateY = translateY; + } + } if (!useHtmlLabels) { // Fix so non html labels are better centered. // BBox of text seems to be slightly different when calculated so we offset @@ -133,39 +190,39 @@ export async function classBox(parent: D3Selection }); // Render divider lines. - const annotationGroupHeight = - (shapeSvg.select('.annotation-group').node() as SVGGraphicsElement).getBBox().height - - (renderExtraBox ? PADDING / 2 : 0) || 0; - const labelGroupHeight = - (shapeSvg.select('.label-group').node() as SVGGraphicsElement).getBBox().height - - (renderExtraBox ? PADDING / 2 : 0) || 0; - const membersGroupHeight = - (shapeSvg.select('.members-group').node() as SVGGraphicsElement).getBBox().height - - (renderExtraBox ? PADDING / 2 : 0) || 0; + // Line y-values are offset by 0.001 so gradient stroke can apply. + // If y-values are the same then the height of the bounding box is zero and it doesn't work. // First line (under label) if (classNode.members.length > 0 || classNode.methods.length > 0 || renderExtraBox) { + const firstLineY = annotationGroupHeight + labelGroupHeight + y + PADDING; const roughLine = rc.line( rectBBox.x, - annotationGroupHeight + labelGroupHeight + y + PADDING, + firstLineY, rectBBox.x + rectBBox.width, - annotationGroupHeight + labelGroupHeight + y + PADDING, + firstLineY + 0.001, options ); const line = shapeSvg.insert(() => roughLine); - line.attr('class', 'divider').attr('style', styles); + line + .attr('class', `divider${node.look === 'neo' && !useGradient ? ' neo-line' : ''}`) + .attr('style', styles); } // Second line (under members) if (renderExtraBox || classNode.members.length > 0 || classNode.methods.length > 0) { + const secondLineY = + annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + GAP * 2 + PADDING; const roughLine = rc.line( rectBBox.x, - annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + GAP * 2 + PADDING, + nodeHeightGreater ? Math.max(methodsAreaPlacement, secondLineY) : secondLineY, rectBBox.x + rectBBox.width, - annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + PADDING + GAP * 2, + (nodeHeightGreater ? Math.max(methodsAreaPlacement, secondLineY) : secondLineY) + 0.001, options ); const line = shapeSvg.insert(() => roughLine); - line.attr('class', 'divider').attr('style', styles); + line + .attr('class', `divider${node.look === 'neo' && !useGradient ? ' neo-line' : ''}`) + .attr('style', styles); } /// Apply styles /// diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/crossedCircle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/crossedCircle.ts index 8f268c4c5..9bb40832a 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/crossedCircle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/crossedCircle.ts @@ -1,35 +1,32 @@ import { log } from '../../../logger.js'; import { getNodeClasses, updateNodeBounds } from './util.js'; import type { Node } from '../../types.js'; -import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import rough from 'roughjs'; import intersect from '../intersect/index.js'; +import { userNodeOverrides } from './handDrawnShapeStyles.js'; import type { D3Selection } from '../../../types.js'; import type { Bounds, Point } from '../../../types.js'; function createLine(r: number) { - const xAxis45 = Math.cos(Math.PI / 4); // cosine of 45 degrees - const yAxis45 = Math.sin(Math.PI / 4); // sine of 45 degrees + const axis45 = Math.SQRT1_2; // cosine of 45 degrees = 1/sqrt(2) const lineLength = r * 2; - const pointQ1 = { x: (lineLength / 2) * xAxis45, y: (lineLength / 2) * yAxis45 }; // Quadrant I - const pointQ2 = { x: -(lineLength / 2) * xAxis45, y: (lineLength / 2) * yAxis45 }; // Quadrant II - const pointQ3 = { x: -(lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 }; // Quadrant III - const pointQ4 = { x: (lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 }; // Quadrant IV + const pointQ1 = { x: (lineLength / 2) * axis45, y: (lineLength / 2) * axis45 }; // Quadrant I + const pointQ2 = { x: -(lineLength / 2) * axis45, y: (lineLength / 2) * axis45 }; // Quadrant II + const pointQ3 = { x: -(lineLength / 2) * axis45, y: -(lineLength / 2) * axis45 }; // Quadrant III + const pointQ4 = { x: (lineLength / 2) * axis45, y: -(lineLength / 2) * axis45 }; // Quadrant IV return `M ${pointQ2.x},${pointQ2.y} L ${pointQ4.x},${pointQ4.y} M ${pointQ1.x},${pointQ1.y} L ${pointQ3.x},${pointQ3.y}`; } export function crossedCircle(parent: D3Selection, node: Node) { - const { labelStyles, nodeStyles } = styles2String(node); - node.labelStyle = labelStyles; node.label = ''; const shapeSvg = parent .insert('g') .attr('class', getNodeClasses(node)) .attr('id', node.domId ?? node.id); - const radius = Math.max(30, node?.width ?? 0); + const radius = node?.width ? node?.width / 2 : node?.height ? node?.height / 2 : 25; const { cssStyles } = node; // @ts-expect-error -- Passing a D3.Selection seems to work for some reason @@ -45,17 +42,15 @@ export function crossedCircle(parent: D3Selection< const linePath = createLine(radius); const lineNode = rc.path(linePath, options); - const crossedCircle = shapeSvg.insert(() => circleNode, ':first-child'); + const crossedCircle = shapeSvg.insert('g', ':first-child'); + crossedCircle.insert(() => circleNode); crossedCircle.insert(() => lineNode); + crossedCircle.attr('class', 'outer-path'); if (cssStyles && node.look !== 'handDrawn') { crossedCircle.selectAll('path').attr('style', cssStyles); } - if (nodeStyles && node.look !== 'handDrawn') { - crossedCircle.selectAll('path').attr('style', nodeStyles); - } - updateNodeBounds(node, crossedCircle); node.calcIntersect = function (bounds: Bounds, point: Point) { diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts index 2afdb4df0..4817bd1d6 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts @@ -58,10 +58,28 @@ export async function curlyBraceLeft( const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = bbox.width + (node.padding ?? 0); - const h = bbox.height + (node.padding ?? 0); - const radius = Math.max(5, h * 0.1); + const paddingX = node.look === 'neo' ? 18 : (node.padding ?? 0); + const paddingY = node.look === 'neo' ? 12 : (node.padding ?? 0); + if (node.width || node.height) { + let radius = 5; + const cal_height = (((node?.height ?? 0) - paddingY * 2) * 10) / 11; + if (cal_height / 10 > 5) { + radius = cal_height / 10; + } + node.height = (node?.height ?? 0) - paddingY * 2 - 2 * radius; + if (node.height < 10) { + node.height = 10; + } + node.width = (node?.width ?? 0) - paddingX * 2 - 2 * radius; + if (node.width < 10) { + node.width = 10; + } + } + + const w = (node.width ? node.width : bbox.width) + (paddingX ?? 0) * 2; + const h = (node.height ? node.height : bbox.height) + (paddingY ?? 0) * 2; + const radius = Math.max(5, h * 0.1); const { cssStyles } = node; const points = [ @@ -105,7 +123,7 @@ export async function curlyBraceLeft( label.attr( 'transform', - `translate(${-w / 2 + radius - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})` + `translate(${-w / 2 + (paddingX ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-bbox.height / 2})` ); updateNodeBounds(node, curlyBraceLeftShape); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts index 84a1c9e81..294af012c 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts @@ -58,8 +58,29 @@ export async function curlyBraceRight( const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = bbox.width + (node.padding ?? 0); - const h = bbox.height + (node.padding ?? 0); + const labelPaddingX = node.look === 'neo' ? 18 : (node.padding ?? 0); + const labelPaddingY = node.look === 'neo' ? 12 : (node.padding ?? 0); + + if (node.width || node.height) { + let radius = 5; + const cal_height = (((node?.height ?? 0) - labelPaddingY * 2) * 10) / 11; + if (cal_height / 10 > 5) { + radius = cal_height / 10; + } + + node.width = (node?.width ?? 0) - labelPaddingX * 2 - radius * 2; + if (node.width < 10) { + node.width = 10; + } + + node.height = (node?.height ?? 0) - labelPaddingY * 2 - radius * 2; + if (node.height < 10) { + node.height = 10; + } + } + + const w = (node.width ? node.width : bbox.width) + (labelPaddingX ?? 0) * 2; + const h = (node.height ? node.height : bbox.height) + (labelPaddingY ?? 0) * 2; const radius = Math.max(5, h * 0.1); const { cssStyles } = node; @@ -105,7 +126,7 @@ export async function curlyBraceRight( label.attr( 'transform', - `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})` + `translate(${-w / 2 + (labelPaddingX ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-bbox.height / 2})` ); updateNodeBounds(node, curlyBraceRightShape); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraces.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraces.ts index 84e3d6648..20787f2c0 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraces.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/curlyBraces.ts @@ -62,10 +62,30 @@ export async function curlyBraces( const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = bbox.width + (node.padding ?? 0); - const h = bbox.height + (node.padding ?? 0); - const radius = Math.max(5, h * 0.1); + const labelPaddingX = node.look === 'neo' ? 18 : (node.padding ?? 0); + const labelPaddingY = node.look === 'neo' ? 12 : (node.padding ?? 0); + if (node.width || node.height) { + let radius = 5; + const cal_height = (((node?.height ?? 0) - labelPaddingY * 2) * 10) / 11; + if (cal_height / 10 > 5) { + radius = cal_height / 10; + } + + node.width = (node?.width ?? 0) - labelPaddingX * 2 - radius * 2.5; + if (node.width < 10) { + node.width = 10; + } + + node.height = (node?.height ?? 0) - labelPaddingY * 2 - radius * 2; + if (node.height < 10) { + node.height = 10; + } + } + + const w = (node.width ? node.width : bbox.width) + (labelPaddingX ?? 0) * 2; + const h = (node.height ? node.height : bbox.height) + (labelPaddingY ?? 0) * 2; + const radius = Math.max(5, h * 0.1); const { cssStyles } = node; const leftCurlyBracePoints = [ @@ -90,7 +110,7 @@ export async function curlyBraces( // @ts-expect-error -- Passing a D3.Selection seems to work for some reason const rc = rough.svg(shapeSvg); - const options = userNodeOverrides(node, { fill: 'none' }); + const options = userNodeOverrides(node, { fill: 'transparent' }); if (node.look !== 'handDrawn') { options.roughness = 0; @@ -122,9 +142,8 @@ export async function curlyBraces( label.attr( 'transform', - `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})` + `translate(${-w / 2 + (labelPaddingX ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-bbox.height / 2})` ); - updateNodeBounds(node, curlyBracesShape); node.calcIntersect = function (bounds: Bounds, point: Point) { diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts index 4f832ba4b..3050171ba 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts @@ -27,11 +27,29 @@ export async function curvedTrapezoid( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + const minWidth = 20, + minHeight = 5; + if (node.width || node.height) { + node.width = (node?.width ?? 0) - labelPaddingX * 2 * 1.25; + if (node.width < minWidth) { + node.width = minWidth; + } + + node.height = (node?.height ?? 0) - labelPaddingY * 2; + if (node.height < minHeight) { + node.height = minHeight; + } + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const minWidth = 80, - minHeight = 20; - const w = Math.max(minWidth, (bbox.width + (node.padding ?? 0) * 2) * 1.25, node?.width ?? 0); - const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); + + const w = + (node?.width ? node?.width : Math.max(minWidth, bbox.width)) + (labelPaddingX ?? 0) * 2 * 1.25; + const h = + (node?.height ? node?.height : Math.max(minHeight, bbox.height)) + (labelPaddingY ?? 0) * 2; const radius = h / 2; const { cssStyles } = node; @@ -55,7 +73,7 @@ export async function curvedTrapezoid( const shapeNode = rc.path(pathData, options); const polygon = shapeSvg.insert(() => shapeNode, ':first-child'); - polygon.attr('class', 'basic label-container'); + polygon.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { polygon.selectChildren('path').attr('style', cssStyles); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/cylinder.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/cylinder.ts index 923b67123..504bd0fcc 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/cylinder.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/cylinder.ts @@ -51,14 +51,39 @@ export const createInnerCylinderPathD = ( ): string => { return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(' '); }; + +const MIN_HEIGHT = 8; +const MIN_WIDTH = 8; export async function cylinder(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 24 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 24 : nodePadding; + + if (node.width || node.height) { + const originalWidth = node.width ?? 0; + node.width = (node.width ?? 0) - labelPaddingY; + if (node.width < MIN_WIDTH) { + node.width = MIN_WIDTH; + } + + const rx = originalWidth / 2; + const ry = rx / (2.5 + originalWidth / 50); + node.height = (node.height ?? 0) - labelPaddingX - ry * 3; + + if (node.height < MIN_HEIGHT) { + node.height = MIN_HEIGHT; + } + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + node.padding, node.width ?? 0); + + const w = (node.width ? node.width : bbox.width) + labelPaddingY; const rx = w / 2; const ry = rx / (2.5 + w / 50); - const h = Math.max(bbox.height + ry + node.padding, node.height ?? 0); + const h = (node.height ? node.height : bbox.height) + labelPaddingX + ry; let cylinder: D3Selection | D3Selection; const { cssStyles } = node; @@ -68,10 +93,21 @@ export async function cylinder(parent: D3Selection const rc = rough.svg(shapeSvg); const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry); const innerPathData = createInnerCylinderPathD(0, ry, w, h, rx, ry); - const outerNode = rc.path(outerPathData, userNodeOverrides(node, {})); - const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: 'none' })); + const options = userNodeOverrides(node, {}); + const overrides = {}; + // node.look === 'neo' + // ? { + // roughness: 0, + // stroke: 'none', + // fillStyle: 'solid', + // } + // : {}; - cylinder = shapeSvg.insert(() => innerLine, ':first-child'); + const outerNode = rc.path(outerPathData, { ...options, ...overrides }); + const innerLine = rc.path(innerPathData, { ...options, ...overrides }); + + const innerLineEl = shapeSvg.insert(() => innerLine, ':first-child'); + innerLineEl.attr('class', 'neo-line'); cylinder = shapeSvg.insert(() => outerNode, ':first-child'); cylinder.attr('class', 'basic label-container'); if (cssStyles) { @@ -82,11 +118,12 @@ export async function cylinder(parent: D3Selection cylinder = shapeSvg .insert('path', ':first-child') .attr('d', pathData) - .attr('class', 'basic label-container') + .attr('class', 'basic label-container outer-path') .attr('style', handleUndefinedAttr(cssStyles)) .attr('style', nodeStyles); } + // find label and move it down cylinder.attr('label-offset-y', ry); cylinder.attr('transform', `translate(${-w / 2}, ${-(h / 2 + ry)})`); @@ -94,7 +131,7 @@ export async function cylinder(parent: D3Selection label.attr( 'transform', - `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (node.padding ?? 0) / 1.5 - (bbox.y - (bbox.top ?? 0))})` + `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (nodePadding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})` ); node.calcIntersect = function (bounds: Bounds, point: Point) { diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/dividedRect.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/dividedRect.ts index 6145d2d8c..736a8e0e9 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/dividedRect.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/dividedRect.ts @@ -12,11 +12,28 @@ export async function dividedRectangle( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; - const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const rectOffset = h * 0.2; + const paddingX = node.look === 'neo' ? 16 : (node.padding ?? 0); + const paddingY = node.look === 'neo' ? 16 : (node.padding ?? 0); + + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + if (node.width || node.height) { + node.width = Math.max((node?.width ?? 0) - paddingX * 2, 10); + node.height = Math.max((node?.height ?? 0) - paddingY * 2, 10); + } + + const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); + + const totalWidth = (node?.width ? node?.width : bbox.width) + paddingX * 2; + const totalHeight = (node?.height ? node?.height : bbox.height) + paddingY * 2; + + const rectOffset = totalHeight * 0.2; + + const w = totalWidth; + const h = totalHeight - rectOffset; const x = -w / 2; const y = -h / 2 - rectOffset / 2; @@ -46,7 +63,7 @@ export async function dividedRectangle( ); const polygon = shapeSvg.insert(() => poly, ':first-child'); - polygon.attr('class', 'basic label-container'); + polygon.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { polygon.selectAll('path').attr('style', cssStyles); @@ -56,9 +73,10 @@ export async function dividedRectangle( polygon.selectAll('path').attr('style', nodeStyles); } + // place the label in the center of the lower half of the divided rectangle label.attr( 'transform', - `translate(${x + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))}, ${y + rectOffset + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})` + `translate(${-w / 2 + (paddingX ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-bbox.height / 2 - rectOffset / 2 + rectOffset})` ); updateNodeBounds(node, polygon); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/doubleCircle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/doubleCircle.ts index 80e75d92b..f3559997e 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/doubleCircle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/doubleCircle.ts @@ -13,11 +13,24 @@ export async function doublecircle( node: Node ) { const { labelStyles, nodeStyles } = styles2String(node); + const gap = 12; node.labelStyle = labelStyles; - const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node)); - const gap = 5; - const outerRadius = bbox.width / 2 + halfPadding + gap; - const innerRadius = bbox.width / 2 + halfPadding; + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + const padding = node.padding ?? 0; + const labelPadding = node.look === 'neo' ? 16 : padding; + + if (node.width || node.height) { + node.width = (node.width ?? 6) - labelPadding * 2; + node.height = node.width; + } + + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); + + const outerRadius = (node?.width ? node?.width / 2 : bbox.width / 2) + (labelPadding ?? 0); + const innerRadius = outerRadius - gap; let circleGroup; const { cssStyles } = node; @@ -58,7 +71,8 @@ export async function doublecircle( .attr('style', nodeStyles) .attr('r', innerRadius) .attr('cx', 0) - .attr('cy', 0); + .attr('cy', 0) + .attr('style', 'filter:url("")'); } updateNodeBounds(node, circleGroup); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/drawRect.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/drawRect.ts index 8f70f82fc..3a5c84e36 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/drawRect.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/drawRect.ts @@ -15,16 +15,22 @@ export async function drawRect( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; - // console.log('IPI labelStyles:', labelStyles); + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + if (node.width || node.height) { + node.width = (node?.width ?? 10) - options.labelPaddingX * 2; + node.height = (node?.height ?? 10) - options.labelPaddingY * 2; + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const totalWidth = Math.max(bbox.width + options.labelPaddingX * 2, node?.width || 0); - const totalHeight = Math.max(bbox.height + options.labelPaddingY * 2, node?.height || 0); + const totalWidth = (node?.width ? node?.width : bbox.width) + options.labelPaddingX * 2; + const totalHeight = (node?.height ? node?.height : bbox.height) + options.labelPaddingY * 2; + const x = -totalWidth / 2; const y = -totalHeight / 2; - - // log.info('IPI node = ', node); - let rect; let { rx, ry } = node; const { cssStyles } = node; @@ -50,15 +56,19 @@ export async function drawRect( } else { rect = shapeSvg.insert('rect', ':first-child'); + const rectClass = 'basic label-container'; + rect - .attr('class', 'basic label-container') + .attr('class', rectClass) .attr('style', nodeStyles) .attr('rx', handleUndefinedAttr(rx)) + .attr('data-id', node.id) .attr('ry', handleUndefinedAttr(ry)) .attr('x', x) .attr('y', y) .attr('width', totalWidth) - .attr('height', totalHeight); + .attr('height', totalHeight) + .attr('stroke', 'url(#gradient)'); } updateNodeBounds(node, rect); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/filledCircle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/filledCircle.ts index 60d895d91..4db1a71a7 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/filledCircle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/filledCircle.ts @@ -2,7 +2,7 @@ import rough from 'roughjs'; import { log } from '../../../logger.js'; import type { Node, ShapeRenderOptions } from '../../types.js'; import intersect from '../intersect/index.js'; -import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; +import { userNodeOverrides } from './handDrawnShapeStyles.js'; import { getNodeClasses, updateNodeBounds } from './util.js'; import type { D3Selection } from '../../../types.js'; import type { Bounds, Point } from '../../../types.js'; @@ -10,16 +10,37 @@ import type { Bounds, Point } from '../../../types.js'; export function filledCircle( parent: D3Selection, node: Node, - { config: { themeVariables } }: ShapeRenderOptions + { config: { themeVariables, theme } }: ShapeRenderOptions ) { - const { labelStyles, nodeStyles } = styles2String(node); node.label = ''; - node.labelStyle = labelStyles; + + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (10), + // if so set it to min value + if (node.width || node.height) { + if ((node.width ?? 0) < 10) { + node.width = 10; + } + + if ((node.height ?? 0) < 10) { + node.height = 10; + } + } + + if (!node.width) { + node.width = 10; + } + + if (!node.height) { + node.width = 10; + } + const shapeSvg = parent .insert('g') .attr('class', getNodeClasses(node)) .attr('id', node.domId ?? node.id); - const radius = 7; + const radius = (node.width ?? 0) / 2; const { cssStyles } = node; // @ts-expect-error -- Passing a D3.Selection seems to work for some reason @@ -37,12 +58,16 @@ export function filledCircle( filledCircle.selectAll('path').attr('style', `fill: ${nodeBorder} !important;`); - if (cssStyles && cssStyles.length > 0 && node.look !== 'handDrawn') { - filledCircle.selectAll('path').attr('style', cssStyles); + if (node.look !== 'handDrawn') { + filledCircle.attr('class', 'outer-path'); } - if (nodeStyles && node.look !== 'handDrawn') { - filledCircle.selectAll('path').attr('style', nodeStyles); + if (node.width < 25 && theme?.includes('redux') && node.look !== 'handDrawn') { + filledCircle.attr('style', 'filter:url(#drop-shadow-small)'); + } + + if (cssStyles && cssStyles.length > 0 && node.look !== 'handDrawn') { + filledCircle.selectAll('path').attr('style', cssStyles); } updateNodeBounds(node, filledCircle); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/flippedTriangle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/flippedTriangle.ts index 651cc5fc8..5ad8dbcad 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/flippedTriangle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/flippedTriangle.ts @@ -8,6 +8,8 @@ import { createPathFromPoints } from './util.js'; import type { D3Selection } from '../../../types.js'; import type { Bounds, Point } from '../../../types.js'; +const MIN_HEIGHT = 10; +const MIN_WIDTH = 10; function getPoints(tw: number, h: number) { return [ { x: 0, y: -h }, @@ -22,12 +24,28 @@ export async function flippedTriangle( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? nodePadding * 2 : nodePadding; + const labelPaddingY = node.look === 'neo' ? nodePadding * 1 : nodePadding; + if (node.width || node.height) { + node.height = node?.height ?? 0; + if (node.height < MIN_HEIGHT) { + node.height = MIN_HEIGHT; + } + + node.width = (node?.width ?? 0) - labelPaddingX - labelPaddingX / 2; + if (node.width < MIN_WIDTH) { + node.width = MIN_WIDTH; + } + } const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = bbox.width + (node.padding ?? 0); - const h = w + bbox.height; + const w = (node?.width ? node?.width : bbox.width) + (labelPaddingX ?? 0); + const h = node?.height ? node?.height : w + bbox.height; - const tw = w + bbox.height; + const tw = h; + // const tw = w + bbox.height; const points = getPoints(tw, h); const { cssStyles } = node; @@ -44,7 +62,8 @@ export async function flippedTriangle( const flippedTriangle = shapeSvg .insert(() => roughNode, ':first-child') - .attr('transform', `translate(${-h / 2}, ${h / 2})`); + .attr('transform', `translate(${-h / 2}, ${h / 2})`) + .attr('class', 'outer-path'); if (cssStyles && node.look !== 'handDrawn') { flippedTriangle.selectChildren('path').attr('style', cssStyles); @@ -61,7 +80,7 @@ export async function flippedTriangle( label.attr( 'transform', - `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) / 2 + (bbox.y - (bbox.top ?? 0))})` + `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (labelPaddingY ?? 0) / 2 + (bbox.y - (bbox.top ?? 0))})` ); node.calcIntersect = function (bounds: Bounds, point: Point) { diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/forkJoin.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/forkJoin.ts index d1f98c8f1..9e56a47ef 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/forkJoin.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/forkJoin.ts @@ -19,12 +19,12 @@ export function forkJoin( .attr('id', node.domId ?? node.id); const { cssStyles } = node; - let width = Math.max(70, node?.width ?? 0); - let height = Math.max(10, node?.height ?? 0); + let width = node?.width ? node?.width : 70; + let height = node?.height ? node?.height : 10; if (dir === 'LR') { - width = Math.max(10, node?.width ?? 0); - height = Math.max(70, node?.height ?? 0); + width = node?.width ? node?.width : 10; + height = node?.height ? node?.height : 70; } const x = (-1 * width) / 2; @@ -45,7 +45,9 @@ export function forkJoin( const roughNode = rc.rectangle(x, y, width, height, options); const shape = shapeSvg.insert(() => roughNode, ':first-child'); - + if (node.look !== 'handDrawn') { + shape.attr('class', 'outer-path'); + } if (cssStyles && node.look !== 'handDrawn') { shape.selectAll('path').attr('style', cssStyles); } diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts index d4cc9c784..7b83a3078 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts @@ -19,11 +19,28 @@ export async function halfRoundedRectangle( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; - const minWidth = 80, - minHeight = 50; + const minWidth = 15, + minHeight = 10; + + const paddingX = node.look === 'neo' ? 16 : (node.padding ?? 0); + const paddingY = node.look === 'neo' ? 12 : (node.padding ?? 0); + + if (node.width || node.height) { + node.height = (node?.height ?? 0) - paddingY * 2; + if (node.height < minHeight) { + node.height = minHeight; + } + + node.width = (node?.width ?? 0) - paddingX * 2; + if (node.width < minWidth) { + node.width = minWidth; + } + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); + + const w = (node?.width ? node?.width : Math.max(minWidth, bbox.width)) + paddingX * 2; + const h = (node?.height ? node?.height : Math.max(minHeight, bbox.height)) + paddingY * 2; const radius = h / 2; const { cssStyles } = node; @@ -47,7 +64,7 @@ export async function halfRoundedRectangle( const pathData = createPathFromPoints(points); const shapeNode = rc.path(pathData, options); const polygon = shapeSvg.insert(() => shapeNode, ':first-child'); - polygon.attr('class', 'basic label-container'); + polygon.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { polygon.selectChildren('path').attr('style', cssStyles); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts index 80e2a4423..4ac6b2ddd 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts @@ -32,7 +32,28 @@ export const styles2Map = (styles: string[]) => { }); return styleMap; }; - +export const isLabelStyle = (key: string) => { + return ( + key === 'color' || + key === 'font-size' || + key === 'font-family' || + key === 'font-weight' || + key === 'font-style' || + key === 'text-decoration' || + key === 'text-align' || + key === 'text-transform' || + key === 'line-height' || + key === 'letter-spacing' || + key === 'word-spacing' || + key === 'text-shadow' || + key === 'text-overflow' || + key === 'white-space' || + key === 'word-wrap' || + key === 'word-break' || + key === 'overflow-wrap' || + key === 'hyphens' + ); +}; export const styles2String = (node: Node) => { const { stylesArray } = compileStyles(node); const labelStyles: string[] = []; @@ -42,26 +63,7 @@ export const styles2String = (node: Node) => { stylesArray.forEach((style) => { const key = style[0]; - if ( - key === 'color' || - key === 'font-size' || - key === 'font-family' || - key === 'font-weight' || - key === 'font-style' || - key === 'text-decoration' || - key === 'text-align' || - key === 'text-transform' || - key === 'line-height' || - key === 'letter-spacing' || - key === 'word-spacing' || - key === 'text-shadow' || - key === 'text-overflow' || - key === 'white-space' || - key === 'word-wrap' || - key === 'word-break' || - key === 'overflow-wrap' || - key === 'hyphens' - ) { + if (isLabelStyle(key)) { labelStyles.push(style.join(':') + ' !important'); } else { nodeStyles.push(style.join(':') + ' !important'); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/hexagon.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/hexagon.ts index acc11182a..0d3b02049 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/hexagon.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/hexagon.ts @@ -27,13 +27,31 @@ export const createHexagonPathD = ( export async function hexagon(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); + const f = node.look === 'neo' ? 3.5 : 4; node.labelStyle = labelStyles; + const nodePadding = node.padding ?? 0; + const wa = 70; + const ha = 32; + + const labelPaddingX = node.look === 'neo' ? wa : nodePadding; + const labelPaddingY = node.look === 'neo' ? ha : nodePadding; + if (node.width || node.height) { + const originalHeight = node.height ?? 0; + const m = originalHeight / f; + node.width = (node?.width ?? 0) - 2 * m - labelPaddingY; + node.height = (node.height ?? 0) - labelPaddingX; + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const f = 4; - const h = bbox.height + node.padding; + const h = (node?.height ? node?.height : bbox.height) + labelPaddingX; const m = h / f; - const w = bbox.width + 2 * m + node.padding; + + const w = + (node?.width ? node?.width : bbox.width) + + 2 * m + + labelPaddingY - + (node.look === 'neo' ? 20 : 0); const points = [ { x: m, y: 0 }, { x: w - m, y: 0 }, diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/hourglass.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/hourglass.ts index 3c0b82a31..5208507aa 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/hourglass.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/hourglass.ts @@ -1,20 +1,18 @@ +import rough from 'roughjs'; import { log } from '../../../logger.js'; import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js'; import intersect from '../intersect/index.js'; import type { Node } from '../../types.js'; -import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; -import rough from 'roughjs'; +import { userNodeOverrides } from './handDrawnShapeStyles.js'; import type { D3Selection } from '../../../types.js'; import type { Bounds, Point } from '../../../types.js'; export async function hourglass(parent: D3Selection, node: Node) { - const { labelStyles, nodeStyles } = styles2String(node); node.label = ''; - node.labelStyle = labelStyles; const { shapeSvg } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(30, node?.width ?? 0); - const h = Math.max(30, node?.height ?? 0); + const w = node?.width ? node?.width : 30; + const h = node?.height ? node?.height : 30; const { cssStyles } = node; @@ -37,16 +35,12 @@ export async function hourglass(parent: D3Selectio const pathData = createPathFromPoints(points); const shapeNode = rc.path(pathData, options); const polygon = shapeSvg.insert(() => shapeNode, ':first-child'); - polygon.attr('class', 'basic label-container'); + polygon.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { polygon.selectChildren('path').attr('style', cssStyles); } - if (nodeStyles && node.look !== 'handDrawn') { - polygon.selectChildren('path').attr('style', nodeStyles); - } - polygon.attr('transform', `translate(${-w / 2}, ${-h / 2})`); updateNodeBounds(node, polygon); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/icon.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/icon.ts index 2295cc754..d18501ed3 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/icon.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/icon.ts @@ -56,9 +56,9 @@ export async function icon( const iconShape = shapeSvg.insert(() => iconNode, ':first-child'); const outerShape = shapeSvg.insert(() => outerNode); + const iconElem = shapeSvg.append('g'); if (node.icon) { - const iconElem = shapeSvg.append('g'); iconElem.html( `${await getIconSVG(node.icon, { height: iconSize, @@ -79,7 +79,15 @@ export async function icon( : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY })` ); - iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`); + iconElem.attr('style', `color : ${stylesMap.get('stroke') ?? nodeBorder};`); + iconElem + .selectAll('path') + .nodes() + .forEach((path) => { + if (path.getAttribute('fill') === 'currentColor') { + path.setAttribute('class', 'icon'); + } + }); } label.attr( @@ -96,6 +104,14 @@ export async function icon( })` ); + if (stylesMap.get('stroke')) { + iconElem.selectAll('path').attr('style', `fill: ${stylesMap.get('stroke')}`); + } + + if (stylesMap.get('fill')) { + iconShape.selectAll('path').attr('style', `stroke: ${stylesMap.get('fill')}`); + } + updateNodeBounds(node, outerShape); node.calcIntersect = function (bounds: Bounds, point: Point) { diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconCircle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconCircle.ts index 978e9512e..f4fa817de 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconCircle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconCircle.ts @@ -15,18 +15,38 @@ export async function iconCircle( ) { const { labelStyles } = styles2String(node); node.labelStyle = labelStyles; + const defaultWidth = flowchart?.wrappingWidth; + const padding = node.height ? node.height * 0.05 : 15; + const labelPadding = node.label ? 8 : 0; const assetHeight = node.assetHeight ?? 48; const assetWidth = node.assetWidth ?? 48; - const iconSize = Math.max(assetHeight, assetWidth); - const defaultWidth = flowchart?.wrappingWidth; - node.width = Math.max(iconSize, defaultWidth ?? 0); + let iconSize = Math.max(assetHeight, assetWidth) / Math.SQRT2 - padding; + let height = Math.max(assetHeight, assetWidth); + let width = Math.max(assetHeight, assetWidth); + // node.width = Math.max(iconSize, defaultWidth ?? 0); + + let adjustDimensions = false; + if (node.width || node.height) { + adjustDimensions = true; + node.width = ((node?.width ?? 10) - labelPadding * 2) / Math.SQRT2 - padding; + node.height = ((node?.height ?? 10) - labelPadding * 2) / Math.SQRT2 - padding; + width = node.width; + height = node.height; + } else { + node.width = Math.max(width, defaultWidth ?? 0); + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'icon-shape default'); - - const padding = 20; - const labelPadding = node.label ? 8 : 0; - const topLabel = node.pos === 't'; + if (adjustDimensions) { + node.width = (node.width + padding) * Math.SQRT2 + labelPadding * 2; + node.height = ((node.height ?? 10) + padding) * Math.SQRT2 + labelPadding * 2; + width = node.width; // / Math.SQRT2 - padding ; + height = node.height; // / Math.SQRT2 - padding; + iconSize = (Math.max(node.width, node.height) - padding) / Math.SQRT2; + } + const { nodeBorder, mainBkg } = themeVariables; const { stylesMap } = compileStyles(node); // @ts-expect-error -- Passing a D3.Selection seems to work for some reason @@ -52,48 +72,66 @@ export async function iconCircle( } const iconBBox = iconElem.node()!.getBBox(); const iconWidth = iconBBox.width; - const iconHeight = iconBBox.height; + // const iconHeight = iconBBox.height; const iconX = iconBBox.x; - const iconY = iconBBox.y; + // const iconY = iconBBox.y; - const diameter = Math.max(iconWidth, iconHeight) * Math.SQRT2 + padding * 2; + const diameter = Math.max(height, width); const iconNode = rc.circle(0, 0, diameter, options); - const outerWidth = Math.max(diameter, bbox.width); - const outerHeight = diameter + bbox.height + labelPadding; + // const outerWidth = Math.max(diameter, bbox.width); + // const outerHeight = diameter + bbox.height + labelPadding; - const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { - ...options, - fill: 'transparent', - stroke: 'none', - }); + // const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { + // ...options, + // fill: 'transparent', + // stroke: 'none', + // }); const iconShape = shapeSvg.insert(() => iconNode, ':first-child'); - const outerShape = shapeSvg.insert(() => outerNode); + // const outerShape = shapeSvg.insert(() => outerNode); + // iconElem.attr( + // 'transform', + // `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})` + // ); iconElem.attr( 'transform', - `translate(${-iconWidth / 2 - iconX},${ - topLabel - ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY - : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY - })` + `translate(${-iconWidth / 2 - iconX},${topLabel ? -iconSize / 2 : -iconSize / 2})` ); - iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`); + iconElem.attr('style', `color : ${stylesMap.get('stroke') ?? nodeBorder};`); + iconElem + .selectAll('path') + .nodes() + .forEach((path) => { + if (path.getAttribute('fill') === 'currentColor') { + path.setAttribute('class', 'icon'); + } + }); + // label.attr( + // 'transform', + // `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})` + // ); label.attr( 'transform', - `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${ - topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height - })` + `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -diameter / 2 - bbox.height - labelPadding : diameter / 2 + labelPadding})` ); - iconShape.attr( - 'transform', - `translate(${0},${ - topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2 - })` - ); + // iconShape.attr( + // 'transform', + // `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})` + // ); - updateNodeBounds(node, outerShape); + if (stylesMap.get('stroke')) { + iconElem.selectAll('path').attr('style', `fill: ${stylesMap.get('stroke')}`); + } + + if (stylesMap.get('fill')) { + iconShape.selectAll('path').attr('style', `stroke: ${stylesMap.get('fill')}`); + } + + iconShape.attr('class', 'icon-neo'); + + updateNodeBounds(node, iconShape); node.calcIntersect = function (bounds: Bounds, point: Point) { // TODO: Implement intersect for this shape @@ -103,7 +141,7 @@ export async function iconCircle( node.intersect = function (point) { log.info('iconSquare intersect', node, point); - const pos = intersect.rect(node, point); + const pos = intersect.circle(node, diameter / 2, point); return pos; }; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconRounded.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconRounded.ts index ea5f8ff76..80bacb1a4 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconRounded.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconRounded.ts @@ -16,29 +16,42 @@ export async function iconRounded( ) { const { labelStyles } = styles2String(node); node.labelStyle = labelStyles; + const defaultWidth = flowchart?.wrappingWidth; + const labelPadding = node.label ? 8 : 0; + const padding = node.height ? node.height * 0.05 : 15; const assetHeight = node.assetHeight ?? 48; const assetWidth = node.assetWidth ?? 48; - const iconSize = Math.max(assetHeight, assetWidth); - const defaultWidth = flowchart?.wrappingWidth; - node.width = Math.max(iconSize, defaultWidth ?? 0); - const { shapeSvg, bbox, halfPadding, label } = await labelHelper( - parent, - node, - 'icon-shape default' - ); + let iconSize = Math.max(assetHeight, assetWidth); + let height = iconSize + padding * 2; + let width = iconSize + padding * 2; + let adjustDimensions = false; + if (node.width || node.height) { + adjustDimensions = true; + node.width = (node?.width ?? 10) - labelPadding * 2; + node.height = (node?.height ?? 10) - labelPadding * 2; + width = node.width; + height = node.height; + } else { + node.width = Math.max(width, defaultWidth ?? 0); + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'icon-shape default'); const topLabel = node.pos === 't'; - const height = iconSize + halfPadding * 2; - const width = iconSize + halfPadding * 2; + if (adjustDimensions) { + node.width = node.width + labelPadding * 2; + node.height = (node.height ?? 10) + labelPadding * 2; + width = node.width; + height = node.height; + iconSize = Math.max(node.width - padding * 2, node.height - padding * 2); + } + const { nodeBorder, mainBkg } = themeVariables; const { stylesMap } = compileStyles(node); const x = -width / 2; const y = -height / 2; - const labelPadding = node.label ? 8 : 0; - // @ts-expect-error -- Passing a D3.Selection seems to work for some reason const rc = rough.svg(shapeSvg); const options = userNodeOverrides(node, {}); @@ -52,58 +65,65 @@ export async function iconRounded( const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 5), options); - const outerWidth = Math.max(width, bbox.width); - const outerHeight = height + bbox.height + labelPadding; + // const outerWidth = Math.max(width, bbox.width); + // const outerHeight = height + bbox.height + labelPadding; - const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { - ...options, - fill: 'transparent', - stroke: 'none', - }); + // const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { + // ...options, + // fill: 'transparent', + // stroke: 'none', + // }); - const iconShape = shapeSvg.insert(() => iconNode, ':first-child').attr('class', 'icon-shape2'); - const outerShape = shapeSvg.insert(() => outerNode); + // const iconShape = shapeSvg.insert(() => iconNode, ':first-child').attr('class', 'icon-shape2'); + // const outerShape = shapeSvg.insert(() => outerNode); + const iconShape = shapeSvg.insert(() => iconNode, ':first-child'); + // const outerShape = shapeSvg.insert(() => outerNode); + const iconElem = shapeSvg.append('g'); if (node.icon) { - const iconElem = shapeSvg.append('g'); iconElem.html( - `${await getIconSVG(node.icon, { - height: iconSize, - width: iconSize, - fallbackPrefix: '', - })}` + `${await getIconSVG(node.icon, { height: iconSize, fallbackPrefix: '' })}` ); const iconBBox = iconElem.node()!.getBBox(); const iconWidth = iconBBox.width; - const iconHeight = iconBBox.height; + // const iconHeight = iconBBox.height; const iconX = iconBBox.x; - const iconY = iconBBox.y; + // const iconY = iconBBox.y; iconElem.attr( 'transform', - `translate(${-iconWidth / 2 - iconX},${ - topLabel - ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY - : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY - })` + `translate(${-iconWidth / 2 - iconX},${topLabel ? -iconSize / 2 : -iconSize / 2})` ); - iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`); + iconElem.attr('style', `color : ${stylesMap.get('stroke') ?? nodeBorder};`); + iconElem + .selectAll('path') + .nodes() + .forEach((path) => { + if (path.getAttribute('fill') === 'currentColor') { + path.setAttribute('class', 'icon'); + } + }); } label.attr( 'transform', - `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${ - topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height - })` + `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -height / 2 - bbox.height - labelPadding : height / 2 + labelPadding})` ); + // iconShape.attr( + // 'transform', + // `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})` + // ); - iconShape.attr( - 'transform', - `translate(${0},${ - topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2 - })` - ); + if (stylesMap.get('stroke')) { + iconElem.selectAll('path').attr('style', `fill: ${stylesMap.get('stroke')}`); + } - updateNodeBounds(node, outerShape); + if (stylesMap.get('fill')) { + iconShape.selectAll('path').attr('style', `stroke: ${stylesMap.get('fill')}`); + } + + iconShape.attr('class', 'icon-neo'); + + updateNodeBounds(node, iconShape); node.calcIntersect = function (bounds: Bounds, point: Point) { // TODO: Implement intersect for this shape @@ -113,39 +133,39 @@ export async function iconRounded( node.intersect = function (point) { log.info('iconSquare intersect', node, point); - if (!node.label) { - return intersect.rect(node, point); - } - const dx = node.x ?? 0; - const dy = node.y ?? 0; - const nodeHeight = node.height ?? 0; - let points = []; - if (topLabel) { - points = [ - { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 }, - { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 }, - { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - { x: dx + width / 2, y: dy + nodeHeight / 2 }, - { x: dx - width / 2, y: dy + nodeHeight / 2 }, - { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - ]; - } else { - points = [ - { x: dx - width / 2, y: dy - nodeHeight / 2 }, - { x: dx + width / 2, y: dy - nodeHeight / 2 }, - { x: dx + width / 2, y: dy - nodeHeight / 2 + height }, - { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height }, - { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 }, - { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 }, - { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height }, - { x: dx - width / 2, y: dy - nodeHeight / 2 + height }, - ]; - } + // if (!node.label) { + return intersect.rect(node, point); + // } + // const dx = node.x ?? 0; + // const dy = node.y ?? 0; + // const nodeHeight = node.height ?? 0; + // let points = []; + // if (topLabel) { + // points = [ + // { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 }, + // { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 }, + // { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // { x: dx + width / 2, y: dy + nodeHeight / 2 }, + // { x: dx - width / 2, y: dy + nodeHeight / 2 }, + // { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // ]; + // } else { + // points = [ + // { x: dx - width / 2, y: dy - nodeHeight / 2 }, + // { x: dx + width / 2, y: dy - nodeHeight / 2 }, + // { x: dx + width / 2, y: dy - nodeHeight / 2 + height }, + // { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height }, + // { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 }, + // { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 }, + // { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height }, + // { x: dx - width / 2, y: dy - nodeHeight / 2 + height }, + // ]; + // } - const pos = intersect.polygon(node, points, point); - return pos; + // const pos = intersect.polygon(node, points, point); + // return pos; }; return shapeSvg; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconSquare.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconSquare.ts index 52d4e657d..eb1544651 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconSquare.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/iconSquare.ts @@ -16,29 +16,46 @@ export async function iconSquare( ) { const { labelStyles } = styles2String(node); node.labelStyle = labelStyles; + const defaultWidth = flowchart?.wrappingWidth; + const labelPadding = node.label ? 8 : 0; + const padding = node.height ? node.height * 0.05 : 15; const assetHeight = node.assetHeight ?? 48; const assetWidth = node.assetWidth ?? 48; - const iconSize = Math.max(assetHeight, assetWidth); - const defaultWidth = flowchart?.wrappingWidth; - node.width = Math.max(iconSize, defaultWidth ?? 0); - const { shapeSvg, bbox, halfPadding, label } = await labelHelper( - parent, - node, - 'icon-shape default' - ); + let iconSize = Math.max(assetHeight, assetWidth); + let height = iconSize + padding * 2; + let width = iconSize + padding * 2; + let adjustDimensions = false; + if (node.width || node.height) { + adjustDimensions = true; + node.width = (node?.width ?? 10) - labelPadding * 2; + node.height = (node?.height ?? 10) - labelPadding * 2; + width = node.width; + height = node.height; + } else { + node.width = Math.max(width, defaultWidth ?? 0); + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'icon-shape default'); const topLabel = node.pos === 't'; - const height = iconSize + halfPadding * 2; - const width = iconSize + halfPadding * 2; + // node.width = Math.max(iconSize, defaultWidth ?? 0); + + if (adjustDimensions) { + node.width = node.width + labelPadding * 2; + node.height = (node.height ?? 10) + labelPadding * 2; + width = node.width; + height = node.height; + iconSize = Math.max(node.width - padding * 2, node.height - padding * 2); + } + + //const height = iconSize + padding * 2; + //const width = iconSize + padding * 2; const { nodeBorder, mainBkg } = themeVariables; const { stylesMap } = compileStyles(node); const x = -width / 2; const y = -height / 2; - const labelPadding = node.label ? 8 : 0; - // @ts-expect-error -- Passing a D3.Selection seems to work for some reason const rc = rough.svg(shapeSvg); const options = userNodeOverrides(node, {}); @@ -52,58 +69,72 @@ export async function iconSquare( const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 0.1), options); - const outerWidth = Math.max(width, bbox.width); - const outerHeight = height + bbox.height + labelPadding; + // const outerWidth = Math.max(width, bbox.width); + // const outerHeight = height + bbox.height + labelPadding; - const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { - ...options, - fill: 'transparent', - stroke: 'none', - }); + // const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { + // ...options, + // fill: 'transparent', + // stroke: 'none', + // }); - const iconShape = shapeSvg.insert(() => iconNode, ':first-child'); - const outerShape = shapeSvg.insert(() => outerNode); + // const outerShape = shapeSvg.insert(() => outerNode); + const iconElem = shapeSvg.append('g'); if (node.icon) { - const iconElem = shapeSvg.append('g'); iconElem.html( - `${await getIconSVG(node.icon, { - height: iconSize, - width: iconSize, - fallbackPrefix: '', - })}` + `${await getIconSVG(node.icon, { height: iconSize, fallbackPrefix: '' })}` ); const iconBBox = iconElem.node()!.getBBox(); const iconWidth = iconBBox.width; - const iconHeight = iconBBox.height; + // const iconHeight = iconBBox.height; const iconX = iconBBox.x; - const iconY = iconBBox.y; + // const iconY = iconBBox.y; iconElem.attr( 'transform', - `translate(${-iconWidth / 2 - iconX},${ - topLabel - ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY - : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY - })` + `translate(${-iconWidth / 2 - iconX},${topLabel ? -iconSize / 2 : -iconSize / 2})` ); - iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`); + iconElem.attr('style', `color : ${stylesMap.get('stroke') ?? nodeBorder};`); + iconElem + .selectAll('path') + .nodes() + .forEach((path) => { + if (path.getAttribute('fill') === 'currentColor') { + path.setAttribute('class', 'icon'); + } + }); } label.attr( 'transform', - `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${ - topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height - })` + `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -height / 2 - bbox.height - labelPadding : height / 2 + labelPadding})` ); - iconShape.attr( - 'transform', - `translate(${0},${ - topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2 - })` - ); + const iconShape = shapeSvg.insert(() => iconNode, ':first-child'); + // iconShape.attr( + // 'transform', + // `translate(${0},${topLabel ? bbox.height / 2 - labelPadding : -bbox.height / 2 + labelPadding })` + // ); - updateNodeBounds(node, outerShape); + // iconShape.attr( + // 'transform', + // `translate(${-width/2},${topLabel ? -width / 2 : -width / 2 })` + // ); + // rect.attr( + // 'transform', + // `translate(${-width/2},${topLabel ? -width / 2 + labelPadding/2 : -width / 2 + labelPadding/2})` + // ); + if (stylesMap.get('stroke')) { + iconElem.selectAll('path').attr('style', `fill: ${stylesMap.get('stroke')}`); + } + + if (stylesMap.get('fill')) { + iconShape.selectAll('path').attr('style', `stroke: ${stylesMap.get('fill')}`); + } + + iconShape.attr('class', 'icon-neo'); + + updateNodeBounds(node, iconShape); node.calcIntersect = function (bounds: Bounds, point: Point) { // TODO: Implement intersect for this shape @@ -113,39 +144,39 @@ export async function iconSquare( node.intersect = function (point) { log.info('iconSquare intersect', node, point); - if (!node.label) { - return intersect.rect(node, point); - } - const dx = node.x ?? 0; - const dy = node.y ?? 0; - const nodeHeight = node.height ?? 0; - let points = []; - if (topLabel) { - points = [ - { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 }, - { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 }, - { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - { x: dx + width / 2, y: dy + nodeHeight / 2 }, - { x: dx - width / 2, y: dy + nodeHeight / 2 }, - { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - ]; - } else { - points = [ - { x: dx - width / 2, y: dy - nodeHeight / 2 }, - { x: dx + width / 2, y: dy - nodeHeight / 2 }, - { x: dx + width / 2, y: dy - nodeHeight / 2 + height }, - { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height }, - { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 }, - { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 }, - { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height }, - { x: dx - width / 2, y: dy - nodeHeight / 2 + height }, - ]; - } + // if (!node.label) { + return intersect.rect(node, point); + // } + // const dx = node.x ?? 0; + // const dy = node.y ?? 0; + // const nodeHeight = node.height ?? 0; + // let points = []; + // if (topLabel) { + // points = [ + // { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 }, + // { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 }, + // { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // { x: dx + width / 2, y: dy + nodeHeight / 2 }, + // { x: dx - width / 2, y: dy + nodeHeight / 2 }, + // { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // ]; + // } else { + // points = [ + // { x: dx - width / 2, y: dy - nodeHeight / 2 }, + // { x: dx + width / 2, y: dy - nodeHeight / 2 }, + // { x: dx + width / 2, y: dy - nodeHeight / 2 + height }, + // { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height }, + // { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 }, + // { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 }, + // { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height }, + // { x: dx - width / 2, y: dy - nodeHeight / 2 + height }, + // ]; + // } - const pos = intersect.polygon(node, points, point); - return pos; + // const pos = intersect.polygon(node, points, point); + // return pos; }; return shapeSvg; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/imageSquare.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/imageSquare.ts index 25ac92139..64aa144a1 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/imageSquare.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/imageSquare.ts @@ -1,4 +1,3 @@ -import rough from 'roughjs'; import { log } from '../../../logger.js'; import type { Node, ShapeRenderOptions } from '../../types.js'; import intersect from '../intersect/index.js'; @@ -32,29 +31,45 @@ export async function imageSquare( node?.assetWidth ?? imageNaturalWidth ); - const imageWidth = + let imageWidth = node.constraint === 'on' ? node?.assetHeight ? node.assetHeight * node.imageAspectRatio : imageRawWidth : imageRawWidth; - const imageHeight = + let imageHeight = node.constraint === 'on' ? imageWidth / node.imageAspectRatio : (node?.assetHeight ?? imageNaturalHeight); - node.width = Math.max(imageWidth, defaultWidth ?? 0); + // node.width = Math.max(imageWidth, defaultWidth ?? 0); + const labelPadding = node.label ? 8 : 0; + let adjustDimensions = false; + if (node.width || node.height) { + adjustDimensions = true; + node.width = (node?.width ?? 10) - labelPadding * 2; + node.height = (node?.height ?? 10) - labelPadding * 2; + imageWidth = node.width; + imageHeight = node.height; + } else { + node.width = Math.max(imageWidth, defaultWidth ?? 0); + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'image-shape default'); const topLabel = node.pos === 't'; - const x = -imageWidth / 2; - const y = -imageHeight / 2; + if (adjustDimensions) { + node.width = node.width + labelPadding * 2; + node.height = (node.height ?? 10) + labelPadding * 2; + imageWidth = node.width; + imageHeight = node.height; + } - const labelPadding = node.label ? 8 : 0; + // const x = -imageWidth / 2; + // const y = -imageHeight / 2; - // @ts-expect-error -- Passing a D3.Selection seems to work for some reason - const rc = rough.svg(shapeSvg); + // const rc = rough.svg(shapeSvg); const options = userNodeOverrides(node, {}); if (node.look !== 'handDrawn') { @@ -62,19 +77,19 @@ export async function imageSquare( options.fillStyle = 'solid'; } - const imageNode = rc.rectangle(x, y, imageWidth, imageHeight, options); + // const imageNode = rc.rectangle(x, y, imageWidth, imageHeight, options); - const outerWidth = Math.max(imageWidth, bbox.width); - const outerHeight = imageHeight + bbox.height + labelPadding; + // const outerWidth = imageWidth; //Math.max(imageWidth, bbox.width); + // const outerHeight = imageHeight; // + bbox.height + labelPadding; - const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { - ...options, - fill: 'none', - stroke: 'none', - }); + // const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { + // ...options, + // fill: 'none', + // stroke: 'none', + // }); - const iconShape = shapeSvg.insert(() => imageNode, ':first-child'); - const outerShape = shapeSvg.insert(() => outerNode); + // const iconShape = shapeSvg.insert(() => imageNode, ':first-child'); + // const outerShape = shapeSvg.insert(() => outerNode); if (node.img) { const image = shapeSvg.append('image'); @@ -87,27 +102,21 @@ export async function imageSquare( image.attr( 'transform', - `translate(${-imageWidth / 2},${topLabel ? outerHeight / 2 - imageHeight : -outerHeight / 2})` + // `translate(${-imageWidth / 2},${topLabel ? outerHeight / 2 - imageHeight : -outerHeight / 2})` + `translate(${-imageWidth / 2}, ${-imageHeight / 2})` ); + updateNodeBounds(node, image); } label.attr( 'transform', - `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${ - topLabel - ? -imageHeight / 2 - bbox.height / 2 - labelPadding / 2 - : imageHeight / 2 - bbox.height / 2 + labelPadding / 2 - })` + `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -imageHeight / 2 - bbox.height / 2 - 2 * labelPadding : imageHeight / 2 - bbox.height / 2 + 2 * labelPadding})` ); - iconShape.attr( - 'transform', - `translate(${0},${ - topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2 - })` - ); - - updateNodeBounds(node, outerShape); + // iconShape.attr( + // 'transform', + // `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})` + // ); node.calcIntersect = function (bounds: Bounds, point: Point) { // TODO: Implement intersect for this shape @@ -117,39 +126,45 @@ export async function imageSquare( node.intersect = function (point) { log.info('iconSquare intersect', node, point); - if (!node.label) { - return intersect.rect(node, point); - } - const dx = node.x ?? 0; - const dy = node.y ?? 0; - const nodeHeight = node.height ?? 0; - let points = []; - if (topLabel) { - points = [ - { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 }, - { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 }, - { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - { x: dx + imageWidth / 2, y: dy + nodeHeight / 2 }, - { x: dx - imageWidth / 2, y: dy + nodeHeight / 2 }, - { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, - ]; - } else { - points = [ - { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 }, - { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 }, - { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight }, - { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight }, - { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 }, - { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 }, - { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight }, - { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight }, - ]; - } + // if (!node.label) { + return intersect.rect(node, point); + // } + // const dx = node.x ?? 0; + // const dy = node.y ?? 0; + // const nodeHeight = node.height ?? 0; + // let points = []; + // if (topLabel) { + // points = [ + // { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 }, + // { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 }, + // { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // { x: dx + imageWidth / 2, y: dy + nodeHeight / 2 }, + // { x: dx - imageWidth / 2, y: dy + nodeHeight / 2 }, + // { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }, + // ]; + // } else { + // points = [ + // { x: -imageWidth / 2, y: -imageHeight / 2 }, + // { x: -imageWidth / 2, y: imageHeight / 2 }, + // { x: imageWidth / 2, y: imageHeight / 2 }, + // { x: imageWidth / 2, y: -imageHeight / 2 }, + // ]; + // points = [ + // { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 }, + // { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 }, + // { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight }, + // { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight }, + // { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 }, + // { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 }, + // { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight }, + // { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight }, + // ]; + // } - const pos = intersect.polygon(node, points, point); - return pos; + // const pos = intersect.polygon(node, points, point); + // return pos; }; return shapeSvg; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts index 04b9ed51a..98ee41de6 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts @@ -13,10 +13,27 @@ export async function inv_trapezoid( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; - const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); + const nodePadding = node.padding ?? 0; + const labelPaddingY = node.look === 'neo' ? 24 : nodePadding; + const labelPaddingX = node.look === 'neo' ? 9 : 0; + if (node.width || node.height) { + node.width = node?.width ?? 0; + if (node.width < 10) { + node.width = 10; + } + + node.height = node?.height ?? 0; + if (node.height < 10) { + node.height = 10; + } + const _dx = (3 * node.height) / 6; + node.height = node.height - labelPaddingY; + node.width = node.width - 2 * _dx; + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); + const h = (node?.height ? node?.height : bbox.height) + labelPaddingY; + const w = node?.width ? node?.width : bbox.width + labelPaddingX * 2; const points = [ { x: 0, y: 0 }, diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/leanLeft.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/leanLeft.ts index 4942371a9..cafa4ef71 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/leanLeft.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/leanLeft.ts @@ -10,9 +10,28 @@ import type { Bounds, Point } from '../../../types.js'; export async function lean_left(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + const nodePadding = node.padding ?? 0; + const labelPaddingY = node.look === 'neo' ? 24 : nodePadding; + const labelPaddingX = node.look === 'neo' ? 9 : 0; + + if (node.width || node.height) { + node.width = node?.width ?? 0; + if (node.width < 10) { + node.width = 10; + } + + node.height = node?.height ?? 0; + if (node.height < 10) { + node.height = 10; + } + const _dx = (3 * node.height) / 6; + node.height = node.height - labelPaddingY; + node.width = node.width - 2 * _dx; + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0); + const h = (node?.height ? node?.height : bbox.height) + labelPaddingY; + const w = node?.width ? node?.width : bbox.width + labelPaddingX * 2; const points = [ { x: 0, y: 0 }, { x: w + (3 * h) / 6, y: 0 }, diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/leanRight.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/leanRight.ts index 2485c8786..467531d33 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/leanRight.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/leanRight.ts @@ -10,9 +10,30 @@ import type { Bounds, Point } from '../../../types.js'; export async function lean_right(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + const nodePadding = node.padding ?? 0; + const labelPaddingY = node.look === 'neo' ? 24 : nodePadding; + const labelPaddingX = node.look === 'neo' ? 9 : 0; + + if (node.width || node.height) { + node.width = node?.width ?? 0; + if (node.width < 10) { + node.width = 10; + } + + node.height = node?.height ?? 0; + if (node.height < 10) { + node.height = 10; + } + const _dx = (3 * node.height) / 6; + node.height = node.height - labelPaddingY; + node.width = node.width - 2 * _dx; + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0); + + const h = (node?.height ? node?.height : bbox.height) + labelPaddingY; + const w = node?.width ? node?.width : bbox.width + labelPaddingX * 2; + const points = [ { x: (-3 * h) / 6, y: 0 }, { x: w, y: 0 }, diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/lightningBolt.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/lightningBolt.ts index b034421e2..bc529c43d 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/lightningBolt.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/lightningBolt.ts @@ -1,7 +1,7 @@ import { log } from '../../../logger.js'; import { getNodeClasses, updateNodeBounds } from './util.js'; import type { Node } from '../../types.js'; -import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; +import { userNodeOverrides } from './handDrawnShapeStyles.js'; import rough from 'roughjs'; import intersect from '../intersect/index.js'; import { createPathFromPoints } from './util.js'; @@ -18,25 +18,25 @@ function getPoints(width: number, height: number, gapX: number, gapY: number) { ]; } export function lightningBolt(parent: D3Selection, node: Node) { - const { labelStyles, nodeStyles } = styles2String(node); node.label = ''; - node.labelStyle = labelStyles; const shapeSvg = parent .insert('g') .attr('class', getNodeClasses(node)) .attr('id', node.domId ?? node.id); const { cssStyles } = node; - const width = Math.max(35, node?.width ?? 0); - const height = Math.max(35, node?.height ?? 0); - const gap = 7; + + const gapX = Math.max(5, (node.width ?? 0) * 0.1); + const gapY = Math.max(5, (node.height ?? 0) * 0.1); + const width = node?.width ? node?.width : 50; + const height = node?.height ? node?.height : 50; const points = [ { x: width, y: 0 }, - { x: 0, y: height + gap / 2 }, - { x: width - 2 * gap, y: height + gap / 2 }, - { x: 0, y: 2 * height }, - { x: width, y: height - gap / 2 }, - { x: 2 * gap, y: height - gap / 2 }, + { x: 0, y: height / 2 + gapY / 2 }, + { x: width - 4 * gapX, y: height / 2 + gapY / 2 }, + { x: 0, y: height }, + { x: width, y: height / 2 - gapY / 2 }, + { x: 4 * gapX, y: height / 2 - gapY / 2 }, ]; // @ts-expect-error shapeSvg d3 class is incorrect? @@ -52,16 +52,13 @@ export function lightningBolt(parent: D3Selection< const lineNode = rc.path(linePath, options); const lightningBolt = shapeSvg.insert(() => lineNode, ':first-child'); + lightningBolt.attr('class', 'outer-path'); if (cssStyles && node.look !== 'handDrawn') { lightningBolt.selectAll('path').attr('style', cssStyles); } - if (nodeStyles && node.look !== 'handDrawn') { - lightningBolt.selectAll('path').attr('style', nodeStyles); - } - - lightningBolt.attr('transform', `translate(-${width / 2},${-height})`); + lightningBolt.attr('transform', `translate(-${width / 2},${-height / 2})`); updateNodeBounds(node, lightningBolt); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/linedCylinder.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/linedCylinder.ts index fe7c3e940..72738d8b3 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/linedCylinder.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/linedCylinder.ts @@ -57,17 +57,42 @@ export const createInnerCylinderPathD = ( ): string => { return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(' '); }; + +const MIN_HEIGHT = 10; +const MIN_WIDTH = 10; + export async function linedCylinder( parent: D3Selection, node: Node ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 24 : nodePadding; + + if (node.width || node.height) { + const originalWidth = node.width ?? 0; + node.width = (node.width ?? 0) - labelPaddingX; + if (node.width < MIN_WIDTH) { + node.width = MIN_WIDTH; + } + + const rx = originalWidth / 2; + + // based on this width, height is calculated + const ry = rx / (2.5 + originalWidth / 50); + node.height = (node.height ?? 0) - labelPaddingY - ry * 3; + if (node.height < MIN_HEIGHT) { + node.height = MIN_HEIGHT; + } + } const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0), node.width ?? 0); + + const w = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2; const rx = w / 2; const ry = rx / (2.5 + w / 50); - const h = Math.max(bbox.height + ry + (node.padding ?? 0), node.height ?? 0); + const h = (node?.height ? node?.height : bbox.height) + ry + labelPaddingY * 2; const outerOffset = h * 0.1; // 10% of height let cylinder: typeof shapeSvg | D3Selection; @@ -95,7 +120,7 @@ export async function linedCylinder( cylinder = shapeSvg .insert('path', ':first-child') .attr('d', pathData) - .attr('class', 'basic label-container') + .attr('class', 'basic label-container outer-path') .attr('style', handleUndefinedAttr(cssStyles)) .attr('style', nodeStyles); } @@ -106,9 +131,14 @@ export async function linedCylinder( updateNodeBounds(node, cylinder); + // label.attr( + // 'transform', + // `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + ry / 2 - (bbox.y - (bbox.top ?? 0))})` + // ); + label.attr( 'transform', - `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + ry - (bbox.y - (bbox.top ?? 0))})` + `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (labelPaddingY ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})` ); node.calcIntersect = function (bounds: Bounds, point: Point) { diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts index b580568c7..a051a13c8 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts @@ -17,10 +17,28 @@ export async function linedWaveEdgedRect( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + if (node.width || node.height) { + const originalWidth = node.width; + node.width = ((originalWidth ?? 0) * 10) / 11 - labelPaddingX * 2; + if (node.width < 10) { + node.width = 10; + } + const originalHeight = node.height; + + node.height = ((originalHeight ?? 0) * 3) / 4 - labelPaddingY * 2; + //node.height = (node?.height ?? 0) - labelPaddingY * 2; + if (node.height < 10) { + node.height = 10; + } + } const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); - const waveAmplitude = h / 4; + const w = (node?.width ? node?.width : bbox.width) + (labelPaddingX ?? 0) * 2; + const h = (node?.height ? node?.height : bbox.height) + (labelPaddingY ?? 0) * 2; + const waveAmplitude = node.look === 'neo' ? h / 4 : h / 8; const finalH = h + waveAmplitude; const { cssStyles } = node; @@ -58,7 +76,7 @@ export async function linedWaveEdgedRect( const waveEdgeRect = shapeSvg.insert(() => poly, ':first-child'); - waveEdgeRect.attr('class', 'basic label-container'); + waveEdgeRect.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { waveEdgeRect.selectAll('path').attr('style', cssStyles); @@ -71,7 +89,7 @@ export async function linedWaveEdgedRect( waveEdgeRect.attr('transform', `translate(0,${-waveAmplitude / 2})`); label.attr( 'transform', - `translate(${-w / 2 + (node.padding ?? 0) + ((w / 2) * 0.1) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})` + `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))},${-(bbox.height / 2) - waveAmplitude - (bbox.y - (bbox.top ?? 0))})` ); updateNodeBounds(node, waveEdgeRect); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/multiRect.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/multiRect.ts index 4e7b3026a..f96416350 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/multiRect.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/multiRect.ts @@ -1,4 +1,10 @@ -import { labelHelper, getNodeClasses, updateNodeBounds, createPathFromPoints } from './util.js'; +import { + labelHelper, + getNodeClasses, + updateNodeBounds, + createPathFromPoints, + mergePaths, +} from './util.js'; import type { Node } from '../../types.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import rough from 'roughjs'; @@ -9,10 +15,29 @@ import type { Bounds, Point } from '../../../types.js'; export async function multiRect(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + const rectOffset = node.look === 'neo' ? 10 : 5; + + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + if (node.width || node.height) { + node.width = Math.max((node?.width ?? 0) - labelPaddingX * 2 - 2 * rectOffset, 10); + node.height = Math.max((node?.height ?? 0) - labelPaddingY * 2 - 2 * rectOffset, 10); + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); - const rectOffset = 5; + + const totalWidth = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2 + 2 * rectOffset; + const totalHeight = + (node?.height ? node?.height : bbox.height) + labelPaddingY * 2 + 2 * rectOffset; + + const w = totalWidth - 2 * rectOffset; + const h = totalHeight - 2 * rectOffset; + const x = -w / 2; const y = -h / 2; const { cssStyles } = node; @@ -51,14 +76,20 @@ export async function multiRect(parent: D3Selectio } const outerPath = createPathFromPoints(outerPathPoints); - const outerNode = rc.path(outerPath, options); + let outerNode = rc.path(outerPath, options); const innerPath = createPathFromPoints(innerPathPoints); - const innerNode = rc.path(innerPath, { ...options, fill: 'none' }); + let innerNode = rc.path(innerPath, options); - const multiRect = shapeSvg.insert(() => innerNode, ':first-child'); - multiRect.insert(() => outerNode, ':first-child'); + if (node.look !== 'handDrawn') { + outerNode = mergePaths(outerNode); + innerNode = mergePaths(innerNode); + } - multiRect.attr('class', 'basic label-container'); + const multiRect = shapeSvg.insert('g', ':first-child'); + multiRect.insert(() => outerNode); + multiRect.insert(() => innerNode); + + multiRect.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { multiRect.selectAll('path').attr('style', cssStyles); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts index 5e5f71c58..4d44b16f2 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts @@ -4,6 +4,7 @@ import { getNodeClasses, createPathFromPoints, generateFullSineWavePoints, + mergePaths, } from './util.js'; import intersect from '../intersect/index.js'; import type { Node } from '../../types.js'; @@ -19,13 +20,38 @@ export async function multiWaveEdgedRectangle( const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); - const waveAmplitude = h / 4; - const finalH = h + waveAmplitude; + + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + let adjustFinalHeight = true; + + if (node.width || node.height) { + adjustFinalHeight = false; + node.width = (node?.width ?? 0) - labelPaddingX * 2; + if (node.width < 50) { + node.width = 50; + } + + node.height = (node?.height ?? 0) - labelPaddingY * 3; + if (node.height < 50) { + node.height = 50; + } + + // Adjustments for wave amplitude + const waveAmplitude = 30; + const waveMultiplier = 0.3319; + + node.height = Math.round(node.height - labelPaddingY - waveAmplitude * waveMultiplier); + } + + const w = Math.max(bbox.width, node?.width ?? 0) + labelPaddingX * 2; + const h = Math.max(bbox.height, node?.height ?? 0) + labelPaddingY * 3; + const waveAmplitude = node.look === 'neo' ? h / 4 : h / 8; + const finalH = h + (adjustFinalHeight ? waveAmplitude / 2 : -waveAmplitude / 2); const x = -w / 2; const y = -finalH / 2; - const rectOffset = 5; + const rectOffset = 10; const { cssStyles } = node; @@ -74,14 +100,20 @@ export async function multiWaveEdgedRectangle( } const outerPath = createPathFromPoints(outerPathPoints); - const outerNode = rc.path(outerPath, options); + let outerNode = rc.path(outerPath, options); const innerPath = createPathFromPoints(innerPathPoints); - const innerNode = rc.path(innerPath, options); + let innerNode = rc.path(innerPath, options); - const shape = shapeSvg.insert(() => outerNode, ':first-child'); + if (node.look !== 'handDrawn') { + outerNode = mergePaths(outerNode); + innerNode = mergePaths(innerNode); + } + + const shape = shapeSvg.insert('g', ':first-child'); + shape.insert(() => outerNode); shape.insert(() => innerNode); - shape.attr('class', 'basic label-container'); + shape.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { shape.selectAll('path').attr('style', cssStyles); @@ -95,7 +127,7 @@ export async function multiWaveEdgedRectangle( label.attr( 'transform', - `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})` + `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - waveAmplitude - (bbox.y - (bbox.top ?? 0))})` ); updateNodeBounds(node, shape); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/question.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/question.ts index ab8dba522..d6b03ee06 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/question.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/question.ts @@ -20,10 +20,22 @@ export const createDecisionBoxPathD = (x: number, y: number, size: number): stri export async function question(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; - const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); + const padding = (node.padding ?? 0) * 4; + if (node.width || node.height) { + if ((node.width ?? 10) < 10) { + node.width = 10; + } + node.width = (node?.width ?? 0) - padding; - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; + if ((node.height ?? 10) < 10) { + node.height = 10; + } + node.height = (node?.height ?? 0) - padding; + } + + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); + const w = ((node?.width ? node?.width : bbox.width) + padding) / 2; + const h = w; const s = w + h; const points = [ diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts index 016020b92..d61b9da33 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts @@ -12,19 +12,26 @@ export async function rect_left_inv_arrow( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; - const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 21 : (nodePadding ?? 0); + const labelPaddingY = node.look === 'neo' ? 12 : (nodePadding ?? 0); + if (node.width || node.height) { + node.width = (node?.width ?? 10) - labelPaddingX * 2; + node.height = (node?.height ?? 10) - labelPaddingY * 2; + } - const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0); + const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); + const w = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2; + const h = (node?.height ? node?.height : bbox.height) + labelPaddingY * 2; const x = -w / 2; const y = -h / 2; - const notch = y / 2; + const notch = -y / 2; const points = [ - { x: x + notch, y }, - { x: x, y: 0 }, - { x: x + notch, y: -y }, + { x: x, y }, + { x: x + notch, y: 0 }, + { x: x, y: -y }, { x: -x, y: -y }, { x: -x, y }, ]; @@ -44,7 +51,7 @@ export async function rect_left_inv_arrow( const polygon = shapeSvg.insert(() => roughNode, ':first-child'); - polygon.attr('class', 'basic label-container'); + polygon.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { polygon.selectAll('path').attr('style', cssStyles); @@ -53,11 +60,11 @@ export async function rect_left_inv_arrow( polygon.selectAll('path').attr('style', nodeStyles); } - polygon.attr('transform', `translate(${-notch / 2},0)`); + // polygon.attr('transform', `translate(${-notch / 2},0)`); label.attr( 'transform', - `translate(${-notch / 2 - bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})` + `translate(${bbox.x - bbox.width / 2 + notch / 2}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})` ); updateNodeBounds(node, polygon); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/roundedRect.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/roundedRect.ts index 134bcdb6c..b05e4aa07 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/roundedRect.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/roundedRect.ts @@ -1,17 +1,39 @@ import type { Node, RectOptions } from '../../types.js'; import type { D3Selection } from '../../../types.js'; import { drawRect } from './drawRect.js'; +import { getConfig } from '../../../config.js'; export async function roundedRect( parent: D3Selection, node: Node ) { + const { themeVariables } = getConfig(); + const { radius } = themeVariables; + const nodePadding = node.padding ?? 0; + let labelPaddingX = 0; + let labelPaddingY = 0; + let rx = 0; + let ry = 0; + + switch (node.look) { + case 'neo': + labelPaddingX = 16; + labelPaddingY = 12; + rx = ry = radius; + break; + default: + labelPaddingX = nodePadding; + labelPaddingY = nodePadding; + rx = ry = 5; + } + const options = { - rx: 5, - ry: 5, + rx, + ry, + + labelPaddingX, + labelPaddingY, classes: '', - labelPaddingX: (node?.padding || 0) * 1, - labelPaddingY: (node?.padding || 0) * 1, } as RectOptions; return drawRect(parent, node, options); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/shadedProcess.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/shadedProcess.ts index 32c303259..fe7a23a7f 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/shadedProcess.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/shadedProcess.ts @@ -7,18 +7,36 @@ import type { D3Selection } from '../../../types.js'; import { handleUndefinedAttr } from '../../../utils.js'; import type { Bounds, Point } from '../../../types.js'; +/// Width of the frame on the left of the shape +const FRAME_WIDTH = 8; + export async function shadedProcess( parent: D3Selection, node: Node ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; - const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const halfPadding = node?.padding ?? 0; - const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); - const x = -bbox.width / 2 - halfPadding; - const y = -bbox.height / 2 - halfPadding; + + const paddingX = node.look === 'neo' ? 16 : (node.padding ?? 0); + const paddingY = node.look === 'neo' ? 12 : (node.padding ?? 0); + + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (10), + // if so set it to min value + if (node.width || node.height) { + node.width = Math.max((node?.width ?? 0) - paddingX * 2 - FRAME_WIDTH, 10); + node.height = Math.max((node?.height ?? 0) - paddingY * 2, 10); + } + + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); + + const totalWidth = (node?.width ? node?.width : bbox.width) + paddingX * 2 + FRAME_WIDTH; + const totalHeight = (node?.height ? node?.height : bbox.height) + paddingY * 2; + const w = totalWidth - FRAME_WIDTH; + const h = totalHeight; + const x = -(totalWidth - FRAME_WIDTH) / 2; + const y = -totalHeight / 2; const { cssStyles } = node; // @ts-expect-error -- Passing a D3.Selection seems to work for some reason @@ -32,10 +50,10 @@ export async function shadedProcess( const points = [ { x, y }, - { x: x + w + 8, y }, - { x: x + w + 8, y: y + h }, - { x: x - 8, y: y + h }, - { x: x - 8, y: y }, + { x: x + w, y }, + { x: x + w, y: y + h }, + { x: x - FRAME_WIDTH, y: y + h }, + { x: x - FRAME_WIDTH, y: y }, { x, y }, { x, y: y + h }, ]; @@ -47,7 +65,9 @@ export async function shadedProcess( const rect = shapeSvg.insert(() => roughNode, ':first-child'); - rect.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles)); + rect + .attr('class', 'basic label-container outer-path') + .attr('style', handleUndefinedAttr(cssStyles)); if (nodeStyles && node.look !== 'handDrawn') { rect.selectAll('path').attr('style', nodeStyles); @@ -57,11 +77,6 @@ export async function shadedProcess( rect.selectAll('path').attr('style', nodeStyles); } - label.attr( - 'transform', - `translate(${-w / 2 + 4 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})` - ); - updateNodeBounds(node, rect); node.calcIntersect = function (bounds: Bounds, point: Point) { diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/slopedRect.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/slopedRect.ts index 944861af8..b19208e5b 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/slopedRect.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/slopedRect.ts @@ -9,9 +9,26 @@ import type { Bounds, Point } from '../../../types.js'; export async function slopedRect(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + if (node.width || node.height) { + node.width = Math.max((node?.width ?? 0) - labelPaddingX * 2, 10); + node.height = Math.max((node?.height ?? 0) / 1.5 - labelPaddingY * 2, 10); + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); + + const totalWidth = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2; + const totalHeight = ((node?.height ? node?.height : bbox.height) + labelPaddingY * 2) * 1.5; + + const w = totalWidth; + const h = totalHeight / 1.5; const x = -w / 2; const y = -h / 2; @@ -37,7 +54,7 @@ export async function slopedRect(parent: D3Selecti const shapeNode = rc.path(pathData, options); const polygon = shapeSvg.insert(() => shapeNode, ':first-child'); - polygon.attr('class', 'basic label-container'); + polygon.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { polygon.selectChildren('path').attr('style', cssStyles); @@ -50,7 +67,7 @@ export async function slopedRect(parent: D3Selecti polygon.attr('transform', `translate(0, ${h / 4})`); label.attr( 'transform', - `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h / 4 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})` + `translate(${-w / 2 + (labelPaddingX ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h / 4 + (labelPaddingY ?? 0) - (bbox.y - (bbox.top ?? 0))})` ); updateNodeBounds(node, polygon); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/squareRect.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/squareRect.ts index af72a798f..8199bffda 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/squareRect.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/squareRect.ts @@ -3,12 +3,16 @@ import type { D3Selection } from '../../../types.js'; import { drawRect } from './drawRect.js'; export async function squareRect(parent: D3Selection, node: Node) { + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding * 2; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + const options = { rx: 0, ry: 0, classes: '', - labelPaddingX: (node?.padding || 0) * 2, - labelPaddingY: (node?.padding || 0) * 1, + labelPaddingX, + labelPaddingY, } as RectOptions; return drawRect(parent, node, options); } diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/stadium.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/stadium.ts index af399504a..0abab6de7 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/stadium.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/stadium.ts @@ -56,10 +56,31 @@ export const createStadiumPathD = ( export async function stadium(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 20 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + if (node.width || node.height) { + node.width = (node?.width ?? 0) - labelPaddingX * 2; + if (node.width < 10) { + node.width = 10; + } + + node.height = (node?.height ?? 0) - labelPaddingY * 2; + if (node.height < 10) { + node.height = 10; + } + } const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const h = bbox.height + node.padding; - const w = bbox.width + h / 4 + node.padding; + // const h = Math.max(bbox.height, node?.height || 0) + labelPaddingY; + // const w = Math.max(bbox.width + h / 4, node?.width || 0, 150) + labelPaddingX; + + const w = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2; + const h = (node?.height ? node?.height : bbox.height) + labelPaddingY * 2; let rect; const { cssStyles } = node; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/state.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/state.ts index 821195e64..5ab6aaa61 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/state.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/state.ts @@ -4,8 +4,8 @@ import { drawRect } from './drawRect.js'; export async function state(parent: D3Selection, node: Node) { const options = { - rx: 5, - ry: 5, + rx: node.look === 'neo' ? 3 : 5, + ry: node.look === 'neo' ? 3 : 5, classes: 'flowchart-node', } as RectOptions; return drawRect(parent, node, options); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/stateEnd.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/stateEnd.ts index dc7abc8c3..3a2ffb8da 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/stateEnd.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/stateEnd.ts @@ -9,16 +9,39 @@ import type { Bounds, Point } from '../../../types.js'; export function stateEnd( parent: D3Selection, node: Node, - { config: { themeVariables } }: ShapeRenderOptions + { config: { themeVariables, theme } }: ShapeRenderOptions ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; const { cssStyles } = node; const { lineColor, stateBorder, nodeBorder } = themeVariables; + + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + if (node.width || node.height) { + if ((node.width ?? 0) < 14) { + node.width = 14; + } + + if ((node.height ?? 0) < 14) { + node.height = 14; + } + } + + if (!node.width) { + node.width = 14; + } + + if (!node.height) { + node.width = 14; + } + const shapeSvg = parent .insert('g') .attr('class', 'node default') - .attr('id', node.domId || node.id); + .attr('id', node.domId ?? node.id); // @ts-ignore TODO: Fix rough typings const rc = rough.svg(shapeSvg); @@ -29,13 +52,14 @@ export function stateEnd( options.fillStyle = 'solid'; } - const roughNode = rc.circle(0, 0, 14, { + const roughNode = rc.circle(0, 0, node.width, { ...options, stroke: lineColor, strokeWidth: 2, }); const innerFill = stateBorder ?? nodeBorder; - const roughInnerNode = rc.circle(0, 0, 5, { + const innerNodeRadius = ((node.width ?? 0) * 5) / 14; + const roughInnerNode = rc.circle(0, 0, innerNodeRadius, { ...options, fill: innerFill, stroke: innerFill, @@ -45,6 +69,10 @@ export function stateEnd( const circle = shapeSvg.insert(() => roughNode, ':first-child'); circle.insert(() => roughInnerNode); + if (node.look !== 'handDrawn') { + circle.attr('class', 'outer-path'); + } + if (cssStyles) { circle.selectAll('path').attr('style', cssStyles); } @@ -53,6 +81,10 @@ export function stateEnd( circle.selectAll('path').attr('style', nodeStyles); } + if (node.width < 25 && theme?.includes('redux') && node.look !== 'handDrawn') { + circle.attr('style', 'filter:url(#drop-shadow-small)'); + } + updateNodeBounds(node, circle); node.calcIntersect = function (bounds: Bounds, point: Point) { @@ -62,7 +94,7 @@ export function stateEnd( }; node.intersect = function (point) { - return intersect.circle(node, 7, point); + return intersect.circle(node, (node.width ?? 0) / 2, point); }; return shapeSvg; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/stateStart.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/stateStart.ts index 130ce9976..07b5d19e0 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/stateStart.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/stateStart.ts @@ -9,10 +9,32 @@ import type { Bounds, Point } from '../../../types.js'; export function stateStart( parent: D3Selection, node: Node, - { config: { themeVariables } }: ShapeRenderOptions + { config: { themeVariables, theme } }: ShapeRenderOptions ) { const { lineColor } = themeVariables; + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + if (node.width || node.height) { + if ((node.width ?? 0) < 14) { + node.width = 14; + } + + if ((node.height ?? 0) < 14) { + node.height = 14; + } + } + + if (!node.width) { + node.width = 14; + } + + if (!node.height) { + node.width = 14; + } + const shapeSvg = parent .insert('g') .attr('class', 'node default') @@ -22,14 +44,27 @@ export function stateStart( if (node.look === 'handDrawn') { // @ts-ignore TODO: Fix rough typings const rc = rough.svg(shapeSvg); - const roughNode = rc.circle(0, 0, 14, solidStateFill(lineColor)); + const roughNode = rc.circle(0, 0, node.width, solidStateFill(lineColor)); + // @ts-ignore TODO: Fix typings circle = shapeSvg.insert(() => roughNode); // center the circle around its coordinate - circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14); + circle + .attr('class', 'state-start') + .attr('r', (node.width ?? 7) / 2) + .attr('width', node.width ?? 14) + .attr('height', node.height ?? 14); } else { circle = shapeSvg.insert('circle', ':first-child'); // center the circle around its coordinate - circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14); + circle + .attr('class', 'state-start') + .attr('r', (node.width ?? 7) / 2) + .attr('width', node.width ?? 14) + .attr('height', node.height ?? 14); + } + + if (node.width < 25 && theme?.includes('redux') && node.look !== 'handDrawn') { + circle.attr('style', 'filter:url(#drop-shadow-small)'); } updateNodeBounds(node, circle); @@ -41,7 +76,7 @@ export function stateStart( }; node.intersect = function (point) { - return intersect.circle(node, 7, point); + return intersect.circle(node, (node.width ?? 7) / 2, point); }; return shapeSvg; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/subroutine.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/subroutine.ts index dedd2e24f..a426156b5 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/subroutine.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/subroutine.ts @@ -34,15 +34,35 @@ export const createSubroutinePathD = ( ].join(' '); }; +// width of the frame on the left and right side of the shape +const FRAME_WIDTH = 8; + export async function subroutine(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + + const nodePadding = node?.padding ?? 8; + const labelPaddingX = node.look === 'neo' ? 28 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + if (node.width || node.height) { + node.width = Math.max((node?.width ?? 0) - labelPaddingX - 2 * FRAME_WIDTH, 10); + node.height = Math.max((node?.height ?? 0) - labelPaddingY, 10); + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const halfPadding = (node?.padding || 0) / 2; - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const x = -bbox.width / 2 - halfPadding; - const y = -bbox.height / 2 - halfPadding; + + const totalWidth = (node?.width ? node?.width : bbox.width) + 2 * FRAME_WIDTH + labelPaddingX; + const totalHeight = (node?.height ? node?.height : bbox.height) + labelPaddingY; + + const w = totalWidth - 2 * FRAME_WIDTH; + const h = totalHeight; + const x = -totalWidth / 2; + const y = -totalHeight / 2; const points = [ { x: 0, y: 0 }, @@ -50,11 +70,11 @@ export async function subroutine(parent: D3Selecti { x: w, y: -h }, { x: 0, y: -h }, { x: 0, y: 0 }, - { x: -8, y: 0 }, - { x: w + 8, y: 0 }, - { x: w + 8, y: -h }, - { x: -8, y: -h }, - { x: -8, y: 0 }, + { x: -FRAME_WIDTH, y: 0 }, + { x: w + FRAME_WIDTH, y: 0 }, + { x: w + FRAME_WIDTH, y: -h }, + { x: -FRAME_WIDTH, y: -h }, + { x: -FRAME_WIDTH, y: 0 }, ]; if (node.look === 'handDrawn') { @@ -62,15 +82,19 @@ export async function subroutine(parent: D3Selecti const rc = rough.svg(shapeSvg); const options = userNodeOverrides(node, {}); - const roughNode = rc.rectangle(x - 8, y, w + 16, h, options); + const roughNode = rc.rectangle(x - FRAME_WIDTH, y, w + 2 * FRAME_WIDTH, h, options); const l1 = rc.line(x, y, x, y + h, options); const l2 = rc.line(x + w, y, x + w, y + h, options); - shapeSvg.insert(() => l1, ':first-child'); - shapeSvg.insert(() => l2, ':first-child'); + const l1El = shapeSvg.insert(() => l1, ':first-child'); + const l2El = shapeSvg.insert(() => l2, ':first-child'); + l1El.attr('class', 'neo-line'); + l2El.attr('class', 'neo-line'); const rect = shapeSvg.insert(() => roughNode, ':first-child'); const { cssStyles } = node; - rect.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles)); + rect + .attr('class', 'basic label-container outer-path') + .attr('style', handleUndefinedAttr(cssStyles)); updateNodeBounds(node, rect); } else { const el = insertPolygonShape(shapeSvg, w, h, points); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/taggedRect.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/taggedRect.ts index 7c3166104..8f9c0e43d 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/taggedRect.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/taggedRect.ts @@ -6,16 +6,41 @@ import intersect from '../intersect/index.js'; import type { D3Selection } from '../../../types.js'; import type { Bounds, Point } from '../../../types.js'; +/// The width/height of the tag in comparison to the height of the node +const TAG_RATIO = 0.2; + export async function taggedRect(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + if (node.width || node.height) { + node.height = Math.max((node?.height ?? 0) - labelPaddingY * 2, 10); + node.width = Math.max( + (node?.width ?? 0) - labelPaddingX * 2 - TAG_RATIO * (node.height + labelPaddingY * 2), + 10 + ); + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); + + const totalHeight = (node?.height ? node?.height : bbox.height) + labelPaddingY * 2; + const tagWidth = TAG_RATIO * totalHeight; + const tagHeight = TAG_RATIO * totalHeight; + const totalWidth = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2 + tagWidth; + + const w = totalWidth - tagWidth; + const h = totalHeight; const x = -w / 2; const y = -h / 2; - const tagWidth = 0.2 * h; - const tagHeight = 0.2 * h; + const { cssStyles } = node; // @ts-expect-error -- Passing a D3.Selection seems to work for some reason @@ -49,7 +74,7 @@ export async function taggedRect(parent: D3Selecti const taggedRect = shapeSvg.insert(() => tagNode, ':first-child'); taggedRect.insert(() => rectNode, ':first-child'); - taggedRect.attr('class', 'basic label-container'); + taggedRect.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { taggedRect.selectAll('path').attr('style', cssStyles); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts index 3804c1580..2df3c26f2 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts @@ -18,15 +18,39 @@ export async function taggedWaveEdgedRectangle( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + + let adjustFinalHeight = true; + if (node.width || node.height) { + adjustFinalHeight = false; + node.width = (node?.width ?? 0) - labelPaddingX * 2; + if (node.width < 10) { + node.width = 10; + } + + node.height = (node?.height ?? 0) - labelPaddingY * 2; + if (node.height < 10) { + node.height = 10; + } + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); - const waveAmplitude = h / 4; + const w = (node?.width ? node?.width : bbox.width) + (labelPaddingX ?? 0) * 2; + const h = (node?.height ? node?.height : bbox.height) + (labelPaddingY ?? 0) * 2; + const waveAmplitude = node.look === 'neo' ? h / 4 : h / 8; const tagWidth = 0.2 * w; const tagHeight = 0.2 * h; - const finalH = h + waveAmplitude; + const finalH = h + (adjustFinalHeight ? waveAmplitude : -waveAmplitude); const { cssStyles } = node; + // To maintain minimum width + const minWidth = 14; + const widthDif = minWidth - w; + const extraW = widthDif > 0 ? widthDif / 2 : 0; + // @ts-expect-error -- Passing a D3.Selection seems to work for some reason const rc = rough.svg(shapeSvg); const options = userNodeOverrides(node, {}); @@ -37,27 +61,26 @@ export async function taggedWaveEdgedRectangle( } const points = [ - { x: -w / 2 - (w / 2) * 0.1, y: finalH / 2 }, + { x: -w / 2 - extraW, y: finalH / 2 }, ...generateFullSineWavePoints( - -w / 2 - (w / 2) * 0.1, + -w / 2 - extraW, finalH / 2, - w / 2 + (w / 2) * 0.1, + w / 2 + extraW, finalH / 2, waveAmplitude, 0.8 ), - - { x: w / 2 + (w / 2) * 0.1, y: -finalH / 2 }, - { x: -w / 2 - (w / 2) * 0.1, y: -finalH / 2 }, + { x: w / 2 + extraW, y: -finalH / 2 }, + { x: -w / 2 - extraW, y: -finalH / 2 }, ]; - const x = -w / 2 + (w / 2) * 0.1; - const y = -finalH / 2 - tagHeight * 0.4; + const x = -w / 2; + const y = !adjustFinalHeight ? -finalH / 2 - 1.6 * tagHeight : -finalH / 2 - 0.4 * tagHeight; const tagPoints = [ - { x: x + w - tagWidth, y: (y + h) * 1.4 }, - { x: x + w, y: y + h - tagHeight }, - { x: x + w, y: (y + h) * 0.9 }, + { x: x + w - extraW - tagWidth, y: (y + h) * 1.4 }, + { x: x + w - extraW, y: y + h - tagHeight }, + { x: x + w - extraW, y: (y + h) * 0.9 }, ...generateFullSineWavePoints( x + w, (y + h) * 1.3, @@ -80,7 +103,7 @@ export async function taggedWaveEdgedRectangle( const waveEdgeRect = shapeSvg.insert(() => taggedWaveEdgeRectNode, ':first-child'); waveEdgeRect.insert(() => waveEdgeRectNode, ':first-child'); - waveEdgeRect.attr('class', 'basic label-container'); + waveEdgeRect.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { waveEdgeRect.selectAll('path').attr('style', cssStyles); @@ -93,7 +116,7 @@ export async function taggedWaveEdgedRectangle( waveEdgeRect.attr('transform', `translate(0,${-waveAmplitude / 2})`); label.attr( 'transform', - `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})` + `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - waveAmplitude - (bbox.y - (bbox.top ?? 0))})` ); updateNodeBounds(node, waveEdgeRect); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/text.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/text.ts index 298bb6ecf..428888c3a 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/text.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/text.ts @@ -11,8 +11,11 @@ export async function text(parent: D3Selection, const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const totalWidth = Math.max(bbox.width + node.padding, node?.width || 0); - const totalHeight = Math.max(bbox.height + node.padding, node?.height || 0); + // width > labelWidth + + // labelWidth > width + const totalWidth = node?.width ? node?.width : bbox.width; + const totalHeight = node?.height ? node?.height : bbox.height; const x = -totalWidth / 2; const y = -totalHeight / 2; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts index eaa278706..d183fa37d 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts @@ -52,22 +52,38 @@ export const createInnerCylinderPathD = ( return [`M${x + width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 0,${height}`].join(' '); }; +const MIN_HEIGHT = 5; +const MIN_WIDTH = 10; + export async function tiltedCylinder( parent: D3Selection, node: Node ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; - const { shapeSvg, bbox, label, halfPadding } = await labelHelper( - parent, - node, - getNodeClasses(node) - ); - const labelPadding = node.look === 'neo' ? halfPadding * 2 : halfPadding; - const h = bbox.height + labelPadding; + const nodePadding = node.padding ?? 0; + const labelPadding = node.look === 'neo' ? 12 : nodePadding / 2; + if (node.width || node.height) { + const originalHeight = node.height ?? 0; + node.height = (node.height ?? 0) - labelPadding; + if (node.height < MIN_HEIGHT) { + node.height = MIN_HEIGHT; + } + const ry = originalHeight / 2; + // based on this height, width is calculated + const rx = ry / (2.5 + originalHeight / 50); + + node.width = (node.width ?? 0) - labelPadding - rx * 3; + if (node.width < MIN_WIDTH) { + node.width = MIN_WIDTH; + } + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); + + const h = (node.height ? node.height : bbox.height) + labelPadding; const ry = h / 2; const rx = ry / (2.5 + h / 50); - const w = bbox.width + rx + labelPadding; + const w = (node.width ? node.width : bbox.width) + rx + labelPadding; const { cssStyles } = node; let cylinder: D3Selection | D3Selection; @@ -93,7 +109,7 @@ export async function tiltedCylinder( .attr('class', 'basic label-container') .attr('style', handleUndefinedAttr(cssStyles)) .attr('style', nodeStyles); - cylinder.attr('class', 'basic label-container'); + cylinder.attr('class', 'basic label-container outer-path'); if (cssStyles) { cylinder.selectAll('path').attr('style', cssStyles); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/trapezoid.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/trapezoid.ts index 711d6f3f4..a972ecf87 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/trapezoid.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/trapezoid.ts @@ -10,10 +10,28 @@ import type { Bounds, Point } from '../../../types.js'; export async function trapezoid(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; - const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); + const nodePadding = node.padding ?? 0; + const labelPaddingY = node.look === 'neo' ? 24 : nodePadding; + const labelPaddingX = node.look === 'neo' ? 9 : 0; + + if (node.width || node.height) { + node.width = node?.width ?? 0; + if (node.width < 10) { + node.width = 10; + } + + node.height = node?.height ?? 0; + if (node.height < 10) { + node.height = 10; + } + const _dx = (3 * node.height) / 6; + node.height = node.height - labelPaddingY; + node.width = node.width - 2 * _dx; + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); + const h = (node?.height ? node?.height : bbox.height) + labelPaddingY; + const w = node?.width ? node?.width : bbox.width + labelPaddingX * 2; - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; const points = [ { x: (-3 * h) / 6, y: 0 }, { x: w + (3 * h) / 6, y: 0 }, diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts index fdcae4195..4c197c220 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts @@ -12,11 +12,28 @@ export async function trapezoidalPentagon( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + const minWidth = 15, + minHeight = 5; + if (node.width || node.height) { + node.height = (node.height ?? 0) - labelPaddingY * 2; + if (node.height < minHeight) { + node.height = minHeight; + } + + node.width = (node.width ?? 0) - labelPaddingX * 2; + if (node.width < minWidth) { + node.width = minWidth; + } + } + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const minWidth = 60, - minHeight = 20; - const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); + + const w = (node?.width ? node?.width : Math.max(minWidth, bbox.width)) + (labelPaddingX ?? 0) * 2; + const h = + (node?.height ? node?.height : Math.max(minHeight, bbox.height)) + (labelPaddingY ?? 0) * 2; const { cssStyles } = node; // @ts-expect-error -- Passing a D3.Selection seems to work for some reason @@ -41,7 +58,7 @@ export async function trapezoidalPentagon( const shapeNode = rc.path(pathData, options); const polygon = shapeSvg.insert(() => shapeNode, ':first-child'); - polygon.attr('class', 'basic label-container'); + polygon.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { polygon.selectChildren('path').attr('style', cssStyles); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/triangle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/triangle.ts index a0b831a92..55cb7c20d 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/triangle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/triangle.ts @@ -10,16 +10,30 @@ import { getConfig } from '../../../diagram-api/diagramAPI.js'; import type { D3Selection } from '../../../types.js'; import type { Bounds, Point } from '../../../types.js'; +const MIN_HEIGHT = 10; +const MIN_WIDTH = 10; + export async function triangle(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? nodePadding * 2 : nodePadding; + if (node.width || node.height) { + node.width = ((node?.width ?? 0) - labelPaddingX) / 2; + if (node.width < MIN_WIDTH) { + node.width = MIN_WIDTH; + } + node.height = node?.height ?? 0; + if (node.height < MIN_HEIGHT) { + node.height = MIN_HEIGHT; + } + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); const useHtmlLabels = evaluate(getConfig().flowchart?.htmlLabels); - - const w = bbox.width + (node.padding ?? 0); - const h = w + bbox.height; - - const tw = w + bbox.height; + const w = (node?.width ? node?.width : bbox.width) + labelPaddingX; + const h = node?.height ? node?.height : w + bbox.height; + const tw = h; const points = [ { x: 0, y: 0 }, { x: tw, y: 0 }, @@ -40,7 +54,8 @@ export async function triangle(parent: D3Selection const polygon = shapeSvg .insert(() => roughNode, ':first-child') - .attr('transform', `translate(${-h / 2}, ${h / 2})`); + .attr('transform', `translate(${-h / 2}, ${h / 2})`) + .attr('class', 'outer-path'); if (cssStyles && node.look !== 'handDrawn') { polygon.selectChildren('path').attr('style', cssStyles); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts index 52471ecc0..b856560c9 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts @@ -4,6 +4,7 @@ import { getConfig } from '../../../diagram-api/diagramAPI.js'; import { select } from 'd3'; import defaultConfig from '../../../defaultConfig.js'; import { evaluate, sanitizeText } from '../../../diagrams/common/common.js'; +import { log } from '../../../logger.js'; import { decodeEntities, handleUndefinedAttr, parseFontSize } from '../../../utils.js'; import type { D3Selection, Point } from '../../../types.js'; @@ -42,7 +43,7 @@ export const labelHelper = async ( const text = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig()), { useHtmlLabels, - width: node.width || getConfig().flowchart?.wrappingWidth, + width: (node.width ?? 0) < 0 ? 0 : node.width || getConfig().flowchart?.wrappingWidth, // @ts-expect-error -- This is currently not used. Should this be `classes` instead? cssClasses: 'markdown-node-label', style: node.labelStyle, @@ -98,9 +99,11 @@ export const labelHelper = async ( ) ); } - bbox = div.getBoundingClientRect(); dv.attr('width', bbox.width); + if (node.height && node.height < bbox.height) { + bbox.height = node.height < 0 ? 0 : node.height; + } dv.attr('height', bbox.height); } @@ -177,6 +180,9 @@ export const updateNodeBounds = ( const bbox = element.node()!.getBBox(); node.width = bbox.width; node.height = bbox.height; + log.debug('updateNodeBounds: #####################################'); + log.debug('updateNodeBounds:', node.id, node.width, node.height); + log.debug('updateNodeBounds: #####################################'); }; /** @@ -280,3 +286,67 @@ export function generateCirclePoints( return points; } + +export function mergePaths(roughElement: SVGElement) { + // Get all paths generated by RoughJS + // eslint-disable-next-line unicorn/prefer-spread + const paths: SVGPathElement[] = Array.from(roughElement.childNodes).filter( + (node): node is SVGPathElement => (node as Element).tagName === 'path' + ); + + // Create a new path element + const mergedPath: SVGPathElement = document.createElementNS('http://www.w3.org/2000/svg', 'path'); + + // Combine all path data + const combinedPathData: string = paths + .map((path) => path.getAttribute('d')) + .filter((d): d is string => d !== null) + .join(' '); + + mergedPath.setAttribute('d', combinedPathData); + + // Find the fill path (usually the second path) + const fillPath = paths.find((path) => path.getAttribute('fill') !== 'none'); + + // Find the stroke path (usually the first path) + const strokePath = paths.find((path) => path.getAttribute('stroke') !== 'none'); + + // Helper function to safely get attribute + const getAttr = (element: SVGPathElement | undefined, attr: string): string | undefined => { + return element?.getAttribute(attr) ?? undefined; + }; + + // Apply the correct styles from respective paths + if (fillPath) { + const fillAttrs = { + fill: getAttr(fillPath, 'fill'), + 'fill-opacity': getAttr(fillPath, 'fill-opacity') ?? '1', + }; + + Object.entries(fillAttrs).forEach(([attr, value]) => { + if (value) { + mergedPath.setAttribute(attr, value); + } + }); + } + + if (strokePath) { + const strokeAttrs = { + stroke: getAttr(strokePath, 'stroke'), + 'stroke-width': getAttr(strokePath, 'stroke-width') ?? '1', + 'stroke-opacity': getAttr(strokePath, 'stroke-opacity') ?? '1', + }; + + Object.entries(strokeAttrs).forEach(([attr, value]) => { + if (value) { + mergedPath.setAttribute(attr, value); + } + }); + } + + // Create a group to hold our merged path + const group: SVGGElement = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + group.appendChild(mergedPath); + + return group; +} diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts index c727a96e8..b0f899731 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts @@ -18,15 +18,34 @@ export async function waveEdgedRectangle( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 12 : nodePadding; + + let adjustFinalHeight = true; + if (node.width || node.height) { + adjustFinalHeight = false; + node.width = (node?.width ?? 0) - labelPaddingX * 2; + if (node.width < 10) { + node.width = 10; + } + + node.height = (node?.height ?? 0) - labelPaddingY * 2; + if (node.height < 10) { + node.height = 10; + } + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); - const waveAmplitude = h / 8; - const finalH = h + waveAmplitude; + const w = (node?.width ? node?.width : bbox.width) + (labelPaddingX ?? 0) * 2; + const h = (node?.height ? node?.height : bbox.height) + (labelPaddingY ?? 0) * 2; + const waveAmplitude = node.look === 'neo' ? h / 4 : h / 8; + const finalH = h + (adjustFinalHeight ? waveAmplitude : -waveAmplitude); const { cssStyles } = node; // To maintain minimum width - const minWidth = 70; + const minWidth = 14; const widthDif = minWidth - w; const extraW = widthDif > 0 ? widthDif / 2 : 0; @@ -58,7 +77,7 @@ export async function waveEdgedRectangle( const waveEdgeRect = shapeSvg.insert(() => waveEdgeRectNode, ':first-child'); - waveEdgeRect.attr('class', 'basic label-container'); + waveEdgeRect.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { waveEdgeRect.selectAll('path').attr('style', cssStyles); @@ -71,7 +90,7 @@ export async function waveEdgedRectangle( waveEdgeRect.attr('transform', `translate(0,${-waveAmplitude / 2})`); label.attr( 'transform', - `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude - (bbox.y - (bbox.top ?? 0))})` + `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - waveAmplitude - (bbox.y - (bbox.top ?? 0))})` ); updateNodeBounds(node, waveEdgeRect); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/waveRectangle.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/waveRectangle.ts index a13d02a8a..09cb628d9 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/waveRectangle.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/waveRectangle.ts @@ -26,29 +26,33 @@ export async function waveRectangle( ) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; - const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); + const nodePadding = node.padding ?? 0; + const labelPaddingX = node.look === 'neo' ? 16 : nodePadding; + const labelPaddingY = node.look === 'neo' ? 20 : nodePadding; - const minWidth = 100; // Minimum width - const minHeight = 50; // Minimum height + if (node.width || node.height) { + node.width = node?.width ?? 0; + if (node.width < 20) { + node.width = 20; + } - const baseWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const baseHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); + node.height = node?.height ?? 0; + if (node.height < 10) { + node.height = 10; + } - const aspectRatio = baseWidth / baseHeight; - - let w = baseWidth; - let h = baseHeight; - - if (w > h * aspectRatio) { - h = w / aspectRatio; - } else { - w = h * aspectRatio; + // Adjust for wave amplitude + const waveAmplitude = Math.min(node.height * 0.2, node.height / 4); + node.height = Math.ceil(node.height - labelPaddingY - waveAmplitude * (20 / 9)); + node.width = node.width - labelPaddingX * 2; } - w = Math.max(w, minWidth); - h = Math.max(h, minHeight); + const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); - const waveAmplitude = Math.min(h * 0.2, h / 4); + const w = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2; + const h = (node?.height ? node?.height : bbox.height) + labelPaddingY; + + const waveAmplitude = h / 8; const finalH = h + waveAmplitude * 2; const { cssStyles } = node; @@ -68,7 +72,7 @@ export async function waveRectangle( const waveRect = shapeSvg.insert(() => waveRectNode, ':first-child'); - waveRect.attr('class', 'basic label-container'); + waveRect.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { waveRect.selectAll('path').attr('style', cssStyles); @@ -78,6 +82,9 @@ export async function waveRectangle( waveRect.selectAll('path').attr('style', nodeStyles); } + node.width = w; + node.height = finalH; + updateNodeBounds(node, waveRect); node.calcIntersect = function (bounds: Bounds, point: Point) { diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/windowPane.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/windowPane.ts index bb25a05c7..eea7364b3 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/windowPane.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/windowPane.ts @@ -15,13 +15,32 @@ function getOutPathPoints(x: number, y: number, w: number, h: number, rectOffset ]; } +/// Width of the frame on the top and left of the shape +const rectOffset = 10; + export async function windowPane(parent: D3Selection, node: Node) { const { labelStyles, nodeStyles } = styles2String(node); node.labelStyle = labelStyles; + + const paddingX = node.look === 'neo' ? 16 : (node.padding ?? 0); + const paddingY = node.look === 'neo' ? 12 : (node.padding ?? 0); + + // If incoming height & width are present, subtract the padding from them + // as labelHelper does not take padding into account + // also check if the width or height is less than minimum default values (50), + // if so set it to min value + if (node.width || node.height) { + node.width = Math.max((node?.width ?? 0) - paddingX * 2 - rectOffset, 10); + node.height = Math.max((node?.height ?? 0) - paddingY * 2 - rectOffset, 10); + } + const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); - const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); - const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); - const rectOffset = 5; + + const totalWidth = (node?.width ? node?.width : bbox.width) + paddingX * 2 + rectOffset; + const totalHeight = (node?.height ? node?.height : bbox.height) + paddingY * 2 + rectOffset; + + const w = totalWidth - rectOffset; + const h = totalHeight - rectOffset; const x = -w / 2; const y = -h / 2; const { cssStyles } = node; @@ -33,8 +52,8 @@ export async function windowPane(parent: D3Selecti const outerPathPoints = getOutPathPoints(x, y, w, h, rectOffset); const path = `M${x - rectOffset},${y - rectOffset} L${x + w},${y - rectOffset} L${x + w},${y + h} L${x - rectOffset},${y + h} L${x - rectOffset},${y - rectOffset} - M${x - rectOffset},${y} L${x + w},${y} - M${x},${y - rectOffset} L${x},${y + h}`; + M${x - rectOffset},${y} L${x + w},${y} L${x + w},${y + h} L${x - rectOffset},${y + h} L${x - rectOffset},${y} + M${x},${y - rectOffset} L${x + w},${y - rectOffset} L${x + w},${y + h} L${x},${y + h} L${x},${y - rectOffset}`; if (node.look !== 'handDrawn') { options.roughness = 0; @@ -46,7 +65,7 @@ export async function windowPane(parent: D3Selecti const windowPane = shapeSvg.insert(() => no, ':first-child'); windowPane.attr('transform', `translate(${rectOffset / 2}, ${rectOffset / 2})`); - windowPane.attr('class', 'basic label-container'); + windowPane.attr('class', 'basic label-container outer-path'); if (cssStyles && node.look !== 'handDrawn') { windowPane.selectAll('path').attr('style', cssStyles); diff --git a/packages/mermaid/src/rendering-util/types.ts b/packages/mermaid/src/rendering-util/types.ts index 8dc3ddf20..6eae0c046 100644 --- a/packages/mermaid/src/rendering-util/types.ts +++ b/packages/mermaid/src/rendering-util/types.ts @@ -98,11 +98,14 @@ export interface Edge { label?: string; classes?: string; style?: string[]; + animate?: boolean; + animation?: 'fast' | 'slow'; // Properties common to both Flowchart and State Diagram edges arrowhead?: string; arrowheadStyle?: string; arrowTypeEnd?: string; arrowTypeStart?: string; + cssCompiledStyles?: string[]; // Flowchart specific properties defaultInterpolate?: string; end?: string; @@ -124,6 +127,8 @@ export interface Edge { pattern?: string; thickness?: 'normal' | 'thick' | 'invisible' | 'dotted'; look?: string; + isUserDefinedId?: boolean; + showPoints?: boolean; } export interface RectOptions { diff --git a/packages/mermaid/src/schemas/config.schema.yaml b/packages/mermaid/src/schemas/config.schema.yaml index e1014e889..9f3d3b2ad 100644 --- a/packages/mermaid/src/schemas/config.schema.yaml +++ b/packages/mermaid/src/schemas/config.schema.yaml @@ -67,10 +67,15 @@ properties: - dark - forest - neutral + - neo + - neo-dark + - redux + - redux-dark + - mc - 'null' # should this be a `null`-type? meta:enum: 'null': Can be set to disable any pre-defined mermaid theme - default: 'default' + default: 'neo' themeVariables: tsType: any themeCSS: @@ -82,7 +87,8 @@ properties: enum: - classic - handDrawn - default: 'classic' + - neo + default: 'neo' handDrawnSeed: description: | Defines the seed to be used when using handDrawn look. This is important for the automated tests as they will always find differences without the seed. The default value is 0 which gives a random seed. @@ -1391,6 +1397,12 @@ $defs: # JSON Schema definition (maybe we should move these to a separate file) radius: type: number default: 5 + curve: + description: | + Defines how mermaid renders curves for flowcharts. + type: string + enum: ['basis', 'linear', 'cardinal', 'rounded'] + default: 'rounded' defaultRenderer: description: | Decides which rendering engine that is to be used for the rendering. @@ -2055,8 +2067,13 @@ $defs: # JSON Schema definition (maybe we should move these to a separate file) description: | Defines how mermaid renders curves for flowcharts. type: string - enum: ['basis', 'linear', 'cardinal'] - default: 'basis' + enum: ['basis', 'linear', 'cardinal', 'rounded'] + default: 'rounded' + edgeDebug: + description: | + Highlights the points in an edge for debugging. + type: boolean + default: false padding: description: | Represents the padding between the labels and the shape diff --git a/packages/mermaid/src/styles.spec.ts b/packages/mermaid/src/styles.spec.ts index 70e9e7ec5..228246ae4 100644 --- a/packages/mermaid/src/styles.spec.ts +++ b/packages/mermaid/src/styles.spec.ts @@ -74,7 +74,7 @@ describe('styles', () => { addStylesForDiagram(diagramType, myTypeGetStylesFunc); - const styles = getStyles(diagramType, '', getConfig().themeVariables); + const styles = getStyles(diagramType, '', getConfig().themeVariables, ''); checkValidStylisCSSStyleSheet(styles); }); @@ -108,7 +108,8 @@ describe('styles', () => { diagramId, '', // @ts-expect-error This will probably be broken until we create a proper Themes type. - themes[themeId].getThemeVariables() + themes[themeId].getThemeVariables(), + '' ); checkValidStylisCSSStyleSheet(styles); diff --git a/packages/mermaid/src/styles.ts b/packages/mermaid/src/styles.ts index 78b514c40..e58ec58a6 100644 --- a/packages/mermaid/src/styles.ts +++ b/packages/mermaid/src/styles.ts @@ -14,7 +14,12 @@ const getStyles = ( errorBkgColor: string; errorTextColor: string; lineColor: string; - } & FlowChartStyleOptions + useGradient: boolean; + dropShadow: string; + primaryBorderColor: string; + compositeTitleBackground: string; + } & FlowChartStyleOptions, + svgId: string ) => { let diagramStyles = ''; if (type in themes && themes[type]) { @@ -27,7 +32,28 @@ const getStyles = ( font-size: ${options.fontSize}; fill: ${options.textColor} } - + @keyframes edge-animation-frame { + from { + stroke-dashoffset: 0; + } + } + @keyframes dash { + to { + stroke-dashoffset: 0; + } + } + & .edge-animation-slow { + stroke-dasharray: 9,5 !important; + stroke-dashoffset: 900; + animation: dash 50s linear infinite; + stroke-linecap: round; + } + & .edge-animation-fast { + stroke-dasharray: 9,5 !important; + stroke-dashoffset: 900; + animation: dash 20s linear infinite; + stroke-linecap: round; + } /* Classes common for multiple diagrams */ & .error-icon { @@ -39,7 +65,7 @@ const getStyles = ( } & .edge-thickness-normal { - stroke-width: 1px; + stroke-width: ${options.strokeWidth}px; } & .edge-thickness-thick { stroke-width: 3.5px @@ -75,6 +101,53 @@ const getStyles = ( } ${diagramStyles} + .node .neo-node { + stroke: ${options.nodeBorder}; + } + + [data-look="neo"].node rect, [data-look="neo"].cluster rect, [data-look="neo"].node polygon { + stroke: ${options.useGradient ? 'url(' + svgId + '-gradient)' : options.nodeBorder}; + filter: ${options.dropShadow}; + } + + + [data-look="neo"].node path { + stroke: ${options.useGradient ? 'url(' + svgId + '-gradient)' : options.nodeBorder}; + } + + [data-look="neo"].node .outer-path { + filter: ${options.dropShadow}; + } + + [data-look="neo"].node .neo-line path { + stroke: ${options.primaryBorderColor}; + filter: none; + } + + [data-look="neo"].node circle{ + stroke: ${options.useGradient ? 'url(' + svgId + '-gradient)' : options.nodeBorder}; + filter: ${options.dropShadow}; + } + + [data-look="neo"].node circle .state-start{ + fill: #000000; + } + + [data-look="neo"].statediagram-cluster rect { + fill: ${options.compositeTitleBackground}; + stroke: ${options.useGradient ? 'url(' + svgId + '-gradient)' : options.nodeBorder}; + stroke-width: 1px; + } + + [data-look="neo"].icon-shape .icon { + fill: ${options.useGradient ? 'url(' + svgId + '-gradient)' : options.nodeBorder}; + filter: ${options.dropShadow}; + } + + [data-look="neo"].icon-shape .icon-neo path { + stroke: ${options.useGradient ? 'url(' + svgId + '-gradient)' : options.nodeBorder}; + filter: ${options.dropShadow}; + } ${userStyles} `; diff --git a/packages/mermaid/src/themes/index.js b/packages/mermaid/src/themes/index.js index 6ffe6274d..3d6efc11e 100644 --- a/packages/mermaid/src/themes/index.js +++ b/packages/mermaid/src/themes/index.js @@ -3,6 +3,11 @@ import { getThemeVariables as darkThemeVariables } from './theme-dark.js'; import { getThemeVariables as defaultThemeVariables } from './theme-default.js'; import { getThemeVariables as forestThemeVariables } from './theme-forest.js'; import { getThemeVariables as neutralThemeVariables } from './theme-neutral.js'; +import { getThemeVariables as neoThemeVariables } from './theme-neo.js'; +import { getThemeVariables as reduxThemeVariables } from './theme-redux.js'; +import { getThemeVariables as reduxDarkThemeVariables } from './theme-redux-dark.js'; +import { getThemeVariables as neoDarkThemeVariables } from './theme-neo-dark.js'; +import { getThemeVariables as mcThemeVariables } from './theme-mc.js'; export default { base: { @@ -20,4 +25,19 @@ export default { neutral: { getThemeVariables: neutralThemeVariables, }, + neo: { + getThemeVariables: neoThemeVariables, + }, + 'neo-dark': { + getThemeVariables: neoDarkThemeVariables, + }, + redux: { + getThemeVariables: reduxThemeVariables, + }, + 'redux-dark': { + getThemeVariables: reduxDarkThemeVariables, + }, + mc: { + getThemeVariables: mcThemeVariables, + }, }; diff --git a/packages/mermaid/src/themes/theme-base.js b/packages/mermaid/src/themes/theme-base.js index 6e572ea5f..1b4285c7d 100644 --- a/packages/mermaid/src/themes/theme-base.js +++ b/packages/mermaid/src/themes/theme-base.js @@ -20,11 +20,14 @@ class Theme { this.noteTextColor = '#333'; this.THEME_COLOR_LIMIT = 12; - + this.radius = 5; + this.strokeWidth = 1; // dark - this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif'; - this.fontSize = '16px'; + this.fontFamily = 'arial, sans-serif'; + this.fontSize = '14px'; + this.useGradient = true; + this.dropShadow = 'drop-shadow( 1px 2px 2px rgba(185,185,185,1))'; } updateColors() { // The || is to make sure that if the variable has been defined by a user override that value is to be used @@ -343,6 +346,9 @@ class Theme { this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven; /* -------------------------------------------------- */ + + this.gradientStart = this.primaryBorderColor; + this.gradientStop = this.secondaryBorderColor; } calculate(overrides) { if (typeof overrides !== 'object') { diff --git a/packages/mermaid/src/themes/theme-dark.js b/packages/mermaid/src/themes/theme-dark.js index cf223d989..8c77fc8f5 100644 --- a/packages/mermaid/src/themes/theme-dark.js +++ b/packages/mermaid/src/themes/theme-dark.js @@ -24,11 +24,13 @@ class Theme { this.border1 = '#ccc'; this.border2 = rgba(255, 255, 255, 0.25); this.arrowheadColor = 'calculated'; - this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif'; - this.fontSize = '16px'; + this.fontFamily = 'arial, sans-serif'; + this.fontSize = '14px'; this.labelBackground = '#181818'; this.textColor = '#ccc'; this.THEME_COLOR_LIMIT = 12; + this.radius = 5; + this.strokeWidth = 1; /* Flowchart variables */ this.nodeBkg = 'calculated'; @@ -96,6 +98,10 @@ class Theme { this.errorBkgColor = '#a44141'; this.errorTextColor = '#ddd'; + this.useGradient = true; + this.gradientStart = this.primaryBorderColor; + this.gradientStop = this.secondaryBorderColor; + this.dropShadow = 'drop-shadow( 1px 2px 2px rgba(185,185,185,1))'; } updateColors() { this.secondBkg = lighten(this.mainBkg, 16); diff --git a/packages/mermaid/src/themes/theme-default.js b/packages/mermaid/src/themes/theme-default.js index e0023758e..c06244888 100644 --- a/packages/mermaid/src/themes/theme-default.js +++ b/packages/mermaid/src/themes/theme-default.js @@ -29,15 +29,17 @@ class Theme { this.mainBkg = '#ECECFF'; this.secondBkg = '#ffffde'; this.lineColor = '#333333'; - this.border1 = '#9370DB'; + this.border1 = '#B8B8FF'; + this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode); this.border2 = '#aaaa33'; this.arrowheadColor = '#333333'; - this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif'; - this.fontSize = '16px'; + this.fontFamily = 'arial, sans-serif'; + this.fontSize = '14px'; this.labelBackground = 'rgba(232,232,232, 0.8)'; this.textColor = '#333'; this.THEME_COLOR_LIMIT = 12; - + this.radius = 5; + this.strokeWidth = 1; /* Flowchart variables */ this.nodeBkg = 'calculated'; @@ -123,6 +125,11 @@ class Theme { this.labelColor = 'black'; this.errorBkgColor = '#552222'; this.errorTextColor = '#552222'; + + this.useGradient = false; + this.gradientStart = this.primaryBorderColor; + this.gradientStop = this.secondaryBorderColor; + this.dropShadow = 'drop-shadow( 1px 2px 2px rgba(185,185,185,1))'; this.updateColors(); } updateColors() { @@ -183,8 +190,7 @@ class Theme { /* Sequence Diagram variables */ - // this.actorBorder = lighten(this.border1, 0.5); - this.actorBorder = lighten(this.border1, 23); + this.actorBorder = this.border1; this.actorBkg = this.mainBkg; this.labelBoxBkgColor = this.actorBkg; this.signalColor = this.textColor; diff --git a/packages/mermaid/src/themes/theme-forest.js b/packages/mermaid/src/themes/theme-forest.js index 97c0682f3..fc246d684 100644 --- a/packages/mermaid/src/themes/theme-forest.js +++ b/packages/mermaid/src/themes/theme-forest.js @@ -18,8 +18,8 @@ class Theme { this.border1 = '#13540c'; this.border2 = '#6eaa49'; this.arrowheadColor = 'green'; - this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif'; - this.fontSize = '16px'; + this.fontFamily = 'arial, sans-serif'; + this.fontSize = '14px'; this.tertiaryColor = lighten('#cde498', 10); this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode); @@ -31,6 +31,8 @@ class Theme { this.lineColor = invert(this.background); this.textColor = invert(this.background); this.THEME_COLOR_LIMIT = 12; + this.radius = 5; + this.strokeWidth = 1; /* Flowchart variables */ this.nodeBkg = 'calculated'; @@ -98,6 +100,11 @@ class Theme { this.errorBkgColor = '#552222'; this.errorTextColor = '#552222'; + + this.useGradient = true; + this.gradientStart = this.primaryBorderColor; + this.gradientStop = this.secondaryBorderColor; + this.dropShadow = 'drop-shadow( 1px 2px 2px rgba(185,185,185,0.5))'; } updateColors() { /* Sequence Diagram variables */ diff --git a/packages/mermaid/src/themes/theme-mc.js b/packages/mermaid/src/themes/theme-mc.js new file mode 100644 index 000000000..b2a080367 --- /dev/null +++ b/packages/mermaid/src/themes/theme-mc.js @@ -0,0 +1,393 @@ +import { darken, lighten, adjust, invert, isDark } from 'khroma'; +import { mkBorder } from './theme-helpers.js'; +import { + oldAttributeBackgroundColorEven, + oldAttributeBackgroundColorOdd, +} from './erDiagram-oldHardcodedValues.js'; + +class Theme { + constructor() { + /** # Base variables */ + /** + * - Background - used to know what the background color is of the diagram. This is used for + * deducing colors for instance line color. Default value is #f4f4f4. + */ + this.background = '#ffffff'; + + this.primaryColor = '#ECECFE'; + this.secondaryColor = '#E9E9F1'; + this.mainBkg = '#ffffff'; + + this.noteBkgColor = '#fff5ad'; + this.noteTextColor = '#333'; + + this.THEME_COLOR_LIMIT = 12; + this.radius = 3; + this.strokeWidth = 1; + this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode); + // dark + + this.fontFamily = 'arial, sans-serif'; + this.fontSize = '14px'; + + // Neo-specific + this.nodeBorder = '#000000'; + this.stateBorder = '#000000'; + this.useGradient = true; + this.gradientStart = '#0042eb'; + this.gradientStop = '#eb0042'; + // this.dropShadow = 'drop-shadow( 1px 2px 2px rgba(185,185,185,1))'; + // this.dropShadow = 'drop-shadow(0px 2px 2px rgba(0, 0, 0, 0.25));'; + this.dropShadow = 'drop-shadow( 0px 1px 2px rgba(0, 0, 0, 0.25));'; + this.tertiaryColor = '#ffffff'; + + /* Architecture Diagram variables */ + this.archEdgeColor = 'calculated'; + this.archEdgeArrowColor = 'calculated'; + this.archEdgeWidth = '3'; + this.archGroupBorderColor = this.primaryBorderColor; + this.archGroupBorderWidth = '2px'; + } + updateColors() { + // The || is to make sure that if the variable has been defined by a user override that value is to be used + + /* Main */ + this.primaryTextColor = this.primaryTextColor || (this.darkMode ? '#eee' : '#333'); // invert(this.primaryColor); + //this.secondaryColor = this.secondaryColor; + this.tertiaryColor = this.tertiaryColor || adjust(this.primaryColor, { h: 180, l: 5 }); + + this.primaryBorderColor = this.primaryBorderColor || '#BCBCFB'; + this.secondaryBorderColor = + this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode); + this.tertiaryBorderColor = + this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode); + this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode); + this.noteBkgColor = this.noteBkgColor || '#fff5ad'; + this.noteTextColor = this.noteTextColor || '#333'; + + this.secondaryTextColor = this.secondaryTextColor || invert(this.secondaryColor); + this.tertiaryTextColor = this.tertiaryTextColor || invert(this.tertiaryColor); + this.lineColor = this.lineColor || invert(this.background); + this.arrowheadColor = this.arrowheadColor || invert(this.background); + this.textColor = this.textColor || this.primaryTextColor; + + // TODO: should this instead default to secondaryBorderColor? + this.border2 = this.border2 || this.tertiaryBorderColor; + + /* Flowchart variables */ + this.nodeBkg = this.nodeBkg || this.primaryColor; + this.mainBkg = this.mainBkg || this.primaryColor; + this.nodeBorder = this.nodeBorder || this.primaryBorderColor; + this.clusterBkg = this.clusterBkg || this.tertiaryColor; + this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor; + this.defaultLinkColor = this.defaultLinkColor || this.lineColor; + this.titleColor = this.titleColor || this.tertiaryTextColor; + this.edgeLabelBackground = + this.edgeLabelBackground || + (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); + this.nodeTextColor = this.nodeTextColor || this.primaryTextColor; + /* Sequence Diagram variables */ + + // this.actorBorder = lighten(this.border1, 0.5); + this.actorBorder = this.actorBorder || this.primaryBorderColor; + this.actorBkg = this.actorBkg || this.mainBkg; + this.actorTextColor = this.actorTextColor || this.primaryTextColor; + this.actorLineColor = this.actorLineColor || this.actorBorder; + this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg; + this.signalColor = this.signalColor || this.textColor; + this.signalTextColor = this.signalTextColor || this.textColor; + this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder; + this.labelTextColor = this.labelTextColor || this.actorTextColor; + this.loopTextColor = this.loopTextColor || this.actorTextColor; + this.activationBorderColor = this.activationBorderColor || darken(this.secondaryColor, 10); + this.activationBkgColor = this.activationBkgColor || this.secondaryColor; + this.sequenceNumberColor = this.sequenceNumberColor || invert(this.lineColor); + + /* Gantt chart variables */ + + this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor; + this.altSectionBkgColor = this.altSectionBkgColor || 'white'; + this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor; + this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor; + this.excludeBkgColor = this.excludeBkgColor || '#eeeeee'; + this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor; + this.taskBkgColor = this.taskBkgColor || this.primaryColor; + this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor; + this.activeTaskBkgColor = this.activeTaskBkgColor || lighten(this.primaryColor, 23); + this.gridColor = this.gridColor || 'lightgrey'; + this.doneTaskBkgColor = this.doneTaskBkgColor || 'lightgrey'; + this.doneTaskBorderColor = this.doneTaskBorderColor || 'grey'; + this.critBorderColor = this.critBorderColor || '#ff8888'; + this.critBkgColor = this.critBkgColor || 'red'; + this.todayLineColor = this.todayLineColor || 'red'; + this.taskTextColor = this.taskTextColor || this.textColor; + this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor; + this.taskTextLightColor = this.taskTextLightColor || this.textColor; + this.taskTextColor = this.taskTextColor || this.primaryTextColor; + this.taskTextDarkColor = this.taskTextDarkColor || this.textColor; + this.taskTextClickableColor = this.taskTextClickableColor || '#003163'; + + /* Architecture Diagram variables */ + this.archEdgeColor = this.lineColor; + this.archEdgeArrowColor = this.lineColor; + + /* Sequence Diagram variables */ + + this.personBorder = this.personBorder || this.primaryBorderColor; + this.personBkg = this.personBkg || this.mainBkg; + + /* state colors */ + this.transitionColor = this.transitionColor || this.lineColor; + this.transitionLabelColor = this.transitionLabelColor || this.textColor; + /* The color of the text tables of the states*/ + this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor; + + this.stateBkg = this.stateBkg || this.mainBkg; + this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg; + this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor; + this.altBackground = this.altBackground || '#f0f0f0'; + this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg; + this.compositeBorder = this.compositeBorder || this.nodeBorder; + this.innerEndBackground = this.nodeBorder; + this.errorBkgColor = this.errorBkgColor || this.tertiaryColor; + this.errorTextColor = this.errorTextColor || this.tertiaryTextColor; + this.transitionColor = this.transitionColor || this.lineColor; + this.specialStateColor = this.lineColor; + + /* Color Scale */ + /* Each color-set will have a background, a foreground and a border color */ + this.cScale0 = this.cScale0 || this.primaryColor; + this.cScale1 = this.cScale1 || this.secondaryColor; + this.cScale2 = this.cScale2 || this.tertiaryColor; + this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 }); + this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 }); + this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 }); + this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 }); + this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 }); + this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210, l: 150 }); + this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 }); + this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 }); + this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 }); + if (this.darkMode) { + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScale' + i] = darken(this['cScale' + i], 75); + } + } else { + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScale' + i] = darken(this['cScale' + i], 25); + } + } + + // Setup the inverted color for the set + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScaleInv' + i] = this['cScaleInv' + i] || invert(this['cScale' + i]); + } + // Setup the peer color for the set, useful for borders + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + if (this.darkMode) { + this['cScalePeer' + i] = this['cScalePeer' + i] || lighten(this['cScale' + i], 10); + } else { + this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 10); + } + } + + // Setup the label color for the set + this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor; + + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor; + } + + const multiplier = this.darkMode ? -4 : -1; + for (let i = 0; i < 5; i++) { + this['surface' + i] = + this['surface' + i] || + adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i * 3) }); + this['surfacePeer' + i] = + this['surfacePeer' + i] || + adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i * 3) }); + } + + /* class */ + this.classText = this.classText || this.textColor; + + /* user-journey */ + this.fillType0 = this.fillType0 || this.primaryColor; + this.fillType1 = this.fillType1 || this.secondaryColor; + this.fillType2 = this.fillType2 || adjust(this.primaryColor, { h: 64 }); + this.fillType3 = this.fillType3 || adjust(this.secondaryColor, { h: 64 }); + this.fillType4 = this.fillType4 || adjust(this.primaryColor, { h: -64 }); + this.fillType5 = this.fillType5 || adjust(this.secondaryColor, { h: -64 }); + this.fillType6 = this.fillType6 || adjust(this.primaryColor, { h: 128 }); + this.fillType7 = this.fillType7 || adjust(this.secondaryColor, { h: 128 }); + + /* pie */ + this.pie1 = this.pie1 || this.primaryColor; + this.pie2 = this.pie2 || this.secondaryColor; + this.pie3 = this.pie3 || this.tertiaryColor; + this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -10 }); + this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -10 }); + this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -10 }); + this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -10 }); + this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 }); + this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 }); + this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -20 }); + this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -20 }); + this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -10 }); + this.pieTitleTextSize = this.pieTitleTextSize || '25px'; + this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor; + this.pieSectionTextSize = this.pieSectionTextSize || '17px'; + this.pieSectionTextColor = this.pieSectionTextColor || this.textColor; + this.pieLegendTextSize = this.pieLegendTextSize || '17px'; + this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; + this.pieStrokeColor = this.pieStrokeColor || 'black'; + this.pieStrokeWidth = this.pieStrokeWidth || '2px'; + this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || '2px'; + this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black'; + this.pieOpacity = this.pieOpacity || '0.7'; + + /* quadrant-graph */ + this.quadrant1Fill = this.quadrant1Fill || this.primaryColor; + this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 }); + this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 }); + this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 }); + this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor; + this.quadrant2TextFill = + this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 }); + this.quadrant3TextFill = + this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 }); + this.quadrant4TextFill = + this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 }); + this.quadrantPointFill = + this.quadrantPointFill || isDark(this.quadrant1Fill) + ? lighten(this.quadrant1Fill) + : darken(this.quadrant1Fill); + this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor; + this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor; + this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor; + this.quadrantInternalBorderStrokeFill = + this.quadrantInternalBorderStrokeFill || this.primaryBorderColor; + this.quadrantExternalBorderStrokeFill = + this.quadrantExternalBorderStrokeFill || this.primaryBorderColor; + this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor; + + /* xychart */ + this.xyChart = { + backgroundColor: this.xyChart?.backgroundColor || this.background, + titleColor: this.xyChart?.titleColor || this.primaryTextColor, + xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor, + xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor, + xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor, + xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor, + yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor, + yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor, + yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor, + yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor, + plotColorPalette: + this.xyChart?.plotColorPalette || + '#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0', + }; + + /* requirement-diagram */ + this.requirementBackground = this.requirementBackground || this.primaryColor; + this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor; + this.requirementBorderSize = this.requirementBorderSize || '1'; + this.requirementTextColor = this.requirementTextColor || this.primaryTextColor; + this.relationColor = this.relationColor || this.lineColor; + this.relationLabelBackground = + this.relationLabelBackground || + (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); + this.relationLabelColor = this.relationLabelColor || this.actorTextColor; + + /* git */ + this.git0 = this.git0 || this.primaryColor; + this.git1 = this.git1 || this.secondaryColor; + this.git2 = this.git2 || this.tertiaryColor; + this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 }); + this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 }); + this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 }); + this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 }); + this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 }); + if (this.darkMode) { + this.git0 = lighten(this.git0, 25); + this.git1 = lighten(this.git1, 25); + this.git2 = lighten(this.git2, 25); + this.git3 = lighten(this.git3, 25); + this.git4 = lighten(this.git4, 25); + this.git5 = lighten(this.git5, 25); + this.git6 = lighten(this.git6, 25); + this.git7 = lighten(this.git7, 25); + } else { + this.git0 = darken(this.git0, 25); + this.git1 = darken(this.git1, 25); + this.git2 = darken(this.git2, 25); + this.git3 = darken(this.git3, 25); + this.git4 = darken(this.git4, 25); + this.git5 = darken(this.git5, 25); + this.git6 = darken(this.git6, 25); + this.git7 = darken(this.git7, 25); + } + this.gitInv0 = this.gitInv0 || invert(this.git0); + this.gitInv1 = this.gitInv1 || invert(this.git1); + this.gitInv2 = this.gitInv2 || invert(this.git2); + this.gitInv3 = this.gitInv3 || invert(this.git3); + this.gitInv4 = this.gitInv4 || invert(this.git4); + this.gitInv5 = this.gitInv5 || invert(this.git5); + this.gitInv6 = this.gitInv6 || invert(this.git6); + this.gitInv7 = this.gitInv7 || invert(this.git7); + this.branchLabelColor = + this.branchLabelColor || (this.darkMode ? 'black' : this.labelTextColor); + this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor; + this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor; + this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor; + this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor; + this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor; + this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor; + this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor; + this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor; + + this.tagLabelColor = this.tagLabelColor || this.primaryTextColor; + this.tagLabelBackground = this.tagLabelBackground || this.primaryColor; + this.tagLabelBorder = this.tagBorder || this.primaryBorderColor; + this.tagLabelFontSize = this.tagLabelFontSize || '10px'; + this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor; + this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor; + this.commitLabelFontSize = this.commitLabelFontSize || '10px'; + + /* -------------------------------------------------- */ + /* EntityRelationship diagrams */ + + this.attributeBackgroundColorOdd = + this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd; + this.attributeBackgroundColorEven = + this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven; + /* -------------------------------------------------- */ + } + calculate(overrides) { + if (typeof overrides !== 'object') { + // Calculate colors form base colors + this.updateColors(); + return; + } + + const keys = Object.keys(overrides); + + // Copy values from overrides, this is mainly for base colors + keys.forEach((k) => { + this[k] = overrides[k]; + }); + + // Calculate colors form base colors + this.updateColors(); + // Copy values from overrides again in case of an override of derived value + keys.forEach((k) => { + this[k] = overrides[k]; + }); + } +} + +export const getThemeVariables = (userOverrides) => { + const theme = new Theme(); + theme.calculate(userOverrides); + return theme; +}; diff --git a/packages/mermaid/src/themes/theme-neo-dark.js b/packages/mermaid/src/themes/theme-neo-dark.js new file mode 100644 index 000000000..380f60609 --- /dev/null +++ b/packages/mermaid/src/themes/theme-neo-dark.js @@ -0,0 +1,407 @@ +import { adjust, darken, invert, isDark, lighten, rgba } from 'khroma'; +import { mkBorder } from './theme-helpers.js'; +import { + oldAttributeBackgroundColorEven, + oldAttributeBackgroundColorOdd, +} from './erDiagram-oldHardcodedValues.js'; + +class Theme { + constructor() { + /** # Base variables */ + /** + * - Background - used to know what the background color is of the diagram. This is used for + * deducing colors for instance line color. Default value is #f4f4f4. + */ + this.background = '#333'; + this.primaryColor = '#1f2020'; + this.secondaryColor = lighten(this.primaryColor, 16); + this.tertiaryColor = adjust(this.primaryColor, { h: -160 }); + this.primaryBorderColor = invert(this.background); + this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode); + this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode); + this.primaryTextColor = invert(this.primaryColor); + this.secondaryTextColor = invert(this.secondaryColor); + this.tertiaryTextColor = invert(this.tertiaryColor); + + this.mainBkg = '#2a2020'; + this.secondBkg = 'calculated'; + this.mainContrastColor = 'lightgrey'; + this.darkTextColor = lighten(invert('#323D47'), 10); + this.border1 = '#ccc'; + this.border2 = rgba(255, 255, 255, 0.25); + this.arrowheadColor = invert(this.background); + this.fontFamily = 'arial, sans-serif'; + this.fontSize = '14px'; + this.labelBackground = '#181818'; + this.textColor = '#ccc'; + this.THEME_COLOR_LIMIT = 12; + this.radius = 3; + this.strokeWidth = 1; + + this.noteBkgColor = '#fff5ad'; + this.noteTextColor = '#333'; + + this.THEME_COLOR_LIMIT = 12; + // dark + this.fontFamily = 'arial, sans-serif'; + this.fontSize = '14px'; + + // Neo-specific + // this.nodeBorder = 'none'; + // this.stateBorder = 'none'; + + this.useGradient = true; + this.gradientStart = '#0042eb'; + this.gradientStop = '#eb0042'; + this.dropShadow = 'drop-shadow( 1px 2px 2px rgba(185,185,185,0.2))'; + + /* Architecture Diagram variables */ + this.archEdgeColor = 'calculated'; + this.archEdgeArrowColor = 'calculated'; + this.archEdgeWidth = '3'; + this.archGroupBorderColor = this.primaryBorderColor; + this.archGroupBorderWidth = '2px'; + } + updateColors() { + // The || is to make sure that if the variable has been defined by a user override that value is to be used + + /* Main */ + this.primaryTextColor = this.primaryTextColor || (this.darkMode ? '#eee' : '#333'); // invert(this.primaryColor); + this.secondaryColor = this.secondaryColor || adjust(this.primaryColor, { h: -120 }); + this.tertiaryColor = this.tertiaryColor || adjust(this.primaryColor, { h: 180, l: 5 }); + + this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode); + this.secondaryBorderColor = + this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode); + this.tertiaryBorderColor = + this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode); + this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode); + this.noteBkgColor = this.noteBkgColor || '#fff5ad'; + this.noteTextColor = this.noteTextColor || '#333'; + + this.secondaryTextColor = this.secondaryTextColor || invert(this.secondaryColor); + this.tertiaryTextColor = this.tertiaryTextColor || invert(this.tertiaryColor); + this.lineColor = this.lineColor || invert(this.background); + this.arrowheadColor = this.arrowheadColor || invert(this.background); + this.textColor = this.textColor || this.primaryTextColor; + + // TODO: should this instead default to secondaryBorderColor? + this.border2 = this.border2 || this.tertiaryBorderColor; + + /* Flowchart variables */ + this.nodeBkg = this.nodeBkg || this.primaryColor; + this.mainBkg = this.mainBkg || this.primaryColor; + this.nodeBorder = this.nodeBorder || this.border1; + this.clusterBkg = this.clusterBkg || this.tertiaryColor; + this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor; + this.defaultLinkColor = this.defaultLinkColor || this.lineColor; + this.titleColor = this.titleColor || this.tertiaryTextColor; + this.edgeLabelBackground = + this.edgeLabelBackground || + (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); + this.nodeTextColor = this.nodeTextColor || this.primaryTextColor; + /* Sequence Diagram variables */ + + // this.actorBorder = lighten(this.border1, 0.5); + this.actorBorder = this.actorBorder || this.primaryBorderColor; + this.actorBkg = this.actorBkg || this.mainBkg; + this.actorTextColor = this.actorTextColor || this.primaryTextColor; + this.actorLineColor = this.actorLineColor || this.actorBorder; + this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg; + this.signalColor = this.signalColor || this.textColor; + this.signalTextColor = this.signalTextColor || this.textColor; + this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder; + this.labelTextColor = this.labelTextColor || this.actorTextColor; + this.loopTextColor = this.loopTextColor || this.actorTextColor; + this.activationBorderColor = this.activationBorderColor || darken(this.secondaryColor, 10); + this.activationBkgColor = this.activationBkgColor || this.secondaryColor; + this.sequenceNumberColor = this.sequenceNumberColor || invert(this.lineColor); + + /* Gantt chart variables */ + + this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor; + this.altSectionBkgColor = this.altSectionBkgColor || 'white'; + this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor; + this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor; + this.excludeBkgColor = this.excludeBkgColor || '#eeeeee'; + this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor; + this.taskBkgColor = this.taskBkgColor || this.primaryColor; + this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor; + this.activeTaskBkgColor = this.activeTaskBkgColor || lighten(this.primaryColor, 23); + this.gridColor = this.gridColor || 'lightgrey'; + this.doneTaskBkgColor = this.doneTaskBkgColor || 'lightgrey'; + this.doneTaskBorderColor = this.doneTaskBorderColor || 'grey'; + this.critBorderColor = this.critBorderColor || '#ff8888'; + this.critBkgColor = this.critBkgColor || 'red'; + this.todayLineColor = this.todayLineColor || 'red'; + this.taskTextColor = this.taskTextColor || this.textColor; + this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor; + this.taskTextLightColor = this.taskTextLightColor || this.textColor; + this.taskTextColor = this.taskTextColor || this.primaryTextColor; + this.taskTextDarkColor = this.taskTextDarkColor || this.textColor; + this.taskTextClickableColor = this.taskTextClickableColor || '#003163'; + + /* Architecture Diagram variables */ + this.archEdgeColor = this.lineColor; + this.archEdgeArrowColor = this.lineColor; + + /* Sequence Diagram variables */ + + this.personBorder = this.personBorder || this.primaryBorderColor; + this.personBkg = this.personBkg || this.mainBkg; + + /* state colors */ + this.transitionColor = this.transitionColor || this.lineColor; + this.transitionLabelColor = this.transitionLabelColor || this.textColor; + /* The color of the text tables of the states*/ + this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor; + + this.stateBkg = this.stateBkg || this.mainBkg; + this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg; + this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor; + this.altBackground = this.altBackground || '#f0f0f0'; + this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg; + this.compositeBorder = this.compositeBorder || this.nodeBorder; + this.innerEndBackground = this.nodeBorder; + this.errorBkgColor = this.errorBkgColor || this.tertiaryColor; + this.errorTextColor = this.errorTextColor || this.tertiaryTextColor; + this.transitionColor = this.transitionColor || this.lineColor; + this.specialStateColor = this.lineColor; + + /* Color Scale */ + /* Each color-set will have a background, a foreground and a border color */ + this.cScale0 = this.cScale0 || this.primaryColor; + this.cScale1 = this.cScale1 || this.secondaryColor; + this.cScale2 = this.cScale2 || this.tertiaryColor; + this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 }); + this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 }); + this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 }); + this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 }); + this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 }); + this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210, l: 150 }); + this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 }); + this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 }); + this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 }); + if (this.darkMode) { + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScale' + i] = darken(this['cScale' + i], 75); + } + } else { + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScale' + i] = darken(this['cScale' + i], 25); + } + } + + // Setup the inverted color for the set + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScaleInv' + i] = this['cScaleInv' + i] || invert(this['cScale' + i]); + } + // Setup the peer color for the set, useful for borders + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + if (this.darkMode) { + this['cScalePeer' + i] = this['cScalePeer' + i] || lighten(this['cScale' + i], 10); + } else { + this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 10); + } + } + + // Setup the label color for the set + this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor; + + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor; + } + + const multiplier = this.darkMode ? -4 : -1; + for (let i = 0; i < 5; i++) { + this['surface' + i] = + this['surface' + i] || + adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i * 3) }); + this['surfacePeer' + i] = + this['surfacePeer' + i] || + adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i * 3) }); + } + + /* class */ + this.classText = this.classText || this.textColor; + + /* user-journey */ + this.fillType0 = this.fillType0 || this.primaryColor; + this.fillType1 = this.fillType1 || this.secondaryColor; + this.fillType2 = this.fillType2 || adjust(this.primaryColor, { h: 64 }); + this.fillType3 = this.fillType3 || adjust(this.secondaryColor, { h: 64 }); + this.fillType4 = this.fillType4 || adjust(this.primaryColor, { h: -64 }); + this.fillType5 = this.fillType5 || adjust(this.secondaryColor, { h: -64 }); + this.fillType6 = this.fillType6 || adjust(this.primaryColor, { h: 128 }); + this.fillType7 = this.fillType7 || adjust(this.secondaryColor, { h: 128 }); + + /* pie */ + this.pie1 = this.pie1 || this.primaryColor; + this.pie2 = this.pie2 || this.secondaryColor; + this.pie3 = this.pie3 || this.tertiaryColor; + this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -10 }); + this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -10 }); + this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -10 }); + this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -10 }); + this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 }); + this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 }); + this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -20 }); + this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -20 }); + this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -10 }); + this.pieTitleTextSize = this.pieTitleTextSize || '25px'; + this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor; + this.pieSectionTextSize = this.pieSectionTextSize || '17px'; + this.pieSectionTextColor = this.pieSectionTextColor || this.textColor; + this.pieLegendTextSize = this.pieLegendTextSize || '17px'; + this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; + this.pieStrokeColor = this.pieStrokeColor || 'black'; + this.pieStrokeWidth = this.pieStrokeWidth || '2px'; + this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || '2px'; + this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black'; + this.pieOpacity = this.pieOpacity || '0.7'; + + /* quadrant-graph */ + this.quadrant1Fill = this.quadrant1Fill || this.primaryColor; + this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 }); + this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 }); + this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 }); + this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor; + this.quadrant2TextFill = + this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 }); + this.quadrant3TextFill = + this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 }); + this.quadrant4TextFill = + this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 }); + this.quadrantPointFill = + this.quadrantPointFill || isDark(this.quadrant1Fill) + ? lighten(this.quadrant1Fill) + : darken(this.quadrant1Fill); + this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor; + this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor; + this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor; + this.quadrantInternalBorderStrokeFill = + this.quadrantInternalBorderStrokeFill || this.primaryBorderColor; + this.quadrantExternalBorderStrokeFill = + this.quadrantExternalBorderStrokeFill || this.primaryBorderColor; + this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor; + + /* xychart */ + this.xyChart = { + backgroundColor: this.xyChart?.backgroundColor || this.background, + titleColor: this.xyChart?.titleColor || this.primaryTextColor, + xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor, + xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor, + xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor, + xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor, + yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor, + yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor, + yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor, + yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor, + plotColorPalette: + this.xyChart?.plotColorPalette || + '#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0', + }; + + /* requirement-diagram */ + this.requirementBackground = this.requirementBackground || this.primaryColor; + this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor; + this.requirementBorderSize = this.requirementBorderSize || '1'; + this.requirementTextColor = this.requirementTextColor || this.primaryTextColor; + this.relationColor = this.relationColor || this.lineColor; + this.relationLabelBackground = + this.relationLabelBackground || + (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); + this.relationLabelColor = this.relationLabelColor || this.actorTextColor; + + /* git */ + this.git0 = this.git0 || this.primaryColor; + this.git1 = this.git1 || this.secondaryColor; + this.git2 = this.git2 || this.tertiaryColor; + this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 }); + this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 }); + this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 }); + this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 }); + this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 }); + if (this.darkMode) { + this.git0 = lighten(this.git0, 25); + this.git1 = lighten(this.git1, 25); + this.git2 = lighten(this.git2, 25); + this.git3 = lighten(this.git3, 25); + this.git4 = lighten(this.git4, 25); + this.git5 = lighten(this.git5, 25); + this.git6 = lighten(this.git6, 25); + this.git7 = lighten(this.git7, 25); + } else { + this.git0 = darken(this.git0, 25); + this.git1 = darken(this.git1, 25); + this.git2 = darken(this.git2, 25); + this.git3 = darken(this.git3, 25); + this.git4 = darken(this.git4, 25); + this.git5 = darken(this.git5, 25); + this.git6 = darken(this.git6, 25); + this.git7 = darken(this.git7, 25); + } + this.gitInv0 = this.gitInv0 || invert(this.git0); + this.gitInv1 = this.gitInv1 || invert(this.git1); + this.gitInv2 = this.gitInv2 || invert(this.git2); + this.gitInv3 = this.gitInv3 || invert(this.git3); + this.gitInv4 = this.gitInv4 || invert(this.git4); + this.gitInv5 = this.gitInv5 || invert(this.git5); + this.gitInv6 = this.gitInv6 || invert(this.git6); + this.gitInv7 = this.gitInv7 || invert(this.git7); + this.branchLabelColor = + this.branchLabelColor || (this.darkMode ? 'black' : this.labelTextColor); + this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor; + this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor; + this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor; + this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor; + this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor; + this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor; + this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor; + this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor; + + this.tagLabelColor = this.tagLabelColor || this.primaryTextColor; + this.tagLabelBackground = this.tagLabelBackground || this.primaryColor; + this.tagLabelBorder = this.tagBorder || this.primaryBorderColor; + this.tagLabelFontSize = this.tagLabelFontSize || '10px'; + this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor; + this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor; + this.commitLabelFontSize = this.commitLabelFontSize || '10px'; + + /* -------------------------------------------------- */ + /* EntityRelationship diagrams */ + + this.attributeBackgroundColorOdd = + this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd; + this.attributeBackgroundColorEven = + this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven; + /* -------------------------------------------------- */ + } + calculate(overrides) { + if (typeof overrides !== 'object') { + // Calculate colors form base colors + this.updateColors(); + return; + } + + const keys = Object.keys(overrides); + + // Copy values from overrides, this is mainly for base colors + keys.forEach((k) => { + this[k] = overrides[k]; + }); + + // Calculate colors form base colors + this.updateColors(); + // Copy values from overrides again in case of an override of derived value + keys.forEach((k) => { + this[k] = overrides[k]; + }); + } +} + +export const getThemeVariables = (userOverrides) => { + const theme = new Theme(); + theme.calculate(userOverrides); + return theme; +}; diff --git a/packages/mermaid/src/themes/theme-neo.js b/packages/mermaid/src/themes/theme-neo.js new file mode 100644 index 000000000..bc63553eb --- /dev/null +++ b/packages/mermaid/src/themes/theme-neo.js @@ -0,0 +1,395 @@ +import { darken, lighten, adjust, invert, isDark } from 'khroma'; +import { mkBorder } from './theme-helpers.js'; +import { + oldAttributeBackgroundColorEven, + oldAttributeBackgroundColorOdd, +} from './erDiagram-oldHardcodedValues.js'; + +class Theme { + constructor() { + /** # Base variables */ + /** + * - Background - used to know what the background color is of the diagram. This is used for + * deducing colors for instance line color. Default value is #f4f4f4. + */ + this.background = '#ffffff'; + + this.primaryColor = '#cccccc'; + this.mainBkg = '#ffffff'; + + this.noteBkgColor = '#fff5ad'; + this.noteTextColor = '#333'; + + this.THEME_COLOR_LIMIT = 12; + this.radius = 3; + this.strokeWidth = 2; + this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode); + // dark + + this.fontFamily = 'arial, sans-serif'; + this.fontSize = '14px'; + + // Neo-specific + this.nodeBorder = '#000000'; + this.stateBorder = '#000000'; + this.useGradient = true; + this.gradientStart = '#0042eb'; + this.gradientStop = '#eb0042'; + // this.dropShadow = 'drop-shadow( 1px 2px 2px rgba(185,185,185,1))'; + // this.dropShadow = 'drop-shadow(0px 2px 2px rgba(0, 0, 0, 0.25));'; + this.dropShadow = 'drop-shadow( 0px 1px 2px rgba(0, 0, 0, 0.25));'; + this.tertiaryColor = '#ffffff'; + + /* Architecture Diagram variables */ + this.archEdgeColor = 'calculated'; + this.archEdgeArrowColor = 'calculated'; + this.archEdgeWidth = '3'; + this.archGroupBorderColor = this.primaryBorderColor; + this.archGroupBorderWidth = '2px'; + } + updateColors() { + // The || is to make sure that if the variable has been defined by a user override that value is to be used + + /* Main */ + this.primaryTextColor = this.primaryTextColor || (this.darkMode ? '#eee' : '#333'); // invert(this.primaryColor); + this.secondaryColor = this.secondaryColor || adjust(this.primaryColor, { h: -120 }); + this.tertiaryColor = this.tertiaryColor || adjust(this.primaryColor, { h: 180, l: 5 }); + + this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode); + this.secondaryBorderColor = + this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode); + this.tertiaryBorderColor = + this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode); + this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode); + this.noteBkgColor = this.noteBkgColor || '#fff5ad'; + this.noteTextColor = this.noteTextColor || '#333'; + + this.secondaryTextColor = this.secondaryTextColor || invert(this.secondaryColor); + this.tertiaryTextColor = this.tertiaryTextColor || invert(this.tertiaryColor); + this.lineColor = this.lineColor || invert(this.background); + this.arrowheadColor = this.arrowheadColor || invert(this.background); + this.textColor = this.textColor || this.primaryTextColor; + + // TODO: should this instead default to secondaryBorderColor? + this.border2 = this.border2 || this.tertiaryBorderColor; + + /* Flowchart variables */ + this.nodeBkg = this.nodeBkg || this.primaryColor; + this.mainBkg = this.mainBkg || this.primaryColor; + this.nodeBorder = this.nodeBorder || this.primaryBorderColor; + this.clusterBkg = this.clusterBkg || this.tertiaryColor; + this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor; + this.defaultLinkColor = this.defaultLinkColor || this.lineColor; + this.titleColor = this.titleColor || this.tertiaryTextColor; + this.edgeLabelBackground = + this.edgeLabelBackground || + (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); + this.nodeTextColor = this.nodeTextColor || this.primaryTextColor; + /* Sequence Diagram variables */ + + // this.actorBorder = lighten(this.border1, 0.5); + this.actorBorder = this.actorBorder || this.primaryBorderColor; + this.actorBkg = this.actorBkg || this.mainBkg; + this.actorTextColor = this.actorTextColor || this.primaryTextColor; + this.actorLineColor = this.actorLineColor || this.actorBorder; + this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg; + this.signalColor = this.signalColor || this.textColor; + this.signalTextColor = this.signalTextColor || this.textColor; + this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder; + this.labelTextColor = this.labelTextColor || this.actorTextColor; + this.loopTextColor = this.loopTextColor || this.actorTextColor; + this.activationBorderColor = this.activationBorderColor || darken(this.secondaryColor, 10); + this.activationBkgColor = this.activationBkgColor || this.secondaryColor; + this.sequenceNumberColor = this.sequenceNumberColor || invert(this.lineColor); + + /* Gantt chart variables */ + const primaryColor = '#ECECFE'; + const secondaryColor = '#E9E9F1'; + const tertiaryColor = adjust(primaryColor, { h: 180, l: 5 }); + this.sectionBkgColor = this.sectionBkgColor || tertiaryColor; + this.altSectionBkgColor = this.altSectionBkgColor || 'white'; + this.sectionBkgColor = this.sectionBkgColor || secondaryColor; + this.sectionBkgColor2 = this.sectionBkgColor2 || primaryColor; + this.excludeBkgColor = this.excludeBkgColor || '#eeeeee'; + this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor; + this.taskBkgColor = this.taskBkgColor || primaryColor; + this.activeTaskBorderColor = this.activeTaskBorderColor || primaryColor; + this.activeTaskBkgColor = this.activeTaskBkgColor || lighten(primaryColor, 23); + this.gridColor = this.gridColor || 'lightgrey'; + this.doneTaskBkgColor = this.doneTaskBkgColor || 'lightgrey'; + this.doneTaskBorderColor = this.doneTaskBorderColor || 'grey'; + this.critBorderColor = this.critBorderColor || '#ff8888'; + this.critBkgColor = this.critBkgColor || 'red'; + this.todayLineColor = this.todayLineColor || 'red'; + this.taskTextColor = this.taskTextColor || this.textColor; + this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor; + this.taskTextLightColor = this.taskTextLightColor || this.textColor; + this.taskTextColor = this.taskTextColor || this.primaryTextColor; + this.taskTextDarkColor = this.taskTextDarkColor || this.textColor; + this.taskTextClickableColor = this.taskTextClickableColor || '#003163'; + + /* Architecture Diagram variables */ + this.archEdgeColor = this.lineColor; + this.archEdgeArrowColor = this.lineColor; + + /* Sequence Diagram variables */ + + this.personBorder = this.personBorder || this.primaryBorderColor; + this.personBkg = this.personBkg || this.mainBkg; + + /* state colors */ + this.transitionColor = this.transitionColor || this.lineColor; + this.transitionLabelColor = this.transitionLabelColor || this.textColor; + /* The color of the text tables of the states*/ + this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor; + + this.stateBkg = this.stateBkg || this.mainBkg; + this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg; + this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor; + this.altBackground = this.altBackground || '#f0f0f0'; + this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg; + this.compositeBorder = this.compositeBorder || this.nodeBorder; + this.innerEndBackground = this.nodeBorder; + this.errorBkgColor = this.errorBkgColor || this.tertiaryColor; + this.errorTextColor = this.errorTextColor || this.tertiaryTextColor; + this.transitionColor = this.transitionColor || this.lineColor; + this.specialStateColor = this.lineColor; + + /* Color Scale */ + /* Each color-set will have a background, a foreground and a border color */ + + this.cScale0 = this.cScale0 || primaryColor; + this.cScale1 = this.cScale1 || secondaryColor; + this.cScale2 = this.cScale2 || tertiaryColor; + this.cScale3 = this.cScale3 || adjust(primaryColor, { h: 30 }); + this.cScale4 = this.cScale4 || adjust(primaryColor, { h: 60 }); + this.cScale5 = this.cScale5 || adjust(primaryColor, { h: 90 }); + this.cScale6 = this.cScale6 || adjust(primaryColor, { h: 120 }); + this.cScale7 = this.cScale7 || adjust(primaryColor, { h: 150 }); + this.cScale8 = this.cScale8 || adjust(primaryColor, { h: 210, l: 150 }); + this.cScale9 = this.cScale9 || adjust(primaryColor, { h: 270 }); + this.cScale10 = this.cScale10 || adjust(primaryColor, { h: 300 }); + this.cScale11 = this.cScale11 || adjust(primaryColor, { h: 330 }); + if (this.darkMode) { + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScale' + i] = darken(this['cScale' + i], 75); + } + } else { + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScale' + i] = darken(this['cScale' + i], 25); + } + } + + // Setup the inverted color for the set + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScaleInv' + i] = this['cScaleInv' + i] || invert(this['cScale' + i]); + } + // Setup the peer color for the set, useful for borders + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + if (this.darkMode) { + this['cScalePeer' + i] = this['cScalePeer' + i] || lighten(this['cScale' + i], 10); + } else { + this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 10); + } + } + + // Setup the label color for the set + this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor; + + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor; + } + + const multiplier = this.darkMode ? -4 : -1; + for (let i = 0; i < 5; i++) { + this['surface' + i] = + this['surface' + i] || + adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i * 3) }); + this['surfacePeer' + i] = + this['surfacePeer' + i] || + adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i * 3) }); + } + + /* class */ + this.classText = this.classText || this.textColor; + + /* user-journey */ + this.fillType0 = this.fillType0 || primaryColor; + this.fillType1 = this.fillType1 || secondaryColor; + this.fillType2 = this.fillType2 || adjust(primaryColor, { h: 64 }); + this.fillType3 = this.fillType3 || adjust(secondaryColor, { h: 64 }); + this.fillType4 = this.fillType4 || adjust(primaryColor, { h: -64 }); + this.fillType5 = this.fillType5 || adjust(secondaryColor, { h: -64 }); + this.fillType6 = this.fillType6 || adjust(primaryColor, { h: 128 }); + this.fillType7 = this.fillType7 || adjust(secondaryColor, { h: 128 }); + + /* pie */ + this.pie1 = this.pie1 || primaryColor; + this.pie2 = this.pie2 || secondaryColor; + this.pie3 = this.pie3 || tertiaryColor; + this.pie4 = this.pie4 || adjust(primaryColor, { l: -10 }); + this.pie5 = this.pie5 || adjust(secondaryColor, { l: -10 }); + this.pie6 = this.pie6 || adjust(tertiaryColor, { l: -10 }); + this.pie7 = this.pie7 || adjust(primaryColor, { h: +60, l: -10 }); + this.pie8 = this.pie8 || adjust(primaryColor, { h: -60, l: -10 }); + this.pie9 = this.pie9 || adjust(primaryColor, { h: 120, l: 0 }); + this.pie10 = this.pie10 || adjust(primaryColor, { h: +60, l: -20 }); + this.pie11 = this.pie11 || adjust(primaryColor, { h: -60, l: -20 }); + this.pie12 = this.pie12 || adjust(primaryColor, { h: 120, l: -10 }); + this.pieTitleTextSize = this.pieTitleTextSize || '25px'; + this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor; + this.pieSectionTextSize = this.pieSectionTextSize || '17px'; + this.pieSectionTextColor = this.pieSectionTextColor || this.textColor; + this.pieLegendTextSize = this.pieLegendTextSize || '17px'; + this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; + this.pieStrokeColor = this.pieStrokeColor || 'black'; + this.pieStrokeWidth = this.pieStrokeWidth || '2px'; + this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || '2px'; + this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black'; + this.pieOpacity = this.pieOpacity || '0.7'; + + /* quadrant-graph */ + this.quadrant1Fill = this.quadrant1Fill || primaryColor; + this.quadrant2Fill = this.quadrant2Fill || adjust(primaryColor, { r: 5, g: 5, b: 5 }); + this.quadrant3Fill = this.quadrant3Fill || adjust(primaryColor, { r: 10, g: 10, b: 10 }); + this.quadrant4Fill = this.quadrant4Fill || adjust(primaryColor, { r: 15, g: 15, b: 15 }); + this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor; + this.quadrant2TextFill = + this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 }); + this.quadrant3TextFill = + this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 }); + this.quadrant4TextFill = + this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 }); + this.quadrantPointFill = + this.quadrantPointFill || isDark(this.quadrant1Fill) + ? lighten(this.quadrant1Fill) + : darken(this.quadrant1Fill); + this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor; + this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor; + this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor; + this.quadrantInternalBorderStrokeFill = + this.quadrantInternalBorderStrokeFill || this.primaryBorderColor; + this.quadrantExternalBorderStrokeFill = + this.quadrantExternalBorderStrokeFill || this.primaryBorderColor; + this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor; + + /* xychart */ + this.xyChart = { + backgroundColor: this.xyChart?.backgroundColor || this.background, + titleColor: this.xyChart?.titleColor || this.primaryTextColor, + xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor, + xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor, + xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor, + xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor, + yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor, + yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor, + yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor, + yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor, + plotColorPalette: + this.xyChart?.plotColorPalette || + '#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0', + }; + + /* requirement-diagram */ + this.requirementBackground = this.requirementBackground || primaryColor; + this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor; + this.requirementBorderSize = this.requirementBorderSize || '1'; + this.requirementTextColor = this.requirementTextColor || this.primaryTextColor; + this.relationColor = this.relationColor || this.lineColor; + this.relationLabelBackground = + this.relationLabelBackground || + (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); + this.relationLabelColor = this.relationLabelColor || this.actorTextColor; + + /* git */ + this.git0 = this.git0 || primaryColor; + this.git1 = this.git1 || secondaryColor; + this.git2 = this.git2 || tertiaryColor; + this.git3 = this.git3 || adjust(primaryColor, { h: -30 }); + this.git4 = this.git4 || adjust(primaryColor, { h: -60 }); + this.git5 = this.git5 || adjust(primaryColor, { h: -90 }); + this.git6 = this.git6 || adjust(primaryColor, { h: +60 }); + this.git7 = this.git7 || adjust(primaryColor, { h: +120 }); + if (this.darkMode) { + this.git0 = lighten(this.git0, 25); + this.git1 = lighten(this.git1, 25); + this.git2 = lighten(this.git2, 25); + this.git3 = lighten(this.git3, 25); + this.git4 = lighten(this.git4, 25); + this.git5 = lighten(this.git5, 25); + this.git6 = lighten(this.git6, 25); + this.git7 = lighten(this.git7, 25); + } else { + this.git0 = darken(this.git0, 25); + this.git1 = darken(this.git1, 25); + this.git2 = darken(this.git2, 25); + this.git3 = darken(this.git3, 25); + this.git4 = darken(this.git4, 25); + this.git5 = darken(this.git5, 25); + this.git6 = darken(this.git6, 25); + this.git7 = darken(this.git7, 25); + } + this.gitInv0 = this.gitInv0 || invert(this.git0); + this.gitInv1 = this.gitInv1 || invert(this.git1); + this.gitInv2 = this.gitInv2 || invert(this.git2); + this.gitInv3 = this.gitInv3 || invert(this.git3); + this.gitInv4 = this.gitInv4 || invert(this.git4); + this.gitInv5 = this.gitInv5 || invert(this.git5); + this.gitInv6 = this.gitInv6 || invert(this.git6); + this.gitInv7 = this.gitInv7 || invert(this.git7); + this.branchLabelColor = + this.branchLabelColor || (this.darkMode ? 'black' : this.labelTextColor); + this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor; + this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor; + this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor; + this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor; + this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor; + this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor; + this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor; + this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor; + + this.tagLabelColor = this.tagLabelColor || this.primaryTextColor; + this.tagLabelBackground = this.tagLabelBackground || this.primaryColor; + this.tagLabelBorder = this.tagBorder || this.primaryBorderColor; + this.tagLabelFontSize = this.tagLabelFontSize || '10px'; + this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor; + this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor; + this.commitLabelFontSize = this.commitLabelFontSize || '10px'; + + /* -------------------------------------------------- */ + /* EntityRelationship diagrams */ + + this.attributeBackgroundColorOdd = + this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd; + this.attributeBackgroundColorEven = + this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven; + /* -------------------------------------------------- */ + } + calculate(overrides) { + if (typeof overrides !== 'object') { + // Calculate colors form base colors + this.updateColors(); + return; + } + + const keys = Object.keys(overrides); + + // Copy values from overrides, this is mainly for base colors + keys.forEach((k) => { + this[k] = overrides[k]; + }); + + // Calculate colors form base colors + this.updateColors(); + // Copy values from overrides again in case of an override of derived value + keys.forEach((k) => { + this[k] = overrides[k]; + }); + } +} + +export const getThemeVariables = (userOverrides) => { + const theme = new Theme(); + theme.calculate(userOverrides); + return theme; +}; diff --git a/packages/mermaid/src/themes/theme-neutral.js b/packages/mermaid/src/themes/theme-neutral.js index 4a622cbcc..2d30e44a1 100644 --- a/packages/mermaid/src/themes/theme-neutral.js +++ b/packages/mermaid/src/themes/theme-neutral.js @@ -39,9 +39,11 @@ class Theme { this.critical = '#d42'; this.done = '#bbb'; this.arrowheadColor = '#333333'; - this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif'; - this.fontSize = '16px'; + this.fontFamily = 'arial, sans-serif'; + this.fontSize = '14px'; this.THEME_COLOR_LIMIT = 12; + this.radius = 5; + this.strokeWidth = 1; /* Flowchart variables */ @@ -110,6 +112,10 @@ class Theme { this.errorBkgColor = '#552222'; this.errorTextColor = '#552222'; + this.useGradient = true; + this.gradientStart = this.primaryBorderColor; + this.gradientStop = this.secondaryBorderColor; + this.dropShadow = 'drop-shadow( 1px 2px 2px rgba(185,185,185,1))'; } updateColors() { this.secondBkg = lighten(this.contrast, 55); diff --git a/packages/mermaid/src/themes/theme-redux-dark.js b/packages/mermaid/src/themes/theme-redux-dark.js new file mode 100644 index 000000000..e3f0010df --- /dev/null +++ b/packages/mermaid/src/themes/theme-redux-dark.js @@ -0,0 +1,407 @@ +import { adjust, darken, invert, isDark, lighten, rgba } from 'khroma'; +import { mkBorder } from './theme-helpers.js'; +import { + oldAttributeBackgroundColorEven, + oldAttributeBackgroundColorOdd, +} from './erDiagram-oldHardcodedValues.js'; + +class Theme { + constructor() { + /** # Base variables */ + /** + * - Background - used to know what the background color is of the diagram. This is used for + * deducing colors for instance line color. Default value is #f4f4f4. + */ + this.background = '#333'; + this.primaryColor = '#1f2020'; + this.secondaryColor = lighten(this.primaryColor, 16); + this.tertiaryColor = adjust(this.primaryColor, { h: -160 }); + this.primaryBorderColor = invert(this.background); + this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode); + this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode); + this.primaryTextColor = invert(this.primaryColor); + this.secondaryTextColor = invert(this.secondaryColor); + this.tertiaryTextColor = invert(this.tertiaryColor); + + this.mainBkg = '#111113'; + this.secondBkg = 'calculated'; + this.mainContrastColor = 'lightgrey'; + this.darkTextColor = lighten(invert('#323D47'), 10); + this.border1 = '#ccc'; + this.border2 = rgba(255, 255, 255, 0.25); + this.arrowheadColor = invert(this.background); + this.fontFamily = '"Recursive Variable", arial, sans-serif'; + this.fontSize = '14px'; + this.labelBackground = '#111113'; + this.textColor = '#ccc'; + this.THEME_COLOR_LIMIT = 12; + this.radius = 12; + this.strokeWidth = 2; + + this.noteBkgColor = '#fff5ad'; + this.noteTextColor = '#FFFFFF'; + + this.THEME_COLOR_LIMIT = 12; + // dark + this.fontFamily = '"Recursive Variable", arial, sans-serif'; + this.fontSize = '14px'; + + // Neo-specific + this.nodeBorder = '#FFFFFF'; + this.stateBorder = '#FFFFFF'; + + this.useGradient = false; + this.gradientStart = '#0042eb'; + this.gradientStop = '#eb0042'; + this.dropShadow = 'url(#drop-shadow)'; + + /* Architecture Diagram variables */ + this.archEdgeColor = 'calculated'; + this.archEdgeArrowColor = 'calculated'; + this.archEdgeWidth = '3'; + this.archGroupBorderColor = this.primaryBorderColor; + this.archGroupBorderWidth = '2px'; + } + updateColors() { + // The || is to make sure that if the variable has been defined by a user override that value is to be used + + /* Main */ + this.primaryTextColor = this.primaryTextColor || (this.darkMode ? '#eee' : '#FFFFFF'); // invert(this.primaryColor); + this.secondaryColor = this.secondaryColor || adjust(this.primaryColor, { h: -120 }); + this.tertiaryColor = this.tertiaryColor || adjust(this.primaryColor, { h: 180, l: 5 }); + + this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode); + this.secondaryBorderColor = + this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode); + this.tertiaryBorderColor = + this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode); + this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode); + this.noteBkgColor = this.noteBkgColor || '#fff5ad'; + this.noteTextColor = this.noteTextColor || '#FFFFFF'; + + this.secondaryTextColor = this.secondaryTextColor || invert(this.secondaryColor); + this.tertiaryTextColor = this.tertiaryTextColor || invert(this.tertiaryColor); + this.lineColor = this.lineColor || invert(this.background); + this.arrowheadColor = this.arrowheadColor || invert(this.background); + this.textColor = this.textColor || this.primaryTextColor; + + // TODO: should this instead default to secondaryBorderColor? + this.border2 = this.border2 || this.tertiaryBorderColor; + + /* Flowchart variables */ + this.nodeBkg = this.nodeBkg || this.primaryColor; + this.mainBkg = this.mainBkg || this.primaryColor; + this.nodeBorder = this.nodeBorder || this.border1; + this.clusterBkg = this.clusterBkg || this.tertiaryColor; + this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor; + this.defaultLinkColor = this.defaultLinkColor || this.lineColor; + this.titleColor = this.titleColor || this.tertiaryTextColor; + this.edgeLabelBackground = + this.edgeLabelBackground || + (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); + this.nodeTextColor = this.nodeTextColor || this.primaryTextColor; + /* Sequence Diagram variables */ + + // this.actorBorder = lighten(this.border1, 0.5); + this.actorBorder = this.actorBorder || this.primaryBorderColor; + this.actorBkg = this.actorBkg || this.mainBkg; + this.actorTextColor = this.actorTextColor || this.primaryTextColor; + this.actorLineColor = this.actorLineColor || this.actorBorder; + this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg; + this.signalColor = this.signalColor || this.textColor; + this.signalTextColor = this.signalTextColor || this.textColor; + this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder; + this.labelTextColor = this.labelTextColor || this.actorTextColor; + this.loopTextColor = this.loopTextColor || this.actorTextColor; + this.activationBorderColor = this.activationBorderColor || darken(this.secondaryColor, 10); + this.activationBkgColor = this.activationBkgColor || this.secondaryColor; + this.sequenceNumberColor = this.sequenceNumberColor || invert(this.lineColor); + + /* Gantt chart variables */ + + this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor; + this.altSectionBkgColor = this.altSectionBkgColor || 'white'; + this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor; + this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor; + this.excludeBkgColor = this.excludeBkgColor || '#eeeeee'; + this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor; + this.taskBkgColor = this.taskBkgColor || this.primaryColor; + this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor; + this.activeTaskBkgColor = this.activeTaskBkgColor || lighten(this.primaryColor, 23); + this.gridColor = this.gridColor || 'lightgrey'; + this.doneTaskBkgColor = this.doneTaskBkgColor || 'lightgrey'; + this.doneTaskBorderColor = this.doneTaskBorderColor || 'grey'; + this.critBorderColor = this.critBorderColor || '#ff8888'; + this.critBkgColor = this.critBkgColor || 'red'; + this.todayLineColor = this.todayLineColor || 'red'; + this.taskTextColor = this.taskTextColor || this.textColor; + this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor; + this.taskTextLightColor = this.taskTextLightColor || this.textColor; + this.taskTextColor = this.taskTextColor || this.primaryTextColor; + this.taskTextDarkColor = this.taskTextDarkColor || this.textColor; + this.taskTextClickableColor = this.taskTextClickableColor || '#003163'; + + /* Architecture Diagram variables */ + this.archEdgeColor = this.lineColor; + this.archEdgeArrowColor = this.lineColor; + + /* Sequence Diagram variables */ + + this.personBorder = this.personBorder || this.primaryBorderColor; + this.personBkg = this.personBkg || this.mainBkg; + + /* state colors */ + this.transitionColor = this.transitionColor || this.lineColor; + this.transitionLabelColor = this.transitionLabelColor || this.textColor; + /* The color of the text tables of the states*/ + this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor; + + this.stateBkg = this.stateBkg || this.mainBkg; + this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg; + this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor; + this.altBackground = this.altBackground || '#f0f0f0'; + this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg; + this.compositeBorder = this.compositeBorder || this.nodeBorder; + this.innerEndBackground = this.nodeBorder; + this.errorBkgColor = this.errorBkgColor || this.tertiaryColor; + this.errorTextColor = this.errorTextColor || this.tertiaryTextColor; + this.transitionColor = this.transitionColor || this.lineColor; + this.specialStateColor = this.lineColor; + + /* Color Scale */ + /* Each color-set will have a background, a foreground and a border color */ + this.cScale0 = this.cScale0 || this.primaryColor; + this.cScale1 = this.cScale1 || this.secondaryColor; + this.cScale2 = this.cScale2 || this.tertiaryColor; + this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 }); + this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 }); + this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 }); + this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 }); + this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 }); + this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210, l: 150 }); + this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 }); + this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 }); + this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 }); + if (this.darkMode) { + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScale' + i] = darken(this['cScale' + i], 75); + } + } else { + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScale' + i] = darken(this['cScale' + i], 25); + } + } + + // Setup the inverted color for the set + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScaleInv' + i] = this['cScaleInv' + i] || invert(this['cScale' + i]); + } + // Setup the peer color for the set, useful for borders + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + if (this.darkMode) { + this['cScalePeer' + i] = this['cScalePeer' + i] || lighten(this['cScale' + i], 10); + } else { + this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 10); + } + } + + // Setup the label color for the set + this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor; + + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor; + } + + const multiplier = this.darkMode ? -4 : -1; + for (let i = 0; i < 5; i++) { + this['surface' + i] = + this['surface' + i] || + adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i * 3) }); + this['surfacePeer' + i] = + this['surfacePeer' + i] || + adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i * 3) }); + } + + /* class */ + this.classText = this.classText || this.textColor; + + /* user-journey */ + this.fillType0 = this.fillType0 || this.primaryColor; + this.fillType1 = this.fillType1 || this.secondaryColor; + this.fillType2 = this.fillType2 || adjust(this.primaryColor, { h: 64 }); + this.fillType3 = this.fillType3 || adjust(this.secondaryColor, { h: 64 }); + this.fillType4 = this.fillType4 || adjust(this.primaryColor, { h: -64 }); + this.fillType5 = this.fillType5 || adjust(this.secondaryColor, { h: -64 }); + this.fillType6 = this.fillType6 || adjust(this.primaryColor, { h: 128 }); + this.fillType7 = this.fillType7 || adjust(this.secondaryColor, { h: 128 }); + + /* pie */ + this.pie1 = this.pie1 || this.primaryColor; + this.pie2 = this.pie2 || this.secondaryColor; + this.pie3 = this.pie3 || this.tertiaryColor; + this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -10 }); + this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -10 }); + this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -10 }); + this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -10 }); + this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 }); + this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 }); + this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -20 }); + this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -20 }); + this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -10 }); + this.pieTitleTextSize = this.pieTitleTextSize || '25px'; + this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor; + this.pieSectionTextSize = this.pieSectionTextSize || '17px'; + this.pieSectionTextColor = this.pieSectionTextColor || this.textColor; + this.pieLegendTextSize = this.pieLegendTextSize || '17px'; + this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; + this.pieStrokeColor = this.pieStrokeColor || 'black'; + this.pieStrokeWidth = this.pieStrokeWidth || '2px'; + this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || '2px'; + this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black'; + this.pieOpacity = this.pieOpacity || '0.7'; + + /* quadrant-graph */ + this.quadrant1Fill = this.quadrant1Fill || this.primaryColor; + this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 }); + this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 }); + this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 }); + this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor; + this.quadrant2TextFill = + this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 }); + this.quadrant3TextFill = + this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 }); + this.quadrant4TextFill = + this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 }); + this.quadrantPointFill = + this.quadrantPointFill || isDark(this.quadrant1Fill) + ? lighten(this.quadrant1Fill) + : darken(this.quadrant1Fill); + this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor; + this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor; + this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor; + this.quadrantInternalBorderStrokeFill = + this.quadrantInternalBorderStrokeFill || this.primaryBorderColor; + this.quadrantExternalBorderStrokeFill = + this.quadrantExternalBorderStrokeFill || this.primaryBorderColor; + this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor; + + /* xychart */ + this.xyChart = { + backgroundColor: this.xyChart?.backgroundColor || this.background, + titleColor: this.xyChart?.titleColor || this.primaryTextColor, + xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor, + xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor, + xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor, + xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor, + yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor, + yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor, + yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor, + yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor, + plotColorPalette: + this.xyChart?.plotColorPalette || + '#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0', + }; + + /* requirement-diagram */ + this.requirementBackground = this.requirementBackground || this.primaryColor; + this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor; + this.requirementBorderSize = this.requirementBorderSize || '1'; + this.requirementTextColor = this.requirementTextColor || this.primaryTextColor; + this.relationColor = this.relationColor || this.lineColor; + this.relationLabelBackground = + this.relationLabelBackground || + (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); + this.relationLabelColor = this.relationLabelColor || this.actorTextColor; + + /* git */ + this.git0 = this.git0 || this.primaryColor; + this.git1 = this.git1 || this.secondaryColor; + this.git2 = this.git2 || this.tertiaryColor; + this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 }); + this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 }); + this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 }); + this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 }); + this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 }); + if (this.darkMode) { + this.git0 = lighten(this.git0, 25); + this.git1 = lighten(this.git1, 25); + this.git2 = lighten(this.git2, 25); + this.git3 = lighten(this.git3, 25); + this.git4 = lighten(this.git4, 25); + this.git5 = lighten(this.git5, 25); + this.git6 = lighten(this.git6, 25); + this.git7 = lighten(this.git7, 25); + } else { + this.git0 = darken(this.git0, 25); + this.git1 = darken(this.git1, 25); + this.git2 = darken(this.git2, 25); + this.git3 = darken(this.git3, 25); + this.git4 = darken(this.git4, 25); + this.git5 = darken(this.git5, 25); + this.git6 = darken(this.git6, 25); + this.git7 = darken(this.git7, 25); + } + this.gitInv0 = this.gitInv0 || invert(this.git0); + this.gitInv1 = this.gitInv1 || invert(this.git1); + this.gitInv2 = this.gitInv2 || invert(this.git2); + this.gitInv3 = this.gitInv3 || invert(this.git3); + this.gitInv4 = this.gitInv4 || invert(this.git4); + this.gitInv5 = this.gitInv5 || invert(this.git5); + this.gitInv6 = this.gitInv6 || invert(this.git6); + this.gitInv7 = this.gitInv7 || invert(this.git7); + this.branchLabelColor = + this.branchLabelColor || (this.darkMode ? 'black' : this.labelTextColor); + this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor; + this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor; + this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor; + this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor; + this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor; + this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor; + this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor; + this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor; + + this.tagLabelColor = this.tagLabelColor || this.primaryTextColor; + this.tagLabelBackground = this.tagLabelBackground || this.primaryColor; + this.tagLabelBorder = this.tagBorder || this.primaryBorderColor; + this.tagLabelFontSize = this.tagLabelFontSize || '10px'; + this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor; + this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor; + this.commitLabelFontSize = this.commitLabelFontSize || '10px'; + + /* -------------------------------------------------- */ + /* EntityRelationship diagrams */ + + this.attributeBackgroundColorOdd = + this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd; + this.attributeBackgroundColorEven = + this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven; + /* -------------------------------------------------- */ + } + calculate(overrides) { + if (typeof overrides !== 'object') { + // Calculate colors form base colors + this.updateColors(); + return; + } + + const keys = Object.keys(overrides); + + // Copy values from overrides, this is mainly for base colors + keys.forEach((k) => { + this[k] = overrides[k]; + }); + + // Calculate colors form base colors + this.updateColors(); + // Copy values from overrides again in case of an override of derived value + keys.forEach((k) => { + this[k] = overrides[k]; + }); + } +} + +export const getThemeVariables = (userOverrides) => { + const theme = new Theme(); + theme.calculate(userOverrides); + return theme; +}; diff --git a/packages/mermaid/src/themes/theme-redux.js b/packages/mermaid/src/themes/theme-redux.js new file mode 100644 index 000000000..d88a9f626 --- /dev/null +++ b/packages/mermaid/src/themes/theme-redux.js @@ -0,0 +1,394 @@ +import { darken, lighten, adjust, invert, isDark } from 'khroma'; +import { mkBorder } from './theme-helpers.js'; +import { + oldAttributeBackgroundColorEven, + oldAttributeBackgroundColorOdd, +} from './erDiagram-oldHardcodedValues.js'; + +class Theme { + constructor() { + /** # Base variables */ + /** + * - Background - used to know what the background color is of the diagram. This is used for + * deducing colors for instance line color. Default value is #f4f4f4. + */ + this.background = '#ffffff'; + + this.primaryColor = '#cccccc'; + this.mainBkg = '#ffffff'; + + this.noteBkgColor = '#fff5ad'; + this.noteTextColor = '#28253D'; + + this.THEME_COLOR_LIMIT = 12; + this.radius = 12; + this.strokeWidth = 2; + + this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode); + // dark + + this.fontFamily = '"Recursive Variable", arial, sans-serif'; + this.fontSize = '14px'; + + // Neo-specific + this.nodeBorder = '#28253D'; + this.stateBorder = '#28253D'; + this.useGradient = false; + this.gradientStart = '#0042eb'; + this.gradientStop = '#eb0042'; + this.dropShadow = 'url(#drop-shadow)'; + this.tertiaryColor = '#ffffff'; + + /* Architecture Diagram variables */ + this.archEdgeColor = 'calculated'; + this.archEdgeArrowColor = 'calculated'; + this.archEdgeWidth = '3'; + this.archGroupBorderColor = this.primaryBorderColor; + this.archGroupBorderWidth = '2px'; + } + updateColors() { + // The || is to make sure that if the variable has been defined by a user override that value is to be used + + /* Main */ + this.primaryTextColor = this.primaryTextColor || (this.darkMode ? '#eee' : '#28253D'); // invert(this.primaryColor); + this.secondaryColor = this.secondaryColor || adjust(this.primaryColor, { h: -120 }); + this.tertiaryColor = this.tertiaryColor || adjust(this.primaryColor, { h: 180, l: 5 }); + + this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode); + this.secondaryBorderColor = + this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode); + this.tertiaryBorderColor = + this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode); + this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode); + this.noteBkgColor = this.noteBkgColor || '#fff5ad'; + this.noteTextColor = this.noteTextColor || '#28253D'; + + this.secondaryTextColor = this.secondaryTextColor || invert(this.secondaryColor); + this.tertiaryTextColor = this.tertiaryTextColor || invert(this.tertiaryColor); + this.lineColor = this.lineColor || invert(this.background); + this.arrowheadColor = this.arrowheadColor || invert(this.background); + this.textColor = this.textColor || this.primaryTextColor; + + // TODO: should this instead default to secondaryBorderColor? + this.border2 = this.border2 || this.tertiaryBorderColor; + + /* Flowchart variables */ + this.nodeBkg = this.nodeBkg || this.primaryColor; + this.mainBkg = this.mainBkg || this.primaryColor; + this.nodeBorder = this.nodeBorder || this.primaryBorderColor; + this.clusterBkg = this.clusterBkg || this.tertiaryColor; + this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor; + this.defaultLinkColor = this.defaultLinkColor || this.lineColor; + this.titleColor = this.titleColor || this.tertiaryTextColor; + this.edgeLabelBackground = + this.edgeLabelBackground || + (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); + this.nodeTextColor = this.nodeTextColor || this.primaryTextColor; + /* Sequence Diagram variables */ + + // this.actorBorder = lighten(this.border1, 0.5); + this.actorBorder = this.actorBorder || this.primaryBorderColor; + this.actorBkg = this.actorBkg || this.mainBkg; + this.actorTextColor = this.actorTextColor || this.primaryTextColor; + this.actorLineColor = this.actorLineColor || this.actorBorder; + this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg; + this.signalColor = this.signalColor || this.textColor; + this.signalTextColor = this.signalTextColor || this.textColor; + this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder; + this.labelTextColor = this.labelTextColor || this.actorTextColor; + this.loopTextColor = this.loopTextColor || this.actorTextColor; + this.activationBorderColor = this.activationBorderColor || darken(this.secondaryColor, 10); + this.activationBkgColor = this.activationBkgColor || this.secondaryColor; + this.sequenceNumberColor = this.sequenceNumberColor || invert(this.lineColor); + + /* Gantt chart variables */ + const primaryColor = '#ECECFE'; + const secondaryColor = '#E9E9F1'; + const tertiaryColor = adjust(primaryColor, { h: 180, l: 5 }); + this.sectionBkgColor = this.sectionBkgColor || tertiaryColor; + this.altSectionBkgColor = this.altSectionBkgColor || 'white'; + this.sectionBkgColor = this.sectionBkgColor || secondaryColor; + this.sectionBkgColor2 = this.sectionBkgColor2 || primaryColor; + this.excludeBkgColor = this.excludeBkgColor || '#eeeeee'; + this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor; + this.taskBkgColor = this.taskBkgColor || primaryColor; + this.activeTaskBorderColor = this.activeTaskBorderColor || primaryColor; + this.activeTaskBkgColor = this.activeTaskBkgColor || lighten(primaryColor, 23); + this.gridColor = this.gridColor || 'lightgrey'; + this.doneTaskBkgColor = this.doneTaskBkgColor || 'lightgrey'; + this.doneTaskBorderColor = this.doneTaskBorderColor || 'grey'; + this.critBorderColor = this.critBorderColor || '#ff8888'; + this.critBkgColor = this.critBkgColor || 'red'; + this.todayLineColor = this.todayLineColor || 'red'; + this.taskTextColor = this.taskTextColor || this.textColor; + this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor; + this.taskTextLightColor = this.taskTextLightColor || this.textColor; + this.taskTextColor = this.taskTextColor || this.primaryTextColor; + this.taskTextDarkColor = this.taskTextDarkColor || this.textColor; + this.taskTextClickableColor = this.taskTextClickableColor || '#003163'; + + /* Architecture Diagram variables */ + this.archEdgeColor = this.lineColor; + this.archEdgeArrowColor = this.lineColor; + + /* Sequence Diagram variables */ + + this.personBorder = this.personBorder || this.primaryBorderColor; + this.personBkg = this.personBkg || this.mainBkg; + + /* state colors */ + this.transitionColor = this.transitionColor || this.lineColor; + this.transitionLabelColor = this.transitionLabelColor || this.textColor; + /* The color of the text tables of the states*/ + this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor; + + this.stateBkg = this.stateBkg || this.mainBkg; + this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg; + this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor; + this.altBackground = this.altBackground || '#f0f0f0'; + this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg; + this.compositeBorder = this.compositeBorder || this.nodeBorder; + this.innerEndBackground = this.nodeBorder; + this.errorBkgColor = this.errorBkgColor || this.tertiaryColor; + this.errorTextColor = this.errorTextColor || this.tertiaryTextColor; + this.transitionColor = this.transitionColor || this.lineColor; + this.specialStateColor = this.lineColor; + + /* Color Scale */ + /* Each color-set will have a background, a foreground and a border color */ + + this.cScale0 = this.cScale0 || primaryColor; + this.cScale1 = this.cScale1 || secondaryColor; + this.cScale2 = this.cScale2 || tertiaryColor; + this.cScale3 = this.cScale3 || adjust(primaryColor, { h: 30 }); + this.cScale4 = this.cScale4 || adjust(primaryColor, { h: 60 }); + this.cScale5 = this.cScale5 || adjust(primaryColor, { h: 90 }); + this.cScale6 = this.cScale6 || adjust(primaryColor, { h: 120 }); + this.cScale7 = this.cScale7 || adjust(primaryColor, { h: 150 }); + this.cScale8 = this.cScale8 || adjust(primaryColor, { h: 210, l: 150 }); + this.cScale9 = this.cScale9 || adjust(primaryColor, { h: 270 }); + this.cScale10 = this.cScale10 || adjust(primaryColor, { h: 300 }); + this.cScale11 = this.cScale11 || adjust(primaryColor, { h: 330 }); + if (this.darkMode) { + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScale' + i] = darken(this['cScale' + i], 75); + } + } else { + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScale' + i] = darken(this['cScale' + i], 25); + } + } + + // Setup the inverted color for the set + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScaleInv' + i] = this['cScaleInv' + i] || invert(this['cScale' + i]); + } + // Setup the peer color for the set, useful for borders + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + if (this.darkMode) { + this['cScalePeer' + i] = this['cScalePeer' + i] || lighten(this['cScale' + i], 10); + } else { + this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 10); + } + } + + // Setup the label color for the set + this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor; + + for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) { + this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor; + } + + const multiplier = this.darkMode ? -4 : -1; + for (let i = 0; i < 5; i++) { + this['surface' + i] = + this['surface' + i] || + adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i * 3) }); + this['surfacePeer' + i] = + this['surfacePeer' + i] || + adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i * 3) }); + } + + /* class */ + this.classText = this.classText || this.textColor; + + /* user-journey */ + this.fillType0 = this.fillType0 || primaryColor; + this.fillType1 = this.fillType1 || secondaryColor; + this.fillType2 = this.fillType2 || adjust(primaryColor, { h: 64 }); + this.fillType3 = this.fillType3 || adjust(secondaryColor, { h: 64 }); + this.fillType4 = this.fillType4 || adjust(primaryColor, { h: -64 }); + this.fillType5 = this.fillType5 || adjust(secondaryColor, { h: -64 }); + this.fillType6 = this.fillType6 || adjust(primaryColor, { h: 128 }); + this.fillType7 = this.fillType7 || adjust(secondaryColor, { h: 128 }); + + /* pie */ + this.pie1 = this.pie1 || primaryColor; + this.pie2 = this.pie2 || secondaryColor; + this.pie3 = this.pie3 || tertiaryColor; + this.pie4 = this.pie4 || adjust(primaryColor, { l: -10 }); + this.pie5 = this.pie5 || adjust(secondaryColor, { l: -10 }); + this.pie6 = this.pie6 || adjust(tertiaryColor, { l: -10 }); + this.pie7 = this.pie7 || adjust(primaryColor, { h: +60, l: -10 }); + this.pie8 = this.pie8 || adjust(primaryColor, { h: -60, l: -10 }); + this.pie9 = this.pie9 || adjust(primaryColor, { h: 120, l: 0 }); + this.pie10 = this.pie10 || adjust(primaryColor, { h: +60, l: -20 }); + this.pie11 = this.pie11 || adjust(primaryColor, { h: -60, l: -20 }); + this.pie12 = this.pie12 || adjust(primaryColor, { h: 120, l: -10 }); + this.pieTitleTextSize = this.pieTitleTextSize || '25px'; + this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor; + this.pieSectionTextSize = this.pieSectionTextSize || '17px'; + this.pieSectionTextColor = this.pieSectionTextColor || this.textColor; + this.pieLegendTextSize = this.pieLegendTextSize || '17px'; + this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor; + this.pieStrokeColor = this.pieStrokeColor || 'black'; + this.pieStrokeWidth = this.pieStrokeWidth || '2px'; + this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || '2px'; + this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black'; + this.pieOpacity = this.pieOpacity || '0.7'; + + /* quadrant-graph */ + this.quadrant1Fill = this.quadrant1Fill || primaryColor; + this.quadrant2Fill = this.quadrant2Fill || adjust(primaryColor, { r: 5, g: 5, b: 5 }); + this.quadrant3Fill = this.quadrant3Fill || adjust(primaryColor, { r: 10, g: 10, b: 10 }); + this.quadrant4Fill = this.quadrant4Fill || adjust(primaryColor, { r: 15, g: 15, b: 15 }); + this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor; + this.quadrant2TextFill = + this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 }); + this.quadrant3TextFill = + this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 }); + this.quadrant4TextFill = + this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 }); + this.quadrantPointFill = + this.quadrantPointFill || isDark(this.quadrant1Fill) + ? lighten(this.quadrant1Fill) + : darken(this.quadrant1Fill); + this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor; + this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor; + this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor; + this.quadrantInternalBorderStrokeFill = + this.quadrantInternalBorderStrokeFill || this.primaryBorderColor; + this.quadrantExternalBorderStrokeFill = + this.quadrantExternalBorderStrokeFill || this.primaryBorderColor; + this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor; + + /* xychart */ + this.xyChart = { + backgroundColor: this.xyChart?.backgroundColor || this.background, + titleColor: this.xyChart?.titleColor || this.primaryTextColor, + xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor, + xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor, + xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor, + xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor, + yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor, + yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor, + yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor, + yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor, + plotColorPalette: + this.xyChart?.plotColorPalette || + '#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0', + }; + + /* requirement-diagram */ + this.requirementBackground = this.requirementBackground || primaryColor; + this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor; + this.requirementBorderSize = this.requirementBorderSize || '1'; + this.requirementTextColor = this.requirementTextColor || this.primaryTextColor; + this.relationColor = this.relationColor || this.lineColor; + this.relationLabelBackground = + this.relationLabelBackground || + (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor); + this.relationLabelColor = this.relationLabelColor || this.actorTextColor; + + /* git */ + this.git0 = this.git0 || primaryColor; + this.git1 = this.git1 || secondaryColor; + this.git2 = this.git2 || tertiaryColor; + this.git3 = this.git3 || adjust(primaryColor, { h: -30 }); + this.git4 = this.git4 || adjust(primaryColor, { h: -60 }); + this.git5 = this.git5 || adjust(primaryColor, { h: -90 }); + this.git6 = this.git6 || adjust(primaryColor, { h: +60 }); + this.git7 = this.git7 || adjust(primaryColor, { h: +120 }); + if (this.darkMode) { + this.git0 = lighten(this.git0, 25); + this.git1 = lighten(this.git1, 25); + this.git2 = lighten(this.git2, 25); + this.git3 = lighten(this.git3, 25); + this.git4 = lighten(this.git4, 25); + this.git5 = lighten(this.git5, 25); + this.git6 = lighten(this.git6, 25); + this.git7 = lighten(this.git7, 25); + } else { + this.git0 = darken(this.git0, 25); + this.git1 = darken(this.git1, 25); + this.git2 = darken(this.git2, 25); + this.git3 = darken(this.git3, 25); + this.git4 = darken(this.git4, 25); + this.git5 = darken(this.git5, 25); + this.git6 = darken(this.git6, 25); + this.git7 = darken(this.git7, 25); + } + this.gitInv0 = this.gitInv0 || invert(this.git0); + this.gitInv1 = this.gitInv1 || invert(this.git1); + this.gitInv2 = this.gitInv2 || invert(this.git2); + this.gitInv3 = this.gitInv3 || invert(this.git3); + this.gitInv4 = this.gitInv4 || invert(this.git4); + this.gitInv5 = this.gitInv5 || invert(this.git5); + this.gitInv6 = this.gitInv6 || invert(this.git6); + this.gitInv7 = this.gitInv7 || invert(this.git7); + this.branchLabelColor = + this.branchLabelColor || (this.darkMode ? 'black' : this.labelTextColor); + this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor; + this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor; + this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor; + this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor; + this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor; + this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor; + this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor; + this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor; + + this.tagLabelColor = this.tagLabelColor || this.primaryTextColor; + this.tagLabelBackground = this.tagLabelBackground || this.primaryColor; + this.tagLabelBorder = this.tagBorder || this.primaryBorderColor; + this.tagLabelFontSize = this.tagLabelFontSize || '10px'; + this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor; + this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor; + this.commitLabelFontSize = this.commitLabelFontSize || '10px'; + + /* -------------------------------------------------- */ + /* EntityRelationship diagrams */ + + this.attributeBackgroundColorOdd = + this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd; + this.attributeBackgroundColorEven = + this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven; + /* -------------------------------------------------- */ + } + calculate(overrides) { + if (typeof overrides !== 'object') { + // Calculate colors form base colors + this.updateColors(); + return; + } + + const keys = Object.keys(overrides); + + // Copy values from overrides, this is mainly for base colors + keys.forEach((k) => { + this[k] = overrides[k]; + }); + + // Calculate colors form base colors + this.updateColors(); + // Copy values from overrides again in case of an override of derived value + keys.forEach((k) => { + this[k] = overrides[k]; + }); + } +} + +export const getThemeVariables = (userOverrides) => { + const theme = new Theme(); + theme.calculate(userOverrides); + return theme; +}; diff --git a/packages/mermaid/src/types.ts b/packages/mermaid/src/types.ts index 7e219d7fe..368235713 100644 --- a/packages/mermaid/src/types.ts +++ b/packages/mermaid/src/types.ts @@ -1,3 +1,6 @@ +import type { MermaidConfig } from './config.type.js'; +import type { Diagram } from './Diagram.js'; + export interface NodeMetaData { shape?: string; label?: string; @@ -12,7 +15,11 @@ export interface NodeMetaData { assigned?: string; ticket?: string; } -import type { MermaidConfig } from './config.type.js'; + +export interface EdgeMetaData { + animation?: 'fast' | 'slow'; + animate?: boolean; +} export interface Point { x: number; @@ -66,15 +73,23 @@ export interface ParseOptions { } export interface ParseResult { + success: boolean; /** - * The diagram type, e.g. 'flowchart', 'sequence', etc. + * The mermaid code after extracting the config. */ - diagramType: string; + code: string; /** * The config passed as YAML frontmatter or directives */ config: MermaidConfig; + title?: string; + diagram?: Diagram; + /** + * The error that occurred during parsing, if any. + */ + error?: unknown; } + // This makes it clear that we're working with a d3 selected element of some kind, even though it's hard to specify the exact type. export type D3Element = any; diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts index c1d674834..82a5ca74b 100644 --- a/packages/mermaid/src/utils.ts +++ b/packages/mermaid/src/utils.ts @@ -937,8 +937,13 @@ export const getEdgeId = ( counter?: number; prefix?: string; suffix?: string; - } + }, + id?: string ) => { + if (id) { + return id; + } + log.debug('Disabled addition of id:', id); return `${prefix ? `${prefix}_` : ''}${from}_${to}_${counter}${suffix ? `_${suffix}` : ''}`; }; diff --git a/packages/mermaid/src/utils/lineWithOffset.ts b/packages/mermaid/src/utils/lineWithOffset.ts index 057944325..449e0f5dc 100644 --- a/packages/mermaid/src/utils/lineWithOffset.ts +++ b/packages/mermaid/src/utils/lineWithOffset.ts @@ -10,6 +10,16 @@ export const markerOffsets = { dependency: 6, lollipop: 13.5, arrow_point: 4, + //arrow_cross: 24, +} as const; + +// We need to draw the lines a bit shorter to avoid drawing +// under any transparent markers. +// The offsets are calculated from the markers' dimensions. +export const markerOffsets2 = { + arrow_point: 9, + arrow_cross: 12.5, + arrow_circle: 12.5, } as const; /** diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7f3f4fa5f..d94e4e20c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,28 +15,28 @@ importers: devDependencies: '@applitools/eyes-cypress': specifier: ^3.44.4 - version: 3.44.9(encoding@0.1.13)(typescript@5.4.5) + version: 3.44.8(encoding@0.1.13)(typescript@5.4.5) '@argos-ci/cypress': specifier: ^2.2.2 - version: 2.2.2(cypress@13.15.0) + version: 2.2.3(cypress@13.14.2) '@changesets/changelog-github': specifier: ^0.5.0 version: 0.5.0(encoding@0.1.13) '@changesets/cli': specifier: ^2.27.7 - version: 2.27.9 + version: 2.27.8 '@cspell/eslint-plugin': specifier: ^8.8.4 - version: 8.14.4(eslint@9.12.0(jiti@1.21.6)) + version: 8.14.4(eslint@9.11.1(jiti@1.21.0)) '@cypress/code-coverage': specifier: ^3.12.30 - version: 3.13.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)))(cypress@13.15.0)(webpack@5.95.0(esbuild@0.21.5)) + version: 3.12.48(@babel/core@7.22.10)(@babel/preset-env@7.26.7(@babel/core@7.22.10))(babel-loader@9.1.3(@babel/core@7.22.10)(webpack@5.94.0(esbuild@0.21.5)))(cypress@13.14.2)(webpack@5.94.0(esbuild@0.21.5)) '@eslint/js': specifier: ^9.4.0 - version: 9.12.0 + version: 9.11.1 '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.24.0)(tslib@2.7.0)(typescript@5.4.5) + version: 11.1.6(rollup@4.32.0)(tslib@2.6.2)(typescript@5.4.5) '@types/cors': specifier: ^2.8.17 version: 2.8.17 @@ -51,19 +51,19 @@ importers: version: 21.1.7 '@types/lodash': specifier: ^4.17.0 - version: 4.17.10 + version: 4.17.7 '@types/mdast': specifier: ^4.0.3 version: 4.0.4 '@types/node': specifier: ^20.11.30 - version: 20.16.11 + version: 20.16.5 '@types/rollup-plugin-visualizer': specifier: ^4.2.4 version: 4.2.4 '@vitest/coverage-v8': specifier: ^1.4.0 - version: 1.6.0(vitest@1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.34.1)) + version: 1.6.0(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0)) '@vitest/spy': specifier: ^1.4.0 version: 1.6.0 @@ -72,7 +72,7 @@ importers: version: 1.6.0(vitest@1.6.0) ajv: specifier: ^8.12.0 - version: 8.17.1 + version: 8.12.0 chokidar: specifier: ^3.6.0 version: 3.6.0 @@ -90,61 +90,61 @@ importers: version: 7.0.3 cspell: specifier: ^8.6.0 - version: 8.14.4 + version: 8.6.0 cypress: specifier: ^13.14.1 - version: 13.15.0 + version: 13.14.2 cypress-image-snapshot: specifier: ^4.0.1 - version: 4.0.1(cypress@13.15.0)(jest@29.7.0(@types/node@20.16.11)) + version: 4.0.1(cypress@13.14.2)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5))) cypress-split: specifier: ^1.24.0 - version: 1.24.0(@babel/core@7.25.7) + version: 1.24.0(@babel/core@7.22.10) esbuild: specifier: ^0.21.5 version: 0.21.5 eslint: specifier: ^9.4.0 - version: 9.12.0(jiti@1.21.6) + version: 9.11.1(jiti@1.21.0) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.12.0(jiti@1.21.6)) + version: 9.1.0(eslint@9.11.1(jiti@1.21.0)) eslint-plugin-cypress: specifier: ^3.3.0 - version: 3.5.0(eslint@9.12.0(jiti@1.21.6)) + version: 3.5.0(eslint@9.11.1(jiti@1.21.0)) eslint-plugin-html: specifier: ^8.1.1 version: 8.1.2 eslint-plugin-jest: specifier: ^28.6.0 - version: 28.8.3(@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(jest@29.7.0(@types/node@20.16.11))(typescript@5.4.5) + version: 28.8.3(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5))(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5))(eslint@9.11.1(jiti@1.21.0))(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)))(typescript@5.4.5) eslint-plugin-jsdoc: specifier: ^50.0.0 - version: 50.3.1(eslint@9.12.0(jiti@1.21.6)) + version: 50.3.1(eslint@9.11.1(jiti@1.21.0)) eslint-plugin-json: specifier: ^4.0.0 version: 4.0.1 eslint-plugin-lodash: specifier: ^8.0.0 - version: 8.0.0(eslint@9.12.0(jiti@1.21.6)) + version: 8.0.0(eslint@9.11.1(jiti@1.21.0)) eslint-plugin-markdown: specifier: ^5.0.0 - version: 5.1.0(eslint@9.12.0(jiti@1.21.6)) + version: 5.1.0(eslint@9.11.1(jiti@1.21.0)) eslint-plugin-no-only-tests: specifier: ^3.1.0 - version: 3.3.0 + version: 3.1.0 eslint-plugin-tsdoc: specifier: ^0.3.0 version: 0.3.0 eslint-plugin-unicorn: specifier: ^56.0.0 - version: 56.0.0(eslint@9.12.0(jiti@1.21.6)) + version: 56.0.0(eslint@9.11.1(jiti@1.21.0)) express: specifier: ^4.19.1 version: 4.21.0 globals: specifier: ^15.4.0 - version: 15.10.0 + version: 15.9.0 globby: specifier: ^14.0.1 version: 14.0.2 @@ -153,7 +153,7 @@ importers: version: 9.1.6 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.16.11) + version: 29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)) jison: specifier: ^0.4.18 version: 0.4.18 @@ -189,10 +189,10 @@ importers: version: 5.0.10 rollup-plugin-visualizer: specifier: ^5.12.0 - version: 5.12.0(rollup@4.24.0) + version: 5.12.0(rollup@4.32.0) start-server-and-test: specifier: ^2.0.3 - version: 2.0.8 + version: 2.0.7 tsx: specifier: ^4.7.1 version: 4.19.1 @@ -201,16 +201,16 @@ importers: version: 5.4.5 typescript-eslint: specifier: ^8.0.0-alpha.34 - version: 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) + version: 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) vite: specifier: ^5.2.3 - version: 5.4.8(@types/node@20.16.11)(terser@5.34.1) + version: 5.4.12(@types/node@20.16.5)(terser@5.37.0) vite-plugin-istanbul: specifier: ^6.0.0 - version: 6.0.2(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1)) + version: 6.0.2(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0)) vitest: specifier: ^1.4.0 - version: 1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.34.1) + version: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0) packages/mermaid: dependencies: @@ -219,10 +219,10 @@ importers: version: 7.1.0 '@iconify/utils': specifier: ^2.1.32 - version: 2.1.33 + version: 2.1.32 '@mermaid-js/parser': - specifier: workspace:^ - version: link:../parser + specifier: ^0.3.1-rc.1 + version: 0.3.1-rc.1 '@types/d3': specifier: ^7.4.3 version: 7.4.3 @@ -246,13 +246,13 @@ importers: version: 7.0.11 dayjs: specifier: ^1.11.10 - version: 1.11.13 + version: 1.11.10 dompurify: specifier: ^3.2.1 version: 3.2.1 katex: specifier: ^0.16.9 - version: 0.16.11 + version: 0.16.9 khroma: specifier: ^2.1.0 version: 2.1.0 @@ -283,7 +283,7 @@ importers: version: 2.0.0 '@types/cytoscape': specifier: ^3.21.4 - version: 3.21.8 + version: 3.21.7 '@types/cytoscape-fcose': specifier: ^2.2.4 version: 2.2.4 @@ -298,7 +298,7 @@ importers: version: 3.0.3 '@types/d3-selection': specifier: ^3.0.10 - version: 3.0.11 + version: 3.0.10 '@types/d3-shape': specifier: ^3.1.6 version: 3.1.6 @@ -323,9 +323,15 @@ importers: '@types/uuid': specifier: ^9.0.8 version: 9.0.8 + '@typescript-eslint/eslint-plugin': + specifier: ^7.3.1 + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5))(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/parser': + specifier: ^7.3.1 + version: 7.18.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) ajv: specifier: ^8.12.0 - version: 8.17.1 + version: 8.12.0 chokidar: specifier: ^3.6.0 version: 3.6.0 @@ -352,7 +358,7 @@ importers: version: 13.1.2 micromatch: specifier: ^4.0.5 - version: 4.0.8 + version: 4.0.5 path-browserify: specifier: ^1.0.1 version: 1.0.1 @@ -373,7 +379,7 @@ importers: version: 5.0.10 start-server-and-test: specifier: ^2.0.3 - version: 2.0.8 + version: 2.0.7 type-fest: specifier: ^4.13.1 version: 4.26.1 @@ -394,10 +400,10 @@ importers: version: 5.0.0 vitepress: specifier: ^1.0.1 - version: 1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.4.47)(search-insights@2.17.2)(terser@5.34.1)(typescript@5.4.5) + version: 1.3.4(@algolia/client-search@4.19.1)(@types/node@20.16.5)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.4.5) vitepress-plugin-search: specifier: 1.0.4-alpha.22 - version: 1.0.4-alpha.22(flexsearch@0.7.43)(vitepress@1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.4.47)(search-insights@2.17.2)(terser@5.34.1)(typescript@5.4.5))(vue@3.5.11(typescript@5.4.5)) + version: 1.0.4-alpha.22(flexsearch@0.7.31)(vitepress@1.3.4(@algolia/client-search@4.19.1)(@types/node@20.16.5)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.4.5))(vue@3.5.4(typescript@5.4.5)) packages/mermaid-example-diagram: dependencies: @@ -411,12 +417,12 @@ importers: specifier: ^2.1.0 version: 2.1.0 devDependencies: + '@mermaid-chart/mermaid': + specifier: workspace:* + version: link:../mermaid concurrently: specifier: ^8.2.2 version: 8.2.2 - mermaid: - specifier: workspace:* - version: link:../mermaid rimraf: specifier: ^5.0.5 version: 5.0.10 @@ -430,20 +436,23 @@ importers: specifier: ^0.9.3 version: 0.9.3 devDependencies: + '@mermaid-chart/mermaid': + specifier: workspace:^ + version: link:../mermaid '@types/d3': specifier: ^7.4.3 version: 7.4.3 - mermaid: - specifier: workspace:^ - version: link:../mermaid packages/mermaid-zenuml: dependencies: '@zenuml/core': specifier: ^3.23.27 - version: 3.24.12(typescript@5.6.2) - devDependencies: + version: 3.24.5(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.6.3))(typescript@5.6.3) mermaid: + specifier: ^10 || ^11 + version: 11.2.0 + devDependencies: + '@mermaid-chart/mermaid': specifier: workspace:^ version: link:../mermaid @@ -452,21 +461,21 @@ importers: '@mdi/font': specifier: ^7.0.0 version: 7.4.47 + '@mermaid-chart/mermaid': + specifier: workspace:^ + version: link:../.. '@vueuse/core': specifier: ^10.9.0 - version: 10.11.1(vue@3.5.11(typescript@5.6.2)) + version: 10.11.1(vue@3.4.21(typescript@5.6.3)) font-awesome: specifier: ^4.7.0 version: 4.7.0 jiti: specifier: ^1.21.0 - version: 1.21.6 - mermaid: - specifier: workspace:^ - version: link:../.. + version: 1.21.0 vue: specifier: ^3.4.21 - version: 3.5.11(typescript@5.6.2) + version: 3.4.21(typescript@5.6.3) devDependencies: '@iconify-json/carbon': specifier: ^1.1.31 @@ -476,10 +485,10 @@ importers: version: 0.59.4 '@vite-pwa/vitepress': specifier: ^0.4.0 - version: 0.4.0(vite-plugin-pwa@0.19.8(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0)) + version: 0.4.0(vite-plugin-pwa@0.19.8(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0))(workbox-build@7.0.0(@types/babel__core@7.20.1))(workbox-window@7.0.0)) '@vitejs/plugin-vue': specifier: ^5.0.0 - version: 5.1.4(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))(vue@3.5.11(typescript@5.6.2)) + version: 5.1.4(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0))(vue@3.4.21(typescript@5.6.3)) fast-glob: specifier: ^3.3.2 version: 3.3.2 @@ -491,22 +500,22 @@ importers: version: 1.1.2 unocss: specifier: ^0.59.0 - version: 0.59.4(postcss@8.4.47)(rollup@2.79.2)(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1)) + version: 0.59.4(postcss@8.5.1)(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0)) unplugin-vue-components: specifier: ^0.26.0 - version: 0.26.0(@babel/parser@7.25.7)(rollup@2.79.2)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) + version: 0.26.0(@babel/parser@7.26.7)(rollup@2.79.2)(vue@3.4.21(typescript@5.6.3)) vite: specifier: ^5.0.0 - version: 5.4.8(@types/node@20.16.11)(terser@5.34.1) + version: 5.4.12(@types/node@20.16.5)(terser@5.37.0) vite-plugin-pwa: specifier: ^0.19.7 - version: 0.19.8(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) + version: 0.19.8(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0))(workbox-build@7.0.0(@types/babel__core@7.20.1))(workbox-window@7.0.0) vitepress: specifier: 1.1.4 - version: 1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.4.47)(search-insights@2.17.2)(terser@5.34.1)(typescript@5.6.2) + version: 1.1.4(@algolia/client-search@4.19.1)(@types/node@20.16.5)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.6.3) workbox-window: specifier: ^7.0.0 - version: 7.1.0 + version: 7.0.0 packages/parser: dependencies: @@ -520,25 +529,29 @@ importers: tests/webpack: dependencies: + '@mermaid-chart/mermaid': + specifier: workspace:* + version: link:../../packages/mermaid '@mermaid-js/mermaid-example-diagram': specifier: workspace:* version: link:../../packages/mermaid-example-diagram - mermaid: - specifier: workspace:* - version: link:../../packages/mermaid devDependencies: webpack: specifier: ^5.91.0 - version: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) + version: 5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0) webpack-cli: specifier: ^4.10.0 - version: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + version: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0) webpack-dev-server: specifier: ^4.15.2 - version: 4.15.2(webpack-cli@4.10.0)(webpack@5.95.0) + version: 4.15.2(webpack-cli@4.10.0)(webpack@5.94.0) packages: + '@aashutoshrathi/word-wrap@1.2.6': + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + '@actions/core@1.11.1': resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==} @@ -576,55 +589,56 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/cache-browser-local-storage@4.24.0': - resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==} + '@algolia/cache-browser-local-storage@4.19.1': + resolution: {integrity: sha512-FYAZWcGsFTTaSAwj9Std8UML3Bu8dyWDncM7Ls8g+58UOe4XYdlgzXWbrIgjaguP63pCCbMoExKr61B+ztK3tw==} - '@algolia/cache-common@4.24.0': - resolution: {integrity: sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==} + '@algolia/cache-common@4.19.1': + resolution: {integrity: sha512-XGghi3l0qA38HiqdoUY+wvGyBsGvKZ6U3vTiMBT4hArhP3fOGLXpIINgMiiGjTe4FVlTa5a/7Zf2bwlIHfRqqg==} - '@algolia/cache-in-memory@4.24.0': - resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} + '@algolia/cache-in-memory@4.19.1': + resolution: {integrity: sha512-+PDWL+XALGvIginigzu8oU6eWw+o76Z8zHbBovWYcrtWOEtinbl7a7UTt3x3lthv+wNuFr/YD1Gf+B+A9V8n5w==} - '@algolia/client-account@4.24.0': - resolution: {integrity: sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==} + '@algolia/client-account@4.19.1': + resolution: {integrity: sha512-Oy0ritA2k7AMxQ2JwNpfaEcgXEDgeyKu0V7E7xt/ZJRdXfEpZcwp9TOg4TJHC7Ia62gIeT2Y/ynzsxccPw92GA==} - '@algolia/client-analytics@4.24.0': - resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} + '@algolia/client-analytics@4.19.1': + resolution: {integrity: sha512-5QCq2zmgdZLIQhHqwl55ZvKVpLM3DNWjFI4T+bHr3rGu23ew2bLO4YtyxaZeChmDb85jUdPDouDlCumGfk6wOg==} - '@algolia/client-common@4.24.0': - resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} + '@algolia/client-common@4.19.1': + resolution: {integrity: sha512-3kAIVqTcPrjfS389KQvKzliC559x+BDRxtWamVJt8IVp7LGnjq+aVAXg4Xogkur1MUrScTZ59/AaUd5EdpyXgA==} - '@algolia/client-personalization@4.24.0': - resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} + '@algolia/client-personalization@4.19.1': + resolution: {integrity: sha512-8CWz4/H5FA+krm9HMw2HUQenizC/DxUtsI5oYC0Jxxyce1vsr8cb1aEiSJArQT6IzMynrERif1RVWLac1m36xw==} - '@algolia/client-search@4.24.0': - resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} + '@algolia/client-search@4.19.1': + resolution: {integrity: sha512-mBecfMFS4N+yK/p0ZbK53vrZbL6OtWMk8YmnOv1i0LXx4pelY8TFhqKoTit3NPVPwoSNN0vdSN9dTu1xr1XOVw==} - '@algolia/logger-common@4.24.0': - resolution: {integrity: sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==} + '@algolia/logger-common@4.19.1': + resolution: {integrity: sha512-i6pLPZW/+/YXKis8gpmSiNk1lOmYCmRI6+x6d2Qk1OdfvX051nRVdalRbEcVTpSQX6FQAoyeaui0cUfLYW5Elw==} - '@algolia/logger-console@4.24.0': - resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} + '@algolia/logger-console@4.19.1': + resolution: {integrity: sha512-jj72k9GKb9W0c7TyC3cuZtTr0CngLBLmc8trzZlXdfvQiigpUdvTi1KoWIb2ZMcRBG7Tl8hSb81zEY3zI2RlXg==} - '@algolia/recommend@4.24.0': - resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} + '@algolia/requester-browser-xhr@4.19.1': + resolution: {integrity: sha512-09K/+t7lptsweRTueHnSnmPqIxbHMowejAkn9XIcJMLdseS3zl8ObnS5GWea86mu3vy4+8H+ZBKkUN82Zsq/zg==} - '@algolia/requester-browser-xhr@4.24.0': - resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} + '@algolia/requester-common@4.19.1': + resolution: {integrity: sha512-BisRkcWVxrDzF1YPhAckmi2CFYK+jdMT60q10d7z3PX+w6fPPukxHRnZwooiTUrzFe50UBmLItGizWHP5bDzVQ==} - '@algolia/requester-common@4.24.0': - resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} + '@algolia/requester-node-http@4.19.1': + resolution: {integrity: sha512-6DK52DHviBHTG2BK/Vv2GIlEw7i+vxm7ypZW0Z7vybGCNDeWzADx+/TmxjkES2h15+FZOqVf/Ja677gePsVItA==} - '@algolia/requester-node-http@4.24.0': - resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} - - '@algolia/transporter@4.24.0': - resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} + '@algolia/transporter@4.19.1': + resolution: {integrity: sha512-nkpvPWbpuzxo1flEYqNIbGz7xhfhGOKGAZS7tzC+TELgEmi7z99qRyTfNSUlW7LZmB3ACdnqAo+9A9KFBENviQ==} '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + '@ampproject/remapping@2.2.1': + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -650,11 +664,6 @@ packages: engines: {node: '>=12.13.0'} hasBin: true - '@applitools/core@4.19.0': - resolution: {integrity: sha512-OzGSZpRTouDFidzZx7IpqStoVThBz5ympBI6iowh1xkfbVRsRjKXaHIjCuB3TAkfTNy4V7lm2Pmzex7Dn4Fq1w==} - engines: {node: '>=12.13.0'} - hasBin: true - '@applitools/css-tree@1.1.4': resolution: {integrity: sha512-rH3aq/dkTweEUgS/MKuthD79CZDqpQVJlqmxqVxLZVAzbeFxYdTG/gnfG0zj6YJ025jzcPH2ktdW16Rl3QLutg==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} @@ -663,10 +672,6 @@ packages: resolution: {integrity: sha512-8E5rjsuivGWx1TtZsjhwo32gF02dzwqvHf8NaN2fK+DTyomUvrh4QRD0ufUlKNeXIJhlVVgzjOkdfKjDj5pT/A==} engines: {node: '>=12.13.0'} - '@applitools/dom-capture@11.5.0': - resolution: {integrity: sha512-frsa+nztrxN0YyfnFNQ3fxs6Q8A93YmtqWw7v2rywv2vGk0bo1VzobFbfIFvwHEwk+oghobV+w94NdYk9jPVZA==} - engines: {node: '>=12.13.0'} - '@applitools/dom-shared@1.0.15': resolution: {integrity: sha512-XN77SPfzXriU1x6gTcublSe0yUJHxlYwHesOnWQov2dMVfHx7y3qp0yrjdVC7LO2bDIJIzDlPJRhfg2otlbxig==} engines: {node: '>=12.13.0'} @@ -679,20 +684,11 @@ packages: resolution: {integrity: sha512-fXNvT08/uR87Wi2nNURT9YXJYV/2ZG6DnKutk3jxsp29uNJXaHfruMXoA0p6guAWzo9gw592K0GKLTn1BB/3YA==} engines: {node: '>=12.13.0'} - '@applitools/driver@1.19.1': - resolution: {integrity: sha512-SWTOtdALeqrmaYo+gzeWupB3C4yDCNwEq/RFykW7k41yFg4145B/BgmubZjteDAr6W+4vmE8vXtbVWHNGPuFfA==} - engines: {node: '>=12.13.0'} - '@applitools/ec-client@1.9.4': resolution: {integrity: sha512-PFuvt/XrJxzoy/fXeLTq+bE5+0mitV0whi4MUWZAnESIvHj3k3+oUUTZxPmRQEiR1zzxGvN7ar3sMQfiW+houA==} engines: {node: '>=12.13.0'} hasBin: true - '@applitools/ec-client@1.9.5': - resolution: {integrity: sha512-B2HvmSq5wKjszbV8y1b5jdMdQzR1izQ3DK3Egc/Y4ye/TXvuzsx6/t7/iV5TwLvGoS2jPWOr/iTgl3cCJjXUIg==} - engines: {node: '>=12.13.0'} - hasBin: true - '@applitools/eg-frpc@1.0.5': resolution: {integrity: sha512-9qUNiCK3R3VKxIAaLr5HO5QnUx6TioLFkJ2JcpU1ZqefApt1X2bdfS7eA4TGDXDWv/a0OIl2Lddzuo5/h3vbTw==} engines: {node: '>=12.13.0'} @@ -706,8 +702,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - '@applitools/eyes-cypress@3.44.9': - resolution: {integrity: sha512-hWwo02uMeFkwU7bG2396DqKrOsjMxAMowaIH8okP09ZPgK+nSJbnIHM111nj+4+eLKx4WAyDa9JljILuXZ4x9A==} + '@applitools/eyes-cypress@3.44.8': + resolution: {integrity: sha512-dF5TckVVoF9nSQXQT0qdadNO3+R3dlUaFeQoCV58JAz696LtP0U0GexlD8gaqiCWtI7Fq08X32TUiJW4URAJ9w==} engines: {node: '>=12.13.0'} hasBin: true @@ -735,10 +731,6 @@ packages: resolution: {integrity: sha512-avoZnD39XrWJg5x7PiFv+58YEDLbWPRIb+dHrH9LVD1HcQC8tmht2KfVLnTJLJtJgRQojqZh5H8rmplfT46t8w==} engines: {node: '>=12.13.0'} - '@applitools/nml-client@1.8.11': - resolution: {integrity: sha512-Zoyjo9slRbvCGb/ldScNxTvRig5nuUdogXeiyV8jcKUocqb0LLfZZyNRRHnA0bmSk31mjqfB8HLG1wgBIKZ/eQ==} - engines: {node: '>=12.13.0'} - '@applitools/req@1.7.2': resolution: {integrity: sha512-L0tjPFGEJFAEGaifqtmtCghjkG7M0wnEwfzbHi6O+ThtTCbg4JSDRTaNvA+PLXQoS0mFvajG40/t5a4EgAG7QQ==} engines: {node: '>=16.13.0'} @@ -747,18 +739,10 @@ packages: resolution: {integrity: sha512-bzl+fs3c4L6J2t/PELxmoMGc40ZvjaExD0PMM6GvbNp3uPbDtGS348DC1ZYsSl481OxTae/uiO/iVOQP4bNZCQ==} engines: {node: '>=12.13.0'} - '@applitools/screenshoter@3.8.37': - resolution: {integrity: sha512-il7clR9bd3E2QzjWfR/JafmUyrykvQN8EzqaFG4rfNO5IUYYP/K2rYGAbWykk220weI3r9S09QrSDWVHwNJgHw==} - engines: {node: '>=12.13.0'} - '@applitools/snippets@2.4.27': resolution: {integrity: sha512-n6ckwbXWyJ+/DoV1T6bRiGXITgTgjayV0j4AzHiBx+HF3JdzygxIkWtn7yl1dJfzeqEGyrtBK6Sq1tTG2GoQcA==} engines: {node: '>=12.13.0'} - '@applitools/snippets@2.5.0': - resolution: {integrity: sha512-7PoDf2Xub68q7bfEcSxzRIOsK+QPUEzCKO5X3YKEq7/y55G1bFalZiY+V0TZEgIu4SSbq8BmCos9798w1J31uA==} - engines: {node: '>=12.13.0'} - '@applitools/socket@1.1.18': resolution: {integrity: sha512-EMI/MMfVH38ucuZhFWOTUR8cPvuoP9b+xi5yBJF8uLlJjxQEmGnvm+Pm3s9o3mfxQzDRddYGtpIo3TTZhMVZdQ==} engines: {node: '>=12.13.0'} @@ -769,12 +753,6 @@ packages: peerDependencies: webdriver: '>=6.0.0' - '@applitools/spec-driver-webdriver@1.1.13': - resolution: {integrity: sha512-LcX4mbXdptPjcgRifUvV17pANVhjMiSEYkfZkP0G/ZuPi1czQvgzsSkjeYTKuKJJYLaP19h4CFNjNttD3mSsDQ==} - engines: {node: '>=12.13.0'} - peerDependencies: - webdriver: '>=6.0.0' - '@applitools/tunnel-client@1.5.8': resolution: {integrity: sha512-SJByl2/I0NftENw5NvW+nHN+Vq64b0aeTsdCTYKhDhJBWqPEkGYwRR5ziYpk8MWYsL2hWcPUfg/S/hS+M3zmDg==} engines: {node: '>=12.13.0'} @@ -792,20 +770,20 @@ packages: resolution: {integrity: sha512-qgJqx2yjlJBf79YyFehf1nSp4AXOdzJn3POQyg8CMWV0YH6HsjAfJjYaNrbXFcGYCSpPEJGhGehxC7GVKHX3YA==} engines: {node: '>=12.13.0'} - '@argos-ci/api-client@0.5.0': - resolution: {integrity: sha512-syJJmvLtJKQYXDmGYRb+ZKpzpSk/dReqhZZm2tnWn7ThxHaJRJ7Wu3J5nqDpCP3LxoYCVfvV/dmfoJO0v8+PbQ==} + '@argos-ci/api-client@0.5.1': + resolution: {integrity: sha512-WlA/AqREpCteZJmJYLjGEi5v4cx3+Cx3/audR6aj6wJ959oMpKX5N/auI8M2DJI1xUqiE7/RIwYkojrYz6AwEg==} engines: {node: '>=18.0.0'} '@argos-ci/browser@2.1.4': resolution: {integrity: sha512-GursnbWL01wN92hRgEsa0c55ih9Sp6qGeYIXFWP4o42FDzm98LbxIy2e1WS+ezP+gBwsSBEMBTGcGCSSmVzacg==} engines: {node: '>=18.0.0'} - '@argos-ci/core@2.8.1': - resolution: {integrity: sha512-5ygruMnfQ3OY6LvywnwTycZFg6oTG5UYvPCVdwQiOh+8FgUZUyJge7QBVfeWW+qC0UXFMo+f3eTQ5YFvTwc0ZA==} + '@argos-ci/core@2.8.2': + resolution: {integrity: sha512-qEtHje4bZgqDd1XhjTya8NV+pHdtzPuR/sYAyyX53hb9PycfUj3TCZ1u5HfSGGeuFb3D7ctWuo5N7whXugFY8g==} engines: {node: '>=18.0.0'} - '@argos-ci/cypress@2.2.2': - resolution: {integrity: sha512-lwXu6y5DcP4ufYQEom4JtHSHjIYul6+GB4pniC8S97mfXLYq6KITJD4JHbrnfIiQGuV1xNPIaBc4MWX+atFDuw==} + '@argos-ci/cypress@2.2.3': + resolution: {integrity: sha512-p3vvS/dmMvEVI9y8wwu/miFY0DLak0SH8nKYNe8VkAPHuR2XlA/7BuaCXH6ZxBgaOG83fJ4tbUWL7jY7JlGxpg==} engines: {node: '>=18.0.0'} peerDependencies: cypress: ^12.0.0 || ^13.0.0 @@ -814,148 +792,340 @@ packages: resolution: {integrity: sha512-UyACLQe9rvCPbo9muhrLte1AD75kQlcGBuecjmaotaF9MBMj+9Yz+TYs1jJrlLMgqowfIgbXjBYmkXRUn36tCg==} engines: {node: '>=18.0.0'} - '@babel/code-frame@7.25.7': - resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} + '@babel/code-frame@7.22.10': + resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.7': - resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} + '@babel/code-frame@7.23.5': + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} - '@babel/core@7.25.7': - resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.7': - resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.7': - resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} + '@babel/compat-data@7.22.9': + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} - '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': - resolution: {integrity: sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==} + '@babel/compat-data@7.25.4': + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.7': - resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} + '@babel/compat-data@7.26.5': + resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.25.7': - resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} + '@babel/core@7.22.10': + resolution: {integrity: sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.23.5': + resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.7': + resolution: {integrity: sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.22.10': + resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.23.5': + resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.25.6': + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.5': + resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.24.7': + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.22.10': + resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.22.15': + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.25.4': + resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.25.7': - resolution: {integrity: sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==} + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.2': - resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} + '@babel/helper-create-regexp-features-plugin@7.26.3': + resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.3': + resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-member-expression-to-functions@7.25.7': - resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==} + '@babel/helper-environment-visitor@7.22.20': + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.7': - resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} + '@babel/helper-function-name@7.23.0': + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.25.7': - resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} + '@babel/helper-hoist-variables@7.22.5': + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.22.15': + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.22.5': + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.22.9': + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.25.7': - resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.25.7': - resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-remap-async-to-generator@7.25.7': - resolution: {integrity: sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==} + '@babel/helper-module-transforms@7.23.3': + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.25.7': - resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==} + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.25.7': - resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.24.7': + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} - '@babel/helper-skip-transparent-expression-wrappers@7.25.7': - resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.7': - resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} + '@babel/helper-plugin-utils@7.22.5': + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.7': - resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.7': - resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.25.7': - resolution: {integrity: sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==} + '@babel/helper-remap-async-to-generator@7.25.9': + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.25.0': + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.22.5': + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.25.7': - resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.22.6': + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.23.4': + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.22.20': + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.23.5': + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.25.9': + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.22.10': + resolution: {integrity: sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.23.5': + resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.25.6': + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.7': + resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.23.4': + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} '@babel/highlight@7.25.7': resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.25.7': - resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} + '@babel/parser@7.24.0': + resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7': - resolution: {integrity: sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==} + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.26.7': + resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7': - resolution: {integrity: sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7': - resolution: {integrity: sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7': - resolution: {integrity: sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7': - resolution: {integrity: sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -981,30 +1151,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + '@babel/plugin-syntax-import-assertions@7.26.0': + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-dynamic-import@7.8.3': - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-export-namespace-from@7.8.3': - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.25.7': - resolution: {integrity: sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.25.7': - resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==} + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1019,8 +1173,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.25.7': - resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} + '@babel/plugin-syntax-jsx@7.23.3': + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.24.7': + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1055,20 +1215,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-top-level-await@7.14.5': resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.25.7': - resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} + '@babel/plugin-syntax-typescript@7.23.3': + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.4': + resolution: {integrity: sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1079,308 +1239,320 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-arrow-functions@7.25.7': - resolution: {integrity: sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==} + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.25.7': - resolution: {integrity: sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==} + '@babel/plugin-transform-async-generator-functions@7.25.9': + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.25.7': - resolution: {integrity: sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==} + '@babel/plugin-transform-async-to-generator@7.25.9': + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.25.7': - resolution: {integrity: sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==} + '@babel/plugin-transform-block-scoped-functions@7.26.5': + resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.25.7': - resolution: {integrity: sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==} + '@babel/plugin-transform-block-scoping@7.25.9': + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.25.7': - resolution: {integrity: sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==} + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.25.7': - resolution: {integrity: sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==} + '@babel/plugin-transform-class-static-block@7.26.0': + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.25.7': - resolution: {integrity: sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==} + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.25.7': - resolution: {integrity: sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==} + '@babel/plugin-transform-computed-properties@7.25.9': + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.25.7': - resolution: {integrity: sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==} + '@babel/plugin-transform-destructuring@7.25.9': + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.25.7': - resolution: {integrity: sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==} + '@babel/plugin-transform-dotall-regex@7.25.9': + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.25.7': - resolution: {integrity: sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==} + '@babel/plugin-transform-duplicate-keys@7.25.9': + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7': - resolution: {integrity: sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-dynamic-import@7.25.7': - resolution: {integrity: sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w==} + '@babel/plugin-transform-dynamic-import@7.25.9': + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.25.7': - resolution: {integrity: sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==} + '@babel/plugin-transform-exponentiation-operator@7.26.3': + resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.25.7': - resolution: {integrity: sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==} + '@babel/plugin-transform-export-namespace-from@7.25.9': + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.25.7': - resolution: {integrity: sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==} + '@babel/plugin-transform-for-of@7.25.9': + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.25.7': - resolution: {integrity: sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==} + '@babel/plugin-transform-function-name@7.25.9': + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.25.7': - resolution: {integrity: sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==} + '@babel/plugin-transform-json-strings@7.25.9': + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.25.7': - resolution: {integrity: sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==} + '@babel/plugin-transform-literals@7.25.9': + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.25.7': - resolution: {integrity: sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==} + '@babel/plugin-transform-logical-assignment-operators@7.25.9': + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.25.7': - resolution: {integrity: sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==} + '@babel/plugin-transform-member-expression-literals@7.25.9': + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.25.7': - resolution: {integrity: sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==} + '@babel/plugin-transform-modules-amd@7.25.9': + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.25.7': - resolution: {integrity: sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==} + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.25.7': - resolution: {integrity: sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==} + '@babel/plugin-transform-modules-commonjs@7.26.3': + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.25.7': - resolution: {integrity: sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==} + '@babel/plugin-transform-modules-systemjs@7.25.9': + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.25.7': - resolution: {integrity: sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==} + '@babel/plugin-transform-modules-umd@7.25.9': + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.25.7': - resolution: {integrity: sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==} + '@babel/plugin-transform-new-target@7.25.9': + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.25.7': - resolution: {integrity: sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==} + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': + resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.25.7': - resolution: {integrity: sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==} + '@babel/plugin-transform-numeric-separator@7.25.9': + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.25.7': - resolution: {integrity: sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==} + '@babel/plugin-transform-object-rest-spread@7.25.9': + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.25.7': - resolution: {integrity: sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==} + '@babel/plugin-transform-object-super@7.25.9': + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.25.7': - resolution: {integrity: sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==} + '@babel/plugin-transform-optional-catch-binding@7.25.9': + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.25.7': - resolution: {integrity: sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==} + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.25.7': - resolution: {integrity: sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==} + '@babel/plugin-transform-parameters@7.25.9': + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.25.7': - resolution: {integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==} + '@babel/plugin-transform-private-methods@7.25.9': + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.25.7': - resolution: {integrity: sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==} + '@babel/plugin-transform-private-property-in-object@7.25.9': + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.25.7': - resolution: {integrity: sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==} + '@babel/plugin-transform-property-literals@7.25.9': + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.25.7': - resolution: {integrity: sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==} + '@babel/plugin-transform-regenerator@7.25.9': + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-reserved-words@7.25.7': - resolution: {integrity: sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-shorthand-properties@7.25.7': - resolution: {integrity: sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-spread@7.25.7': - resolution: {integrity: sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-sticky-regex@7.25.7': - resolution: {integrity: sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-template-literals@7.25.7': - resolution: {integrity: sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typeof-symbol@7.25.7': - resolution: {integrity: sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typescript@7.25.7': - resolution: {integrity: sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-escapes@7.25.7': - resolution: {integrity: sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-property-regex@7.25.7': - resolution: {integrity: sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-regex@7.25.7': - resolution: {integrity: sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-sets-regex@7.25.7': - resolution: {integrity: sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==} + '@babel/plugin-transform-regexp-modifiers@7.26.0': + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.25.7': - resolution: {integrity: sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==} + '@babel/plugin-transform-reserved-words@7.25.9': + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.25.9': + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.25.9': + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.25.9': + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.26.7': + resolution: {integrity: sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.25.2': + resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.25.9': + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.25.9': + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9': + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.26.7': + resolution: {integrity: sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1390,26 +1562,62 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-typescript@7.25.7': - resolution: {integrity: sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==} + '@babel/preset-typescript@7.24.7': + resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.25.7': - resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + '@babel/runtime@7.22.10': + resolution: {integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.7': - resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} + '@babel/runtime@7.26.7': + resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.7': - resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} + '@babel/template@7.22.15': + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.7': - resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} + '@babel/template@7.22.5': + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.23.2': + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.23.5': + resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.6': + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.7': + resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.23.5': + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.7': + resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} engines: {node: '>=6.9.0'} '@bcherny/json-schema-ref-parser@10.0.5-fork': @@ -1434,8 +1642,8 @@ packages: '@changesets/changelog-github@0.5.0': resolution: {integrity: sha512-zoeq2LJJVcPJcIotHRJEEA2qCqX0AQIeFE+L21L8sRLPVqDhSXY8ZWAt2sohtBpFZkBwu+LUwMSKRr2lMy3LJA==} - '@changesets/cli@2.27.9': - resolution: {integrity: sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==} + '@changesets/cli@2.27.8': + resolution: {integrity: sha512-gZNyh+LdSsI82wBSHLQ3QN5J30P4uHKJ4fXgoGwQxfXwYFTJzDdvIJasZn8rYQtmKhyQuiBj4SSnLuKlxKWq4w==} hasBin: true '@changesets/config@3.0.3': @@ -1506,40 +1714,72 @@ packages: resolution: {integrity: sha512-JHZOpCJzN6fPBapBOvoeMxZbr0ZA11ZAkwcqM4w0lKoacbi6TwK8GIYf66hHvwLmMeav75TNXWE6aPTvBLMMqA==} engines: {node: '>=18'} - '@cspell/cspell-json-reporter@8.14.4': - resolution: {integrity: sha512-gJ6tQbGCNLyHS2iIimMg77as5MMAFv3sxU7W6tjLlZp8htiNZS7fS976g24WbT/hscsTT9Dd0sNHkpo8K3nvVw==} + '@cspell/cspell-bundled-dicts@8.6.0': + resolution: {integrity: sha512-hRVvir4G4276Kz/Cru34AJg1FObIw5MrzezAwHkD3obNMwZkof8aX3MEN6AzWusJSVG2ZxZxZAEnYbgqvGr2Fg==} + engines: {node: '>=18'} + + '@cspell/cspell-json-reporter@8.6.0': + resolution: {integrity: sha512-fPpE4a3zpdfwgTyfLgCmxZn4owkZ4IP6A/oL4XLW22IxW5xBIbXEveOSY+uiWAnVfEnqfrMNRLAGj7JoXnJ1Vg==} engines: {node: '>=18'} '@cspell/cspell-pipe@8.14.4': resolution: {integrity: sha512-CLLdouqfrQ4rqdQdPu0Oo+HHCU/oLYoEsK1nNPb28cZTFxnn0cuSPKB6AMPBJmMwdfJ6fMD0BCKNbEe1UNLHcw==} engines: {node: '>=18'} + '@cspell/cspell-pipe@8.6.0': + resolution: {integrity: sha512-gbAZksz38OHaN8s4fOmmgtgQfie1K8dRGlo9z/uxSx5FIELV48GWTbHn9t1TY2yBXBwJ7+4NF2+r624rtlPoHQ==} + engines: {node: '>=18'} + '@cspell/cspell-resolver@8.14.4': resolution: {integrity: sha512-s3uZyymJ04yn8+zlTp7Pt1WRSlAel6XVo+iZRxls3LSvIP819KK64DoyjCD2Uon0Vg9P/K7aAPt8GcxDcnJtgA==} engines: {node: '>=18'} + '@cspell/cspell-resolver@8.6.0': + resolution: {integrity: sha512-ARwO6TWKy8fLHNhC/ls5Wo/AK86E1oLVChwWtHdq7eVyEUIykQaXGLqoRThkIT2jyLfGDrhSvaU+yqcXVLE48Q==} + engines: {node: '>=18'} + '@cspell/cspell-service-bus@8.14.4': resolution: {integrity: sha512-i3UG+ep63akNsDXZrtGgICNF3MLBHtvKe/VOIH6+L+NYaAaVHqqQvOY9MdUwt1HXh8ElzfwfoRp36wc5aAvt6g==} engines: {node: '>=18'} + '@cspell/cspell-service-bus@8.6.0': + resolution: {integrity: sha512-veCGlhlNGmYMgzX/rMiDp8j7ndLxFHIZq3h6DNlIsIoSjP1v5Rk6UcCwEoWYexwKmNXo7c2VooB0GM9LSBcPAQ==} + engines: {node: '>=18'} + '@cspell/cspell-types@8.14.4': resolution: {integrity: sha512-VXwikqdHgjOVperVVCn2DOe8W3rPIswwZtMHfRYnagpzZo/TOntIjkXPJSfTtl/cFyx5DnCBsDH8ytKGlMeHkw==} engines: {node: '>=18'} + '@cspell/cspell-types@8.6.0': + resolution: {integrity: sha512-+CU/nuFOpswJAA3IS2TcKGskfM/o/4aNG1IMUVaOEQi1Sc5qZQ4Wj1qDIWJArSHFYW1Q4XFa4U8K1jnVHkAhZQ==} + engines: {node: '>=18'} + '@cspell/dict-ada@4.0.2': resolution: {integrity: sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA==} + '@cspell/dict-aws@4.0.1': + resolution: {integrity: sha512-NXO+kTPQGqaaJKa4kO92NAXoqS+i99dQzf3/L1BxxWVSBS3/k1f3uhmqIh7Crb/n22W793lOm0D9x952BFga3Q==} + '@cspell/dict-aws@4.0.4': resolution: {integrity: sha512-6AWI/Kkf+RcX/J81VX8+GKLeTgHWEr/OMhGk3dHQzWK66RaqDJCGDqi7494ghZKcBB7dGa3U5jcKw2FZHL/u3w==} - '@cspell/dict-bash@4.1.5': - resolution: {integrity: sha512-YGim/h7E2U5HCCb2ckNufT6/yyWygt9nSZ5C7qw6oOD3bygbObqD1+rlPor1JW+YyO+3GwTIHE70uKEEU6VZYw==} + '@cspell/dict-bash@4.1.3': + resolution: {integrity: sha512-tOdI3QVJDbQSwPjUkOiQFhYcu2eedmX/PtEpVWg0aFps/r6AyjUQINtTgpqMYnYuq8O1QUIQqnpx21aovcgZCw==} + + '@cspell/dict-bash@4.1.4': + resolution: {integrity: sha512-W/AHoQcJYn3Vn/tUiXX2+6D/bhfzdDshwcbQWv9TdiNlXP9P6UJjDKWbxyA5ogJCsR2D0X9Kx11oV8E58siGKQ==} + + '@cspell/dict-companies@3.0.31': + resolution: {integrity: sha512-hKVpV/lcGKP4/DpEPS8P4osPvFH/YVLJaDn9cBIOH6/HSmL5LbFgJNKpMGaYRbhm2FEX56MKE3yn/MNeNYuesQ==} '@cspell/dict-companies@3.1.4': resolution: {integrity: sha512-y9e0amzEK36EiiKx3VAA+SHQJPpf2Qv5cCt5eTUSggpTkiFkCh6gRKQ97rVlrKh5GJrqinDwYIJtTsxuh2vy2Q==} - '@cspell/dict-cpp@5.1.19': - resolution: {integrity: sha512-i/odUPNFLdqWisOktu6c4qjUR4k+P9Al2RCri3Wso9EFblp53xt/5jIUdGMdDDVQGqX7s/KLtdqNxNKqP3/d+w==} + '@cspell/dict-cpp@5.1.16': + resolution: {integrity: sha512-32fU5RkuOM55IRcxjByiSoKbjr+C4danDfYjHaQNRWdvjzJzci3fLDGA2wTXiclkgDODxGiV8LCTUwCz+3TNWA==} + + '@cspell/dict-cpp@5.1.3': + resolution: {integrity: sha512-sqnriXRAInZH9W75C+APBh6dtben9filPqVbIsiRMUXGg+s02ekz0z6LbS7kXeJ5mD2qXoMLBrv13qH2eIwutQ==} '@cspell/dict-cryptocurrencies@5.0.0': resolution: {integrity: sha512-Z4ARIw5+bvmShL+4ZrhDzGhnc9znaAGHOEMaB/GURdS/jdoreEDY34wdN0NtdLHDO5KO7GduZnZyqGdRoiSmYA==} @@ -1547,14 +1787,23 @@ packages: '@cspell/dict-csharp@4.0.2': resolution: {integrity: sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g==} + '@cspell/dict-css@4.0.12': + resolution: {integrity: sha512-vGBgPM92MkHQF5/2jsWcnaahOZ+C6OE/fPvd5ScBP72oFY9tn5GLuomcyO0z8vWCr2e0nUSX1OGimPtcQAlvSw==} + '@cspell/dict-css@4.0.13': resolution: {integrity: sha512-WfOQkqlAJTo8eIQeztaH0N0P+iF5hsJVKFuhy4jmARPISy8Efcv8QXk2/IVbmjJH0/ZV7dKRdnY5JFVXuVz37g==} + '@cspell/dict-dart@2.0.3': + resolution: {integrity: sha512-cLkwo1KT5CJY5N5RJVHks2genFkNCl/WLfj+0fFjqNR+tk3tBI1LY7ldr9piCtSFSm4x9pO1x6IV3kRUY1lLiw==} + '@cspell/dict-dart@2.2.1': resolution: {integrity: sha512-yriKm7QkoPx3JPSSOcw6iX9gOb2N50bOo/wqWviqPYbhpMRh9Xiv6dkUy3+ot+21GuShZazO8X6U5+Vw67XEwg==} - '@cspell/dict-data-science@2.0.2': - resolution: {integrity: sha512-VwAck6OZQVqrscKyOrvllixIugIPF+Q6YoFNvXZCPhHGtNyOAVraD3S7kOgPYBdUjgno4QbdMWm92BUPqL1QjQ==} + '@cspell/dict-data-science@1.0.11': + resolution: {integrity: sha512-TaHAZRVe0Zlcc3C23StZqqbzC0NrodRwoSAc8dis+5qLeLLnOCtagYQeROQvDlcDg3X/VVEO9Whh4W/z4PAmYQ==} + + '@cspell/dict-data-science@2.0.1': + resolution: {integrity: sha512-xeutkzK0eBe+LFXOFU2kJeAYO6IuFUc1g7iRLr7HeCmlC4rsdGclwGHh61KmttL3+YHQytYStxaRBdGAXWC8Lw==} '@cspell/dict-django@4.1.0': resolution: {integrity: sha512-bKJ4gPyrf+1c78Z0Oc4trEB9MuhcB+Yg+uTTWsvhY6O2ncFYbB/LbEZfqhfmmuK/XJJixXfI1laF2zicyf+l0w==} @@ -1562,21 +1811,33 @@ packages: '@cspell/dict-docker@1.1.7': resolution: {integrity: sha512-XlXHAr822euV36GGsl2J1CkBIVg3fZ6879ZOg5dxTIssuhUOCiV2BuzKZmt6aIFmcdPmR14+9i9Xq+3zuxeX0A==} + '@cspell/dict-dotnet@5.0.0': + resolution: {integrity: sha512-EOwGd533v47aP5QYV8GlSSKkmM9Eq8P3G/eBzSpH3Nl2+IneDOYOBLEUraHuiCtnOkNsz0xtZHArYhAB2bHWAw==} + '@cspell/dict-dotnet@5.0.5': resolution: {integrity: sha512-gjg0L97ee146wX47dnA698cHm85e7EOpf9mVrJD8DmEaqoo/k1oPy2g7c7LgKxK9XnqwoXxhLNnngPrwXOoEtQ==} '@cspell/dict-elixir@4.0.3': resolution: {integrity: sha512-g+uKLWvOp9IEZvrIvBPTr/oaO6619uH/wyqypqvwpmnmpjcfi8+/hqZH8YNKt15oviK8k4CkINIqNhyndG9d9Q==} + '@cspell/dict-en-common-misspellings@2.0.0': + resolution: {integrity: sha512-NOg8dlv37/YqLkCfBs5OXeJm/Wcfb/CzeOmOZJ2ZXRuxwsNuolb4TREUce0yAXRqMhawahY5TSDRJJBgKjBOdw==} + '@cspell/dict-en-common-misspellings@2.0.4': resolution: {integrity: sha512-lvOiRjV/FG4pAGZL3PN2GCVHSTCE92cwhfLGGkOsQtxSmef6WCHfHwp9auafkBlX0yFQSKDfq6/TlpQbjbJBtQ==} '@cspell/dict-en-gb@1.1.33': resolution: {integrity: sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==} + '@cspell/dict-en_us@4.3.17': + resolution: {integrity: sha512-CS0Tb2f2YwQZ4VZ6+WLAO5uOzb0iO/iYSRl34kX4enq6quXxLYzwdfGAwv85wSYHPdga8tGiZFP+p8GPsi2JEg==} + '@cspell/dict-en_us@4.3.23': resolution: {integrity: sha512-l0SoEQBsi3zDSl3OuL4/apBkxjuj4hLIg/oy6+gZ7LWh03rKdF6VNtSZNXWAmMY+pmb1cGA3ouleTiJIglbsIg==} + '@cspell/dict-filetypes@3.0.3': + resolution: {integrity: sha512-J9UP+qwwBLfOQ8Qg9tAsKtSY/WWmjj21uj6zXTI9hRLD1eG1uUOLcfVovAmtmVqUWziPSKMr87F6SXI3xmJXgw==} + '@cspell/dict-filetypes@3.0.4': resolution: {integrity: sha512-IBi8eIVdykoGgIv5wQhOURi5lmCNJq0we6DvqKoPQJHthXbgsuO1qrHSiUVydMiQl/XvcnUWTMeAlVUlUClnVg==} @@ -1589,6 +1850,9 @@ packages: '@cspell/dict-fsharp@1.0.1': resolution: {integrity: sha512-23xyPcD+j+NnqOjRHgW3IU7Li912SX9wmeefcY0QxukbAxJ/vAN4rBpjSwwYZeQPAn3fxdfdNZs03fg+UM+4yQ==} + '@cspell/dict-fullstack@3.1.5': + resolution: {integrity: sha512-6ppvo1dkXUZ3fbYn/wwzERxCa76RtDDl5Afzv2lijLoijGGUw5yYdLBKJnx8PJBGNLh829X352ftE7BElG4leA==} + '@cspell/dict-fullstack@3.2.0': resolution: {integrity: sha512-sIGQwU6G3rLTo+nx0GKyirR5dQSFeTIzFTOrURw51ISf+jKG9a3OmvsVtc2OANfvEAOLOC9Wfd8WYhmsO8KRDQ==} @@ -1598,8 +1862,11 @@ packages: '@cspell/dict-git@3.0.0': resolution: {integrity: sha512-simGS/lIiXbEaqJu9E2VPoYW1OTC2xrwPPXNXFMa2uo/50av56qOuaxDrZ5eH1LidFXwoc8HROCHYeKoNrDLSw==} - '@cspell/dict-golang@6.0.13': - resolution: {integrity: sha512-uBUWi+AjFpluB6qF0rsC1gGyooqXeKPUdWHSmSXW/DCnS5PBSjRW6VWWp8efc1Fanob0QJxiZiYlc4U7oxuG6Q==} + '@cspell/dict-golang@6.0.12': + resolution: {integrity: sha512-LEPeoqd+4O+vceHF73S7D7+LYfrAjOvp4Dqzh4MT30ruzlQ77yHRSuYOJtrFN1GK5ntAt/ILSVOKg9sgsz1Llg==} + + '@cspell/dict-golang@6.0.5': + resolution: {integrity: sha512-w4mEqGz4/wV+BBljLxduFNkMrd3rstBNDXmoX5kD4UTzIb4Sy0QybWCtg2iVT+R0KWiRRA56QKOvBsgXiddksA==} '@cspell/dict-google@1.0.1': resolution: {integrity: sha512-dQr4M3n95uOhtloNSgB9tYYGXGGEGEykkFyRtfcp5pFuEecYUa0BSgtlGKx9RXVtJtKgR+yFT/a5uQSlt8WjqQ==} @@ -1610,15 +1877,24 @@ packages: '@cspell/dict-html-symbol-entities@4.0.0': resolution: {integrity: sha512-HGRu+48ErJjoweR5IbcixxETRewrBb0uxQBd6xFGcxbEYCX8CnQFTAmKI5xNaIt2PKaZiJH3ijodGSqbKdsxhw==} + '@cspell/dict-html@4.0.5': + resolution: {integrity: sha512-p0brEnRybzSSWi8sGbuVEf7jSTDmXPx7XhQUb5bgG6b54uj+Z0Qf0V2n8b/LWwIPJNd1GygaO9l8k3HTCy1h4w==} + '@cspell/dict-html@4.0.6': resolution: {integrity: sha512-cLWHfuOhE4wqwC12up6Doxo2u1xxVhX1A8zriR4CUD+osFQzUIcBK1ykNXppga+rt1WyypaJdTU2eV6OpzYrgQ==} + '@cspell/dict-java@5.0.6': + resolution: {integrity: sha512-kdE4AHHHrixyZ5p6zyms1SLoYpaJarPxrz8Tveo6gddszBVVwIUZ+JkQE1bWNLK740GWzIXdkznpUfw1hP9nXw==} + '@cspell/dict-java@5.0.7': resolution: {integrity: sha512-ejQ9iJXYIq7R09BScU2y5OUGrSqwcD+J5mHFOKbduuQ5s/Eh/duz45KOzykeMLI6KHPVxhBKpUPBWIsfewECpQ==} '@cspell/dict-julia@1.0.1': resolution: {integrity: sha512-4JsCLCRhhLMLiaHpmR7zHFjj1qOauzDI5ZzCNQS31TUMfsOo26jAKDfo0jljFAKgw5M2fEG7sKr8IlPpQAYrmQ==} + '@cspell/dict-k8s@1.0.2': + resolution: {integrity: sha512-tLT7gZpNPnGa+IIFvK9SP1LrSpPpJ94a/DulzAPOb1Q2UBFwdpFd82UWhio0RNShduvKG/WiMZf/wGl98pn+VQ==} + '@cspell/dict-k8s@1.0.6': resolution: {integrity: sha512-srhVDtwrd799uxMpsPOQqeDJY+gEocgZpoK06EFrb4GRYGhv7lXo9Fb+xQMyQytzOW9dw4DNOEck++nacDuymg==} @@ -1637,38 +1913,71 @@ packages: '@cspell/dict-monkeyc@1.0.6': resolution: {integrity: sha512-oO8ZDu/FtZ55aq9Mb67HtaCnsLn59xvhO/t2mLLTHAp667hJFxpp7bCtr2zOrR1NELzFXmKln/2lw/PvxMSvrA==} + '@cspell/dict-node@4.0.3': + resolution: {integrity: sha512-sFlUNI5kOogy49KtPg8SMQYirDGIAoKBO3+cDLIwD4MLdsWy1q0upc7pzGht3mrjuyMiPRUV14Bb0rkVLrxOhg==} + '@cspell/dict-node@5.0.1': resolution: {integrity: sha512-lax/jGz9h3Dv83v8LHa5G0bf6wm8YVRMzbjJPG/9rp7cAGPtdrga+XANFq+B7bY5+jiSA3zvj10LUFCFjnnCCg==} + '@cspell/dict-npm@5.0.15': + resolution: {integrity: sha512-sX0X5YWNW54F4baW7b5JJB6705OCBIZtUqjOghlJNORS5No7QY1IX1zc5FxNNu4gsaCZITAmfMi4ityXEsEThA==} + '@cspell/dict-npm@5.1.5': resolution: {integrity: sha512-oAOGWuJYU3DlO+cAsStKMWN8YEkBue25cRC9EwdiL5Z84nchU20UIoYrLfIQejMlZca+1GyrNeyxRAgn4KiivA==} '@cspell/dict-php@4.0.10': resolution: {integrity: sha512-NfTZdp6kcZDF1PvgQ6cY0zE4FUO5rSwNmBH/iwCBuaLfJAFQ97rgjxo+D2bic4CFwNjyHutnHPtjJBRANO5XQw==} - '@cspell/dict-powershell@5.0.10': - resolution: {integrity: sha512-U4H0zm94sNK+YP7jSFb7xb160XLf2dKIPVt5sOYctKlEyR9M16sP8FHbyWV2Yp1YtxXugoNdeCm2vwGEDAd8sg==} + '@cspell/dict-php@4.0.6': + resolution: {integrity: sha512-ySAXisf7twoVFZqBV2o/DKiCLIDTHNqfnj0EfH9OoOUR7HL3rb6zJkm0viLUFDO2G/8SyIi6YrN/6KX+Scjjjg==} + + '@cspell/dict-powershell@5.0.3': + resolution: {integrity: sha512-lEdzrcyau6mgzu1ie98GjOEegwVHvoaWtzQnm1ie4DyZgMr+N6D0Iyj1lzvtmt0snvsDFa5F2bsYzf3IMKcpcA==} + + '@cspell/dict-powershell@5.0.9': + resolution: {integrity: sha512-Vi0h0rlxS39tgTyUtxI6L3BPHH7MLPkLWCYkNfb/buQuNJYNFdHiF4bqoqVdJ/7ZrfIfNg4i6rzocnwGRn2ruw==} + + '@cspell/dict-public-licenses@2.0.6': + resolution: {integrity: sha512-bHqpSpJvLCUcWxj1ov/Ki8WjmESpYwRpQlqfdchekOTc93Huhvjm/RXVN1R4fVf4Hspyem1QVkCGqAmjJMj6sw==} '@cspell/dict-public-licenses@2.0.8': resolution: {integrity: sha512-Sup+tFS7cDV0fgpoKtUqEZ6+fA/H+XUgBiqQ/Fbs6vUE3WCjJHOIVsP+udHuyMH7iBfJ4UFYOYeORcY4EaKdMg==} - '@cspell/dict-python@4.2.8': - resolution: {integrity: sha512-4y5dynLiajvowhB3PqlcwJ2C4okK1y2Hombec1+TGcV9sUBfo8FYNw6VRFUUrpsxO+Ut/3ncIifdZS5/zAWi5w==} + '@cspell/dict-python@4.1.11': + resolution: {integrity: sha512-XG+v3PumfzUW38huSbfT15Vqt3ihNb462ulfXifpQllPok5OWynhszCLCRQjQReV+dgz784ST4ggRxW452/kVg==} + + '@cspell/dict-python@4.2.6': + resolution: {integrity: sha512-Hkz399qDGEbfXi9GYa2hDl7GahglI86JmS2F1KP8sfjLXofUgtnknyC5NWc86nzHcP38pZiPqPbTigyDYw5y8A==} '@cspell/dict-r@2.0.1': resolution: {integrity: sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==} - '@cspell/dict-ruby@5.0.4': - resolution: {integrity: sha512-URw0jScj5pv8sKCVLNnde11qVCQR442rUpSd12u46Swl+5qBaSdnOUoCWQk419kd9/dpC6bB/3l4kOSY2fdYHw==} + '@cspell/dict-ruby@5.0.2': + resolution: {integrity: sha512-cIh8KTjpldzFzKGgrqUX4bFyav5lC52hXDKo4LbRuMVncs3zg4hcSf4HtURY+f2AfEZzN6ZKzXafQpThq3dl2g==} - '@cspell/dict-rust@4.0.6': - resolution: {integrity: sha512-Buzy9PfLbdRPibSth8CV1D8ZsYqybo26yNIlAN+8ehU0pSBss0Jv4aleL4vKQ3FjouXeAC27rtEsLd7yaMZTog==} + '@cspell/dict-ruby@5.0.3': + resolution: {integrity: sha512-V1xzv9hN6u8r6SM4CkYdsxs4ov8gjXXo0Twfx5kWhLXbEVxTXDMt7ohLTqpy2XlF5mutixZdbHMeFiAww8v+Ug==} + + '@cspell/dict-rust@4.0.2': + resolution: {integrity: sha512-RhziKDrklzOntxAbY3AvNR58wnFGIo3YS8+dNeLY36GFuWOvXDHFStYw5Pod4f/VXbO/+1tXtywCC4zWfB2p1w==} + + '@cspell/dict-rust@4.0.5': + resolution: {integrity: sha512-DIvlPRDemjKQy8rCqftAgGNZxY5Bg+Ps7qAIJjxkSjmMETyDgl0KTVuaJPt7EK4jJt6uCZ4ILy96npsHDPwoXA==} + + '@cspell/dict-scala@5.0.0': + resolution: {integrity: sha512-ph0twaRoV+ylui022clEO1dZ35QbeEQaKTaV2sPOsdwIokABPIiK09oWwGK9qg7jRGQwVaRPEq0Vp+IG1GpqSQ==} '@cspell/dict-scala@5.0.3': resolution: {integrity: sha512-4yGb4AInT99rqprxVNT9TYb1YSpq58Owzq7zi3ZS5T0u899Y4VsxsBiOgHnQ/4W+ygi+sp+oqef8w8nABR2lkg==} - '@cspell/dict-software-terms@4.1.7': - resolution: {integrity: sha512-+fFTALseXszDN8/khonF1DpTcYzwyNqYxhATLakr7CUPtUCO1fCH4lidMtBN4UtPVpE6tbjc5D8tj51PJxEOcw==} + '@cspell/dict-software-terms@3.3.18': + resolution: {integrity: sha512-LJZGGMGqS8KzgXJrSMs3T+6GoqHG9z8Bc+rqLzLzbtoR3FbsMasE9U8oP2PmS3q7jJLFjQkzmg508DrcuZuo2g==} + + '@cspell/dict-software-terms@4.1.4': + resolution: {integrity: sha512-AHS25sYEzWze/aFglp9ODKSu+phjkuGx+OLwIcmOnvyn8axtSq5GCn9UqS4XG1/Qn0UG2Lgb4i5PJbZ0QNPNXQ==} + + '@cspell/dict-sql@2.1.3': + resolution: {integrity: sha512-SEyTNKJrjqD6PAzZ9WpdSu6P7wgdNtGV2RV8Kpuw1x6bV+YsSptuClYG+JSdRExBTE6LwIe1bTklejUp3ZP8TQ==} '@cspell/dict-sql@2.1.5': resolution: {integrity: sha512-FmxanytHXss7GAWAXmgaxl3icTCW7YxlimyOSPNfm+njqeUDjw3kEv4mFNDDObBJv8Ec5AWCbUDkWIpkE3IpKg==} @@ -1679,8 +1988,11 @@ packages: '@cspell/dict-swift@2.0.1': resolution: {integrity: sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==} - '@cspell/dict-terraform@1.0.2': - resolution: {integrity: sha512-UZdJwWIpib2Rx02w6vtXTU3z+M/VMZU0F1dhSL3Ab9otQsFntT8U1CX7wBSqQCLg8bJiCfnUyVvMK3UBm3SR8A==} + '@cspell/dict-terraform@1.0.1': + resolution: {integrity: sha512-29lmUUnZgPh+ieZ5hunick8hzNIpNRtiJh9vAusNskPCrig3RTW6u7F+GG1a8uyslbzSw+Irjf40PTOan1OJJA==} + + '@cspell/dict-typescript@3.1.2': + resolution: {integrity: sha512-lcNOYWjLUvDZdLa0UMNd/LwfVdxhE9rKA+agZBGjL3lTA3uNvH7IUqSJM/IXhJoBpLLMVEOk8v1N9xi+vDuCdA==} '@cspell/dict-typescript@3.1.6': resolution: {integrity: sha512-1beC6O4P/j23VuxX+i0+F7XqPVc3hhiAzGJHEKqnWf5cWAXQtg0xz3xQJ5MvYx2a7iLaSa+lu7+05vG9UHyu9Q==} @@ -1692,6 +2004,10 @@ packages: resolution: {integrity: sha512-GjKsBJvPXp4dYRqsMn7n1zpnKbnpfJnlKLOVeoFBh8fi4n06G50xYr+G25CWX1WT3WFaALAavvVICEUPrVsuqg==} engines: {node: '>=18.0'} + '@cspell/dynamic-import@8.6.0': + resolution: {integrity: sha512-yDJZ/uXCpZcAkXwaWa0JcCZHZFxnF3qtiFiq2WG5cEw8tiJiNdawjSCd8/D35dT3QFNaInMP+H3sOf68dNueew==} + engines: {node: '>=18.0'} + '@cspell/eslint-plugin@8.14.4': resolution: {integrity: sha512-Wv6Jkttp/rsEm1nadLFQrUrYg9nTWQFwJu47KO2cfWP39TeH0zXQpmyas1xNlcDx5QJ9JJw9urTT/iw2tsHeRA==} engines: {node: '>=18'} @@ -1706,12 +2022,20 @@ packages: resolution: {integrity: sha512-Uyfck64TfVU24wAP3BLGQ5EsAfzIZiLfN90NhttpEM7GlOBmbGrEJd4hNOwfpYsE/TT80eGWQVPRTLr5SDbXFA==} engines: {node: '>=18'} + '@cspell/strong-weak-map@8.6.0': + resolution: {integrity: sha512-QenBOdIT1zRa0kF3Z1mwObcvmdhxn+rzQDdmkxwSyRB/9KsNnib6XXTUo8P+Z/ZKXOYbP9Wmf4FX+vKd3yVX0Q==} + engines: {node: '>=18'} + '@cspell/url@8.14.4': resolution: {integrity: sha512-htHhNF8WrM/NfaLSWuTYw0NqVgFRVHYSyHlRT3i/Yv5xvErld8Gw7C6ldm+0TLjoGlUe6X1VV72JSir7+yLp/Q==} engines: {node: '>=18.0'} - '@cypress/code-coverage@3.13.4': - resolution: {integrity: sha512-4Bne95y/Vkye9tfctyiKjYHirA/0LZq7Z5MiCrrT2mlyWfaOSnPeUHG84BdxuycgVOLzMFxqvc+uNQO5lupvTg==} + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@cypress/code-coverage@3.12.48': + resolution: {integrity: sha512-Vr9CzmcI+Cx+a1x2lZW9S/pQiHkVoCWwKj2l3sPB4EcEztBDIpXCEMdAiYqrmAfpGwot3scJwW2y1HYxUec0fg==} peerDependencies: '@babel/core': ^7.0.1 '@babel/preset-env': ^7.0.0 @@ -1723,8 +2047,8 @@ packages: resolution: {integrity: sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA==} engines: {node: '>= 6'} - '@cypress/webpack-preprocessor@6.0.2': - resolution: {integrity: sha512-0+1+4iy4W9PE6R5ywBNKAZoFp8Sf//w3UJ+CKTqkcAjA29b+dtsD0iFT70DsYE0BMqUM1PO7HXFGbXllQ+bRAA==} + '@cypress/webpack-preprocessor@6.0.1': + resolution: {integrity: sha512-WVNeFVSnFKxE3WZNRIriduTgqJRpevaiJIPlfqYTTzfXRD7X1Pv4woDE+G4caPV9bJqVKmVFiwzrXMRNeJxpxA==} peerDependencies: '@babel/core': ^7.0.1 '@babel/preset-env': ^7.0.0 @@ -1742,14 +2066,14 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - '@docsearch/css@3.6.2': - resolution: {integrity: sha512-vKNZepO2j7MrYBTZIGXvlUOIR+v9KRf70FApRgovWrj3GTs1EITz/Xb0AOlm1xsQBp16clVZj1SY/qaOJbQtZw==} + '@docsearch/css@3.6.1': + resolution: {integrity: sha512-VtVb5DS+0hRIprU2CO6ZQjK2Zg4QU5HrDM1+ix6rT0umsYvFvatMAnf97NHZlVWDaaLlx7GRfR/7FikANiM2Fg==} - '@docsearch/js@3.6.2': - resolution: {integrity: sha512-pS4YZF+VzUogYrkblCucQ0Oy2m8Wggk8Kk7lECmZM60hTbaydSIhJTTiCrmoxtBqV8wxORnOqcqqOfbmkkQEcA==} + '@docsearch/js@3.6.1': + resolution: {integrity: sha512-erI3RRZurDr1xES5hvYJ3Imp7jtrXj6f1xYIzDzxiS7nNBufYWPbJwrmMqWC5g9y165PmxEmN9pklGCdLi0Iqg==} - '@docsearch/react@3.6.2': - resolution: {integrity: sha512-rtZce46OOkVflCQH71IdbXSFK+S8iJZlUF56XBW5rIgx/eG5qoomC7Ag3anZson1bBac/JFQn7XOBfved/IMRA==} + '@docsearch/react@3.6.1': + resolution: {integrity: sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -1765,8 +2089,8 @@ packages: search-insights: optional: true - '@emnapi/runtime@1.3.0': - resolution: {integrity: sha512-XMBySMuNZs3DM96xcJmLW4EfGnf+uGmFNjzpehMjuX5PLB5j87ar2Zc4e3PVeZ3I5g3tYtAqskB28manlF69Zw==} + '@emnapi/runtime@1.2.0': + resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} '@es-joy/jsdoccomment@0.48.0': resolution: {integrity: sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==} @@ -2060,8 +2384,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.1': - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/config-array@0.18.0': @@ -2076,8 +2400,8 @@ packages: resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.12.0': - resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} + '@eslint/js@9.11.1': + resolution: {integrity: sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': @@ -2104,17 +2428,20 @@ packages: '@fastify/merge-json-schemas@0.1.1': resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==} - '@floating-ui/core@1.6.8': - resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + '@floating-ui/core@1.6.0': + resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} - '@floating-ui/dom@1.6.11': - resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} + '@floating-ui/dom@1.6.3': + resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==} - '@floating-ui/utils@0.2.8': - resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@floating-ui/utils@0.2.1': + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - '@floating-ui/vue@1.1.5': - resolution: {integrity: sha512-ynL1p5Z+woPVSwgMGqeDrx6HrJfGIDzFyESFkyqJKilGW1+h/8yVY29Khn0LaU6wHBRwZ13ntG6reiHWK6jyzw==} + '@floating-ui/utils@0.2.7': + resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==} + + '@floating-ui/vue@1.1.4': + resolution: {integrity: sha512-ammH7T3vyCx7pmm9OF19Wc42zrGnUw0QvLoidgypWsCLJMtGXEwY7paYIHO+K+oLC3mbWpzIHzeTVienYenlNg==} '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -2128,32 +2455,24 @@ packages: '@headlessui/vue': ^1.0.0 vue: ^3.0.0 - '@headlessui/tailwindcss@0.2.1': - resolution: {integrity: sha512-2+5+NZ+RzMyrVeCZOxdbvkUSssSxGvcUxphkIfSVLpRiKsj+/63T2TOL9dBYMXVfj/CGr6hMxSRInzXv6YY7sA==} + '@headlessui/tailwindcss@0.2.0': + resolution: {integrity: sha512-fpL830Fln1SykOCboExsWr3JIVeQKieLJ3XytLe/tt1A0XzqUthOftDmjcCYLW62w7mQI7wXcoPXr3tZ9QfGxw==} engines: {node: '>=10'} peerDependencies: tailwindcss: ^3.0 - '@headlessui/vue@1.7.23': - resolution: {integrity: sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==} + '@headlessui/vue@1.7.19': + resolution: {integrity: sha512-VFjKPybogux/5/QYGSq4zgG/x3RcxId15W8uguAJAjPBxelI23dwjOjTx/mIiMkM/Hd3rzFxcf2aIp56eEWRcA==} engines: {node: '>=10'} peerDependencies: vue: ^3.2.0 - '@humanfs/core@0.19.0': - resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.5': - resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} - engines: {node: '>=18.18.0'} - '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} engines: {node: '>=18.18'} '@iconify-json/carbon@1.2.1': @@ -2162,8 +2481,8 @@ packages: '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@2.1.33': - resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} + '@iconify/utils@2.1.32': + resolution: {integrity: sha512-LeifFZPPKu28O3AEDpYJNdEbvS4/ojAPyIW+pF/vUpJTYnbTiXUHkCh0bwgFRzKvdpb8H4Fbfd/742++MF4fPQ==} '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} @@ -2348,32 +2667,57 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.3': + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.1': + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + '@jridgewell/set-array@1.1.2': + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + '@jridgewell/set-array@1.2.1': resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/source-map@0.3.5': + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.19': + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - '@leichtgewicht/ip-codec@2.0.5': - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + '@leichtgewicht/ip-codec@2.0.4': + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -2384,6 +2728,12 @@ packages: '@mdi/font@7.4.47': resolution: {integrity: sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==} + '@mermaid-js/parser@0.3.0': + resolution: {integrity: sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==} + + '@mermaid-js/parser@0.3.1-rc.1': + resolution: {integrity: sha512-gYXEGLui3Cfp+P37TBz2no4LuoEY2fEnK1MTh9YPbuAta7kVbZXPpTeay9ahtV7Zi6GkfW3yAUGM9fJ1KkoiWA==} + '@microsoft/tsdoc-config@0.17.0': resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==} @@ -2410,8 +2760,8 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@polka/url@1.0.0-next.28': - resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@polka/url@1.0.0-next.25': + resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} '@rollup/plugin-babel@5.3.1': resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} @@ -2424,29 +2774,17 @@ packages: '@types/babel__core': optional: true - '@rollup/plugin-node-resolve@15.3.0': - resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} - engines: {node: '>=14.0.0'} + '@rollup/plugin-node-resolve@11.2.1': + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + rollup: ^1.20.0||^2.0.0 '@rollup/plugin-replace@2.4.2': resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 - '@rollup/plugin-terser@0.4.4': - resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/plugin-typescript@11.1.6': resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} engines: {node: '>=14.0.0'} @@ -2466,6 +2804,15 @@ packages: peerDependencies: rollup: ^1.20.0||^2.0.0 + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/pluginutils@5.1.2': resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} engines: {node: '>=14.0.0'} @@ -2475,103 +2822,198 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.24.0': - resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} + '@rollup/rollup-android-arm-eabi@4.21.3': + resolution: {integrity: sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.24.0': - resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} + '@rollup/rollup-android-arm-eabi@4.32.0': + resolution: {integrity: sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.21.3': + resolution: {integrity: sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.24.0': - resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} + '@rollup/rollup-android-arm64@4.32.0': + resolution: {integrity: sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.21.3': + resolution: {integrity: sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.24.0': - resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} + '@rollup/rollup-darwin-arm64@4.32.0': + resolution: {integrity: sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.21.3': + resolution: {integrity: sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.24.0': - resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} + '@rollup/rollup-darwin-x64@4.32.0': + resolution: {integrity: sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.32.0': + resolution: {integrity: sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.32.0': + resolution: {integrity: sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.21.3': + resolution: {integrity: sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.24.0': - resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} + '@rollup/rollup-linux-arm-gnueabihf@4.32.0': + resolution: {integrity: sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.24.0': - resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} + '@rollup/rollup-linux-arm-musleabihf@4.21.3': + resolution: {integrity: sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.32.0': + resolution: {integrity: sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.21.3': + resolution: {integrity: sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.24.0': - resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} + '@rollup/rollup-linux-arm64-gnu@4.32.0': + resolution: {integrity: sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': - resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} + '@rollup/rollup-linux-arm64-musl@4.21.3': + resolution: {integrity: sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.32.0': + resolution: {integrity: sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.32.0': + resolution: {integrity: sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': + resolution: {integrity: sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.24.0': - resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} + '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': + resolution: {integrity: sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.21.3': + resolution: {integrity: sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.24.0': - resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} + '@rollup/rollup-linux-riscv64-gnu@4.32.0': + resolution: {integrity: sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.21.3': + resolution: {integrity: sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.24.0': - resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} + '@rollup/rollup-linux-s390x-gnu@4.32.0': + resolution: {integrity: sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.21.3': + resolution: {integrity: sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.24.0': - resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} + '@rollup/rollup-linux-x64-gnu@4.32.0': + resolution: {integrity: sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.24.0': - resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} + '@rollup/rollup-linux-x64-musl@4.21.3': + resolution: {integrity: sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.32.0': + resolution: {integrity: sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.21.3': + resolution: {integrity: sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.24.0': - resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} + '@rollup/rollup-win32-arm64-msvc@4.32.0': + resolution: {integrity: sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.21.3': + resolution: {integrity: sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.24.0': - resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} + '@rollup/rollup-win32-ia32-msvc@4.32.0': + resolution: {integrity: sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.21.3': + resolution: {integrity: sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==} cpu: [x64] os: [win32] - '@shikijs/core@1.22.0': - resolution: {integrity: sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==} + '@rollup/rollup-win32-x64-msvc@4.32.0': + resolution: {integrity: sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==} + cpu: [x64] + os: [win32] - '@shikijs/engine-javascript@1.22.0': - resolution: {integrity: sha512-AeEtF4Gcck2dwBqCFUKYfsCq0s+eEbCEbkUuFou53NZ0sTGnJnJ/05KHQFZxpii5HMXbocV9URYVowOP2wH5kw==} + '@shikijs/core@1.17.0': + resolution: {integrity: sha512-Mkk4Mp4bNnW1kytU8I7S5PK5teNSe0iKlfqxPss4sdwnlcU8a2N62Z3te2gVmZfU9t1HF6L3wyWuM43IvEeEsg==} - '@shikijs/engine-oniguruma@1.22.0': - resolution: {integrity: sha512-5iBVjhu/DYs1HB0BKsRRFipRrD7rqjxlWTj4F2Pf+nQSPqc3kcyqFFeZXnBMzDf0HdqaFVvhDRAGiYNvyLP+Mw==} + '@shikijs/engine-javascript@1.17.0': + resolution: {integrity: sha512-EiBVlxmzJZdC2ypzn8k+vxLngbBNgHLS4RilwrFOABGRc72kUZubbD/6Chrq2RcVtD3yq1GtiiIdFMGd9BTX3Q==} - '@shikijs/transformers@1.22.0': - resolution: {integrity: sha512-k7iMOYuGQA62KwAuJOQBgH2IQb5vP8uiB3lMvAMGUgAMMurePOx3Z7oNqJdcpxqZP6I9cc7nc4DNqSKduCxmdg==} + '@shikijs/engine-oniguruma@1.17.0': + resolution: {integrity: sha512-nsXzJGLQ0fhKmA4Gwt1cF7vC8VuZ1HSDrTRuj48h/qDeX/TzmOlTDXQ3uPtyuhyg/2rbZRzNhN8UFU4fSnQfXg==} - '@shikijs/types@1.22.0': - resolution: {integrity: sha512-Fw/Nr7FGFhlQqHfxzZY8Cwtwk5E9nKDUgeLjZgt3UuhcM3yJR9xj3ZGNravZZok8XmEZMiYkSMTPlPkULB8nww==} + '@shikijs/transformers@1.17.0': + resolution: {integrity: sha512-C/s6z0knkWBVRG6cmklTUn+70URKVE8qlQuFg6Bi/9iqpX68NZloZhxCtVHeTd56pit15hivTlgSAY+SP7C8hA==} - '@shikijs/vscode-textmate@9.3.0': - resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} + '@shikijs/types@1.17.0': + resolution: {integrity: sha512-Tvu2pA69lbpXB+MmgIaROP1tio8y0uYvKb5Foh3q0TJBTAJuaoa5eDEtS/0LquyveacsiVrYF4uEZILju+7Ybg==} + + '@shikijs/vscode-textmate@9.2.2': + resolution: {integrity: sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==} '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -2593,8 +3035,8 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + '@sinonjs/commons@3.0.0': + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} @@ -2606,11 +3048,11 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tanstack/virtual-core@3.10.8': - resolution: {integrity: sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA==} + '@tanstack/virtual-core@3.1.3': + resolution: {integrity: sha512-Y5B4EYyv1j9V8LzeAoOVeTg0LI7Fo5InYKgAjkY1Pu9GjtUwX/EKxNcU7ng3sKr99WEf+bPTcktAeybyMOYo+g==} - '@tanstack/vue-virtual@3.10.8': - resolution: {integrity: sha512-DB5QA8c/LfqOqIUCpSs3RdOTVroRRdqeHMqBkYrcashSZtOzIv8xbiqHgg7RYxDfkH5F3Y+e0MkuuyGNDVB0BQ==} + '@tanstack/vue-virtual@3.1.3': + resolution: {integrity: sha512-OoRCSgp8Bc85Te3pg4OHFUukbWZeB25/O5rNd7MgMtrYIfJjNOaicZeJcvwqK6lDVTMpzohWUMVK/loqR1H8ig==} peerDependencies: vue: ^2.7.0 || ^3.0.0 @@ -2618,38 +3060,50 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - '@types/assert@1.5.10': - resolution: {integrity: sha512-qEO+AUgYab7GVbeDDgUNCU3o0aZUoIMpNAe+w5LDbRxfxQX7vQAdDgwj1AroX+i8KaV56FWg0srXlSZROnsrIQ==} + '@tsconfig/node10@1.0.9': + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/assert@1.5.6': + resolution: {integrity: sha512-Y7gDJiIqb9qKUHfBQYOWGngUpLORtirAVPuj/CWJrU2C6ZM4/y3XLwuwfGMF8s7QzW746LQZx23m0+1FSgjfug==} - '@types/body-parser@1.19.5': - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/babel__core@7.20.1': + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} - '@types/bonjour@3.5.13': - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + '@types/babel__generator@7.6.4': + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} - '@types/braces@3.0.4': - resolution: {integrity: sha512-0WR3b8eaISjEW7RpZnclONaLFDf7buaowRHdqLp4vLj54AsSAYWfh3DRbfiYJY9XDxMgx1B4sE1Afw2PGpuHOA==} + '@types/babel__template@7.4.1': + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + + '@types/babel__traverse@7.20.1': + resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} + + '@types/body-parser@1.19.2': + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + + '@types/bonjour@3.5.10': + resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} + + '@types/braces@3.0.2': + resolution: {integrity: sha512-U5tlMYa0U/2eFTmJgKcPWQOEICP173sJDa6OjHbj5Tv+NVaYcrq2xmdWpNXOwWYGwJu+jER/pfTLdoQ31q8PzA==} '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - '@types/connect-history-api-fallback@1.5.4': - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + '@types/connect-history-api-fallback@1.5.0': + resolution: {integrity: sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==} - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.35': + resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} '@types/cors@2.8.17': resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} @@ -2657,74 +3111,74 @@ packages: '@types/cytoscape-fcose@2.2.4': resolution: {integrity: sha512-QwWtnT8HI9h+DHhG5krGc1ZY0Ex+cn85MvX96ZNAjSxuXiZDnjIZW/ypVkvvubTjIY4rSdkJY1D/Nsn8NDpmAw==} - '@types/cytoscape@3.21.8': - resolution: {integrity: sha512-6Bo9ZDrv0vfwe8Sg/ERc5VL0yU0gYvP4dgZi0fAXYkKHfyHaNqWRMcwYm3mu4sLsXbB8ZuXE75sR7qnaOL5JgQ==} + '@types/cytoscape@3.21.7': + resolution: {integrity: sha512-dP4UByJtfu5GjMJuv58yCIRxjCp4cP0Wp+Qd46L3Gom0hcV4OPmSOLqt83vArNcYRZLFCAyAk+lcC8oqQtcsqw==} - '@types/d3-array@3.2.1': - resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} + '@types/d3-array@3.0.5': + resolution: {integrity: sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A==} - '@types/d3-axis@3.0.6': - resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + '@types/d3-axis@3.0.2': + resolution: {integrity: sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA==} - '@types/d3-brush@3.0.6': - resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + '@types/d3-brush@3.0.2': + resolution: {integrity: sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA==} - '@types/d3-chord@3.0.6': - resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + '@types/d3-chord@3.0.2': + resolution: {integrity: sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw==} - '@types/d3-color@3.1.3': - resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + '@types/d3-color@3.1.0': + resolution: {integrity: sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==} - '@types/d3-contour@3.0.6': - resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + '@types/d3-contour@3.0.2': + resolution: {integrity: sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ==} - '@types/d3-delaunay@6.0.4': - resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + '@types/d3-delaunay@6.0.1': + resolution: {integrity: sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ==} - '@types/d3-dispatch@3.0.6': - resolution: {integrity: sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==} + '@types/d3-dispatch@3.0.2': + resolution: {integrity: sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg==} - '@types/d3-drag@3.0.7': - resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + '@types/d3-drag@3.0.2': + resolution: {integrity: sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw==} - '@types/d3-dsv@3.0.7': - resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + '@types/d3-dsv@3.0.1': + resolution: {integrity: sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw==} - '@types/d3-ease@3.0.2': - resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + '@types/d3-ease@3.0.0': + resolution: {integrity: sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==} - '@types/d3-fetch@3.0.7': - resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + '@types/d3-fetch@3.0.2': + resolution: {integrity: sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA==} - '@types/d3-force@3.0.10': - resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + '@types/d3-force@3.0.4': + resolution: {integrity: sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw==} - '@types/d3-format@3.0.4': - resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + '@types/d3-format@3.0.1': + resolution: {integrity: sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==} - '@types/d3-geo@3.1.0': - resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + '@types/d3-geo@3.0.3': + resolution: {integrity: sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw==} - '@types/d3-hierarchy@3.1.7': - resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + '@types/d3-hierarchy@3.1.2': + resolution: {integrity: sha512-9hjRTVoZjRFR6xo8igAJyNXQyPX6Aq++Nhb5ebrUF414dv4jr2MitM2fWiOY475wa3Za7TOS2Gh9fmqEhLTt0A==} - '@types/d3-interpolate@3.0.4': - resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + '@types/d3-interpolate@3.0.1': + resolution: {integrity: sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==} - '@types/d3-path@1.0.11': - resolution: {integrity: sha512-4pQMp8ldf7UaB/gR8Fvvy69psNHkTpD/pVw3vmEi8iZAB9EPMBruB1JvHO4BIq9QkUUd2lV1F5YXpMNj7JPBpw==} + '@types/d3-path@1.0.9': + resolution: {integrity: sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ==} - '@types/d3-path@3.1.0': - resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==} + '@types/d3-path@3.0.0': + resolution: {integrity: sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==} - '@types/d3-polygon@3.0.2': - resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + '@types/d3-polygon@3.0.0': + resolution: {integrity: sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw==} - '@types/d3-quadtree@3.0.6': - resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + '@types/d3-quadtree@3.0.2': + resolution: {integrity: sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw==} - '@types/d3-random@3.0.3': - resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} + '@types/d3-random@3.0.1': + resolution: {integrity: sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ==} '@types/d3-sankey@0.12.4': resolution: {integrity: sha512-YTicQNwioitIlvuvlfW2GfO6sKxpohzg2cSQttlXAPjFwoBuN+XpGLhUN3kLutG/dI3GCLC+DUorqiJt7Naetw==} @@ -2735,56 +3189,59 @@ packages: '@types/d3-scale@4.0.8': resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} - '@types/d3-selection@3.0.11': - resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + '@types/d3-selection@3.0.10': + resolution: {integrity: sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==} - '@types/d3-shape@1.3.12': - resolution: {integrity: sha512-8oMzcd4+poSLGgV0R1Q1rOlx/xdmozS4Xab7np0eamFFUYq71AU9pOCJEFnkXW2aI/oXdVYJzw6pssbSut7Z9Q==} + '@types/d3-shape@1.3.8': + resolution: {integrity: sha512-gqfnMz6Fd5H6GOLYixOZP/xlrMtJms9BaS+6oWxTKHNqPGZ93BkWWupQSCYm6YHqx6h9wjRupuJb90bun6ZaYg==} '@types/d3-shape@3.1.6': resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==} - '@types/d3-time-format@4.0.3': - resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + '@types/d3-time-format@4.0.0': + resolution: {integrity: sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw==} - '@types/d3-time@3.0.3': - resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==} + '@types/d3-time@3.0.0': + resolution: {integrity: sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==} - '@types/d3-timer@3.0.2': - resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + '@types/d3-timer@3.0.0': + resolution: {integrity: sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==} - '@types/d3-transition@3.0.9': - resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + '@types/d3-transition@3.0.3': + resolution: {integrity: sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA==} - '@types/d3-zoom@3.0.8': - resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + '@types/d3-zoom@3.0.3': + resolution: {integrity: sha512-OWk1yYIIWcZ07+igN6BeoG6rqhnJ/pYe+R1qWFM2DtW49zsoSjgb9G5xB0ZXA8hh2jAzey1XuRmMSoXdKw8MDA==} '@types/d3@7.4.3': resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.8': + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + '@types/estree@1.0.1': + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/express-serve-static-core@4.19.6': - resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} - - '@types/express-serve-static-core@5.0.0': - resolution: {integrity: sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==} + '@types/express-serve-static-core@4.17.35': + resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} '@types/express@4.17.21': resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - '@types/flexsearch@0.7.6': - resolution: {integrity: sha512-H5IXcRn96/gaDmo+rDl2aJuIJsob8dgOXDqf8K0t8rWZd1AFNaaspmRsElESiU+EWE33qfbFPgI0OC/B1g9FCA==} + '@types/flexsearch@0.7.3': + resolution: {integrity: sha512-HXwADeHEP4exXkCIwy2n1+i0f1ilP1ETQOH5KDOugjkTFZPntWo0Gr8stZOaebkxsdx+k0X/K6obU/+it07ocg==} - '@types/geojson@7946.0.14': - resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} + '@types/geojson@7946.0.10': + resolution: {integrity: sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==} '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} @@ -2792,29 +3249,29 @@ packages: '@types/glob@8.1.0': resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/graceful-fs@4.1.6': + resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/http-cache-semantics@4.0.1': + resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} - '@types/http-errors@2.0.4': - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + '@types/http-errors@2.0.1': + resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} - '@types/http-proxy@1.17.15': - resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} + '@types/http-proxy@1.17.11': + resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==} - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + '@types/istanbul-lib-coverage@2.0.4': + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + '@types/istanbul-lib-report@3.0.0': + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@types/istanbul-reports@3.0.1': + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -2822,6 +3279,9 @@ packages: '@types/jsdom@21.1.7': resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==} + '@types/json-schema@7.0.12': + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -2837,8 +3297,8 @@ packages: '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - '@types/lodash@4.17.10': - resolution: {integrity: sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==} + '@types/lodash@4.17.7': + resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} '@types/markdown-it@12.2.3': resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} @@ -2846,8 +3306,8 @@ packages: '@types/markdown-it@14.1.2': resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} - '@types/mdast@3.0.15': - resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + '@types/mdast@3.0.12': + resolution: {integrity: sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==} '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -2858,51 +3318,51 @@ packages: '@types/micromatch@4.0.9': resolution: {integrity: sha512-7V+8ncr22h4UoYRLnLXSpTxjQrNUXtWHGeMPRJt1nULXI57G9bIcpyrHlmrQ7QK24EyyuXvYcSSWAM8GA9nqCg==} - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/mime@1.3.2': + resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} + + '@types/mime@3.0.1': + resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - - '@types/node-forge@1.3.11': - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + '@types/ms@0.7.31': + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@18.19.55': - resolution: {integrity: sha512-zzw5Vw52205Zr/nmErSEkN5FLqXPuKX/k5d1D7RKHATGqU7y6YfX9QxZraUzUrFGqH6XzOzG196BC35ltJC4Cw==} + '@types/node@18.17.5': + resolution: {integrity: sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA==} - '@types/node@20.16.11': - resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} + '@types/node@20.16.5': + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/normalize-package-data@2.4.1': + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - '@types/prettier@2.7.3': - resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + '@types/prettier@2.7.2': + resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} '@types/prettier@3.0.0': resolution: {integrity: sha512-mFMBfMOz8QxhYVbuINtswBp9VL2b4Y0QqYHwqLz3YbgtfAcat2Dl6Y1o4e22S/OVE6Ebl9m7wWiMT2lSbAs1wA==} deprecated: This is a stub types definition. prettier provides its own type definitions, so you do not need this installed. - '@types/qs@6.9.16': - resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + '@types/qs@6.9.7': + resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} '@types/ramda@0.28.25': resolution: {integrity: sha512-HrQNqQAGcITpn9HAJFamDxm7iZeeXiP/95pN5OMbNniDjzCCeOHbBKNGmUy8NRi0fhYS+/cXeo91MFC+06gbow==} - '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + '@types/range-parser@1.2.4': + resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/resolve@1.17.1': + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/responselike@1.0.0': + resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -2910,38 +3370,44 @@ packages: '@types/rollup-plugin-visualizer@4.2.4': resolution: {integrity: sha512-BW4Q6D1Qy5gno5qHWrnMDC2dOe/TAKXvqCpckOggCCu+XpS+ZZJJ1lq1+K3bvYccoO3Y7f5kglbFAgYGqCgULg==} - '@types/send@0.17.4': - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + '@types/semver@7.5.0': + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} - '@types/serve-index@1.9.4': - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + '@types/send@0.17.1': + resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} - '@types/serve-static@1.15.7': - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + '@types/serve-index@1.9.1': + resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} + + '@types/serve-static@1.15.2': + resolution: {integrity: sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==} '@types/sinonjs__fake-timers@8.1.1': resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} - '@types/sizzle@2.3.8': - resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} + '@types/sizzle@2.3.3': + resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} - '@types/sockjs@0.3.36': - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + '@types/sockjs@0.3.33': + resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/stack-utils@2.0.1': + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} '@types/stylis@4.2.6': resolution: {integrity: sha512-4nebF2ZJGzQk0ka0O6+FZUWceyFv4vWq/0dXBMmrSeAwzOuOd/GxE5Pa64d/ndeNLG73dXoBsRzvtsVsYUv6Uw==} - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/tough-cookie@4.0.2': + resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} + + '@types/trusted-types@2.0.3': + resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + '@types/unist@2.0.7': + resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==} '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} @@ -2952,23 +3418,31 @@ packages: '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - '@types/ws@8.5.12': - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} - '@types/ws@8.5.5': resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + '@types/yargs-parser@21.0.0': + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + '@types/yargs@17.0.24': + resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@types/yauzl@2.10.0': + resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} - '@typescript-eslint/eslint-plugin@8.8.1': - resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==} + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/eslint-plugin@8.8.0': + resolution: {integrity: sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -2978,8 +3452,18 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.8.1': - resolution: {integrity: sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==} + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.8.0': + resolution: {integrity: sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2988,12 +3472,30 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@8.8.1': - resolution: {integrity: sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==} + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/scope-manager@8.5.0': + resolution: {integrity: sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.8.1': - resolution: {integrity: sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==} + '@typescript-eslint/scope-manager@8.8.0': + resolution: {integrity: sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/type-utils@8.8.0': + resolution: {integrity: sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -3005,8 +3507,12 @@ packages: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.8.1': - resolution: {integrity: sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==} + '@typescript-eslint/types@8.5.0': + resolution: {integrity: sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/types@8.8.0': + resolution: {integrity: sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.18.0': @@ -3018,8 +3524,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.8.1': - resolution: {integrity: sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==} + '@typescript-eslint/typescript-estree@8.5.0': + resolution: {integrity: sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -3027,8 +3533,29 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.8.1': - resolution: {integrity: sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==} + '@typescript-eslint/typescript-estree@8.8.0': + resolution: {integrity: sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/utils@8.5.0': + resolution: {integrity: sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/utils@8.8.0': + resolution: {integrity: sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3037,8 +3564,12 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.8.1': - resolution: {integrity: sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==} + '@typescript-eslint/visitor-keys@8.5.0': + resolution: {integrity: sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/visitor-keys@8.8.0': + resolution: {integrity: sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -3171,55 +3702,87 @@ packages: '@vitest/utils@1.6.0': resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} - '@vue/compat@3.5.11': - resolution: {integrity: sha512-ESH2z/vUZQi6yRDBCDjBgip6a0Rk48KiT4Dk1LkxSYnqM++3mlqyMo0MgXFxfLhQ1uMaL6pquSCMgKfivrRqRg==} + '@vue/compat@3.3.4': + resolution: {integrity: sha512-VwAsPqUqRJVxeLQPUC03Sa5d+T8UG2Qv4VItq74KmNvtQlRXICpa/sqq12BcyBB4Tz1U5paOEZxWCUoXkrZ9QQ==} peerDependencies: - vue: 3.5.11 + vue: 3.3.4 - '@vue/compiler-core@3.5.11': - resolution: {integrity: sha512-PwAdxs7/9Hc3ieBO12tXzmTD+Ln4qhT/56S+8DvrrZ4kLDn4Z/AMUr8tXJD0axiJBS0RKIoNaR0yMuQB9v9Udg==} + '@vue/compiler-core@3.4.21': + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} - '@vue/compiler-dom@3.5.11': - resolution: {integrity: sha512-pyGf8zdbDDRkBrEzf8p7BQlMKNNF5Fk/Cf/fQ6PiUz9at4OaUfyXW0dGJTo2Vl1f5U9jSLCNf0EZJEogLXoeew==} + '@vue/compiler-core@3.5.4': + resolution: {integrity: sha512-oNwn+BAt3n9dK9uAYvI+XGlutwuTq/wfj4xCBaZCqwwVIGtD7D6ViihEbyYZrDHIHTDE3Q6oL3/hqmAyFEy9DQ==} - '@vue/compiler-sfc@3.5.11': - resolution: {integrity: sha512-gsbBtT4N9ANXXepprle+X9YLg2htQk1sqH/qGJ/EApl+dgpUBdTv3yP7YlR535uHZY3n6XaR0/bKo0BgwwDniw==} + '@vue/compiler-dom@3.4.21': + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} - '@vue/compiler-ssr@3.5.11': - resolution: {integrity: sha512-P4+GPjOuC2aFTk1Z4WANvEhyOykcvEd5bIj2KVNGKGfM745LaXGr++5njpdBTzVz5pZifdlR1kpYSJJpIlSePA==} + '@vue/compiler-dom@3.5.4': + resolution: {integrity: sha512-yP9RRs4BDLOLfldn6ah+AGCNovGjMbL9uHvhDHf5wan4dAHLnFGOkqtfE7PPe4HTXIqE7l/NILdYw53bo1C8jw==} - '@vue/devtools-api@6.6.4': - resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + '@vue/compiler-sfc@3.4.21': + resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} - '@vue/devtools-api@7.4.6': - resolution: {integrity: sha512-XipBV5k0/IfTr0sNBDTg7OBUCp51cYMMXyPxLXJZ4K/wmUeMqt8cVdr2ZZGOFq+si/jTyCYnNxeKoyev5DOUUA==} + '@vue/compiler-sfc@3.5.4': + resolution: {integrity: sha512-P+yiPhL+NYH7m0ZgCq7AQR2q7OIE+mpAEgtkqEeH9oHSdIRvUO+4X6MPvblJIWcoe4YC5a2Gdf/RsoyP8FFiPQ==} - '@vue/devtools-kit@7.4.6': - resolution: {integrity: sha512-NbYBwPWgEic1AOd9bWExz9weBzFdjiIfov0yRn4DrRfR+EQJCI9dn4I0XS7IxYGdkmUJi8mFW42LLk18WsGqew==} + '@vue/compiler-ssr@3.4.21': + resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} - '@vue/devtools-shared@7.4.6': - resolution: {integrity: sha512-rPeSBzElnHYMB05Cc056BQiJpgocQjY8XVulgni+O9a9Gr9tNXgPteSzFFD+fT/iWMxNuUgGKs9CuW5DZewfIg==} + '@vue/compiler-ssr@3.5.4': + resolution: {integrity: sha512-acESdTXsxPnYr2C4Blv0ggx5zIFMgOzZmYU2UgvIff9POdRGbRNBHRyzHAnizcItvpgerSKQbllUc9USp3V7eg==} - '@vue/reactivity@3.5.11': - resolution: {integrity: sha512-Nqo5VZEn8MJWlCce8XoyVqHZbd5P2NH+yuAaFzuNSR96I+y1cnuUiq7xfSG+kyvLSiWmaHTKP1r3OZY4mMD50w==} + '@vue/devtools-api@6.5.1': + resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} - '@vue/runtime-core@3.5.11': - resolution: {integrity: sha512-7PsxFGqwfDhfhh0OcDWBG1DaIQIVOLgkwA5q6MtkPiDFjp5gohVnJEahSktwSFLq7R5PtxDKy6WKURVN1UDbzA==} + '@vue/devtools-api@7.4.5': + resolution: {integrity: sha512-PX9uXirHOY2P99kb1cP3DxWZojFW3acNMqd+l4i5nKcqY59trXTOfwDZXt2Qifu0OU1izAQb76Ur6NPVldF2KQ==} - '@vue/runtime-dom@3.5.11': - resolution: {integrity: sha512-GNghjecT6IrGf0UhuYmpgaOlN7kxzQBhxWEn08c/SQDxv1yy4IXI1bn81JgEpQ4IXjRxWtPyI8x0/7TF5rPfYQ==} + '@vue/devtools-kit@7.4.5': + resolution: {integrity: sha512-Uuki4Z6Bc/ExvtlPkeDNGSAe4580R+HPcVABfTE9TF7BTz3Nntk7vxIRUyWblZkUEcB/x+wn2uofyt5i2LaUew==} - '@vue/server-renderer@3.5.11': - resolution: {integrity: sha512-cVOwYBxR7Wb1B1FoxYvtjJD8X/9E5nlH4VSkJy2uMA1MzYNdzAAB//l8nrmN9py/4aP+3NjWukf9PZ3TeWULaA==} + '@vue/devtools-shared@7.4.5': + resolution: {integrity: sha512-2XgUOkL/7QDmyYI9J7cm+rz/qBhcGv+W5+i1fhwdQ0HQ1RowhdK66F0QBuJSz/5k12opJY8eN6m03/XZMs7imQ==} + + '@vue/reactivity@3.4.21': + resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==} + + '@vue/reactivity@3.5.4': + resolution: {integrity: sha512-HKKbEuP7tYSGCq4e4nK6ZW6l5hyG66OUetefBp4budUyjvAYsnQDf+bgFzg2RAgnH0CInyqXwD9y47jwJEHrQw==} + + '@vue/runtime-core@3.4.21': + resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==} + + '@vue/runtime-core@3.5.4': + resolution: {integrity: sha512-f3ek2sTA0AFu0n+w+kCtz567Euqqa3eHewvo4klwS7mWfSj/A+UmYTwsnUFo35KeyAFY60JgrCGvEBsu1n/3LA==} + + '@vue/runtime-dom@3.4.21': + resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==} + + '@vue/runtime-dom@3.5.4': + resolution: {integrity: sha512-ofyc0w6rbD5KtjhP1i9hGOKdxGpvmuB1jprP7Djlj0X7R5J/oLwuNuE98GJ8WW31Hu2VxQHtk/LYTAlW8xrJdw==} + + '@vue/server-renderer@3.4.21': + resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==} peerDependencies: - vue: 3.5.11 + vue: 3.4.21 - '@vue/shared@3.5.11': - resolution: {integrity: sha512-W8GgysJVnFo81FthhzurdRAWP/byq3q2qIw70e0JWblzVhjgOMiC2GyovXrZTFQJnFVryYaKGP3Tc9vYzYm6PQ==} + '@vue/server-renderer@3.5.4': + resolution: {integrity: sha512-FbjV6DJLgKRetMYFBA1UXCroCiED/Ckr53/ba9wivyd7D/Xw9fpo0T6zXzCnxQwyvkyrL7y6plgYhWhNjGxY5g==} + peerDependencies: + vue: 3.5.4 + + '@vue/shared@3.4.21': + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + + '@vue/shared@3.5.4': + resolution: {integrity: sha512-L2MCDD8l7yC62Te5UUyPVpmexhL9ipVnYRw9CsWfm/BGRL5FwDX4a25bcJ/OJSD3+Hx+k/a8LDKcG2AFdJV3BA==} '@vueuse/core@10.11.1': resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} + '@vueuse/core@11.1.0': + resolution: {integrity: sha512-P6dk79QYA6sKQnghrUz/1tHi0n9mrb/iO1WTMk/ElLmTyNqgDeSZ3wcDf6fRBGzRJbeG1dxzEOvLENMjr+E3fg==} + '@vueuse/integrations@10.11.1': resolution: {integrity: sha512-Y5hCGBguN+vuVYTZmdd/IMXLOdfS60zAmDmFYc4BKBcMUPZH1n4tdyDECCPjXm0bNT3ZRUy1xzTLGaUje8Xyaw==} peerDependencies: @@ -3261,12 +3824,59 @@ packages: universal-cookie: optional: true + '@vueuse/integrations@11.1.0': + resolution: {integrity: sha512-O2ZgrAGPy0qAjpoI2YR3egNgyEqwG85fxfwmA9BshRIGjV4G6yu6CfOPpMHAOoCD+UfsIl7Vb1bXJ6ifrHYDDA==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + '@vueuse/metadata@10.11.1': resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} + '@vueuse/metadata@11.1.0': + resolution: {integrity: sha512-l9Q502TBTaPYGanl1G+hPgd3QX5s4CGnpXriVBR5fEZ/goI6fvDaVmIl3Td8oKFurOxTmbXvBPSsgrd6eu6HYg==} + '@vueuse/shared@10.11.1': resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} + '@vueuse/shared@11.1.0': + resolution: {integrity: sha512-YUtIpY122q7osj+zsNMFAfMTubGz0sn5QzE5gPzAIiCmtt2ha3uQUY1+JPyL4gRCTsLPX82Y9brNbo/aqlA91w==} + '@wdio/config@7.31.1': resolution: {integrity: sha512-WAfswbCatwiaDVqy6kfF/5T8/WS/US/SRhBGUFrfBuGMIe+RRoHgy7jURFWSvUIE7CNHj8yvs46fLUcxhXjzcQ==} engines: {node: '>=12.0.0'} @@ -3367,8 +3977,8 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - '@zenuml/core@3.24.12': - resolution: {integrity: sha512-SM9TYgyWl1Bm7oWc4lZLq0q9ejT6RdqxBYav8a4BhVvWkFgND088YCL9xlvo9vPJenwIuVNK+xukgqL1nwfztw==} + '@zenuml/core@3.24.5': + resolution: {integrity: sha512-mhlcFw2cFUOQDLW9EKV+hEisikOx0LdyPphGLVYTP0EdvB6RqqQe2tdKtG9t3nedRSlO6z8gW67DIXgDvyxO8g==} engines: {node: '>=12.0.0'} JSONSelect@0.4.0: @@ -3403,11 +4013,21 @@ packages: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} + acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@8.12.1: resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -3456,11 +4076,8 @@ packages: ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - - algoliasearch@4.24.0: - resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} + algoliasearch@4.19.1: + resolution: {integrity: sha512-IJF5b93b2MgAzcE/tuzW0yOPnuUyRgGAtaPv5UUywXM8kzqfdwZTO4sPJBzoGz1eOy6H9uEchsJsBFTELZSu+g==} amdefine@1.0.1: resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} @@ -3494,8 +4111,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} ansi-sequence-parser@1.1.1: @@ -3556,6 +4173,9 @@ packages: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -3565,13 +4185,19 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + array-flatten@2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + array-timsort@1.0.3: resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} @@ -3579,8 +4205,8 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} arrify@3.0.0: @@ -3605,6 +4231,13 @@ packages: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -3629,8 +4262,8 @@ packages: aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - aws4@1.13.2: - resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + aws4@1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} axios@1.7.7: resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} @@ -3641,8 +4274,8 @@ packages: peerDependencies: '@babel/core': ^7.8.0 - babel-loader@9.2.1: - resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} + babel-loader@9.1.3: + resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} peerDependencies: '@babel/core': ^7.12.0 @@ -3656,8 +4289,8 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-plugin-polyfill-corejs2@0.4.11: - resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + babel-plugin-polyfill-corejs2@0.4.12: + resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -3666,13 +4299,13 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.2: - resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + babel-plugin-polyfill-regenerator@0.6.3: + resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-preset-current-node-syntax@1.1.0: - resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + babel-preset-current-node-syntax@1.0.1: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 @@ -3701,8 +4334,8 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} binary-searching@2.0.5: @@ -3726,12 +4359,16 @@ packages: bmpimagejs@1.0.4: resolution: {integrity: sha512-21oKU7kbRt2OgOOj7rdiNr/yznDNUQ585plxR00rsmECcZr+6O1oCwB8OIoSHk/bDhbG8mFXIdeQuCPHgZ6QBw==} + body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - bonjour-service@1.2.1: - resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} + bonjour-service@1.1.1: + resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} boxen@5.1.2: resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} @@ -3743,12 +4380,26 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.0: - resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3803,10 +4454,25 @@ packages: resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} engines: {node: '>=8'} + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} @@ -3826,8 +4492,14 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001667: - resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} + caniuse-lite@1.0.30001520: + resolution: {integrity: sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA==} + + caniuse-lite@1.0.30001660: + resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + + caniuse-lite@1.0.30001695: + resolution: {integrity: sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -3910,20 +4582,20 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} ci-info@4.0.0: resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} engines: {node: '>=8'} - cjs-module-lexer@1.4.1: - resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} cjson@0.3.0: resolution: {integrity: sha512-bBRQcCIHzI1IVH59fR0bwGrFmi3Btb/JNwM/n401i1DnYgWndpsUBiQRAddLflkZage20A2d25OAWZZk0vBRlA==} @@ -3953,8 +4625,8 @@ packages: resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} engines: {node: '>=6'} - cli-color@2.0.4: - resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} + cli-color@2.0.3: + resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} engines: {node: '>=0.10'} cli-cursor@3.1.0: @@ -3965,8 +4637,8 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} - cli-table3@0.6.5: - resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + cli-table3@0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} engines: {node: 10.* || >= 12.*} cli-truncate@2.1.0: @@ -4040,6 +4712,10 @@ packages: resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} engines: {node: '>=16'} + commander@12.0.0: + resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==} + engines: {node: '>=18'} + commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -4067,10 +4743,18 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} + comment-json@4.2.3: + resolution: {integrity: sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==} + engines: {node: '>= 6'} + comment-json@4.2.5: resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} engines: {node: '>= 6'} + comment-parser@1.4.0: + resolution: {integrity: sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==} + engines: {node: '>= 12.0.0'} + comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} @@ -4101,8 +4785,12 @@ packages: engines: {node: ^14.13.0 || >=16.0.0} hasBin: true - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + + configstore@6.0.0: + resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} + engines: {node: '>=12'} connect-history-api-fallback@2.0.0: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} @@ -4137,12 +4825,12 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} copy-anything@3.0.5: @@ -4152,6 +4840,9 @@ packages: core-js-compat@3.38.1: resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} + core-js-compat@3.40.0: + resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} + core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -4186,6 +4877,9 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -4206,16 +4900,28 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} + crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} + cspell-config-lib@8.14.4: resolution: {integrity: sha512-cnUeJfniTiebqCaQmIUnbSrPrTH7xzKRQjJDHAEV0WYnOG2MhRXI13OzytdFdhkVBdStmgTzTCJKE7x+kmU2NA==} engines: {node: '>=18'} + cspell-config-lib@8.6.0: + resolution: {integrity: sha512-Q1rvQFUDJTu4hUtxwL6+q83Hjx/a5grEjMS5axxFJzjJuFRbRsXCagncdSCx/YBqLkNM5noBbRP/0rVh7ufqxw==} + engines: {node: '>=18'} + cspell-dictionary@8.14.4: resolution: {integrity: sha512-pZvQHxpAW5fZAnt3ZKKy3s7M+3CX2t8tCS3uJrpEHIynlCawpG0fPF78rVE5o+g0dON36Lguc/BUuSN4IWKLmQ==} engines: {node: '>=18'} - cspell-gitignore@8.14.4: - resolution: {integrity: sha512-RwfQEW5hD7CpYwS7m3b0ONG0nTLKP6bL2tvMdl7qtaYkL7ztGdsBTtLD1pmwqUsCbiN5RuaOxhYOYeRcpFRIkQ==} + cspell-dictionary@8.6.0: + resolution: {integrity: sha512-ohToeOQznIrb2/z7RfKxX3NID0WiO4sXK3IxKdnbn2viGgdn17tQ8Z2f4Xuy9egjSGRKyr6N25Z5AOes1C8R3w==} + engines: {node: '>=18'} + + cspell-gitignore@8.6.0: + resolution: {integrity: sha512-6INRlNb17iKtQH7NmDM/EsX5OZOD2TzIwHiJnnWci0Y5l10V/zN9WGLDegTjMh9HU3TS6uUuN4I/ffkCs9m+LA==} engines: {node: '>=18'} hasBin: true @@ -4223,25 +4929,46 @@ packages: resolution: {integrity: sha512-C/xTS5nujMRMuguibq92qMVP767mtxrur7DcVolCvpzcivm1RB5NtIN0OctQxTyMbnmKeQv1t4epRKQ9A8vWRg==} engines: {node: '>=18'} + cspell-glob@8.6.0: + resolution: {integrity: sha512-AyuExc34F8JsEYNl4inx1m1v5VoSRA/cTptREq/AoNTcMTyG5s+wt5J+VWBfvJjEDEEpd9Cb2it0j8TMo/Tpjw==} + engines: {node: '>=18'} + cspell-grammar@8.14.4: resolution: {integrity: sha512-yaSKAAJDiamsw3FChbw4HXb2RvTQrDsLelh1+T4MavarOIcAxXrqAJ8ysqm++g+S/ooJz2YO8YWIyzJKxcMf8g==} engines: {node: '>=18'} hasBin: true + cspell-grammar@8.6.0: + resolution: {integrity: sha512-wVpZ4pPOqRoOmzLUc34wyOQnBi/6RsV3Y1KiPn8BNSkObb9XSohb1xJJMJ69unEmgE0snQDMHIeUaLTQH414MA==} + engines: {node: '>=18'} + hasBin: true + cspell-io@8.14.4: resolution: {integrity: sha512-o6OTWRyx/Az+PFhr1B0wMAwqG070hFC9g73Fkxd8+rHX0rfRS69QZH7LgSmZytqbZIMxCTDGdsLl33MFGWCbZQ==} engines: {node: '>=18'} + cspell-io@8.6.0: + resolution: {integrity: sha512-jx7ccRpcshqxN6xnOiGnX4VycaqTpmatRjHITn4vLoDmQNfxQeU69YT62bhyjogCBuJsZS9ksjo7GQIsrYBekA==} + engines: {node: '>=18'} + cspell-lib@8.14.4: resolution: {integrity: sha512-qdkUkKtm+nmgpA4jQbmQTuepDfjHBDWvs3zDuEwVIVFq/h8gnXrRr75gJ3RYdTy+vOOqHPoLLqgxyqkUUrUGXA==} engines: {node: '>=18'} + cspell-lib@8.6.0: + resolution: {integrity: sha512-l1bBxBz8noPOxEIIu1Ahvd4e/j6Re1PNDD9FwZgaRmvMyIPZbupTxzCM0MZWvYz1VymBmrrVEKRwtZ34VocaCw==} + engines: {node: '>=18'} + cspell-trie-lib@8.14.4: resolution: {integrity: sha512-zu8EJ33CH+FA5lwTRGqS//Q6phO0qtgEmODMR1KPlD7WlrfTFMb3bWFsLo/tiv5hjpsn7CM6dYDAAgBOSkoyhQ==} engines: {node: '>=18'} - cspell@8.14.4: - resolution: {integrity: sha512-R5Awb3i/RKaVVcZzFt8dkN3M6VnifIEDYBcbzbmYjZ/Eq+ASF+QTmI0E9WPhMEcFM1nd7YOyXnETo560yRdoKw==} + cspell-trie-lib@8.6.0: + resolution: {integrity: sha512-S8nGCnEJBL1maiKPd3FhI54QG+OgtOkcJ/yUDXGXGrokSruWFdNocioPirlFAHf959ax1GBUVEYNIgnu/EIWNg==} + engines: {node: '>=18'} + + cspell@8.6.0: + resolution: {integrity: sha512-aAaVD3v1105OQePCpcdYkHnHxxkxKxxQzFcfJ4tKsH06dlW04Sp1oQLlsjgWDa3y6cdYTpSYj1eSenavBvfOFg==} engines: {node: '>=18'} hasBin: true @@ -4282,8 +5009,8 @@ packages: cypress-wait-until@3.0.2: resolution: {integrity: sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==} - cypress@13.15.0: - resolution: {integrity: sha512-53aO7PwOfi604qzOkCSzNlWquCynLlKE/rmmpSPcziRH6LNfaDUAklQT6WJIsD8ywxlIy+uVZsnTMCCQVd2kTw==} + cypress@13.14.2: + resolution: {integrity: sha512-lsiQrN17vHMB2fnvxIrKLAjOr9bPwsNbPZNrWf99s4u+DVmCY6U+w7O3GGG9FvP4EUVYaDu+guWeNLiUzBrqvA==} engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -4361,8 +5088,8 @@ packages: resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} engines: {node: '>=12'} - d3-geo@3.1.1: - resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + d3-geo@3.1.0: + resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==} engines: {node: '>=12'} d3-hierarchy@3.1.2: @@ -4395,8 +5122,8 @@ packages: d3-sankey@0.12.3: resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} - d3-scale-chromatic@3.1.0: - resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + d3-scale-chromatic@3.0.0: + resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} engines: {node: '>=12'} d3-scale@4.0.2: @@ -4440,9 +5167,11 @@ packages: resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} engines: {node: '>=12'} - d@1.0.2: - resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} - engines: {node: '>=0.12'} + d@1.0.1: + resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} + + dagre-d3-es@7.0.10: + resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} dagre-d3-es@7.0.11: resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==} @@ -4459,16 +5188,16 @@ packages: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} dataloader@1.4.0: @@ -4478,6 +5207,9 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} + dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} @@ -4524,6 +5256,15 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} @@ -4538,16 +5279,16 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: babel-plugin-macros: optional: true - deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} deep-equal@2.2.3: @@ -4584,6 +5325,10 @@ packages: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-properties@1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -4591,8 +5336,8 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - delaunator@5.0.1: - resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + delaunator@5.0.0: + resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} @@ -4690,6 +5435,10 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -4697,8 +5446,11 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + dns-equal@1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + + dns-packet@5.6.0: + resolution: {integrity: sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==} engines: {node: '>=6'} dom-serializer@2.0.0: @@ -4720,14 +5472,22 @@ packages: domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} - dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + dot-prop@6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + + dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -4746,13 +5506,19 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.33: - resolution: {integrity: sha512-+cYTcFB1QqD4j4LegwLfpCNxifb6dDFUAwk6RsLusCwIaZI6or2f+q8rs5tTB2YC53HhOlIbEaqHMAAC8IOIwA==} + electron-to-chromium@1.4.490: + resolution: {integrity: sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==} + + electron-to-chromium@1.5.20: + resolution: {integrity: sha512-74mdl6Fs1HHzK9SUX4CKFxAtAe3nUns48y79TskHNAG6fGOlLfyKA4j855x+0b5u8rWJIrlaG9tcTPstMlwjIw==} + + electron-to-chromium@1.5.88: + resolution: {integrity: sha512-K3C2qf1o+bGzbilTDCTBhTQcMS9KW60yTAaTeeXsfvQuTDDwlokLam/AdqlqcSy9u4UainDgsHV23ksXAOgamw==} elkjs@0.9.3: resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} @@ -4804,8 +5570,8 @@ packages: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - envinfo@7.14.0: - resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} + envinfo@7.10.0: + resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==} engines: {node: '>=4'} hasBin: true @@ -4816,14 +5582,18 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -4831,27 +5601,30 @@ packages: es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + es-module-lexer@1.3.0: + resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} + es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} es2015-i18n-tag@1.6.1: resolution: {integrity: sha512-MYoh9p+JTkgnzBh0MEBON6xUyzdmwT6wzsmmFJvZujGSXiI2kM+3XvFl6+AcIO2eeL6VWgtX9szSiDTMwDxyYA==} engines: {node: '>= 4.0.0'} - es5-ext@0.10.64: - resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + es5-ext@0.10.62: + resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} engines: {node: '>=0.10'} es6-error@4.1.1: @@ -4860,9 +5633,8 @@ packages: es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} - es6-symbol@3.1.4: - resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} - engines: {node: '>=0.12'} + es6-symbol@3.1.3: + resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} es6-weak-map@2.0.3: resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} @@ -4877,6 +5649,10 @@ packages: engines: {node: '>=18'} hasBin: true + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -4960,8 +5736,8 @@ packages: peerDependencies: eslint: '>=8' - eslint-plugin-no-only-tests@3.3.0: - resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} + eslint-plugin-no-only-tests@3.1.0: + resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} engines: {node: '>=5.0.0'} eslint-plugin-tsdoc@0.3.0: @@ -4977,20 +5753,24 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@8.1.0: - resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@4.1.0: resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.12.0: - resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} + eslint@9.11.1: + resolution: {integrity: sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -4999,9 +5779,9 @@ packages: jiti: optional: true - esniff@2.0.1: - resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} - engines: {node: '>=0.10'} + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@10.2.0: resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} @@ -5109,6 +5889,10 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + express@4.21.0: resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==} engines: {node: '>= 0.10.0'} @@ -5164,8 +5948,8 @@ packages: fast-querystring@1.1.2: resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} - fast-redact@3.5.0: - resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + fast-redact@3.3.0: + resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} engines: {node: '>=6'} fast-shuffle@6.1.0: @@ -5174,9 +5958,6 @@ packages: fast-uri@2.4.0: resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==} - fast-uri@3.0.2: - resolution: {integrity: sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==} - fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} @@ -5190,6 +5971,9 @@ packages: fastify@4.28.1: resolution: {integrity: sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==} + fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -5232,10 +6016,6 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - file-entry-cache@9.1.0: - resolution: {integrity: sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==} - engines: {node: '>=18'} - file-saver@2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} @@ -5247,10 +6027,18 @@ packages: engines: {node: '>=18'} hasBin: true + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + finalhandler@1.3.1: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} @@ -5268,8 +6056,8 @@ packages: engines: {node: '>=18'} hasBin: true - find-my-way@8.2.2: - resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==} + find-my-way@8.2.0: + resolution: {integrity: sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==} engines: {node: '>=14'} find-process@1.4.7: @@ -5304,22 +6092,23 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flat-cache@5.0.0: - resolution: {integrity: sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==} - engines: {node: '>=18'} - - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - flexsearch@0.7.43: - resolution: {integrity: sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg==} + flexsearch@0.7.31: + resolution: {integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==} - focus-trap@7.6.0: - resolution: {integrity: sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==} + focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + + follow-redirects@1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} @@ -5337,12 +6126,16 @@ packages: for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.4: + resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==} + engines: {node: '>= 0.4'} + foreground-child@2.0.0: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} forever-agent@0.6.1: @@ -5394,8 +6187,8 @@ packages: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} - fs-monkey@1.0.6: - resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + fs-monkey@1.0.4: + resolution: {integrity: sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==} fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -5405,11 +6198,14 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} functions-have-names@1.2.3: @@ -5438,10 +6234,17 @@ packages: get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} @@ -5449,6 +6252,10 @@ packages: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stdin@5.0.1: resolution: {integrity: sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==} engines: {node: '>=0.12.0'} @@ -5477,8 +6284,8 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} get-tsconfig@4.8.1: @@ -5514,6 +6321,10 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + deprecated: Glob versions prior to v9 are no longer supported + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -5535,16 +6346,16 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + globals@13.21.0: + resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} engines: {node: '>=8'} globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.10.0: - resolution: {integrity: sha512-tqFIbz83w4Y5TCbtgjZjApohbuh7K9BxGYFm7ifwDR240tvdb7P9x+/9VvUKlmkPoiknoJtanI8UOrqxS3a7lQ==} + globals@15.9.0: + resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} engines: {node: '>=18'} globalthis@1.0.4: @@ -5574,6 +6385,10 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} @@ -5606,6 +6421,10 @@ packages: has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -5621,18 +6440,34 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + hasha@5.2.2: resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} engines: {node: '>=8'} @@ -5641,8 +6476,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-to-html@9.0.3: - resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + hast-util-to-html@9.0.2: + resolution: {integrity: sha512-RP5wNpj5nm1Z8cloDv4Sl4RS8jH5HYa0v93YB6Wb4poEzgMo/dAAL0KcT4974dCjcNG5pkLqTImeFHHCwwfY3g==} hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} @@ -5663,8 +6498,8 @@ packages: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} - html-entities@2.5.2: - resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} + html-entities@2.4.0: + resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -5703,8 +6538,8 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} - http-proxy-middleware@2.0.7: - resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} + http-proxy-middleware@2.0.6: + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} engines: {node: '>=12.0.0'} peerDependencies: '@types/express': ^4.17.13 @@ -5773,6 +6608,10 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -5781,11 +6620,14 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} - import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true + import-meta-resolve@4.0.0: + resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} @@ -5823,8 +6665,12 @@ packages: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} internmap@1.0.1: @@ -5846,8 +6692,8 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - ipaddr.js@2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + ipaddr.js@2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} engines: {node: '>= 10'} is-alphabetical@1.0.4: @@ -5860,8 +6706,11 @@ packages: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} is-arrayish@0.2.1: @@ -5870,9 +6719,17 @@ packages: is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -5881,6 +6738,10 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} + is-boolean-object@1.2.1: + resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} + engines: {node: '>= 0.4'} + is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} @@ -5893,18 +6754,25 @@ packages: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + is-decimal@1.0.4: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} @@ -5917,6 +6785,10 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -5933,6 +6805,10 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -5955,14 +6831,14 @@ packages: is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -5971,6 +6847,10 @@ packages: resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} engines: {node: '>=0.10.0'} + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -5997,6 +6877,10 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + is-regexp@1.0.0: resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} engines: {node: '>=0.10.0'} @@ -6005,8 +6889,11 @@ packages: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} is-stream@1.1.0: @@ -6025,6 +6912,10 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} @@ -6033,8 +6924,16 @@ packages: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} is-typedarray@1.0.0: @@ -6055,8 +6954,9 @@ packages: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.1.0: + resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} + engines: {node: '>= 0.4'} is-weakset@2.0.3: resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} @@ -6090,6 +6990,10 @@ packages: isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -6126,8 +7030,8 @@ packages: resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} engines: {node: '>=10'} - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} iterm2-version@4.2.0: @@ -6137,8 +7041,8 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jake@10.9.2: - resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} hasBin: true @@ -6263,6 +7167,10 @@ packages: resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -6291,8 +7199,8 @@ packages: engines: {node: '>=0.4'} hasBin: true - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true jju@1.4.0: @@ -6341,11 +7249,21 @@ packages: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} hasBin: true + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -6380,8 +7298,8 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -6409,8 +7327,8 @@ packages: resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} engines: {node: '>=12.20'} - katex@0.16.11: - resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} + katex@0.16.9: + resolution: {integrity: sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==} hasBin: true keyv@4.5.4: @@ -6474,8 +7392,8 @@ packages: lex-parser@0.1.4: resolution: {integrity: sha512-DuAEISsr1H4LOpmFLkyMc8YStiRWZCO8hMsoXAXSbgyfvs2WQhSt0+/FBv3ZU/JBFZMGcE+FWzEBSzwUU7U27w==} - light-my-request@5.14.0: - resolution: {integrity: sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==} + light-my-request@5.13.0: + resolution: {integrity: sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==} lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} @@ -6505,8 +7423,8 @@ packages: enquirer: optional: true - listr2@8.2.5: - resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + listr2@8.2.4: + resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} engines: {node: '>=18.0.0'} loader-runner@4.3.0: @@ -6582,8 +7500,8 @@ packages: loglevel-plugin-prefix@0.8.4: resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} - loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + loglevel@1.8.1: + resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} engines: {node: '>= 0.6.0'} long@5.2.3: @@ -6592,6 +7510,10 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loupe@2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5 + loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} @@ -6608,6 +7530,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + lru-queue@0.1.0: resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} @@ -6620,6 +7546,14 @@ packages: magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + + magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -6631,6 +7565,9 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} @@ -6640,8 +7577,8 @@ packages: mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} - markdown-it@13.0.2: - resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} + markdown-it@13.0.1: + resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} hasBin: true markdown-table@3.0.3: @@ -6657,6 +7594,10 @@ packages: engines: {node: '>= 12'} hasBin: true + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mdast-builder@1.1.1: resolution: {integrity: sha512-a3KBk/LmYD6wKsWi8WJrGU/rXR4yuF4Men0JO0z6dSZCm5FrXXWTRDjqK0vGSqa+1M6p9edeuypZAZAzSehTUw==} @@ -6722,14 +7663,16 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} - memoizee@0.4.17: - resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} - engines: {node: '>=0.12'} + memoizee@0.4.15: + resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} @@ -6740,6 +7683,9 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + mermaid@11.2.0: + resolution: {integrity: sha512-ZinOa063lk81lujX8vkINNqmFaNMk1A95Z4kCL7fE6QLAi01CxeiUJVw+tpXU+lAM73utO39G+2PLjxS2GYS/w==} + methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -6834,6 +7780,10 @@ packages: micromark@4.0.0: resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -6842,10 +7792,6 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - mime-db@1.53.0: - resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} - engines: {node: '>= 0.6'} - mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -6889,6 +7835,10 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -6903,6 +7853,9 @@ packages: minisearch@6.3.0: resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} + minisearch@7.1.0: + resolution: {integrity: sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==} + mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} @@ -6915,8 +7868,8 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.2: - resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} + mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} module-definition@6.0.0: resolution: {integrity: sha512-sEGP5nKEXU7fGSZUML/coJbrO+yQtxcppDAYWRE9ovWsTbFoUHB2qDUx564WUzDaBHXsD46JBbIK5WVTwCyu3w==} @@ -6957,6 +7910,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -6986,8 +7944,8 @@ packages: node-fetch-native@1.6.4: resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} - node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + node-fetch@2.6.12: + resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -6995,8 +7953,8 @@ packages: encoding: optional: true - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -7019,9 +7977,15 @@ packages: resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} engines: {node: '>=8'} + node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-source-walk@7.0.0: resolution: {integrity: sha512-1uiY543L+N7Og4yswvlm5NCKgPKDEXd9AUR9Jh3gen6oOeBsesr6LqhXom1er3eRzSUcVRWXzhv8tSNrIfGHKw==} engines: {node: '>=18'} @@ -7049,12 +8013,12 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nwsapi@2.2.13: - resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} + nwsapi@2.2.12: + resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} @@ -7069,10 +8033,17 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} + object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + object-inspect@1.13.2: resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} engines: {node: '>= 0.4'} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} + object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} engines: {node: '>= 0.4'} @@ -7081,22 +8052,25 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - ofetch@1.4.0: - resolution: {integrity: sha512-MuHgsEhU6zGeX+EMh+8mSMrYTnsqJQQrpM00Q6QHMKNqQ0bKy0B43tk8tL1wg+CnsSTy1kg4Ir2T5Ig6rD+dfQ==} + ofetch@1.3.4: + resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==} omggif@1.0.10: resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} - on-exit-leak-free@2.1.2: - resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} - engines: {node: '>=14.0.0'} + on-exit-leak-free@2.1.0: + resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} @@ -7121,8 +8095,8 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-to-js@0.4.3: - resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} + oniguruma-to-js@0.3.3: + resolution: {integrity: sha512-m90/WEhgs8g4BxG37+Nu3YrMfJDs2YXtYtIllhsEPR+wP3+K4EZk6dDUvy2v2K4MNFDDOYKL4/yqYPXDqyozTQ==} open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} @@ -7134,8 +8108,8 @@ packages: openapi-typescript-helpers@0.0.13: resolution: {integrity: sha512-z44WK2e7ygW3aUtAtiurfEACohf/Qt9g6BsejmIYgEoY4REHeRzgFJmO3ium0libsuzPc145I+8lE9aiiZrQvQ==} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} os-tmpdir@1.0.2: @@ -7148,6 +8122,10 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -7240,11 +8218,11 @@ packages: resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} engines: {node: '>=8'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} - package-manager-detector@0.2.1: - resolution: {integrity: sha512-/hVW2fZvAdEas+wyKh0SnlZ2mx0NIa1+j11YaQkogEJkcMErbwchHCuo8z7lEtajZJQZ6rgZNVTWMVVd71Bjng==} + package-manager-detector@0.2.0: + resolution: {integrity: sha512-E385OSk9qDcXhcM9LNSe4sdhx8a9mAPrZ4sMLW+tmxl5ZuGtPUcdFu+MPP2jbgiWAZ6Pfe5soGFMd+0Db5Vrog==} pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -7319,6 +8297,9 @@ packages: path-to-regexp@0.1.10: resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -7348,9 +8329,15 @@ packages: performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.1.0: resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -7372,6 +8359,9 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + pino-abstract-transport@1.0.0: + resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==} + pino-abstract-transport@1.2.0: resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} @@ -7381,8 +8371,8 @@ packages: pino-std-serializers@7.0.0: resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - pino@8.21.0: - resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} + pino@8.15.0: + resolution: {integrity: sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ==} hasBin: true pino@9.4.0: @@ -7409,6 +8399,9 @@ packages: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} + pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + pkg-types@1.2.0: resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==} @@ -7453,8 +8446,8 @@ packages: peerDependencies: postcss: ^8.4.21 - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + postcss-load-config@4.0.1: + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: postcss: '>=8.0.9' @@ -7465,14 +8458,14 @@ packages: ts-node: optional: true - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + postcss-nested@6.0.1: + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} engines: {node: '>=4'} postcss-value-parser@4.2.0: @@ -7484,12 +8477,20 @@ packages: peerDependencies: postcss: ^8.2.9 - postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + postcss@8.4.35: + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} - preact@10.24.2: - resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} + postcss@8.4.45: + resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.1: + resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + engines: {node: ^10 || ^12 || >=14} + + preact@10.16.0: + resolution: {integrity: sha512-XTSj3dJ4roKIC93pald6rWuB2qQJO9gO2iLLyTe87MrjQN+HklueLsmskbywEWqCHlclgz3/M4YLL2iBr9UmMA==} precinct@12.1.2: resolution: {integrity: sha512-x2qVN3oSOp3D05ihCd8XdkIPuEQsyte7PSxzLqiRgktu79S5Dr1I75/S+zAup8/0cwjoiJTQztE9h0/sWp9bJQ==} @@ -7535,6 +8536,9 @@ packages: resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} engines: {node: '>=8'} + process-warning@2.2.0: + resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==} + process-warning@3.0.0: resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} @@ -7573,15 +8577,23 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + pure-rand@6.0.2: + resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} + + qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} @@ -7619,12 +8631,16 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -7648,8 +8664,8 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readable-stream@4.5.2: - resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + readable-stream@4.4.2: + resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} readdirp@3.6.0: @@ -7668,6 +8684,10 @@ packages: resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} engines: {node: '>= 0.10'} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + regenerate-unicode-properties@10.2.0: resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} @@ -7675,14 +8695,14 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - regex@4.3.3: - resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==} + regex@4.3.2: + resolution: {integrity: sha512-kK/AA3A9K6q2js89+VMymcboLOlF5lZRCYJv3gzszXFHBr6kO6qLGzbm+UIugBEV8SMMKCTR59txoY6ctRHYVw==} regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} @@ -7692,8 +8712,12 @@ packages: resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} engines: {node: '>= 0.4'} - regexpu-core@6.1.1: - resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} engines: {node: '>=4'} regjsgen@0.8.0: @@ -7703,8 +8727,8 @@ packages: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} hasBin: true - regjsparser@0.11.1: - resolution: {integrity: sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==} + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true release-zalgo@1.0.0: @@ -7786,6 +8810,15 @@ packages: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@1.22.4: + resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + hasBin: true + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -7813,6 +8846,9 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} @@ -7833,6 +8869,12 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + rollup-plugin-terser@7.0.2: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + rollup-plugin-visualizer@5.12.0: resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} engines: {node: '>=14'} @@ -7843,13 +8885,23 @@ packages: rollup: optional: true + rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + rollup@2.79.2: resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} engines: {node: '>=10.0.0'} hasBin: true - rollup@4.24.0: - resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} + rollup@4.21.3: + resolution: {integrity: sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rollup@4.32.0: + resolution: {integrity: sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -7868,8 +8920,8 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} safe-buffer@5.1.2: @@ -7878,15 +8930,19 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} safe-regex2@3.1.0: resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} - safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} safer-buffer@2.1.2: @@ -7909,6 +8965,10 @@ packages: resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} engines: {node: '>= 12.13.0'} + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + search-insights@2.17.2: resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==} @@ -7918,8 +8978,8 @@ packages: select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + selfsigned@2.1.1: + resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} engines: {node: '>=10'} semver@5.7.2: @@ -7930,6 +8990,11 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} @@ -7940,17 +9005,28 @@ packages: engines: {node: '>=10'} hasBin: true + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + + serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} serve-index@1.9.1: resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} + serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + serve-static@1.16.2: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} @@ -7958,8 +9034,8 @@ packages: set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-cookie-parser@2.7.0: - resolution: {integrity: sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==} + set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} @@ -7969,6 +9045,10 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + setprototypeof@1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} @@ -8010,13 +9090,32 @@ packages: shiki@0.14.7: resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} - shiki@1.22.0: - resolution: {integrity: sha512-/t5LlhNs+UOKQCYBtl5ZsH/Vclz73GIqT2yQsCBygr8L/ppTdmpL4w3kPLoZJbMKVWtoG77Ue1feOjZfDxvMkw==} + shiki@1.17.0: + resolution: {integrity: sha512-VZf8cPShRwfzPcaswv81+YP7qJEoFwRT+Ehy6bizim7M0zG9bk8Egug550C+xS9g7rKIOPhzAlp2uEyuCxbk/A==} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -8072,14 +9171,11 @@ packages: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} - smob@1.5.0: - resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - sonic-boom@3.8.1: - resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} + sonic-boom@3.3.0: + resolution: {integrity: sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==} sonic-boom@4.1.0: resolution: {integrity: sha512-NGipjjRicyJJ03rPiZCJYjwlsuP2d1/5QUviozRXC7S3WdVWNK5e3Ojieb9CCyfhq2UC+3+SRd9nG3I2lPRvUw==} @@ -8088,6 +9184,10 @@ packages: resolution: {integrity: sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==} engines: {node: '>=0.10.0'} + source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -8134,8 +9234,8 @@ packages: spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} @@ -8143,8 +9243,8 @@ packages: spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.20: - resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + spdx-license-ids@3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} @@ -8186,8 +9286,8 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - start-server-and-test@2.0.8: - resolution: {integrity: sha512-v2fV6NV2F7tL1ocwfI4Wpait+IKjRbT5l3ZZ+ZikXdMLmxYsS8ynGAsCQAUVXkVyGyS+UibsRnvgHkMvJIvCsw==} + start-server-and-test@2.0.7: + resolution: {integrity: sha512-tsOG1QbXKcRmrhCT0SrmmTex+uTjrb0SG8iF9XFmw1Cu8vPbVhER8zR4xkm5LAt1BarM/Dk7Jkfts+h8Rxfb2w==} engines: {node: '>=16'} hasBin: true @@ -8229,16 +9329,17 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} string.prototype.trimstart@1.0.8: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} @@ -8312,9 +9413,9 @@ packages: engines: {node: '>=18'} hasBin: true - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} + sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} hasBin: true superjson@2.2.1: @@ -8344,15 +9445,15 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} engines: {node: ^14.18.0 || >=16.0.0} tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tailwindcss@3.4.13: - resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==} + tailwindcss@3.3.3: + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} engines: {node: '>=14.0.0'} hasBin: true @@ -8396,8 +9497,13 @@ packages: uglify-js: optional: true - terser@5.34.1: - resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} + terser@5.32.0: + resolution: {integrity: sha512-v3Gtw3IzpBJ0ugkxEX8U0W6+TnPKRRCWGh1jC/iM/e3Ki5+qvO1L1EAZ56bZasc64aXHwRHNIQEzm6//i5cemQ==} + engines: {node: '>=10'} + hasBin: true + + terser@5.37.0: + resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} engines: {node: '>=10'} hasBin: true @@ -8415,8 +9521,8 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thread-stream@2.7.0: - resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} + thread-stream@2.4.0: + resolution: {integrity: sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==} thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} @@ -8424,8 +9530,8 @@ packages: throat@6.0.2: resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} - throttleit@1.0.1: - resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==} + throttleit@1.0.0: + resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==} through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -8433,9 +9539,8 @@ packages: thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - timers-ext@0.1.8: - resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} - engines: {node: '>=0.12'} + timers-ext@0.1.7: + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -8486,6 +9591,10 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} @@ -8510,8 +9619,8 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + trough@2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} ts-api-utils@1.3.0: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} @@ -8526,6 +9635,20 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-node@10.9.1: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + ts-toolbelt@6.15.5: resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==} @@ -8533,8 +9656,8 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} tsx@4.19.1: resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} @@ -8583,6 +9706,10 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + type-fest@4.26.1: resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} @@ -8591,23 +9718,26 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - type@2.7.3: - resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + type@1.2.0: + resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + type@2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} engines: {node: '>= 0.4'} - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} typedarray-to-buffer@3.1.5: @@ -8625,8 +9755,8 @@ packages: peerDependencies: typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x - typescript-eslint@8.8.1: - resolution: {integrity: sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==} + typescript-eslint@8.8.0: + resolution: {integrity: sha512-BjIT/VwJ8+0rVO01ZQ2ZVnjE1svFBiRczcpr1t1Yxt7sT25VSbPfrJtDsQ8uQTy2pilX5nI9gwxhUyLULNentw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -8639,8 +9769,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true @@ -8650,13 +9780,14 @@ packages: ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} hasBin: true - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} unconfig@0.3.13: resolution: {integrity: sha512-N9Ph5NC4+sqtcOjPfHrRcHekBCadCXWTBzp2VYYbySOHW0PfD9XLCeXshTXjkPYwLrBr9AtSeU0CZmkYECJhng==} @@ -8664,9 +9795,6 @@ packages: underscore@1.1.7: resolution: {integrity: sha512-w4QtCHoLBXw1mjofIDoMyexaEdWGMedWNDhlWTtT1V1lCRqi65Pnoygkh6+WRdr+Bm8ldkBNkNeCsXGMlQS9HQ==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -8674,16 +9802,16 @@ packages: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} - unicode-canonical-property-names-ecmascript@2.0.1: - resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} engines: {node: '>=4'} unicode-property-aliases-ecmascript@2.1.0: @@ -8704,6 +9832,10 @@ packages: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} + unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + unist-util-flatmap@1.0.0: resolution: {integrity: sha512-IG32jcKJlhARCYT2LsYPJWdoXYkzz3ESAdl1aa2hn9Auh+cgUmU6wgkII4yCc/1GgeWibRdELdCZh/p3QKQ1dQ==} @@ -8736,8 +9868,8 @@ packages: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + universalify@2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} unocss@0.59.4: @@ -8769,14 +9901,8 @@ packages: '@nuxt/kit': optional: true - unplugin@1.14.1: - resolution: {integrity: sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==} - engines: {node: '>=14.0.0'} - peerDependencies: - webpack-sources: ^3 - peerDependenciesMeta: - webpack-sources: - optional: true + unplugin@1.4.0: + resolution: {integrity: sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==} untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} @@ -8786,8 +9912,20 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + update-browserslist-db@1.0.11: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -8813,8 +9951,11 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} validate-npm-package-license@3.0.4: @@ -8856,6 +9997,68 @@ packages: '@vite-pwa/assets-generator': optional: true + vite@5.4.12: + resolution: {integrity: sha512-KwUaKB27TvWwDJr1GjjWthLMATbGEbeWYZIbGZ5qFIsgPP3vWzLu4cVooqhm5/Z2SPDUMjyPVjTztm5tYKwQxA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vite@5.4.2: + resolution: {integrity: sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + vite@5.4.8: resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -8907,6 +10110,18 @@ packages: postcss: optional: true + vitepress@1.3.4: + resolution: {integrity: sha512-I1/F6OW1xl3kW4PaIMC6snxjWgf3qfziq2aqsDoFc/Gt41WbcRv++z8zjw8qGRIJ+I4bUW7ZcKFDHHN/jkH9DQ==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + vitest@1.6.0: resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -8942,9 +10157,15 @@ packages: vscode-languageserver-protocol@3.17.5: resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + vscode-languageserver-textdocument@1.0.11: + resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} + vscode-languageserver-textdocument@1.0.12: resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + vscode-languageserver-types@3.17.3: + resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==} + vscode-languageserver-types@3.17.5: resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} @@ -8975,8 +10196,27 @@ packages: '@vue/composition-api': optional: true - vue@3.5.11: - resolution: {integrity: sha512-/8Wurrd9J3lb72FTQS7gRMNQD4nztTtKPmuDuPuhqXmmpD6+skVjAeahNpVzsuky6Sy9gy7wn8UadqPtt9SQIg==} + vue-demi@0.14.6: + resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue@3.4.21: + resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + vue@3.5.4: + resolution: {integrity: sha512-3yAj2gkmiY+i7+22A1PWM+kjOVXjU74UPINcTiN7grIVPyFFI0lpGwHlV/4xydDmobaBn7/xmi+YG8HeSlCTcg==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -8992,8 +10232,8 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - wait-on@8.0.1: - resolution: {integrity: sha512-1wWQOyR2LVVtaqrcIL2+OM+x7bkpmzVROa0Nf6FryXkS+er5Sa1kzFGjzZRqLnHa3n1rACFLeTwUqE1ETL9Mig==} + wait-on@8.0.0: + resolution: {integrity: sha512-fNE5SXinLr2Bt7cJvjvLg2PcXfqznlqRvtE3f8AqYdRZ9BhE+XpsCp1mwQbRoO7s1q7uhAuCw0Ro3mG/KdZjEw==} engines: {node: '>=12.0.0'} hasBin: true @@ -9010,8 +10250,8 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} webdriver@7.31.1: @@ -9067,19 +10307,19 @@ packages: webpack-cli: optional: true - webpack-merge@5.10.0: - resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} + webpack-merge@5.9.0: + resolution: {integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==} engines: {node: '>=10.0.0'} webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - webpack-virtual-modules@0.6.2: - resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} - webpack@5.95.0: - resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} + webpack@5.94.0: + resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -9117,6 +10357,14 @@ packages: which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} @@ -9128,6 +10376,10 @@ packages: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -9137,8 +10389,8 @@ packages: engines: {node: '>= 8'} hasBin: true - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} engines: {node: '>=8'} hasBin: true @@ -9149,61 +10401,58 @@ packages: wildcard@2.0.1: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workbox-background-sync@7.1.0: - resolution: {integrity: sha512-rMbgrzueVWDFcEq1610YyDW71z0oAXLfdRHRQcKw4SGihkfOK0JUEvqWHFwA6rJ+6TClnMIn7KQI5PNN1XQXwQ==} + workbox-background-sync@7.0.0: + resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} - workbox-broadcast-update@7.1.0: - resolution: {integrity: sha512-O36hIfhjej/c5ar95pO67k1GQw0/bw5tKP7CERNgK+JdxBANQhDmIuOXZTNvwb2IHBx9hj2kxvcDyRIh5nzOgQ==} + workbox-broadcast-update@7.0.0: + resolution: {integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==} - workbox-build@7.1.1: - resolution: {integrity: sha512-WdkVdC70VMpf5NBCtNbiwdSZeKVuhTEd5PV3mAwpTQCGAB5XbOny1P9egEgNdetv4srAMmMKjvBk4RD58LpooA==} + workbox-build@7.0.0: + resolution: {integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==} engines: {node: '>=16.0.0'} - workbox-cacheable-response@7.1.0: - resolution: {integrity: sha512-iwsLBll8Hvua3xCuBB9h92+/e0wdsmSVgR2ZlvcfjepZWwhd3osumQB3x9o7flj+FehtWM2VHbZn8UJeBXXo6Q==} + workbox-cacheable-response@7.0.0: + resolution: {integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==} - workbox-core@7.1.0: - resolution: {integrity: sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==} + workbox-core@7.0.0: + resolution: {integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==} - workbox-expiration@7.1.0: - resolution: {integrity: sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ==} + workbox-expiration@7.0.0: + resolution: {integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==} - workbox-google-analytics@7.1.0: - resolution: {integrity: sha512-FvE53kBQHfVTcZyczeBVRexhh7JTkyQ8HAvbVY6mXd2n2A7Oyz/9fIwnY406ZcDhvE4NFfKGjW56N4gBiqkrew==} + workbox-google-analytics@7.0.0: + resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} + deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained - workbox-navigation-preload@7.1.0: - resolution: {integrity: sha512-4wyAbo0vNI/X0uWNJhCMKxnPanNyhybsReMGN9QUpaePLTiDpKxPqFxl4oUmBNddPwIXug01eTSLVIFXimRG/A==} + workbox-navigation-preload@7.0.0: + resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} - workbox-precaching@7.1.0: - resolution: {integrity: sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA==} + workbox-precaching@7.0.0: + resolution: {integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==} - workbox-range-requests@7.1.0: - resolution: {integrity: sha512-m7+O4EHolNs5yb/79CrnwPR/g/PRzMFYEdo01LqwixVnc/sbzNSvKz0d04OE3aMRel1CwAAZQheRsqGDwATgPQ==} + workbox-range-requests@7.0.0: + resolution: {integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==} - workbox-recipes@7.1.0: - resolution: {integrity: sha512-NRrk4ycFN9BHXJB6WrKiRX3W3w75YNrNrzSX9cEZgFB5ubeGoO8s/SDmOYVrFYp9HMw6sh1Pm3eAY/1gVS8YLg==} + workbox-recipes@7.0.0: + resolution: {integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==} - workbox-routing@7.1.0: - resolution: {integrity: sha512-oOYk+kLriUY2QyHkIilxUlVcFqwduLJB7oRZIENbqPGeBP/3TWHYNNdmGNhz1dvKuw7aqvJ7CQxn27/jprlTdg==} + workbox-routing@7.0.0: + resolution: {integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==} - workbox-strategies@7.1.0: - resolution: {integrity: sha512-/UracPiGhUNehGjRm/tLUQ+9PtWmCbRufWtV0tNrALuf+HZ4F7cmObSEK+E4/Bx1p8Syx2tM+pkIrvtyetdlew==} + workbox-strategies@7.0.0: + resolution: {integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==} - workbox-streams@7.1.0: - resolution: {integrity: sha512-WyHAVxRXBMfysM8ORwiZnI98wvGWTVAq/lOyBjf00pXFvG0mNaVz4Ji+u+fKa/mf1i2SnTfikoYKto4ihHeS6w==} + workbox-streams@7.0.0: + resolution: {integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==} - workbox-sw@7.1.0: - resolution: {integrity: sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA==} + workbox-sw@7.0.0: + resolution: {integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==} - workbox-window@7.1.0: - resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==} + workbox-window@7.0.0: + resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==} wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -9231,6 +10480,18 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} @@ -9286,6 +10547,14 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.4.0: + resolution: {integrity: sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==} + engines: {node: '>= 14'} + hasBin: true + yaml@2.5.1: resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} engines: {node: '>= 14'} @@ -9314,12 +10583,16 @@ packages: yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.1.1: - resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} zwitch@2.0.4: @@ -9327,6 +10600,8 @@ packages: snapshots: + '@aashutoshrathi/word-wrap@1.2.6': {} + '@actions/core@1.11.1': dependencies: '@actions/exec': 1.1.1 @@ -9345,7 +10620,7 @@ snapshots: '@adobe/jsonschema2md@8.0.2': dependencies: - '@types/json-schema': 7.0.15 + '@types/json-schema': 7.0.12 '@types/mdast': 4.0.4 es2015-i18n-tag: 1.6.1 ferrum: 1.9.4 @@ -9365,112 +10640,103 @@ snapshots: transitivePeerDependencies: - supports-color - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1) search-insights: 2.17.2 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) - '@algolia/client-search': 4.24.0 - algoliasearch: 4.24.0 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1) + '@algolia/client-search': 4.19.1 + algoliasearch: 4.19.1 - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1)': dependencies: - '@algolia/client-search': 4.24.0 - algoliasearch: 4.24.0 + '@algolia/client-search': 4.19.1 + algoliasearch: 4.19.1 - '@algolia/cache-browser-local-storage@4.24.0': + '@algolia/cache-browser-local-storage@4.19.1': dependencies: - '@algolia/cache-common': 4.24.0 + '@algolia/cache-common': 4.19.1 - '@algolia/cache-common@4.24.0': {} + '@algolia/cache-common@4.19.1': {} - '@algolia/cache-in-memory@4.24.0': + '@algolia/cache-in-memory@4.19.1': dependencies: - '@algolia/cache-common': 4.24.0 + '@algolia/cache-common': 4.19.1 - '@algolia/client-account@4.24.0': + '@algolia/client-account@4.19.1': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 4.19.1 + '@algolia/client-search': 4.19.1 + '@algolia/transporter': 4.19.1 - '@algolia/client-analytics@4.24.0': + '@algolia/client-analytics@4.19.1': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 4.19.1 + '@algolia/client-search': 4.19.1 + '@algolia/requester-common': 4.19.1 + '@algolia/transporter': 4.19.1 - '@algolia/client-common@4.24.0': + '@algolia/client-common@4.19.1': dependencies: - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/requester-common': 4.19.1 + '@algolia/transporter': 4.19.1 - '@algolia/client-personalization@4.24.0': + '@algolia/client-personalization@4.19.1': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 4.19.1 + '@algolia/requester-common': 4.19.1 + '@algolia/transporter': 4.19.1 - '@algolia/client-search@4.24.0': + '@algolia/client-search@4.19.1': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 4.19.1 + '@algolia/requester-common': 4.19.1 + '@algolia/transporter': 4.19.1 - '@algolia/logger-common@4.24.0': {} + '@algolia/logger-common@4.19.1': {} - '@algolia/logger-console@4.24.0': + '@algolia/logger-console@4.19.1': dependencies: - '@algolia/logger-common': 4.24.0 + '@algolia/logger-common': 4.19.1 - '@algolia/recommend@4.24.0': + '@algolia/requester-browser-xhr@4.19.1': dependencies: - '@algolia/cache-browser-local-storage': 4.24.0 - '@algolia/cache-common': 4.24.0 - '@algolia/cache-in-memory': 4.24.0 - '@algolia/client-common': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/logger-common': 4.24.0 - '@algolia/logger-console': 4.24.0 - '@algolia/requester-browser-xhr': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/requester-node-http': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/requester-common': 4.19.1 - '@algolia/requester-browser-xhr@4.24.0': + '@algolia/requester-common@4.19.1': {} + + '@algolia/requester-node-http@4.19.1': dependencies: - '@algolia/requester-common': 4.24.0 + '@algolia/requester-common': 4.19.1 - '@algolia/requester-common@4.24.0': {} - - '@algolia/requester-node-http@4.24.0': + '@algolia/transporter@4.19.1': dependencies: - '@algolia/requester-common': 4.24.0 - - '@algolia/transporter@4.24.0': - dependencies: - '@algolia/cache-common': 4.24.0 - '@algolia/logger-common': 4.24.0 - '@algolia/requester-common': 4.24.0 + '@algolia/cache-common': 4.19.1 + '@algolia/logger-common': 4.19.1 + '@algolia/requester-common': 4.19.1 '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.2.1': + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -9478,14 +10744,14 @@ snapshots: '@antfu/install-pkg@0.4.1': dependencies: - package-manager-detector: 0.2.1 + package-manager-detector: 0.2.0 tinyexec: 0.3.0 '@antfu/utils@0.7.10': {} - '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': + '@apideck/better-ajv-errors@0.3.6(ajv@8.12.0)': dependencies: - ajv: 8.17.1 + ajv: 8.12.0 json-schema: 0.4.0 jsonpointer: 5.0.1 leven: 3.1.0 @@ -9532,37 +10798,6 @@ snapshots: - typescript - utf-8-validate - '@applitools/core@4.19.0(encoding@0.1.13)(typescript@5.4.5)': - dependencies: - '@applitools/core-base': 1.16.1 - '@applitools/dom-capture': 11.5.0 - '@applitools/dom-snapshot': 4.11.3 - '@applitools/driver': 1.19.1 - '@applitools/ec-client': 1.9.5(typescript@5.4.5) - '@applitools/logger': 2.0.18 - '@applitools/nml-client': 1.8.11 - '@applitools/req': 1.7.2 - '@applitools/screenshoter': 3.8.37 - '@applitools/snippets': 2.5.0 - '@applitools/socket': 1.1.18 - '@applitools/spec-driver-webdriver': 1.1.13(webdriver@7.31.1(typescript@5.4.5)) - '@applitools/ufg-client': 1.12.3 - '@applitools/utils': 1.7.4 - '@types/ws': 8.5.5 - abort-controller: 3.0.0 - chalk: 4.1.2 - node-fetch: 2.6.7(encoding@0.1.13) - semver: 7.6.2 - webdriver: 7.31.1(typescript@5.4.5) - ws: 8.17.1 - yargs: 17.7.2 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - typescript - - utf-8-validate - '@applitools/css-tree@1.1.4': dependencies: mdn-data: 2.1.0 @@ -9573,11 +10808,6 @@ snapshots: '@applitools/dom-shared': 1.0.15 '@applitools/functional-commons': 1.6.0 - '@applitools/dom-capture@11.5.0': - dependencies: - '@applitools/dom-shared': 1.0.15 - '@applitools/functional-commons': 1.6.0 - '@applitools/dom-shared@1.0.15': {} '@applitools/dom-snapshot@4.11.3': @@ -9596,15 +10826,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@applitools/driver@1.19.1': - dependencies: - '@applitools/logger': 2.0.18 - '@applitools/snippets': 2.5.0 - '@applitools/utils': 1.7.4 - semver: 7.6.2 - transitivePeerDependencies: - - supports-color - '@applitools/ec-client@1.9.4(typescript@5.4.5)': dependencies: '@applitools/core-base': 1.16.1 @@ -9622,23 +10843,6 @@ snapshots: - supports-color - typescript - '@applitools/ec-client@1.9.5(typescript@5.4.5)': - dependencies: - '@applitools/core-base': 1.16.1 - '@applitools/driver': 1.19.1 - '@applitools/logger': 2.0.18 - '@applitools/req': 1.7.2 - '@applitools/socket': 1.1.18 - '@applitools/spec-driver-webdriver': 1.1.13(webdriver@7.31.1(typescript@5.4.5)) - '@applitools/tunnel-client': 1.5.8 - '@applitools/utils': 1.7.4 - abort-controller: 3.0.0 - webdriver: 7.31.1(typescript@5.4.5) - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - - typescript - '@applitools/eg-frpc@1.0.5': {} '@applitools/eg-socks5-proxy-server@0.5.6': @@ -9651,23 +10855,23 @@ snapshots: '@applitools/eg-frpc': 1.0.5 '@applitools/eg-socks5-proxy-server': 0.5.6 '@applitools/logger': 1.1.53 - dotenv: 16.4.5 + dotenv: 16.3.1 encoding: 0.1.13 fastify: 4.28.1 fastify-plugin: 3.0.1 find-process: 1.4.7 ini: 3.0.1 node-cleanup: 2.1.2 - node-fetch: 2.6.7(encoding@0.1.13) + node-fetch: 2.6.12(encoding@0.1.13) p-retry: 4.6.2 teen_process: 1.16.0 uuid: 9.0.1 transitivePeerDependencies: - supports-color - '@applitools/eyes-cypress@3.44.9(encoding@0.1.13)(typescript@5.4.5)': + '@applitools/eyes-cypress@3.44.8(encoding@0.1.13)(typescript@5.4.5)': dependencies: - '@applitools/core': 4.19.0(encoding@0.1.13)(typescript@5.4.5) + '@applitools/core': 4.18.2(encoding@0.1.13)(typescript@5.4.5) '@applitools/eyes': 1.22.2(encoding@0.1.13)(typescript@5.4.5) '@applitools/functional-commons': 1.6.0 '@applitools/logger': 2.0.18 @@ -9718,7 +10922,7 @@ snapshots: dependencies: '@applitools/utils': 1.7.4 chalk: 4.1.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9730,14 +10934,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@applitools/nml-client@1.8.11': - dependencies: - '@applitools/logger': 2.0.18 - '@applitools/req': 1.7.2 - '@applitools/utils': 1.7.4 - transitivePeerDependencies: - - supports-color - '@applitools/req@1.7.2': dependencies: '@applitools/utils': 1.7.4 @@ -9757,19 +10953,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@applitools/screenshoter@3.8.37': - dependencies: - '@applitools/image': 1.1.13 - '@applitools/logger': 2.0.18 - '@applitools/snippets': 2.5.0 - '@applitools/utils': 1.7.4 - transitivePeerDependencies: - - supports-color - '@applitools/snippets@2.4.27': {} - '@applitools/snippets@2.5.0': {} - '@applitools/socket@1.1.18': dependencies: '@applitools/logger': 2.0.18 @@ -9787,16 +10972,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@applitools/spec-driver-webdriver@1.1.13(webdriver@7.31.1(typescript@5.4.5))': - dependencies: - '@applitools/driver': 1.19.1 - '@applitools/utils': 1.7.4 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - webdriver: 7.31.1(typescript@5.4.5) - transitivePeerDependencies: - - supports-color - '@applitools/tunnel-client@1.5.8': dependencies: '@applitools/execution-grid-tunnel': 3.0.8 @@ -9826,837 +11001,1691 @@ snapshots: '@applitools/utils@1.7.4': {} - '@argos-ci/api-client@0.5.0': + '@argos-ci/api-client@0.5.1': dependencies: + debug: 4.3.7 openapi-fetch: 0.11.3 + transitivePeerDependencies: + - supports-color '@argos-ci/browser@2.1.4': {} - '@argos-ci/core@2.8.1': + '@argos-ci/core@2.8.2': dependencies: - '@argos-ci/api-client': 0.5.0 + '@argos-ci/api-client': 0.5.1 '@argos-ci/util': 2.1.1 axios: 1.7.7(debug@4.3.7) convict: 6.2.4 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 fast-glob: 3.3.2 sharp: 0.33.5 tmp: 0.2.3 transitivePeerDependencies: - supports-color - '@argos-ci/cypress@2.2.2(cypress@13.15.0)': + '@argos-ci/cypress@2.2.3(cypress@13.14.2)': dependencies: '@argos-ci/browser': 2.1.4 - '@argos-ci/core': 2.8.1 + '@argos-ci/core': 2.8.2 '@argos-ci/util': 2.1.1 - cypress: 13.15.0 + cypress: 13.14.2 cypress-wait-until: 3.0.2 transitivePeerDependencies: - supports-color '@argos-ci/util@2.1.1': {} - '@babel/code-frame@7.25.7': + '@babel/code-frame@7.22.10': dependencies: '@babel/highlight': 7.25.7 + chalk: 2.4.2 + + '@babel/code-frame@7.23.5': + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 picocolors: 1.1.0 - '@babel/compat-data@7.25.7': {} - - '@babel/core@7.25.7': + '@babel/code-frame@7.26.2': dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helpers': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/template': 7.25.7 - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 - convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@8.1.1) + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.22.9': {} + + '@babel/compat-data@7.25.4': {} + + '@babel/compat-data@7.26.5': {} + + '@babel/core@7.22.10': + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.10 + '@babel/generator': 7.22.10 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.10) + '@babel/helpers': 7.22.10 + '@babel/parser': 7.24.0 + '@babel/template': 7.22.5 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.5 + convert-source-map: 1.9.0 + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.25.7': + '@babel/core@7.23.5': dependencies: - '@babel/types': 7.25.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 - - '@babel/helper-annotate-as-pure@7.25.7': - dependencies: - '@babel/types': 7.25.7 - - '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': - dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helpers': 7.23.5 + '@babel/parser': 7.26.7 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-compilation-targets@7.25.7': + '@babel/core@7.25.2': dependencies: - '@babel/compat-data': 7.25.7 - '@babel/helper-validator-option': 7.25.7 - browserslist: 4.24.0 + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/core@7.26.7': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helpers': 7.26.7 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.22.10': + dependencies: + '@babel/types': 7.23.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + jsesc: 2.5.2 + + '@babel/generator@7.23.5': + dependencies: + '@babel/types': 7.23.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + jsesc: 2.5.2 + + '@babel/generator@7.25.6': + dependencies: + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/generator@7.26.5': + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.24.7': + dependencies: + '@babel/types': 7.25.6 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.7 + + '@babel/helper-compilation-targets@7.22.10': + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.21.10 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.7)': + '@babel/helper-compilation-targets@7.22.15': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/compat-data': 7.22.9 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.21.10 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-compilation-targets@7.25.2': + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/traverse': 7.25.6 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.25.7(@babel/core@7.25.7)': + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - regexpu-core: 6.1.1 + '@babel/core': 7.22.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.22.10) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.7)': + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - debug: 4.3.7(supports-color@8.1.1) + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + debug: 4.4.0 lodash.debounce: 4.0.8 - resolve: 1.22.8 + resolve: 1.22.10 transitivePeerDependencies: - supports-color - '@babel/helper-member-expression-to-functions@7.25.7': + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.7)': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + debug: 4.4.0 + lodash.debounce: 4.0.8 + resolve: 1.22.10 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.25.7': + '@babel/helper-environment-visitor@7.22.20': {} + + '@babel/helper-function-name@7.23.0': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/template': 7.22.15 + '@babel/types': 7.23.5 + + '@babel/helper-hoist-variables@7.22.5': + dependencies: + '@babel/types': 7.23.5 + + '@babel/helper-member-expression-to-functions@7.24.8': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': + '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-simple-access': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.25.7': + '@babel/helper-module-imports@7.22.15': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.23.5 - '@babel/helper-plugin-utils@7.25.7': {} - - '@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.25.7)': + '@babel/helper-module-imports@7.22.5': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-wrap-function': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/types': 7.23.5 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.25.7(@babel/core@7.25.7)': + '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/helper-simple-access@7.25.7': + '@babel/helper-module-transforms@7.22.9(@babel/core@7.22.10)': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/core': 7.22.10 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.25.7': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.22.10)': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/core': 7.22.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.25.7': {} - - '@babel/helper-validator-identifier@7.25.7': {} - - '@babel/helper-validator-option@7.25.7': {} - - '@babel/helper-wrap-function@7.25.7': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.7)': dependencies: - '@babel/template': 7.25.7 - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/helpers@7.25.7': + '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/template': 7.25.7 - '@babel/types': 7.25.7 + '@babel/types': 7.25.6 + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.7 + + '@babel/helper-plugin-utils@7.22.5': {} + + '@babel/helper-plugin-utils@7.24.8': {} + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.26.5(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.22.5': + dependencies: + '@babel/types': 7.23.5 + + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-split-export-declaration@7.22.6': + dependencies: + '@babel/types': 7.23.5 + + '@babel/helper-string-parser@7.23.4': {} + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.22.20': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.23.5': {} + + '@babel/helper-validator-option@7.24.8': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helper-wrap-function@7.25.9': + dependencies: + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.22.10': + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.23.5': + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.25.6': + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + + '@babel/helpers@7.26.7': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + + '@babel/highlight@7.23.4': + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.1 '@babel/highlight@7.25.7': dependencies: - '@babel/helper-validator-identifier': 7.25.7 + '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.1.0 + picocolors: 1.1.1 - '@babel/parser@7.25.7': + '@babel/parser@7.24.0': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.23.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7(@babel/core@7.25.7)': + '@babel/parser@7.25.6': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/types': 7.25.6 + + '@babel/parser@7.26.7': + dependencies: + '@babel/types': 7.26.7 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.22.10) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-import-assertions@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-async-generator-functions@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-class-properties@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + '@babel/core': 7.22.10 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5)': + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.22.10) + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.7) + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.22.10) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.22.10) + '@babel/traverse': 7.26.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/template': 7.25.7 - - '@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-dotall-regex@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-duplicate-keys@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-dynamic-import@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) - - '@babel/plugin-transform-exponentiation-operator@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7) + '@babel/traverse': 7.26.7 + globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-export-namespace-from@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.25.9 - '@babel/plugin-transform-for-of@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.25.9 + + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) - - '@babel/plugin-transform-literals@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-logical-assignment-operators@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) - - '@babel/plugin-transform-member-expression-literals@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-modules-amd@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.22.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-simple-access': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-new-target@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-nullish-coalescing-operator@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) - - '@babel/plugin-transform-numeric-separator@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) - - '@babel/plugin-transform-object-rest-spread@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.7) - - '@babel/plugin-transform-object-super@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) - - '@babel/plugin-transform-optional-chaining@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + '@babel/core': 7.22.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + '@babel/core': 7.22.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-regenerator@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.22.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.22.10) + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.7) + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.22.10) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + regenerator-transform: 0.15.2 - '@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.22.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-spread@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-template-literals@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-typeof-symbol@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-typescript@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-property-regex@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.22.10)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-sets-regex@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/preset-env@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.22.10)': dependencies: - '@babel/compat-data': 7.25.7 - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-validator-option': 7.25.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-import-assertions': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.7) - '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-async-generator-functions': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-async-to-generator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-block-scoped-functions': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-block-scoping': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-class-properties': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-class-static-block': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-classes': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-computed-properties': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-destructuring': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-dotall-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-duplicate-keys': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-dynamic-import': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-exponentiation-operator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-export-namespace-from': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-for-of': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-function-name': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-json-strings': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-literals': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-logical-assignment-operators': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-member-expression-literals': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-modules-amd': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-modules-systemjs': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-modules-umd': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-new-target': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-numeric-separator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-object-rest-spread': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-object-super': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-optional-catch-binding': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-private-property-in-object': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-property-literals': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-regenerator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-reserved-words': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-shorthand-properties': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-spread': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-sticky-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-template-literals': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-typeof-symbol': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-escapes': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-property-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-sets-regex': 7.25.7(@babel/core@7.25.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.7) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.7) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.7) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.7) - core-js-compat: 3.38.1 + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.22.10)': + dependencies: + '@babel/core': 7.22.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.22.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/preset-env@7.26.7(@babel/core@7.22.10)': + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/core': 7.22.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.10) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.22.10) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.22.10) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.10) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.22.10) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.22.10) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.22.10) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.22.10) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.22.10) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.22.10) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.22.10) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.22.10) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.22.10) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.22.10) + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.22.10) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.22.10) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.22.10) + core-js-compat: 3.40.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.7)': + '@babel/preset-env@7.26.7(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/types': 7.25.7 - esutils: 2.0.3 - - '@babel/preset-typescript@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-validator-option': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/compat-data': 7.26.5 + '@babel/core': 7.26.7 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.7) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.7) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.7) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.7) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.7) + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.7) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.7) + core-js-compat: 3.40.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/runtime@7.25.7': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.22.10)': dependencies: - regenerator-runtime: 0.14.1 + '@babel/core': 7.22.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/types': 7.26.7 + esutils: 2.0.3 - '@babel/template@7.25.7': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.7)': dependencies: - '@babel/code-frame': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/types': 7.26.7 + esutils: 2.0.3 - '@babel/traverse@7.25.7': + '@babel/preset-typescript@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/code-frame': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/template': 7.25.7 - '@babel/types': 7.25.7 - debug: 4.3.7(supports-color@8.1.1) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.22.10': + dependencies: + regenerator-runtime: 0.14.0 + + '@babel/runtime@7.26.7': + dependencies: + regenerator-runtime: 0.14.0 + + '@babel/template@7.22.15': + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.26.7 + '@babel/types': 7.23.5 + + '@babel/template@7.22.5': + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.26.7 + '@babel/types': 7.23.5 + + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.26.7 + '@babel/types': 7.25.6 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + + '@babel/traverse@7.23.2': + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.26.7 + '@babel/types': 7.23.5 + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.7': + '@babel/traverse@7.23.5': dependencies: - '@babel/helper-string-parser': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.26.7 + '@babel/types': 7.23.5 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.25.6': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.26.7': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.23.5': + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + '@babel/types@7.25.6': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@babel/types@7.26.7': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@bcherny/json-schema-ref-parser@10.0.5-fork': dependencies: '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.15 + '@types/json-schema': 7.0.12 call-me-maybe: 1.0.2 js-yaml: 4.1.0 @@ -10678,7 +12707,7 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.6.3 + semver: 7.6.0 '@changesets/assemble-release-plan@6.0.4': dependencies: @@ -10687,7 +12716,7 @@ snapshots: '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - semver: 7.6.3 + semver: 7.6.0 '@changesets/changelog-git@0.2.0': dependencies: @@ -10701,7 +12730,7 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/cli@2.27.9': + '@changesets/cli@2.27.8': dependencies: '@changesets/apply-release-plan': 7.0.5 '@changesets/assemble-release-plan': 6.0.4 @@ -10718,17 +12747,19 @@ snapshots: '@changesets/types': 6.0.0 '@changesets/write': 0.3.2 '@manypkg/get-packages': 1.1.3 + '@types/semver': 7.5.0 ansi-colors: 4.1.3 - ci-info: 3.9.0 + ci-info: 3.8.0 enquirer: 2.4.1 external-editor: 3.1.0 fs-extra: 7.0.1 mri: 1.2.0 + outdent: 0.5.0 p-limit: 2.3.0 - package-manager-detector: 0.2.1 + package-manager-detector: 0.2.0 picocolors: 1.1.0 resolve-from: 5.0.0 - semver: 7.6.3 + semver: 7.6.0 spawndamnit: 2.0.0 term-size: 2.2.1 @@ -10740,7 +12771,7 @@ snapshots: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - micromatch: 4.0.8 + micromatch: 4.0.5 '@changesets/errors@0.2.0': dependencies: @@ -10751,12 +12782,12 @@ snapshots: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.0 - semver: 7.6.3 + semver: 7.6.0 '@changesets/get-github-info@0.6.0(encoding@0.1.13)': dependencies: dataloader: 1.4.0 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.6.12(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -10776,7 +12807,7 @@ snapshots: '@changesets/errors': 0.2.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 - micromatch: 4.0.8 + micromatch: 4.0.5 spawndamnit: 2.0.0 '@changesets/logger@0.1.1': @@ -10845,9 +12876,9 @@ snapshots: dependencies: '@cspell/dict-ada': 4.0.2 '@cspell/dict-aws': 4.0.4 - '@cspell/dict-bash': 4.1.5 + '@cspell/dict-bash': 4.1.4 '@cspell/dict-companies': 3.1.4 - '@cspell/dict-cpp': 5.1.19 + '@cspell/dict-cpp': 5.1.16 '@cspell/dict-cryptocurrencies': 5.0.0 '@cspell/dict-csharp': 4.0.2 '@cspell/dict-css': 4.0.13 @@ -10866,7 +12897,7 @@ snapshots: '@cspell/dict-fullstack': 3.2.0 '@cspell/dict-gaming-terms': 1.0.5 '@cspell/dict-git': 3.0.0 - '@cspell/dict-golang': 6.0.13 + '@cspell/dict-golang': 6.0.12 '@cspell/dict-google': 1.0.1 '@cspell/dict-haskell': 4.0.1 '@cspell/dict-html': 4.0.6 @@ -10882,69 +12913,152 @@ snapshots: '@cspell/dict-node': 5.0.1 '@cspell/dict-npm': 5.1.5 '@cspell/dict-php': 4.0.10 - '@cspell/dict-powershell': 5.0.10 + '@cspell/dict-powershell': 5.0.9 '@cspell/dict-public-licenses': 2.0.8 - '@cspell/dict-python': 4.2.8 + '@cspell/dict-python': 4.2.6 '@cspell/dict-r': 2.0.1 - '@cspell/dict-ruby': 5.0.4 - '@cspell/dict-rust': 4.0.6 + '@cspell/dict-ruby': 5.0.3 + '@cspell/dict-rust': 4.0.5 '@cspell/dict-scala': 5.0.3 - '@cspell/dict-software-terms': 4.1.7 + '@cspell/dict-software-terms': 4.1.4 '@cspell/dict-sql': 2.1.5 '@cspell/dict-svelte': 1.0.2 '@cspell/dict-swift': 2.0.1 - '@cspell/dict-terraform': 1.0.2 + '@cspell/dict-terraform': 1.0.1 '@cspell/dict-typescript': 3.1.6 '@cspell/dict-vue': 3.0.0 - '@cspell/cspell-json-reporter@8.14.4': + '@cspell/cspell-bundled-dicts@8.6.0': dependencies: - '@cspell/cspell-types': 8.14.4 + '@cspell/dict-ada': 4.0.2 + '@cspell/dict-aws': 4.0.1 + '@cspell/dict-bash': 4.1.3 + '@cspell/dict-companies': 3.0.31 + '@cspell/dict-cpp': 5.1.3 + '@cspell/dict-cryptocurrencies': 5.0.0 + '@cspell/dict-csharp': 4.0.2 + '@cspell/dict-css': 4.0.12 + '@cspell/dict-dart': 2.0.3 + '@cspell/dict-django': 4.1.0 + '@cspell/dict-docker': 1.1.7 + '@cspell/dict-dotnet': 5.0.0 + '@cspell/dict-elixir': 4.0.3 + '@cspell/dict-en-common-misspellings': 2.0.0 + '@cspell/dict-en-gb': 1.1.33 + '@cspell/dict-en_us': 4.3.17 + '@cspell/dict-filetypes': 3.0.3 + '@cspell/dict-fonts': 4.0.0 + '@cspell/dict-fsharp': 1.0.1 + '@cspell/dict-fullstack': 3.1.5 + '@cspell/dict-gaming-terms': 1.0.5 + '@cspell/dict-git': 3.0.0 + '@cspell/dict-golang': 6.0.5 + '@cspell/dict-haskell': 4.0.1 + '@cspell/dict-html': 4.0.5 + '@cspell/dict-html-symbol-entities': 4.0.0 + '@cspell/dict-java': 5.0.6 + '@cspell/dict-k8s': 1.0.2 + '@cspell/dict-latex': 4.0.0 + '@cspell/dict-lorem-ipsum': 4.0.0 + '@cspell/dict-lua': 4.0.3 + '@cspell/dict-makefile': 1.0.0 + '@cspell/dict-node': 4.0.3 + '@cspell/dict-npm': 5.0.15 + '@cspell/dict-php': 4.0.6 + '@cspell/dict-powershell': 5.0.3 + '@cspell/dict-public-licenses': 2.0.6 + '@cspell/dict-python': 4.1.11 + '@cspell/dict-r': 2.0.1 + '@cspell/dict-ruby': 5.0.2 + '@cspell/dict-rust': 4.0.2 + '@cspell/dict-scala': 5.0.0 + '@cspell/dict-software-terms': 3.3.18 + '@cspell/dict-sql': 2.1.3 + '@cspell/dict-svelte': 1.0.2 + '@cspell/dict-swift': 2.0.1 + '@cspell/dict-typescript': 3.1.2 + '@cspell/dict-vue': 3.0.0 + + '@cspell/cspell-json-reporter@8.6.0': + dependencies: + '@cspell/cspell-types': 8.6.0 '@cspell/cspell-pipe@8.14.4': {} + '@cspell/cspell-pipe@8.6.0': {} + '@cspell/cspell-resolver@8.14.4': dependencies: global-directory: 4.0.1 + '@cspell/cspell-resolver@8.6.0': + dependencies: + global-directory: 4.0.1 + '@cspell/cspell-service-bus@8.14.4': {} + '@cspell/cspell-service-bus@8.6.0': {} + '@cspell/cspell-types@8.14.4': {} + '@cspell/cspell-types@8.6.0': {} + '@cspell/dict-ada@4.0.2': {} + '@cspell/dict-aws@4.0.1': {} + '@cspell/dict-aws@4.0.4': {} - '@cspell/dict-bash@4.1.5': {} + '@cspell/dict-bash@4.1.3': {} + + '@cspell/dict-bash@4.1.4': {} + + '@cspell/dict-companies@3.0.31': {} '@cspell/dict-companies@3.1.4': {} - '@cspell/dict-cpp@5.1.19': {} + '@cspell/dict-cpp@5.1.16': {} + + '@cspell/dict-cpp@5.1.3': {} '@cspell/dict-cryptocurrencies@5.0.0': {} '@cspell/dict-csharp@4.0.2': {} + '@cspell/dict-css@4.0.12': {} + '@cspell/dict-css@4.0.13': {} + '@cspell/dict-dart@2.0.3': {} + '@cspell/dict-dart@2.2.1': {} - '@cspell/dict-data-science@2.0.2': {} + '@cspell/dict-data-science@1.0.11': {} + + '@cspell/dict-data-science@2.0.1': {} '@cspell/dict-django@4.1.0': {} '@cspell/dict-docker@1.1.7': {} + '@cspell/dict-dotnet@5.0.0': {} + '@cspell/dict-dotnet@5.0.5': {} '@cspell/dict-elixir@4.0.3': {} + '@cspell/dict-en-common-misspellings@2.0.0': {} + '@cspell/dict-en-common-misspellings@2.0.4': {} '@cspell/dict-en-gb@1.1.33': {} + '@cspell/dict-en_us@4.3.17': {} + '@cspell/dict-en_us@4.3.23': {} + '@cspell/dict-filetypes@3.0.3': {} + '@cspell/dict-filetypes@3.0.4': {} '@cspell/dict-flutter@1.0.0': {} @@ -10953,13 +13067,17 @@ snapshots: '@cspell/dict-fsharp@1.0.1': {} + '@cspell/dict-fullstack@3.1.5': {} + '@cspell/dict-fullstack@3.2.0': {} '@cspell/dict-gaming-terms@1.0.5': {} '@cspell/dict-git@3.0.0': {} - '@cspell/dict-golang@6.0.13': {} + '@cspell/dict-golang@6.0.12': {} + + '@cspell/dict-golang@6.0.5': {} '@cspell/dict-google@1.0.1': {} @@ -10967,12 +13085,18 @@ snapshots: '@cspell/dict-html-symbol-entities@4.0.0': {} + '@cspell/dict-html@4.0.5': {} + '@cspell/dict-html@4.0.6': {} + '@cspell/dict-java@5.0.6': {} + '@cspell/dict-java@5.0.7': {} '@cspell/dict-julia@1.0.1': {} + '@cspell/dict-k8s@1.0.2': {} + '@cspell/dict-k8s@1.0.6': {} '@cspell/dict-latex@4.0.0': {} @@ -10985,29 +13109,53 @@ snapshots: '@cspell/dict-monkeyc@1.0.6': {} + '@cspell/dict-node@4.0.3': {} + '@cspell/dict-node@5.0.1': {} + '@cspell/dict-npm@5.0.15': {} + '@cspell/dict-npm@5.1.5': {} '@cspell/dict-php@4.0.10': {} - '@cspell/dict-powershell@5.0.10': {} + '@cspell/dict-php@4.0.6': {} + + '@cspell/dict-powershell@5.0.3': {} + + '@cspell/dict-powershell@5.0.9': {} + + '@cspell/dict-public-licenses@2.0.6': {} '@cspell/dict-public-licenses@2.0.8': {} - '@cspell/dict-python@4.2.8': + '@cspell/dict-python@4.1.11': dependencies: - '@cspell/dict-data-science': 2.0.2 + '@cspell/dict-data-science': 1.0.11 + + '@cspell/dict-python@4.2.6': + dependencies: + '@cspell/dict-data-science': 2.0.1 '@cspell/dict-r@2.0.1': {} - '@cspell/dict-ruby@5.0.4': {} + '@cspell/dict-ruby@5.0.2': {} - '@cspell/dict-rust@4.0.6': {} + '@cspell/dict-ruby@5.0.3': {} + + '@cspell/dict-rust@4.0.2': {} + + '@cspell/dict-rust@4.0.5': {} + + '@cspell/dict-scala@5.0.0': {} '@cspell/dict-scala@5.0.3': {} - '@cspell/dict-software-terms@4.1.7': {} + '@cspell/dict-software-terms@3.3.18': {} + + '@cspell/dict-software-terms@4.1.4': {} + + '@cspell/dict-sql@2.1.3': {} '@cspell/dict-sql@2.1.5': {} @@ -11015,7 +13163,9 @@ snapshots: '@cspell/dict-swift@2.0.1': {} - '@cspell/dict-terraform@1.0.2': {} + '@cspell/dict-terraform@1.0.1': {} + + '@cspell/dict-typescript@3.1.2': {} '@cspell/dict-typescript@3.1.6': {} @@ -11025,43 +13175,54 @@ snapshots: dependencies: import-meta-resolve: 4.1.0 - '@cspell/eslint-plugin@8.14.4(eslint@9.12.0(jiti@1.21.6))': + '@cspell/dynamic-import@8.6.0': + dependencies: + import-meta-resolve: 4.0.0 + + '@cspell/eslint-plugin@8.14.4(eslint@9.11.1(jiti@1.21.0))': dependencies: '@cspell/cspell-types': 8.14.4 '@cspell/url': 8.14.4 cspell-lib: 8.14.4 - eslint: 9.12.0(jiti@1.21.6) - synckit: 0.9.2 + eslint: 9.11.1(jiti@1.21.0) + synckit: 0.9.1 '@cspell/filetypes@8.14.4': {} '@cspell/strong-weak-map@8.14.4': {} + '@cspell/strong-weak-map@8.6.0': {} + '@cspell/url@8.14.4': {} - '@cypress/code-coverage@3.13.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)))(cypress@13.15.0)(webpack@5.95.0(esbuild@0.21.5))': + '@cspotcode/source-map-support@0.8.1': dependencies: - '@babel/core': 7.25.7 - '@babel/preset-env': 7.25.7(@babel/core@7.25.7) - '@cypress/webpack-preprocessor': 6.0.2(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)))(webpack@5.95.0(esbuild@0.21.5)) - babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)) + '@jridgewell/trace-mapping': 0.3.9 + optional: true + + '@cypress/code-coverage@3.12.48(@babel/core@7.22.10)(@babel/preset-env@7.26.7(@babel/core@7.22.10))(babel-loader@9.1.3(@babel/core@7.22.10)(webpack@5.94.0(esbuild@0.21.5)))(cypress@13.14.2)(webpack@5.94.0(esbuild@0.21.5))': + dependencies: + '@babel/core': 7.22.10 + '@babel/preset-env': 7.26.7(@babel/core@7.22.10) + '@cypress/webpack-preprocessor': 6.0.1(@babel/core@7.22.10)(@babel/preset-env@7.26.7(@babel/core@7.22.10))(babel-loader@9.1.3(@babel/core@7.22.10)(webpack@5.94.0(esbuild@0.21.5)))(webpack@5.94.0(esbuild@0.21.5)) + babel-loader: 9.1.3(@babel/core@7.22.10)(webpack@5.94.0(esbuild@0.21.5)) chalk: 4.1.2 - cypress: 13.15.0 + cypress: 13.14.2 dayjs: 1.11.13 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 execa: 4.1.0 globby: 11.1.0 - istanbul-lib-coverage: 3.2.2 + istanbul-lib-coverage: 3.2.0 js-yaml: 4.1.0 nyc: 15.1.0 - webpack: 5.95.0(esbuild@0.21.5) + webpack: 5.94.0(esbuild@0.21.5) transitivePeerDependencies: - supports-color '@cypress/request@3.0.5': dependencies: aws-sign2: 0.7.0 - aws4: 1.13.2 + aws4: 1.12.0 caseless: 0.12.0 combined-stream: 1.0.8 extend: 3.0.2 @@ -11075,19 +13236,19 @@ snapshots: performance-now: 2.1.0 qs: 6.13.0 safe-buffer: 5.2.1 - tough-cookie: 4.1.4 + tough-cookie: 4.1.3 tunnel-agent: 0.6.0 uuid: 8.3.2 - '@cypress/webpack-preprocessor@6.0.2(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)))(webpack@5.95.0(esbuild@0.21.5))': + '@cypress/webpack-preprocessor@6.0.1(@babel/core@7.22.10)(@babel/preset-env@7.26.7(@babel/core@7.22.10))(babel-loader@9.1.3(@babel/core@7.22.10)(webpack@5.94.0(esbuild@0.21.5)))(webpack@5.94.0(esbuild@0.21.5))': dependencies: - '@babel/core': 7.25.7 - '@babel/preset-env': 7.25.7(@babel/core@7.25.7) - babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)) + '@babel/core': 7.22.10 + '@babel/preset-env': 7.26.7(@babel/core@7.22.10) + babel-loader: 9.1.3(@babel/core@7.22.10)(webpack@5.94.0(esbuild@0.21.5)) bluebird: 3.7.1 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 lodash: 4.17.21 - webpack: 5.95.0(esbuild@0.21.5) + webpack: 5.94.0(esbuild@0.21.5) transitivePeerDependencies: - supports-color @@ -11105,12 +13266,12 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@docsearch/css@3.6.2': {} + '@docsearch/css@3.6.1': {} - '@docsearch/js@3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2)': + '@docsearch/js@3.6.1(@algolia/client-search@4.19.1)(search-insights@2.17.2)': dependencies: - '@docsearch/react': 3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2) - preact: 10.24.2 + '@docsearch/react': 3.6.1(@algolia/client-search@4.19.1)(search-insights@2.17.2) + preact: 10.16.0 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -11118,20 +13279,20 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2)': + '@docsearch/react@3.6.1(@algolia/client-search@4.19.1)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) - '@docsearch/css': 3.6.2 - algoliasearch: 4.24.0 + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1) + '@docsearch/css': 3.6.1 + algoliasearch: 4.19.1 optionalDependencies: search-insights: 2.17.2 transitivePeerDependencies: - '@algolia/client-search' - '@emnapi/runtime@1.3.0': + '@emnapi/runtime@1.2.0': dependencies: - tslib: 2.7.0 + tslib: 2.6.2 optional: true '@es-joy/jsdoccomment@0.48.0': @@ -11281,17 +13442,17 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0(jiti@1.21.6))': + '@eslint-community/eslint-utils@4.4.0(eslint@9.11.1(jiti@1.21.0))': dependencies: - eslint: 9.12.0(jiti@1.21.6) + eslint: 9.11.1(jiti@1.21.0) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.1': {} + '@eslint-community/regexpp@4.11.0': {} '@eslint/config-array@0.18.0': dependencies: '@eslint/object-schema': 2.1.4 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -11301,8 +13462,8 @@ snapshots: '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 - debug: 4.3.7(supports-color@8.1.1) - espree: 10.2.0 + debug: 4.3.7 + espree: 10.1.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 @@ -11312,7 +13473,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.12.0': {} + '@eslint/js@9.11.1': {} '@eslint/object-schema@2.1.4': {} @@ -11322,8 +13483,8 @@ snapshots: '@fastify/ajv-compiler@3.6.0': dependencies: - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) fast-uri: 2.4.0 '@fastify/busboy@2.1.1': {} @@ -11338,22 +13499,24 @@ snapshots: dependencies: fast-deep-equal: 3.1.3 - '@floating-ui/core@1.6.8': + '@floating-ui/core@1.6.0': dependencies: - '@floating-ui/utils': 0.2.8 + '@floating-ui/utils': 0.2.1 - '@floating-ui/dom@1.6.11': + '@floating-ui/dom@1.6.3': dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/utils': 0.2.8 + '@floating-ui/core': 1.6.0 + '@floating-ui/utils': 0.2.1 - '@floating-ui/utils@0.2.8': {} + '@floating-ui/utils@0.2.1': {} - '@floating-ui/vue@1.1.5(vue@3.5.11(typescript@5.6.2))': + '@floating-ui/utils@0.2.7': {} + + '@floating-ui/vue@1.1.4(vue@3.4.21(typescript@5.6.3))': dependencies: - '@floating-ui/dom': 1.6.11 - '@floating-ui/utils': 0.2.8 - vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) + '@floating-ui/dom': 1.6.3 + '@floating-ui/utils': 0.2.7 + vue-demi: 0.14.6(vue@3.4.21(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -11364,35 +13527,28 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 - '@headlessui-float/vue@0.14.4(@headlessui/vue@1.7.23(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))': + '@headlessui-float/vue@0.14.4(@headlessui/vue@1.7.19(vue@3.4.21(typescript@5.6.3)))(vue@3.4.21(typescript@5.6.3))': dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/dom': 1.6.11 - '@floating-ui/vue': 1.1.5(vue@3.5.11(typescript@5.6.2)) - '@headlessui/vue': 1.7.23(vue@3.5.11(typescript@5.6.2)) - vue: 3.5.11(typescript@5.6.2) + '@floating-ui/core': 1.6.0 + '@floating-ui/dom': 1.6.3 + '@floating-ui/vue': 1.1.4(vue@3.4.21(typescript@5.6.3)) + '@headlessui/vue': 1.7.19(vue@3.4.21(typescript@5.6.3)) + vue: 3.4.21(typescript@5.6.3) transitivePeerDependencies: - '@vue/composition-api' - '@headlessui/tailwindcss@0.2.1(tailwindcss@3.4.13)': + '@headlessui/tailwindcss@0.2.0(tailwindcss@3.3.3(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.6.3)))': dependencies: - tailwindcss: 3.4.13 + tailwindcss: 3.3.3(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.6.3)) - '@headlessui/vue@1.7.23(vue@3.5.11(typescript@5.6.2))': + '@headlessui/vue@1.7.19(vue@3.4.21(typescript@5.6.3))': dependencies: - '@tanstack/vue-virtual': 3.10.8(vue@3.5.11(typescript@5.6.2)) - vue: 3.5.11(typescript@5.6.2) - - '@humanfs/core@0.19.0': {} - - '@humanfs/node@0.16.5': - dependencies: - '@humanfs/core': 0.19.0 - '@humanwhocodes/retry': 0.3.1 + '@tanstack/vue-virtual': 3.1.3(vue@3.4.21(typescript@5.6.3)) + vue: 3.4.21(typescript@5.6.3) '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.1': {} + '@humanwhocodes/retry@0.3.0': {} '@iconify-json/carbon@1.2.1': dependencies: @@ -11400,15 +13556,15 @@ snapshots: '@iconify/types@2.0.0': {} - '@iconify/utils@2.1.33': + '@iconify/utils@2.1.32': dependencies: '@antfu/install-pkg': 0.4.1 '@antfu/utils': 0.7.10 '@iconify/types': 2.0.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 kolorist: 1.8.0 local-pkg: 0.5.0 - mlly: 1.7.2 + mlly: 1.7.1 transitivePeerDependencies: - supports-color @@ -11478,7 +13634,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.3.0 + '@emnapi/runtime': 1.2.0 optional: true '@img/sharp-win32-ia32@0.33.5': @@ -11509,27 +13665,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.16.5 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0': + '@jest/core@29.7.0(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.16.5 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.9.0 + ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.16.11) + jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -11541,7 +13697,7 @@ snapshots: jest-util: 29.7.0 jest-validate: 29.7.0 jest-watcher: 29.7.0 - micromatch: 4.0.8 + micromatch: 4.0.5 pretty-format: 29.7.0 slash: 3.0.0 strip-ansi: 6.0.1 @@ -11554,7 +13710,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.16.5 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -11572,7 +13728,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.16.11 + '@types/node': 20.16.5 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -11593,25 +13749,25 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.16.11 + '@jridgewell/trace-mapping': 0.3.19 + '@types/node': 20.16.5 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 + istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.1.6 jest-message-util: 29.7.0 jest-util: 29.7.0 jest-worker: 29.7.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.3.0 + v8-to-istanbul: 9.1.0 transitivePeerDependencies: - supports-color @@ -11621,7 +13777,7 @@ snapshots: '@jest/source-map@29.6.3': dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.19 callsites: 3.1.0 graceful-fs: 4.2.11 @@ -11629,7 +13785,7 @@ snapshots: dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.2 '@jest/test-sequencer@29.7.0': @@ -11641,9 +13797,9 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.23.5 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.19 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -11652,7 +13808,7 @@ snapshots: jest-haste-map: 29.7.0 jest-regex-util: 29.6.3 jest-util: 29.7.0 - micromatch: 4.0.8 + micromatch: 4.0.5 pirates: 4.0.6 slash: 3.0.0 write-file-atomic: 4.0.2 @@ -11662,48 +13818,78 @@ snapshots: '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.16.11 - '@types/yargs': 17.0.33 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 20.16.5 + '@types/yargs': 17.0.24 chalk: 4.1.2 + '@jridgewell/gen-mapping@0.3.3': + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.1': {} + + '@jridgewell/resolve-uri@3.1.2': + optional: true + + '@jridgewell/set-array@1.1.2': {} '@jridgewell/set-array@1.2.1': {} - '@jridgewell/source-map@0.3.6': + '@jridgewell/source-map@0.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.19': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + optional: true '@jsdevtools/ono@7.1.3': {} - '@leichtgewicht/ip-codec@2.0.5': {} + '@leichtgewicht/ip-codec@2.0.4': {} '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.22.10 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.22.10 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -11712,12 +13898,20 @@ snapshots: '@mdi/font@7.4.47': {} + '@mermaid-js/parser@0.3.0': + dependencies: + langium: 3.0.0 + + '@mermaid-js/parser@0.3.1-rc.1': + dependencies: + langium: 3.0.0 + '@microsoft/tsdoc-config@0.17.0': dependencies: '@microsoft/tsdoc': 0.15.0 ajv: 8.12.0 jju: 1.4.0 - resolve: 1.22.8 + resolve: 1.22.4 '@microsoft/tsdoc@0.15.0': {} @@ -11731,34 +13925,34 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.15.0 '@pkgjs/parseargs@0.11.0': optional: true '@pkgr/core@0.1.1': {} - '@polka/url@1.0.0-next.28': {} + '@polka/url@1.0.0-next.25': {} - '@rollup/plugin-babel@5.3.1(@babel/core@7.25.7)(@types/babel__core@7.20.5)(rollup@2.79.2)': + '@rollup/plugin-babel@5.3.1(@babel/core@7.26.7)(@types/babel__core@7.20.1)(rollup@2.79.2)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-module-imports': 7.25.9 '@rollup/pluginutils': 3.1.0(rollup@2.79.2) rollup: 2.79.2 optionalDependencies: - '@types/babel__core': 7.20.5 + '@types/babel__core': 7.20.1 transitivePeerDependencies: - supports-color - '@rollup/plugin-node-resolve@15.3.0(rollup@2.79.2)': + '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.2)': dependencies: - '@rollup/pluginutils': 5.1.2(rollup@2.79.2) - '@types/resolve': 1.20.2 + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.8 - optionalDependencies: + resolve: 1.22.10 rollup: 2.79.2 '@rollup/plugin-replace@2.4.2(rollup@2.79.2)': @@ -11767,22 +13961,14 @@ snapshots: magic-string: 0.25.9 rollup: 2.79.2 - '@rollup/plugin-terser@0.4.4(rollup@2.79.2)': + '@rollup/plugin-typescript@11.1.6(rollup@4.32.0)(tslib@2.6.2)(typescript@5.4.5)': dependencies: - serialize-javascript: 6.0.2 - smob: 1.5.0 - terser: 5.34.1 - optionalDependencies: - rollup: 2.79.2 - - '@rollup/plugin-typescript@11.1.6(rollup@4.24.0)(tslib@2.7.0)(typescript@5.4.5)': - dependencies: - '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@rollup/pluginutils': 5.1.2(rollup@4.32.0) resolve: 1.22.8 typescript: 5.4.5 optionalDependencies: - rollup: 4.24.0 - tslib: 2.7.0 + rollup: 4.32.0 + tslib: 2.6.2 '@rollup/pluginutils@3.1.0(rollup@2.79.2)': dependencies: @@ -11791,100 +13977,157 @@ snapshots: picomatch: 2.3.1 rollup: 2.79.2 - '@rollup/pluginutils@5.1.2(rollup@2.79.2)': + '@rollup/pluginutils@5.1.0(rollup@2.79.2)': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: rollup: 2.79.2 - '@rollup/pluginutils@5.1.2(rollup@4.24.0)': + '@rollup/pluginutils@5.1.2(rollup@4.32.0)': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.24.0 + rollup: 4.32.0 - '@rollup/rollup-android-arm-eabi@4.24.0': + '@rollup/rollup-android-arm-eabi@4.21.3': optional: true - '@rollup/rollup-android-arm64@4.24.0': + '@rollup/rollup-android-arm-eabi@4.32.0': optional: true - '@rollup/rollup-darwin-arm64@4.24.0': + '@rollup/rollup-android-arm64@4.21.3': optional: true - '@rollup/rollup-darwin-x64@4.24.0': + '@rollup/rollup-android-arm64@4.32.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + '@rollup/rollup-darwin-arm64@4.21.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.24.0': + '@rollup/rollup-darwin-arm64@4.32.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.24.0': + '@rollup/rollup-darwin-x64@4.21.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.24.0': + '@rollup/rollup-darwin-x64@4.32.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + '@rollup/rollup-freebsd-arm64@4.32.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.24.0': + '@rollup/rollup-freebsd-x64@4.32.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.24.0': + '@rollup/rollup-linux-arm-gnueabihf@4.21.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.24.0': + '@rollup/rollup-linux-arm-gnueabihf@4.32.0': optional: true - '@rollup/rollup-linux-x64-musl@4.24.0': + '@rollup/rollup-linux-arm-musleabihf@4.21.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.24.0': + '@rollup/rollup-linux-arm-musleabihf@4.32.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.24.0': + '@rollup/rollup-linux-arm64-gnu@4.21.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.24.0': + '@rollup/rollup-linux-arm64-gnu@4.32.0': optional: true - '@shikijs/core@1.22.0': + '@rollup/rollup-linux-arm64-musl@4.21.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.32.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.32.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.32.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.32.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.32.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.21.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.32.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.21.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.32.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.21.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.32.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.21.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.32.0': + optional: true + + '@shikijs/core@1.17.0': dependencies: - '@shikijs/engine-javascript': 1.22.0 - '@shikijs/engine-oniguruma': 1.22.0 - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/engine-javascript': 1.17.0 + '@shikijs/engine-oniguruma': 1.17.0 + '@shikijs/types': 1.17.0 + '@shikijs/vscode-textmate': 9.2.2 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.3 + hast-util-to-html: 9.0.2 - '@shikijs/engine-javascript@1.22.0': + '@shikijs/engine-javascript@1.17.0': dependencies: - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 - oniguruma-to-js: 0.4.3 + '@shikijs/types': 1.17.0 + oniguruma-to-js: 0.3.3 + regex: 4.3.2 - '@shikijs/engine-oniguruma@1.22.0': + '@shikijs/engine-oniguruma@1.17.0': dependencies: - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/types': 1.17.0 + '@shikijs/vscode-textmate': 9.2.2 - '@shikijs/transformers@1.22.0': + '@shikijs/transformers@1.17.0': dependencies: - shiki: 1.22.0 + shiki: 1.17.0 - '@shikijs/types@1.22.0': + '@shikijs/types@1.17.0': dependencies: - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/vscode-textmate': 9.2.2 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@9.3.0': {} + '@shikijs/vscode-textmate@9.2.2': {} '@sideway/address@4.1.5': dependencies: @@ -11900,313 +14143,324 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@sinonjs/commons@3.0.1': + '@sinonjs/commons@3.0.0': dependencies: type-detect: 4.0.8 '@sinonjs/fake-timers@10.3.0': dependencies: - '@sinonjs/commons': 3.0.1 + '@sinonjs/commons': 3.0.0 '@surma/rollup-plugin-off-main-thread@2.2.3': dependencies: - ejs: 3.1.10 + ejs: 3.1.9 json5: 2.2.3 magic-string: 0.25.9 - string.prototype.matchall: 4.0.11 + string.prototype.matchall: 4.0.12 '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 - '@tanstack/virtual-core@3.10.8': {} + '@tanstack/virtual-core@3.1.3': {} - '@tanstack/vue-virtual@3.10.8(vue@3.5.11(typescript@5.6.2))': + '@tanstack/vue-virtual@3.1.3(vue@3.4.21(typescript@5.6.3))': dependencies: - '@tanstack/virtual-core': 3.10.8 - vue: 3.5.11(typescript@5.6.2) + '@tanstack/virtual-core': 3.1.3 + vue: 3.4.21(typescript@5.6.3) '@tootallnate/once@2.0.0': {} - '@types/assert@1.5.10': {} + '@tsconfig/node10@1.0.9': + optional: true - '@types/babel__core@7.20.5': + '@tsconfig/node12@1.0.11': + optional: true + + '@tsconfig/node14@1.0.3': + optional: true + + '@tsconfig/node16@1.0.4': + optional: true + + '@types/assert@1.5.6': {} + + '@types/babel__core@7.20.1': dependencies: - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 + '@babel/parser': 7.26.7 + '@babel/types': 7.23.5 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.20.1 - '@types/babel__generator@7.6.8': + '@types/babel__generator@7.6.4': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.23.5 - '@types/babel__template@7.4.4': + '@types/babel__template@7.4.1': dependencies: - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 + '@babel/parser': 7.26.7 + '@babel/types': 7.23.5 - '@types/babel__traverse@7.20.6': + '@types/babel__traverse@7.20.1': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.23.5 - '@types/body-parser@1.19.5': + '@types/body-parser@1.19.2': dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.16.11 + '@types/connect': 3.4.35 + '@types/node': 20.16.5 - '@types/bonjour@3.5.13': + '@types/bonjour@3.5.10': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 - '@types/braces@3.0.4': {} + '@types/braces@3.0.2': {} '@types/cacheable-request@6.0.3': dependencies: - '@types/http-cache-semantics': 4.0.4 + '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 - '@types/node': 20.16.11 - '@types/responselike': 1.0.3 + '@types/node': 20.16.5 + '@types/responselike': 1.0.0 - '@types/connect-history-api-fallback@1.5.4': + '@types/connect-history-api-fallback@1.5.0': dependencies: - '@types/express-serve-static-core': 5.0.0 - '@types/node': 20.16.11 + '@types/express-serve-static-core': 4.17.35 + '@types/node': 20.16.5 - '@types/connect@3.4.38': + '@types/connect@3.4.35': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 '@types/cors@2.8.17': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 '@types/cytoscape-fcose@2.2.4': dependencies: - '@types/cytoscape': 3.21.8 + '@types/cytoscape': 3.21.7 - '@types/cytoscape@3.21.8': {} + '@types/cytoscape@3.21.7': {} - '@types/d3-array@3.2.1': {} + '@types/d3-array@3.0.5': {} - '@types/d3-axis@3.0.6': + '@types/d3-axis@3.0.2': dependencies: - '@types/d3-selection': 3.0.11 + '@types/d3-selection': 3.0.10 - '@types/d3-brush@3.0.6': + '@types/d3-brush@3.0.2': dependencies: - '@types/d3-selection': 3.0.11 + '@types/d3-selection': 3.0.10 - '@types/d3-chord@3.0.6': {} + '@types/d3-chord@3.0.2': {} - '@types/d3-color@3.1.3': {} + '@types/d3-color@3.1.0': {} - '@types/d3-contour@3.0.6': + '@types/d3-contour@3.0.2': dependencies: - '@types/d3-array': 3.2.1 - '@types/geojson': 7946.0.14 + '@types/d3-array': 3.0.5 + '@types/geojson': 7946.0.10 - '@types/d3-delaunay@6.0.4': {} + '@types/d3-delaunay@6.0.1': {} - '@types/d3-dispatch@3.0.6': {} + '@types/d3-dispatch@3.0.2': {} - '@types/d3-drag@3.0.7': + '@types/d3-drag@3.0.2': dependencies: - '@types/d3-selection': 3.0.11 + '@types/d3-selection': 3.0.10 - '@types/d3-dsv@3.0.7': {} + '@types/d3-dsv@3.0.1': {} - '@types/d3-ease@3.0.2': {} + '@types/d3-ease@3.0.0': {} - '@types/d3-fetch@3.0.7': + '@types/d3-fetch@3.0.2': dependencies: - '@types/d3-dsv': 3.0.7 + '@types/d3-dsv': 3.0.1 - '@types/d3-force@3.0.10': {} + '@types/d3-force@3.0.4': {} - '@types/d3-format@3.0.4': {} + '@types/d3-format@3.0.1': {} - '@types/d3-geo@3.1.0': + '@types/d3-geo@3.0.3': dependencies: - '@types/geojson': 7946.0.14 + '@types/geojson': 7946.0.10 - '@types/d3-hierarchy@3.1.7': {} + '@types/d3-hierarchy@3.1.2': {} - '@types/d3-interpolate@3.0.4': + '@types/d3-interpolate@3.0.1': dependencies: - '@types/d3-color': 3.1.3 + '@types/d3-color': 3.1.0 - '@types/d3-path@1.0.11': {} + '@types/d3-path@1.0.9': {} - '@types/d3-path@3.1.0': {} + '@types/d3-path@3.0.0': {} - '@types/d3-polygon@3.0.2': {} + '@types/d3-polygon@3.0.0': {} - '@types/d3-quadtree@3.0.6': {} + '@types/d3-quadtree@3.0.2': {} - '@types/d3-random@3.0.3': {} + '@types/d3-random@3.0.1': {} '@types/d3-sankey@0.12.4': dependencies: - '@types/d3-shape': 1.3.12 + '@types/d3-shape': 1.3.8 '@types/d3-scale-chromatic@3.0.3': {} '@types/d3-scale@4.0.8': dependencies: - '@types/d3-time': 3.0.3 + '@types/d3-time': 3.0.0 - '@types/d3-selection@3.0.11': {} + '@types/d3-selection@3.0.10': {} - '@types/d3-shape@1.3.12': + '@types/d3-shape@1.3.8': dependencies: - '@types/d3-path': 1.0.11 + '@types/d3-path': 1.0.9 '@types/d3-shape@3.1.6': dependencies: - '@types/d3-path': 3.1.0 + '@types/d3-path': 3.0.0 - '@types/d3-time-format@4.0.3': {} + '@types/d3-time-format@4.0.0': {} - '@types/d3-time@3.0.3': {} + '@types/d3-time@3.0.0': {} - '@types/d3-timer@3.0.2': {} + '@types/d3-timer@3.0.0': {} - '@types/d3-transition@3.0.9': + '@types/d3-transition@3.0.3': dependencies: - '@types/d3-selection': 3.0.11 + '@types/d3-selection': 3.0.10 - '@types/d3-zoom@3.0.8': + '@types/d3-zoom@3.0.3': dependencies: - '@types/d3-interpolate': 3.0.4 - '@types/d3-selection': 3.0.11 + '@types/d3-interpolate': 3.0.1 + '@types/d3-selection': 3.0.10 '@types/d3@7.4.3': dependencies: - '@types/d3-array': 3.2.1 - '@types/d3-axis': 3.0.6 - '@types/d3-brush': 3.0.6 - '@types/d3-chord': 3.0.6 - '@types/d3-color': 3.1.3 - '@types/d3-contour': 3.0.6 - '@types/d3-delaunay': 6.0.4 - '@types/d3-dispatch': 3.0.6 - '@types/d3-drag': 3.0.7 - '@types/d3-dsv': 3.0.7 - '@types/d3-ease': 3.0.2 - '@types/d3-fetch': 3.0.7 - '@types/d3-force': 3.0.10 - '@types/d3-format': 3.0.4 - '@types/d3-geo': 3.1.0 - '@types/d3-hierarchy': 3.1.7 - '@types/d3-interpolate': 3.0.4 - '@types/d3-path': 3.1.0 - '@types/d3-polygon': 3.0.2 - '@types/d3-quadtree': 3.0.6 - '@types/d3-random': 3.0.3 + '@types/d3-array': 3.0.5 + '@types/d3-axis': 3.0.2 + '@types/d3-brush': 3.0.2 + '@types/d3-chord': 3.0.2 + '@types/d3-color': 3.1.0 + '@types/d3-contour': 3.0.2 + '@types/d3-delaunay': 6.0.1 + '@types/d3-dispatch': 3.0.2 + '@types/d3-drag': 3.0.2 + '@types/d3-dsv': 3.0.1 + '@types/d3-ease': 3.0.0 + '@types/d3-fetch': 3.0.2 + '@types/d3-force': 3.0.4 + '@types/d3-format': 3.0.1 + '@types/d3-geo': 3.0.3 + '@types/d3-hierarchy': 3.1.2 + '@types/d3-interpolate': 3.0.1 + '@types/d3-path': 3.0.0 + '@types/d3-polygon': 3.0.0 + '@types/d3-quadtree': 3.0.2 + '@types/d3-random': 3.0.1 '@types/d3-scale': 4.0.8 '@types/d3-scale-chromatic': 3.0.3 - '@types/d3-selection': 3.0.11 + '@types/d3-selection': 3.0.10 '@types/d3-shape': 3.1.6 - '@types/d3-time': 3.0.3 - '@types/d3-time-format': 4.0.3 - '@types/d3-timer': 3.0.2 - '@types/d3-transition': 3.0.9 - '@types/d3-zoom': 3.0.8 + '@types/d3-time': 3.0.0 + '@types/d3-time-format': 4.0.0 + '@types/d3-timer': 3.0.0 + '@types/d3-transition': 3.0.3 + '@types/d3-zoom': 3.0.3 - '@types/debug@4.1.12': + '@types/debug@4.1.8': dependencies: - '@types/ms': 0.7.34 + '@types/ms': 0.7.31 '@types/estree@0.0.39': {} + '@types/estree@1.0.1': {} + + '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} - '@types/express-serve-static-core@4.19.6': + '@types/express-serve-static-core@4.17.35': dependencies: - '@types/node': 20.16.11 - '@types/qs': 6.9.16 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - - '@types/express-serve-static-core@5.0.0': - dependencies: - '@types/node': 20.16.11 - '@types/qs': 6.9.16 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 + '@types/node': 20.16.5 + '@types/qs': 6.9.7 + '@types/range-parser': 1.2.4 + '@types/send': 0.17.1 '@types/express@4.17.21': dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.16 - '@types/serve-static': 1.15.7 + '@types/body-parser': 1.19.2 + '@types/express-serve-static-core': 4.17.35 + '@types/qs': 6.9.7 + '@types/serve-static': 1.15.2 - '@types/flexsearch@0.7.6': {} + '@types/flexsearch@0.7.3': {} - '@types/geojson@7946.0.14': {} + '@types/geojson@7946.0.10': {} '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.16.11 + '@types/node': 20.16.5 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.16.11 + '@types/node': 20.16.5 - '@types/graceful-fs@4.1.9': + '@types/graceful-fs@4.1.6': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 - '@types/http-cache-semantics@4.0.4': {} + '@types/http-cache-semantics@4.0.1': {} - '@types/http-errors@2.0.4': {} + '@types/http-errors@2.0.1': {} - '@types/http-proxy@1.17.15': + '@types/http-proxy@1.17.11': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 - '@types/istanbul-lib-coverage@2.0.6': {} + '@types/istanbul-lib-coverage@2.0.4': {} - '@types/istanbul-lib-report@3.0.3': + '@types/istanbul-lib-report@3.0.0': dependencies: - '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports@3.0.4': + '@types/istanbul-reports@3.0.1': dependencies: - '@types/istanbul-lib-report': 3.0.3 + '@types/istanbul-lib-report': 3.0.0 '@types/js-yaml@4.0.9': {} '@types/jsdom@21.1.7': dependencies: - '@types/node': 20.16.11 - '@types/tough-cookie': 4.0.5 + '@types/node': 20.16.5 + '@types/tough-cookie': 4.0.2 parse5: 7.1.2 + '@types/json-schema@7.0.12': {} + '@types/json-schema@7.0.15': {} '@types/katex@0.16.7': {} '@types/keyv@3.1.4': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 '@types/linkify-it@5.0.0': {} '@types/lodash-es@4.17.12': dependencies: - '@types/lodash': 4.17.10 + '@types/lodash': 4.17.7 - '@types/lodash@4.17.10': {} + '@types/lodash@4.17.7': {} '@types/markdown-it@12.2.3': dependencies: @@ -12218,100 +14472,103 @@ snapshots: '@types/linkify-it': 5.0.0 '@types/mdurl': 2.0.0 - '@types/mdast@3.0.15': + '@types/mdast@3.0.12': dependencies: - '@types/unist': 2.0.11 + '@types/unist': 2.0.7 '@types/mdast@4.0.4': dependencies: - '@types/unist': 3.0.3 + '@types/unist': 2.0.7 '@types/mdurl@2.0.0': {} '@types/micromatch@4.0.9': dependencies: - '@types/braces': 3.0.4 + '@types/braces': 3.0.2 - '@types/mime@1.3.5': {} + '@types/mime@1.3.2': {} + + '@types/mime@3.0.1': {} '@types/minimatch@5.1.2': {} - '@types/ms@0.7.34': {} - - '@types/node-forge@1.3.11': - dependencies: - '@types/node': 20.16.11 + '@types/ms@0.7.31': {} '@types/node@12.20.55': {} - '@types/node@18.19.55': - dependencies: - undici-types: 5.26.5 + '@types/node@18.17.5': {} - '@types/node@20.16.11': + '@types/node@20.16.5': dependencies: undici-types: 6.19.8 - '@types/normalize-package-data@2.4.4': {} + '@types/normalize-package-data@2.4.1': {} - '@types/prettier@2.7.3': {} + '@types/prettier@2.7.2': {} '@types/prettier@3.0.0': dependencies: prettier: 3.3.3 - '@types/qs@6.9.16': {} + '@types/qs@6.9.7': {} '@types/ramda@0.28.25': dependencies: ts-toolbelt: 6.15.5 - '@types/range-parser@1.2.7': {} + '@types/range-parser@1.2.4': {} - '@types/resolve@1.20.2': {} - - '@types/responselike@1.0.3': + '@types/resolve@1.17.1': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 + + '@types/responselike@1.0.0': + dependencies: + '@types/node': 20.16.5 '@types/retry@0.12.0': {} '@types/rollup-plugin-visualizer@4.2.4': dependencies: - rollup: 2.79.2 + rollup: 2.79.1 - '@types/send@0.17.4': + '@types/semver@7.5.0': {} + + '@types/send@0.17.1': dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.16.11 + '@types/mime': 1.3.2 + '@types/node': 20.16.5 - '@types/serve-index@1.9.4': + '@types/serve-index@1.9.1': dependencies: '@types/express': 4.17.21 - '@types/serve-static@1.15.7': + '@types/serve-static@1.15.2': dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 20.16.11 - '@types/send': 0.17.4 + '@types/http-errors': 2.0.1 + '@types/mime': 3.0.1 + '@types/node': 20.16.5 '@types/sinonjs__fake-timers@8.1.1': {} - '@types/sizzle@2.3.8': {} + '@types/sizzle@2.3.3': {} - '@types/sockjs@0.3.36': + '@types/sockjs@0.3.33': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 - '@types/stack-utils@2.0.3': {} + '@types/stack-utils@2.0.1': {} '@types/stylis@4.2.6': {} - '@types/tough-cookie@4.0.5': {} + '@types/tough-cookie@4.0.2': {} - '@types/trusted-types@2.0.7': {} + '@types/trusted-types@2.0.3': {} - '@types/unist@2.0.11': {} + '@types/trusted-types@2.0.7': + optional: true + + '@types/unist@2.0.7': {} '@types/unist@3.0.3': {} @@ -12319,34 +14576,30 @@ snapshots: '@types/web-bluetooth@0.0.20': {} - '@types/ws@8.5.12': - dependencies: - '@types/node': 20.16.11 - '@types/ws@8.5.5': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 - '@types/yargs-parser@21.0.3': {} + '@types/yargs-parser@21.0.0': {} - '@types/yargs@17.0.33': + '@types/yargs@17.0.24': dependencies: - '@types/yargs-parser': 21.0.3 + '@types/yargs-parser': 21.0.0 - '@types/yauzl@2.10.3': + '@types/yauzl@2.10.0': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 optional: true - '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5))(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/type-utils': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.8.1 - eslint: 9.12.0(jiti@1.21.6) + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 7.18.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/utils': 7.18.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 9.11.1(jiti@1.21.0) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -12356,29 +14609,82 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5))(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.8.1 - debug: 4.3.7(supports-color@8.1.1) - eslint: 9.12.0(jiti@1.21.6) + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/type-utils': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.8.0 + eslint: 9.11.1(jiti@1.21.0) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.8.1': + '@typescript-eslint/parser@7.18.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/visitor-keys': 8.8.1 + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.4(supports-color@8.1.1) + eslint: 9.11.1(jiti@1.21.0) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color - '@typescript-eslint/type-utils@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5)': + '@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.5) - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - debug: 4.3.7(supports-color@8.1.1) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.8.0 + debug: 4.3.7 + eslint: 9.11.1(jiti@1.21.0) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + + '@typescript-eslint/scope-manager@8.5.0': + dependencies: + '@typescript-eslint/types': 8.5.0 + '@typescript-eslint/visitor-keys': 8.5.0 + + '@typescript-eslint/scope-manager@8.8.0': + dependencies: + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 + + '@typescript-eslint/type-utils@7.18.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.18.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + debug: 4.3.4(supports-color@8.1.1) + eslint: 9.11.1(jiti@1.21.0) + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.4.5) + '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + debug: 4.3.7 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 @@ -12388,28 +14694,60 @@ snapshots: '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.8.1': {} + '@typescript-eslint/types@8.5.0': {} - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.2)': + '@typescript-eslint/types@8.8.0': {} + + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.4.5)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: - typescript: 5.6.2 + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.8.1(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/visitor-keys': 8.8.1 - debug: 4.3.7(supports-color@8.1.1) + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.5.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 8.5.0 + '@typescript-eslint/visitor-keys': 8.5.0 + debug: 4.3.4(supports-color@8.1.1) + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.8.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 + debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 @@ -12420,13 +14758,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5)': + '@typescript-eslint/utils@7.18.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@1.21.6)) - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.5) - eslint: 9.12.0(jiti@1.21.6) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.0)) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + eslint: 9.11.1(jiti@1.21.0) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.5.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.0)) + '@typescript-eslint/scope-manager': 8.5.0 + '@typescript-eslint/types': 8.5.0 + '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.4.5) + eslint: 9.11.1(jiti@1.21.0) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.0)) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.4.5) + eslint: 9.11.1(jiti@1.21.0) transitivePeerDependencies: - supports-color - typescript @@ -12436,27 +14796,32 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.8.1': + '@typescript-eslint/visitor-keys@8.5.0': dependencies: - '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/types': 8.5.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@8.8.0': + dependencies: + '@typescript-eslint/types': 8.8.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} - '@unocss/astro@0.59.4(rollup@2.79.2)(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))': + '@unocss/astro@0.59.4(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0))': dependencies: '@unocss/core': 0.59.4 '@unocss/reset': 0.59.4 - '@unocss/vite': 0.59.4(rollup@2.79.2)(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1)) + '@unocss/vite': 0.59.4(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0)) optionalDependencies: - vite: 5.4.8(@types/node@20.16.11)(terser@5.34.1) + vite: 5.4.12(@types/node@20.16.5)(terser@5.37.0) transitivePeerDependencies: - rollup '@unocss/cli@0.59.4(rollup@2.79.2)': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.2(rollup@2.79.2) + '@rollup/pluginutils': 5.1.0(rollup@2.79.2) '@unocss/config': 0.59.4 '@unocss/core': 0.59.4 '@unocss/preset-uno': 0.59.4 @@ -12489,7 +14854,7 @@ snapshots: gzip-size: 6.0.0 sirv: 2.0.4 - '@unocss/postcss@0.59.4(postcss@8.4.47)': + '@unocss/postcss@0.59.4(postcss@8.5.1)': dependencies: '@unocss/config': 0.59.4 '@unocss/core': 0.59.4 @@ -12497,7 +14862,7 @@ snapshots: css-tree: 2.3.1 fast-glob: 3.3.2 magic-string: 0.30.11 - postcss: 8.4.47 + postcss: 8.5.1 '@unocss/preset-attributify@0.59.4': dependencies: @@ -12505,9 +14870,9 @@ snapshots: '@unocss/preset-icons@0.59.4': dependencies: - '@iconify/utils': 2.1.33 + '@iconify/utils': 2.1.32 '@unocss/core': 0.59.4 - ofetch: 1.4.0 + ofetch: 1.3.4 transitivePeerDependencies: - supports-color @@ -12536,7 +14901,7 @@ snapshots: '@unocss/preset-web-fonts@0.59.4': dependencies: '@unocss/core': 0.59.4 - ofetch: 1.4.0 + ofetch: 1.3.4 '@unocss/preset-wind@0.59.4': dependencies: @@ -12555,9 +14920,9 @@ snapshots: '@unocss/transformer-attributify-jsx-babel@0.59.4': dependencies: - '@babel/core': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) - '@babel/preset-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.25.2 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) '@unocss/core': 0.59.4 transitivePeerDependencies: - supports-color @@ -12580,10 +14945,10 @@ snapshots: dependencies: '@unocss/core': 0.59.4 - '@unocss/vite@0.59.4(rollup@2.79.2)(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))': + '@unocss/vite@0.59.4(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0))': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.2(rollup@2.79.2) + '@rollup/pluginutils': 5.1.0(rollup@2.79.2) '@unocss/config': 0.59.4 '@unocss/core': 0.59.4 '@unocss/inspector': 0.59.4 @@ -12592,40 +14957,45 @@ snapshots: chokidar: 3.6.0 fast-glob: 3.3.2 magic-string: 0.30.11 - vite: 5.4.8(@types/node@20.16.11)(terser@5.34.1) + vite: 5.4.12(@types/node@20.16.5)(terser@5.37.0) transitivePeerDependencies: - rollup - '@vite-pwa/vitepress@0.4.0(vite-plugin-pwa@0.19.8(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0))': + '@vite-pwa/vitepress@0.4.0(vite-plugin-pwa@0.19.8(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0))(workbox-build@7.0.0(@types/babel__core@7.20.1))(workbox-window@7.0.0))': dependencies: - vite-plugin-pwa: 0.19.8(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) + vite-plugin-pwa: 0.19.8(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0))(workbox-build@7.0.0(@types/babel__core@7.20.1))(workbox-window@7.0.0) - '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))(vue@3.5.11(typescript@5.4.5))': + '@vitejs/plugin-vue@5.1.4(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0))(vue@3.4.21(typescript@5.6.3))': dependencies: - vite: 5.4.8(@types/node@20.16.11)(terser@5.34.1) - vue: 3.5.11(typescript@5.4.5) + vite: 5.4.12(@types/node@20.16.5)(terser@5.37.0) + vue: 3.4.21(typescript@5.6.3) - '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))(vue@3.5.11(typescript@5.6.2))': + '@vitejs/plugin-vue@5.1.4(vite@5.4.2(@types/node@20.16.5)(terser@5.37.0))(vue@3.5.4(typescript@5.4.5))': dependencies: - vite: 5.4.8(@types/node@20.16.11)(terser@5.34.1) - vue: 3.5.11(typescript@5.6.2) + vite: 5.4.2(@types/node@20.16.5)(terser@5.37.0) + vue: 3.5.4(typescript@5.4.5) - '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.34.1))': + '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@20.16.5)(terser@5.37.0))(vue@3.5.4(typescript@5.6.3))': + dependencies: + vite: 5.4.8(@types/node@20.16.5)(terser@5.37.0) + vue: 3.5.4(typescript@5.6.3) + + '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 + istanbul-reports: 3.1.6 magic-string: 0.30.11 magicast: 0.3.5 picocolors: 1.1.0 std-env: 3.7.0 strip-literal: 2.1.0 test-exclude: 6.0.0 - vitest: 1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.34.1) + vitest: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0) transitivePeerDependencies: - supports-color @@ -12643,7 +15013,7 @@ snapshots: '@vitest/snapshot@1.6.0': dependencies: - magic-string: 0.30.11 + magic-string: 0.30.8 pathe: 1.1.2 pretty-format: 29.7.0 @@ -12658,9 +15028,9 @@ snapshots: fflate: 0.8.2 flatted: 3.3.1 pathe: 1.1.2 - picocolors: 1.1.0 + picocolors: 1.0.0 sirv: 2.0.4 - vitest: 1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.34.1) + vitest: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0) '@vitest/utils@1.6.0': dependencies: @@ -12669,52 +15039,82 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 - '@vue/compat@3.5.11(vue@3.5.11(typescript@5.6.2))': + '@vue/compat@3.3.4(vue@3.4.21(typescript@5.6.3))': dependencies: - '@babel/parser': 7.25.7 + '@babel/parser': 7.24.0 estree-walker: 2.0.2 - source-map-js: 1.2.1 - vue: 3.5.11(typescript@5.6.2) + source-map-js: 1.0.2 + vue: 3.4.21(typescript@5.6.3) - '@vue/compiler-core@3.5.11': + '@vue/compiler-core@3.4.21': dependencies: - '@babel/parser': 7.25.7 - '@vue/shared': 3.5.11 + '@babel/parser': 7.24.0 + '@vue/shared': 3.4.21 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + + '@vue/compiler-core@3.5.4': + dependencies: + '@babel/parser': 7.26.7 + '@vue/shared': 3.5.4 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.11': + '@vue/compiler-dom@3.4.21': dependencies: - '@vue/compiler-core': 3.5.11 - '@vue/shared': 3.5.11 + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 - '@vue/compiler-sfc@3.5.11': + '@vue/compiler-dom@3.5.4': dependencies: - '@babel/parser': 7.25.7 - '@vue/compiler-core': 3.5.11 - '@vue/compiler-dom': 3.5.11 - '@vue/compiler-ssr': 3.5.11 - '@vue/shared': 3.5.11 + '@vue/compiler-core': 3.5.4 + '@vue/shared': 3.5.4 + + '@vue/compiler-sfc@3.4.21': + dependencies: + '@babel/parser': 7.24.0 + '@vue/compiler-core': 3.4.21 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + estree-walker: 2.0.2 + magic-string: 0.30.8 + postcss: 8.4.35 + source-map-js: 1.0.2 + + '@vue/compiler-sfc@3.5.4': + dependencies: + '@babel/parser': 7.26.7 + '@vue/compiler-core': 3.5.4 + '@vue/compiler-dom': 3.5.4 + '@vue/compiler-ssr': 3.5.4 + '@vue/shared': 3.5.4 estree-walker: 2.0.2 magic-string: 0.30.11 - postcss: 8.4.47 + postcss: 8.5.1 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.11': + '@vue/compiler-ssr@3.4.21': dependencies: - '@vue/compiler-dom': 3.5.11 - '@vue/shared': 3.5.11 + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 - '@vue/devtools-api@6.6.4': {} - - '@vue/devtools-api@7.4.6': + '@vue/compiler-ssr@3.5.4': dependencies: - '@vue/devtools-kit': 7.4.6 + '@vue/compiler-dom': 3.5.4 + '@vue/shared': 3.5.4 - '@vue/devtools-kit@7.4.6': + '@vue/devtools-api@6.5.1': {} + + '@vue/devtools-api@7.4.5': dependencies: - '@vue/devtools-shared': 7.4.6 + '@vue/devtools-kit': 7.4.5 + + '@vue/devtools-kit@7.4.5': + dependencies: + '@vue/devtools-shared': 7.4.5 birpc: 0.2.17 hookable: 5.5.3 mitt: 3.0.1 @@ -12722,96 +15122,138 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.1 - '@vue/devtools-shared@7.4.6': + '@vue/devtools-shared@7.4.5': dependencies: rfdc: 1.4.1 - '@vue/reactivity@3.5.11': + '@vue/reactivity@3.4.21': dependencies: - '@vue/shared': 3.5.11 + '@vue/shared': 3.4.21 - '@vue/runtime-core@3.5.11': + '@vue/reactivity@3.5.4': dependencies: - '@vue/reactivity': 3.5.11 - '@vue/shared': 3.5.11 + '@vue/shared': 3.5.4 - '@vue/runtime-dom@3.5.11': + '@vue/runtime-core@3.4.21': dependencies: - '@vue/reactivity': 3.5.11 - '@vue/runtime-core': 3.5.11 - '@vue/shared': 3.5.11 + '@vue/reactivity': 3.4.21 + '@vue/shared': 3.4.21 + + '@vue/runtime-core@3.5.4': + dependencies: + '@vue/reactivity': 3.5.4 + '@vue/shared': 3.5.4 + + '@vue/runtime-dom@3.4.21': + dependencies: + '@vue/runtime-core': 3.4.21 + '@vue/shared': 3.4.21 csstype: 3.1.3 - '@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.4.5))': + '@vue/runtime-dom@3.5.4': dependencies: - '@vue/compiler-ssr': 3.5.11 - '@vue/shared': 3.5.11 - vue: 3.5.11(typescript@5.4.5) + '@vue/reactivity': 3.5.4 + '@vue/runtime-core': 3.5.4 + '@vue/shared': 3.5.4 + csstype: 3.1.3 - '@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.6.2))': + '@vue/server-renderer@3.4.21(vue@3.4.21(typescript@5.6.3))': dependencies: - '@vue/compiler-ssr': 3.5.11 - '@vue/shared': 3.5.11 - vue: 3.5.11(typescript@5.6.2) + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + vue: 3.4.21(typescript@5.6.3) - '@vue/shared@3.5.11': {} + '@vue/server-renderer@3.5.4(vue@3.5.4(typescript@5.4.5))': + dependencies: + '@vue/compiler-ssr': 3.5.4 + '@vue/shared': 3.5.4 + vue: 3.5.4(typescript@5.4.5) - '@vueuse/core@10.11.1(vue@3.5.11(typescript@5.4.5))': + '@vue/server-renderer@3.5.4(vue@3.5.4(typescript@5.6.3))': + dependencies: + '@vue/compiler-ssr': 3.5.4 + '@vue/shared': 3.5.4 + vue: 3.5.4(typescript@5.6.3) + + '@vue/shared@3.4.21': {} + + '@vue/shared@3.5.4': {} + + '@vueuse/core@10.11.1(vue@3.4.21(typescript@5.6.3))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.11(typescript@5.4.5)) - vue-demi: 0.14.10(vue@3.5.11(typescript@5.4.5)) + '@vueuse/shared': 10.11.1(vue@3.4.21(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.4.21(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/core@10.11.1(vue@3.5.11(typescript@5.6.2))': + '@vueuse/core@10.11.1(vue@3.5.4(typescript@5.6.3))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.11(typescript@5.6.2)) - vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) + '@vueuse/shared': 10.11.1(vue@3.5.4(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.4(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/integrations@10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.11(typescript@5.4.5))': + '@vueuse/core@11.1.0(vue@3.5.4(typescript@5.4.5))': dependencies: - '@vueuse/core': 10.11.1(vue@3.5.11(typescript@5.4.5)) - '@vueuse/shared': 10.11.1(vue@3.5.11(typescript@5.4.5)) - vue-demi: 0.14.10(vue@3.5.11(typescript@5.4.5)) - optionalDependencies: - axios: 1.7.7(debug@4.3.7) - focus-trap: 7.6.0 + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 11.1.0 + '@vueuse/shared': 11.1.0(vue@3.5.4(typescript@5.4.5)) + vue-demi: 0.14.10(vue@3.5.4(typescript@5.4.5)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/integrations@10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.11(typescript@5.6.2))': + '@vueuse/integrations@10.11.1(axios@1.7.7)(focus-trap@7.5.4)(vue@3.5.4(typescript@5.6.3))': dependencies: - '@vueuse/core': 10.11.1(vue@3.5.11(typescript@5.6.2)) - '@vueuse/shared': 10.11.1(vue@3.5.11(typescript@5.6.2)) - vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) + '@vueuse/core': 10.11.1(vue@3.5.4(typescript@5.6.3)) + '@vueuse/shared': 10.11.1(vue@3.5.4(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.4(typescript@5.6.3)) optionalDependencies: axios: 1.7.7(debug@4.3.7) - focus-trap: 7.6.0 + focus-trap: 7.5.4 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/integrations@11.1.0(axios@1.7.7)(focus-trap@7.5.4)(vue@3.5.4(typescript@5.4.5))': + dependencies: + '@vueuse/core': 11.1.0(vue@3.5.4(typescript@5.4.5)) + '@vueuse/shared': 11.1.0(vue@3.5.4(typescript@5.4.5)) + vue-demi: 0.14.10(vue@3.5.4(typescript@5.4.5)) + optionalDependencies: + axios: 1.7.7(debug@4.3.7) + focus-trap: 7.5.4 transitivePeerDependencies: - '@vue/composition-api' - vue '@vueuse/metadata@10.11.1': {} - '@vueuse/shared@10.11.1(vue@3.5.11(typescript@5.4.5))': + '@vueuse/metadata@11.1.0': {} + + '@vueuse/shared@10.11.1(vue@3.4.21(typescript@5.6.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.11(typescript@5.4.5)) + vue-demi: 0.14.10(vue@3.4.21(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/shared@10.11.1(vue@3.5.11(typescript@5.6.2))': + '@vueuse/shared@10.11.1(vue@3.5.4(typescript@5.6.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) + vue-demi: 0.14.10(vue@3.5.4(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/shared@11.1.0(vue@3.5.4(typescript@5.4.5))': + dependencies: + vue-demi: 0.14.10(vue@3.5.4(typescript@5.4.5)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -12830,7 +15272,7 @@ snapshots: '@wdio/logger@7.26.0': dependencies: chalk: 4.1.2 - loglevel: 1.9.2 + loglevel: 1.8.1 loglevel-plugin-prefix: 0.8.4 strip-ansi: 6.0.1 @@ -12838,7 +15280,7 @@ snapshots: '@wdio/types@7.30.2(typescript@5.4.5)': dependencies: - '@types/node': 18.19.55 + '@types/node': 18.17.5 got: 11.8.6 optionalDependencies: typescript: 5.4.5 @@ -12927,21 +15369,21 @@ snapshots: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0))(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0))': + '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0))(webpack@5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0))': dependencies: - webpack: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + webpack: 5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0) - '@webpack-cli/info@1.5.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0))': + '@webpack-cli/info@1.5.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0))': dependencies: - envinfo: 7.14.0 - webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + envinfo: 7.10.0 + webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0) - '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0))(webpack-dev-server@4.15.2(webpack-cli@4.10.0)(webpack@5.95.0))': + '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0))(webpack-dev-server@4.15.2(webpack-cli@4.10.0)(webpack@5.94.0))': dependencies: - webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0) optionalDependencies: - webpack-dev-server: 4.15.2(webpack-cli@4.10.0)(webpack@5.95.0) + webpack-dev-server: 4.15.2(webpack-cli@4.10.0)(webpack@5.94.0) '@xmldom/xmldom@0.8.10': {} @@ -12949,14 +15391,14 @@ snapshots: '@xtuc/long@4.2.2': {} - '@zenuml/core@3.24.12(typescript@5.6.2)': + '@zenuml/core@3.24.5(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.6.3))(typescript@5.6.3)': dependencies: - '@headlessui-float/vue': 0.14.4(@headlessui/vue@1.7.23(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2)) - '@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.13) - '@headlessui/vue': 1.7.23(vue@3.5.11(typescript@5.6.2)) - '@types/assert': 1.5.10 + '@headlessui-float/vue': 0.14.4(@headlessui/vue@1.7.19(vue@3.4.21(typescript@5.6.3)))(vue@3.4.21(typescript@5.6.3)) + '@headlessui/tailwindcss': 0.2.0(tailwindcss@3.3.3(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.6.3))) + '@headlessui/vue': 1.7.19(vue@3.4.21(typescript@5.6.3)) + '@types/assert': 1.5.6 '@types/ramda': 0.28.25 - '@vue/compat': 3.5.11(vue@3.5.11(typescript@5.6.2)) + '@vue/compat': 3.3.4(vue@3.4.21(typescript@5.6.3)) antlr4: 4.11.0 color-string: 1.9.1 dom-to-image-more: 2.16.0 @@ -12966,12 +15408,12 @@ snapshots: html-to-image: 1.11.11 lodash: 4.17.21 marked: 4.3.0 - pino: 8.21.0 - postcss: 8.4.47 + pino: 8.15.0 + postcss: 8.4.35 ramda: 0.28.0 - tailwindcss: 3.4.13 - vue: 3.5.11(typescript@5.6.2) - vuex: 4.1.0(vue@3.5.11(typescript@5.6.2)) + tailwindcss: 3.3.3(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.6.3)) + vue: 3.4.21(typescript@5.6.3) + vuex: 4.1.0(vue@3.4.21(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - ts-node @@ -12992,9 +15434,9 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.12.1): + acorn-import-attributes@1.9.5(acorn@8.10.0): dependencies: - acorn: 8.12.1 + acorn: 8.10.0 acorn-jsx@5.3.2(acorn@8.12.1): dependencies: @@ -13004,17 +15446,21 @@ snapshots: dependencies: acorn: 8.12.1 + acorn@8.10.0: {} + acorn@8.12.1: {} + acorn@8.14.0: {} + agent-base@6.0.2: dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color agent-base@7.1.1: dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -13028,21 +15474,21 @@ snapshots: clean-stack: 4.2.0 indent-string: 5.0.0 - ajv-formats@2.1.1(ajv@8.17.1): + ajv-formats@2.1.1(ajv@8.12.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.12.0 - ajv-formats@3.0.1(ajv@8.17.1): + ajv-formats@3.0.1(ajv@8.12.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.12.0 ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 - ajv-keywords@5.1.0(ajv@8.17.1): + ajv-keywords@5.1.0(ajv@8.12.0): dependencies: - ajv: 8.17.1 + ajv: 8.12.0 fast-deep-equal: 3.1.3 ajv@6.12.6: @@ -13059,30 +15505,22 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 - ajv@8.17.1: + algoliasearch@4.19.1: dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.0.2 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - algoliasearch@4.24.0: - dependencies: - '@algolia/cache-browser-local-storage': 4.24.0 - '@algolia/cache-common': 4.24.0 - '@algolia/cache-in-memory': 4.24.0 - '@algolia/client-account': 4.24.0 - '@algolia/client-analytics': 4.24.0 - '@algolia/client-common': 4.24.0 - '@algolia/client-personalization': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/logger-common': 4.24.0 - '@algolia/logger-console': 4.24.0 - '@algolia/recommend': 4.24.0 - '@algolia/requester-browser-xhr': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/requester-node-http': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/cache-browser-local-storage': 4.19.1 + '@algolia/cache-common': 4.19.1 + '@algolia/cache-in-memory': 4.19.1 + '@algolia/client-account': 4.19.1 + '@algolia/client-analytics': 4.19.1 + '@algolia/client-common': 4.19.1 + '@algolia/client-personalization': 4.19.1 + '@algolia/client-search': 4.19.1 + '@algolia/logger-common': 4.19.1 + '@algolia/logger-console': 4.19.1 + '@algolia/requester-browser-xhr': 4.19.1 + '@algolia/requester-common': 4.19.1 + '@algolia/requester-node-http': 4.19.1 + '@algolia/transporter': 4.19.1 amdefine@1.0.1: optional: true @@ -13107,7 +15545,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.0.1: {} ansi-sequence-parser@1.1.1: {} @@ -13152,6 +15590,9 @@ snapshots: are-docs-informative@0.0.2: {} + arg@4.1.3: + optional: true + arg@5.0.2: {} argparse@1.0.10: @@ -13160,27 +15601,33 @@ snapshots: argparse@2.0.1: {} - array-buffer-byte-length@1.0.1: + array-buffer-byte-length@1.0.0: dependencies: call-bind: 1.0.7 - is-array-buffer: 3.0.4 + is-array-buffer: 3.0.2 + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.3 + is-array-buffer: 3.0.5 array-flatten@1.1.1: {} + array-flatten@2.1.2: {} + array-timsort@1.0.3: {} array-union@2.1.0: {} - arraybuffer.prototype.slice@1.0.3: + arraybuffer.prototype.slice@1.0.4: dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + get-intrinsic: 1.2.7 + is-array-buffer: 3.0.5 arrify@3.0.0: {} @@ -13196,6 +15643,10 @@ snapshots: astral-regex@2.0.0: {} + async-function@1.0.0: {} + + async@3.2.4: {} + async@3.2.6: {} asynckit@0.4.0: {} @@ -13215,7 +15666,7 @@ snapshots: aws-sign2@0.7.0: {} - aws4@1.13.2: {} + aws4@1.12.0: {} axios@1.7.7(debug@4.3.7): dependencies: @@ -13225,29 +15676,29 @@ snapshots: transitivePeerDependencies: - debug - babel-jest@29.7.0(@babel/core@7.25.7): + babel-jest@29.7.0(@babel/core@7.23.5): dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.23.5 '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 + '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.25.7) + babel-preset-jest: 29.6.3(@babel/core@7.23.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)): + babel-loader@9.1.3(@babel/core@7.22.10)(webpack@5.94.0(esbuild@0.21.5)): dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.22.10 find-cache-dir: 4.0.0 - schema-utils: 4.2.0 - webpack: 5.95.0(esbuild@0.21.5) + schema-utils: 4.3.0 + webpack: 5.94.0(esbuild@0.21.5) babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -13257,59 +15708,80 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.25.7 - '@babel/types': 7.25.7 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 + '@babel/template': 7.22.15 + '@babel/types': 7.23.5 + '@types/babel__core': 7.20.1 + '@types/babel__traverse': 7.20.1 - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.7): + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.22.10): dependencies: - '@babel/compat-data': 7.25.7 - '@babel/core': 7.25.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) + '@babel/compat-data': 7.26.5 + '@babel/core': 7.22.10 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.22.10) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.7): + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.7): dependencies: - '@babel/core': 7.25.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) - core-js-compat: 3.38.1 + '@babel/compat-data': 7.26.5 + '@babel/core': 7.26.7 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.7) + semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.7): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.22.10): dependencies: - '@babel/core': 7.25.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) + '@babel/core': 7.22.10 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.22.10) + core-js-compat: 3.40.0 transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.7): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.7): dependencies: - '@babel/core': 7.25.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) + '@babel/core': 7.26.7 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.7) + core-js-compat: 3.40.0 + transitivePeerDependencies: + - supports-color - babel-preset-jest@29.6.3(@babel/core@7.25.7): + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.22.10): dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.22.10 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.22.10) + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.7): + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.7) + transitivePeerDependencies: + - supports-color + + babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.5): + dependencies: + '@babel/core': 7.23.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) + + babel-preset-jest@29.6.3(@babel/core@7.23.5): + dependencies: + '@babel/core': 7.23.5 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) bail@2.0.2: {} @@ -13327,7 +15799,7 @@ snapshots: dependencies: is-windows: 1.0.2 - binary-extensions@2.3.0: {} + binary-extensions@2.2.0: {} binary-searching@2.0.5: {} @@ -13346,6 +15818,23 @@ snapshots: bmpimagejs@1.0.4: {} + body-parser@1.20.1: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -13363,8 +15852,10 @@ snapshots: transitivePeerDependencies: - supports-color - bonjour-service@1.2.1: + bonjour-service@1.1.1: dependencies: + array-flatten: 2.1.2 + dns-equal: 1.0.0 fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 @@ -13388,16 +15879,34 @@ snapshots: dependencies: balanced-match: 1.0.2 + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + braces@3.0.3: dependencies: fill-range: 7.1.1 - browserslist@4.24.0: + browserslist@4.21.10: dependencies: - caniuse-lite: 1.0.30001667 - electron-to-chromium: 1.5.33 + caniuse-lite: 1.0.30001520 + electron-to-chromium: 1.4.490 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.10) + + browserslist@4.23.3: + dependencies: + caniuse-lite: 1.0.30001660 + electron-to-chromium: 1.5.20 node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.0) + update-browserslist-db: 1.1.0(browserslist@4.23.3) + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001695 + electron-to-chromium: 1.5.88 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) bser@2.1.1: dependencies: @@ -13448,6 +15957,16 @@ snapshots: package-hash: 4.0.0 write-file-atomic: 3.0.3 + call-bind-apply-helpers@1.0.1: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.2: + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -13456,6 +15975,18 @@ snapshots: get-intrinsic: 1.2.4 set-function-length: 1.2.2 + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + get-intrinsic: 1.2.7 + set-function-length: 1.2.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + call-me-maybe@1.0.2: {} callsites@3.1.0: {} @@ -13466,7 +15997,11 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001667: {} + caniuse-lite@1.0.30001520: {} + + caniuse-lite@1.0.30001660: {} + + caniuse-lite@1.0.30001695: {} caseless@0.12.0: {} @@ -13476,9 +16011,9 @@ snapshots: dependencies: assertion-error: 1.1.0 check-error: 1.0.3 - deep-eql: 4.1.4 + deep-eql: 4.1.3 get-func-name: 2.0.2 - loupe: 2.3.7 + loupe: 2.3.6 pathval: 1.1.1 type-detect: 4.1.0 @@ -13555,7 +16090,7 @@ snapshots: chokidar@3.6.0: dependencies: anymatch: 3.1.3 - braces: 3.0.3 + braces: 3.0.2 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -13564,13 +16099,13 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chrome-trace-event@1.0.4: {} + chrome-trace-event@1.0.3: {} - ci-info@3.9.0: {} + ci-info@3.8.0: {} ci-info@4.0.0: {} - cjs-module-lexer@1.4.1: {} + cjs-module-lexer@1.2.3: {} cjson@0.3.0: dependencies: @@ -13597,13 +16132,13 @@ snapshots: cli-boxes@2.2.1: {} - cli-color@2.0.4: + cli-color@2.0.3: dependencies: - d: 1.0.2 - es5-ext: 0.10.64 + d: 1.0.1 + es5-ext: 0.10.62 es6-iterator: 2.0.3 - memoizee: 0.4.17 - timers-ext: 0.1.8 + memoizee: 0.4.15 + timers-ext: 0.1.7 cli-cursor@3.1.0: dependencies: @@ -13613,7 +16148,7 @@ snapshots: dependencies: restore-cursor: 5.1.0 - cli-table3@0.6.5: + cli-table3@0.6.3: dependencies: string-width: 4.2.3 optionalDependencies: @@ -13692,6 +16227,8 @@ snapshots: commander@11.0.0: {} + commander@12.0.0: {} + commander@12.1.0: {} commander@2.20.3: {} @@ -13706,6 +16243,14 @@ snapshots: commander@8.3.0: {} + comment-json@4.2.3: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + comment-json@4.2.5: dependencies: array-timsort: 1.0.3 @@ -13714,6 +16259,8 @@ snapshots: has-own-prop: 2.0.0 repeat-string: 1.6.1 + comment-parser@1.4.0: {} + comment-parser@1.4.1: {} common-path-prefix@3.0.0: {} @@ -13724,7 +16271,7 @@ snapshots: compressible@2.0.18: dependencies: - mime-db: 1.53.0 + mime-db: 1.52.0 compression@1.7.4: dependencies: @@ -13752,7 +16299,15 @@ snapshots: tree-kill: 1.2.2 yargs: 17.7.2 - confbox@0.1.8: {} + confbox@0.1.7: {} + + configstore@6.0.0: + dependencies: + dot-prop: 6.0.1 + graceful-fs: 4.2.11 + unique-string: 3.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 5.1.0 connect-history-api-fallback@2.0.0: {} @@ -13779,9 +16334,9 @@ snapshots: cookie-signature@1.0.6: {} - cookie@0.6.0: {} + cookie@0.5.0: {} - cookie@0.7.2: {} + cookie@0.6.0: {} copy-anything@3.0.5: dependencies: @@ -13789,7 +16344,11 @@ snapshots: core-js-compat@3.38.1: dependencies: - browserslist: 4.24.0 + browserslist: 4.23.3 + + core-js-compat@3.40.0: + dependencies: + browserslist: 4.24.4 core-util-is@1.0.2: {} @@ -13825,18 +16384,18 @@ snapshots: cp-file: 10.0.0 globby: 13.2.2 junk: 4.0.1 - micromatch: 4.0.8 + micromatch: 4.0.5 nested-error-stacks: 2.1.1 p-filter: 3.0.0 p-map: 6.0.0 - create-jest@29.7.0(@types/node@20.16.11): + create-jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.16.11) + jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -13845,6 +16404,9 @@ snapshots: - supports-color - ts-node + create-require@1.1.1: + optional: true + cross-env@7.0.3: dependencies: cross-spawn: 7.0.3 @@ -13871,12 +16433,22 @@ snapshots: crypto-random-string@2.0.0: {} + crypto-random-string@4.0.0: + dependencies: + type-fest: 1.4.0 + cspell-config-lib@8.14.4: dependencies: '@cspell/cspell-types': 8.14.4 comment-json: 4.2.5 yaml: 2.5.1 + cspell-config-lib@8.6.0: + dependencies: + '@cspell/cspell-types': 8.6.0 + comment-json: 4.2.3 + yaml: 2.4.0 + cspell-dictionary@8.14.4: dependencies: '@cspell/cspell-pipe': 8.14.4 @@ -13884,11 +16456,17 @@ snapshots: cspell-trie-lib: 8.14.4 fast-equals: 5.0.1 - cspell-gitignore@8.14.4: + cspell-dictionary@8.6.0: dependencies: - '@cspell/url': 8.14.4 - cspell-glob: 8.14.4 - cspell-io: 8.14.4 + '@cspell/cspell-pipe': 8.6.0 + '@cspell/cspell-types': 8.6.0 + cspell-trie-lib: 8.6.0 + fast-equals: 5.0.1 + gensequence: 7.0.0 + + cspell-gitignore@8.6.0: + dependencies: + cspell-glob: 8.6.0 find-up-simple: 1.0.0 cspell-glob@8.14.4: @@ -13896,16 +16474,29 @@ snapshots: '@cspell/url': 8.14.4 micromatch: 4.0.8 + cspell-glob@8.6.0: + dependencies: + micromatch: 4.0.5 + cspell-grammar@8.14.4: dependencies: '@cspell/cspell-pipe': 8.14.4 '@cspell/cspell-types': 8.14.4 + cspell-grammar@8.6.0: + dependencies: + '@cspell/cspell-pipe': 8.6.0 + '@cspell/cspell-types': 8.6.0 + cspell-io@8.14.4: dependencies: '@cspell/cspell-service-bus': 8.14.4 '@cspell/url': 8.14.4 + cspell-io@8.6.0: + dependencies: + '@cspell/cspell-service-bus': 8.6.0 + cspell-lib@8.14.4: dependencies: '@cspell/cspell-bundled-dicts': 8.14.4 @@ -13933,38 +16524,67 @@ snapshots: vscode-uri: 3.0.8 xdg-basedir: 5.1.0 + cspell-lib@8.6.0: + dependencies: + '@cspell/cspell-bundled-dicts': 8.6.0 + '@cspell/cspell-pipe': 8.6.0 + '@cspell/cspell-resolver': 8.6.0 + '@cspell/cspell-types': 8.6.0 + '@cspell/dynamic-import': 8.6.0 + '@cspell/strong-weak-map': 8.6.0 + clear-module: 4.1.2 + comment-json: 4.2.3 + configstore: 6.0.0 + cspell-config-lib: 8.6.0 + cspell-dictionary: 8.6.0 + cspell-glob: 8.6.0 + cspell-grammar: 8.6.0 + cspell-io: 8.6.0 + cspell-trie-lib: 8.6.0 + fast-equals: 5.0.1 + gensequence: 7.0.0 + import-fresh: 3.3.0 + resolve-from: 5.0.0 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 + cspell-trie-lib@8.14.4: dependencies: '@cspell/cspell-pipe': 8.14.4 '@cspell/cspell-types': 8.14.4 gensequence: 7.0.0 - cspell@8.14.4: + cspell-trie-lib@8.6.0: dependencies: - '@cspell/cspell-json-reporter': 8.14.4 - '@cspell/cspell-pipe': 8.14.4 - '@cspell/cspell-types': 8.14.4 - '@cspell/dynamic-import': 8.14.4 - '@cspell/url': 8.14.4 + '@cspell/cspell-pipe': 8.6.0 + '@cspell/cspell-types': 8.6.0 + gensequence: 7.0.0 + + cspell@8.6.0: + dependencies: + '@cspell/cspell-json-reporter': 8.6.0 + '@cspell/cspell-pipe': 8.6.0 + '@cspell/cspell-types': 8.6.0 + '@cspell/dynamic-import': 8.6.0 chalk: 5.3.0 chalk-template: 1.1.0 - commander: 12.1.0 - cspell-dictionary: 8.14.4 - cspell-gitignore: 8.14.4 - cspell-glob: 8.14.4 - cspell-io: 8.14.4 - cspell-lib: 8.14.4 + commander: 12.0.0 + cspell-gitignore: 8.6.0 + cspell-glob: 8.6.0 + cspell-io: 8.6.0 + cspell-lib: 8.6.0 fast-glob: 3.3.2 fast-json-stable-stringify: 2.1.0 - file-entry-cache: 9.1.0 + file-entry-cache: 8.0.0 get-stdin: 9.0.0 - semver: 7.6.3 + semver: 7.6.0 strip-ansi: 7.1.0 + vscode-uri: 3.0.8 css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.1 + source-map-js: 1.0.2 cssesc@3.0.0: {} @@ -13976,32 +16596,32 @@ snapshots: dependencies: clap: 3.1.1 css-tree: 2.3.1 - resolve: 1.22.8 + resolve: 1.22.4 csstype@3.1.3: {} cuint@0.2.2: {} - cypress-image-snapshot@4.0.1(cypress@13.15.0)(jest@29.7.0(@types/node@20.16.11)): + cypress-image-snapshot@4.0.1(cypress@13.14.2)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5))): dependencies: chalk: 2.4.2 - cypress: 13.15.0 + cypress: 13.14.2 fs-extra: 7.0.1 glob: 7.2.3 - jest-image-snapshot: 4.2.0(jest@29.7.0(@types/node@20.16.11)) + jest-image-snapshot: 4.2.0(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5))) pkg-dir: 3.0.0 term-img: 4.1.0 transitivePeerDependencies: - jest - cypress-split@1.24.0(@babel/core@7.25.7): + cypress-split@1.24.0(@babel/core@7.22.10): dependencies: '@actions/core': 1.11.1 arg: 5.0.2 console.table: 0.10.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 fast-shuffle: 6.1.0 - find-cypress-specs: 1.43.4(@babel/core@7.25.7) + find-cypress-specs: 1.43.4(@babel/core@7.22.10) globby: 11.1.0 humanize-duration: 3.32.1 transitivePeerDependencies: @@ -14010,12 +16630,12 @@ snapshots: cypress-wait-until@3.0.2: {} - cypress@13.15.0: + cypress@13.14.2: dependencies: '@cypress/request': 3.0.5 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) '@types/sinonjs__fake-timers': 8.1.1 - '@types/sizzle': 2.3.8 + '@types/sizzle': 2.3.3 arch: 2.2.0 blob-util: 2.0.2 bluebird: 3.7.2 @@ -14024,11 +16644,11 @@ snapshots: chalk: 4.1.2 check-more-types: 2.24.0 cli-cursor: 3.1.0 - cli-table3: 0.6.5 + cli-table3: 0.6.3 commander: 6.2.1 common-tags: 1.8.2 - dayjs: 1.11.13 - debug: 4.3.7(supports-color@8.1.1) + dayjs: 1.11.10 + debug: 4.3.4(supports-color@8.1.1) enquirer: 2.4.1 eventemitter2: 6.4.7 execa: 4.1.0 @@ -14049,7 +16669,7 @@ snapshots: process: 0.11.10 proxy-from-env: 1.0.0 request-progress: 3.0.0 - semver: 7.6.3 + semver: 7.6.0 supports-color: 8.1.1 tmp: 0.2.3 untildify: 4.0.0 @@ -14097,7 +16717,7 @@ snapshots: d3-delaunay@6.0.4: dependencies: - delaunator: 5.0.1 + delaunator: 5.0.0 d3-dispatch@3.0.1: {} @@ -14126,7 +16746,7 @@ snapshots: d3-format@3.1.0: {} - d3-geo@3.1.1: + d3-geo@3.1.0: dependencies: d3-array: 3.2.4 @@ -14151,7 +16771,7 @@ snapshots: d3-array: 2.12.1 d3-shape: 1.3.7 - d3-scale-chromatic@3.1.0: + d3-scale-chromatic@3.0.0: dependencies: d3-color: 3.1.0 d3-interpolate: 3.0.1 @@ -14217,7 +16837,7 @@ snapshots: d3-fetch: 3.0.1 d3-force: 3.0.0 d3-format: 3.1.0 - d3-geo: 3.1.1 + d3-geo: 3.1.0 d3-hierarchy: 3.1.2 d3-interpolate: 3.0.1 d3-path: 3.1.0 @@ -14225,7 +16845,7 @@ snapshots: d3-quadtree: 3.0.1 d3-random: 3.0.1 d3-scale: 4.0.2 - d3-scale-chromatic: 3.1.0 + d3-scale-chromatic: 3.0.0 d3-selection: 3.0.0 d3-shape: 3.2.0 d3-time: 3.1.0 @@ -14234,10 +16854,15 @@ snapshots: d3-transition: 3.0.1(d3-selection@3.0.0) d3-zoom: 3.0.0 - d@1.0.2: + d@1.0.1: dependencies: - es5-ext: 0.10.64 - type: 2.7.3 + es5-ext: 0.10.62 + type: 1.2.0 + + dagre-d3-es@7.0.10: + dependencies: + d3: 7.9.0 + lodash-es: 4.17.21 dagre-d3-es@7.0.11: dependencies: @@ -14255,29 +16880,31 @@ snapshots: whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - data-view-buffer@1.0.1: + data-view-buffer@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 - data-view-byte-length@1.0.1: + data-view-byte-length@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 - data-view-byte-offset@1.0.0: + data-view-byte-offset@1.0.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 dataloader@1.4.0: {} date-fns@2.30.0: dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.22.10 + + dayjs@1.11.10: {} dayjs@1.11.13: {} @@ -14295,16 +16922,20 @@ snapshots: dependencies: ms: 2.1.2 - debug@4.3.4: + debug@4.3.4(supports-color@8.1.1): dependencies: ms: 2.1.2 - - debug@4.3.7(supports-color@8.1.1): - dependencies: - ms: 2.1.3 optionalDependencies: supports-color: 8.1.1 + debug@4.3.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + decamelize@1.2.0: {} decimal.js@10.4.3: {} @@ -14317,27 +16948,27 @@ snapshots: dependencies: mimic-response: 3.1.0 - dedent@1.5.3: {} + dedent@1.5.1: {} - deep-eql@4.1.4: + deep-eql@4.1.3: dependencies: type-detect: 4.1.0 deep-equal@2.2.3: dependencies: - array-buffer-byte-length: 1.0.1 + array-buffer-byte-length: 1.0.0 call-bind: 1.0.7 es-get-iterator: 1.1.3 get-intrinsic: 1.2.4 is-arguments: 1.1.1 - is-array-buffer: 3.0.4 + is-array-buffer: 3.0.2 is-date-object: 1.0.5 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 + is-shared-array-buffer: 1.0.2 isarray: 2.0.5 object-is: 1.1.6 object-keys: 1.1.1 - object.assign: 4.1.5 + object.assign: 4.1.4 regexp.prototype.flags: 1.5.3 side-channel: 1.0.6 which-boxed-primitive: 1.0.2 @@ -14371,6 +17002,11 @@ snapshots: define-lazy-prop@2.0.0: {} + define-properties@1.2.0: + dependencies: + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -14379,7 +17015,7 @@ snapshots: defu@6.1.4: {} - delaunator@5.0.1: + delaunator@5.0.0: dependencies: robust-predicates: 3.0.2 @@ -14428,11 +17064,11 @@ snapshots: dependencies: node-source-walk: 7.0.0 - detective-postcss@7.0.0(postcss@8.4.47): + detective-postcss@7.0.0(postcss@8.5.1): dependencies: is-url: 1.2.4 - postcss: 8.4.47 - postcss-values-parser: 6.0.2(postcss@8.4.47) + postcss: 8.5.1 + postcss-values-parser: 6.0.2(postcss@8.5.1) detective-sass@6.0.0: dependencies: @@ -14446,24 +17082,24 @@ snapshots: detective-stylus@5.0.0: {} - detective-typescript@13.0.0(typescript@5.6.2): + detective-typescript@13.0.0(typescript@5.6.3): dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) ast-module-types: 6.0.0 node-source-walk: 7.0.0 - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - detective-vue2@2.0.3(typescript@5.6.2): + detective-vue2@2.0.3(typescript@5.6.3): dependencies: - '@vue/compiler-sfc': 3.5.11 + '@vue/compiler-sfc': 3.5.4 detective-es6: 5.0.0 detective-sass: 6.0.0 detective-scss: 5.0.0 detective-stylus: 5.0.0 - detective-typescript: 13.0.0(typescript@5.6.2) - typescript: 5.6.2 + detective-typescript: 13.0.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -14475,15 +17111,20 @@ snapshots: diff-sequences@29.6.3: {} + diff@4.0.2: + optional: true + dir-glob@3.0.1: dependencies: path-type: 4.0.0 dlv@1.1.3: {} - dns-packet@5.6.1: + dns-equal@1.0.0: {} + + dns-packet@5.6.0: dependencies: - '@leichtgewicht/ip-codec': 2.0.5 + '@leichtgewicht/ip-codec': 2.0.4 dom-serializer@2.0.0: dependencies: @@ -14509,10 +17150,20 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 - dotenv@16.4.5: {} + dot-prop@6.0.1: + dependencies: + is-obj: 2.0.0 + + dotenv@16.3.1: {} dotenv@8.6.0: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + duplexer@0.1.2: {} eastasianwidth@0.2.0: {} @@ -14530,11 +17181,15 @@ snapshots: ee-first@1.1.1: {} - ejs@3.1.10: + ejs@3.1.9: dependencies: - jake: 10.9.2 + jake: 10.8.7 - electron-to-chromium@1.5.33: {} + electron-to-chromium@1.4.490: {} + + electron-to-chromium@1.5.20: {} + + electron-to-chromium@1.5.88: {} elkjs@0.9.3: {} @@ -14574,7 +17229,7 @@ snapshots: env-paths@3.0.0: {} - envinfo@7.14.0: {} + envinfo@7.10.0: {} environment@1.1.0: {} @@ -14582,59 +17237,66 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.3: + es-abstract@1.23.9: dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 + call-bind: 1.0.8 + call-bound: 1.0.3 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 globalthis: 1.0.4 - gopd: 1.0.1 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + has-proto: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.0 + math-intrinsics: 1.1.0 + object-inspect: 1.13.3 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.3 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} + es-errors@1.3.0: {} es-get-iterator@1.1.3: @@ -14649,52 +17311,54 @@ snapshots: isarray: 2.0.5 stop-iteration-iterator: 1.0.0 + es-module-lexer@1.3.0: {} + es-module-lexer@1.5.4: {} - es-object-atoms@1.0.0: + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.0.3: + es-set-tostringtag@2.1.0: dependencies: - get-intrinsic: 1.2.4 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 has-tostringtag: 1.0.2 hasown: 2.0.2 - es-to-primitive@1.2.1: + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 + is-date-object: 1.1.0 + is-symbol: 1.1.1 es2015-i18n-tag@1.6.1: {} - es5-ext@0.10.64: + es5-ext@0.10.62: dependencies: es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esniff: 2.0.1 + es6-symbol: 3.1.3 next-tick: 1.1.0 es6-error@4.1.1: {} es6-iterator@2.0.3: dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-symbol: 3.1.4 + d: 1.0.1 + es5-ext: 0.10.62 + es6-symbol: 3.1.3 - es6-symbol@3.1.4: + es6-symbol@3.1.3: dependencies: - d: 1.0.2 + d: 1.0.1 ext: 1.7.0 es6-weak-map@2.0.3: dependencies: - d: 1.0.2 - es5-ext: 0.10.64 + d: 1.0.1 + es5-ext: 0.10.62 es6-iterator: 2.0.3 - es6-symbol: 3.1.4 + es6-symbol: 3.1.3 esbuild@0.21.5: optionalDependencies: @@ -14749,6 +17413,8 @@ snapshots: '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 + escalade@3.1.1: {} + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -14777,44 +17443,44 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@1.21.6)): + eslint-config-prettier@9.1.0(eslint@9.11.1(jiti@1.21.0)): dependencies: - eslint: 9.12.0(jiti@1.21.6) + eslint: 9.11.1(jiti@1.21.0) - eslint-plugin-cypress@3.5.0(eslint@9.12.0(jiti@1.21.6)): + eslint-plugin-cypress@3.5.0(eslint@9.11.1(jiti@1.21.0)): dependencies: - eslint: 9.12.0(jiti@1.21.6) - globals: 13.24.0 + eslint: 9.11.1(jiti@1.21.0) + globals: 13.21.0 eslint-plugin-html@8.1.2: dependencies: htmlparser2: 9.1.0 - eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(jest@29.7.0(@types/node@20.16.11))(typescript@5.4.5): + eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5))(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5))(eslint@9.11.1(jiti@1.21.0))(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)))(typescript@5.4.5): dependencies: - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - eslint: 9.12.0(jiti@1.21.6) + '@typescript-eslint/utils': 8.5.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + eslint: 9.11.1(jiti@1.21.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - jest: 29.7.0(@types/node@20.16.11) + '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5))(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.3.1(eslint@9.12.0(jiti@1.21.6)): + eslint-plugin-jsdoc@50.3.1(eslint@9.11.1(jiti@1.21.0)): dependencies: '@es-joy/jsdoccomment': 0.48.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint: 9.12.0(jiti@1.21.6) + eslint: 9.11.1(jiti@1.21.0) espree: 10.2.0 esquery: 1.6.0 parse-imports: 2.2.1 semver: 7.6.3 spdx-expression-parse: 4.0.0 - synckit: 0.9.2 + synckit: 0.9.1 transitivePeerDependencies: - supports-color @@ -14823,35 +17489,35 @@ snapshots: lodash: 4.17.21 vscode-json-languageservice: 4.2.1 - eslint-plugin-lodash@8.0.0(eslint@9.12.0(jiti@1.21.6)): + eslint-plugin-lodash@8.0.0(eslint@9.11.1(jiti@1.21.0)): dependencies: - eslint: 9.12.0(jiti@1.21.6) + eslint: 9.11.1(jiti@1.21.0) lodash: 4.17.21 - eslint-plugin-markdown@5.1.0(eslint@9.12.0(jiti@1.21.6)): + eslint-plugin-markdown@5.1.0(eslint@9.11.1(jiti@1.21.0)): dependencies: - eslint: 9.12.0(jiti@1.21.6) + eslint: 9.11.1(jiti@1.21.0) mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color - eslint-plugin-no-only-tests@3.3.0: {} + eslint-plugin-no-only-tests@3.1.0: {} eslint-plugin-tsdoc@0.3.0: dependencies: '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - eslint-plugin-unicorn@56.0.0(eslint@9.12.0(jiti@1.21.6)): + eslint-plugin-unicorn@56.0.0(eslint@9.11.1(jiti@1.21.0)): dependencies: - '@babel/helper-validator-identifier': 7.25.7 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@1.21.6)) + '@babel/helper-validator-identifier': 7.24.7 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.0)) ci-info: 4.0.0 clean-regexp: 1.0.0 core-js-compat: 3.38.1 - eslint: 9.12.0(jiti@1.21.6) + eslint: 9.11.1(jiti@1.21.0) esquery: 1.6.0 - globals: 15.10.0 + globals: 15.9.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 jsesc: 3.0.2 @@ -14867,37 +17533,39 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@8.1.0: + eslint-scope@8.0.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} + eslint-visitor-keys@4.0.0: {} + eslint-visitor-keys@4.1.0: {} - eslint@9.12.0(jiti@1.21.6): + eslint@9.11.1(jiti@1.21.0): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@1.21.6)) - '@eslint-community/regexpp': 4.11.1 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.0)) + '@eslint-community/regexpp': 4.11.0 '@eslint/config-array': 0.18.0 '@eslint/core': 0.6.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.12.0 + '@eslint/js': 9.11.1 '@eslint/plugin-kit': 0.2.0 - '@humanfs/node': 0.16.5 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.3.0 + '@nodelib/fs.walk': 1.2.8 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint-scope: 8.1.0 - eslint-visitor-keys: 4.1.0 - espree: 10.2.0 + eslint-scope: 8.0.2 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -14907,23 +17575,24 @@ snapshots: ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 + is-path-inside: 3.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.4 + optionator: 0.9.3 + strip-ansi: 6.0.1 text-table: 0.2.0 optionalDependencies: - jiti: 1.21.6 + jiti: 1.21.0 transitivePeerDependencies: - supports-color - esniff@2.0.1: + espree@10.1.0: dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-emitter: 0.3.5 - type: 2.7.3 + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.0.0 espree@10.2.0: dependencies: @@ -14965,8 +17634,8 @@ snapshots: event-emitter@0.3.5: dependencies: - d: 1.0.2 - es5-ext: 0.10.64 + d: 1.0.1 + es5-ext: 0.10.62 event-stream@3.3.4: dependencies: @@ -15029,7 +17698,7 @@ snapshots: human-signals: 5.0.0 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.3.0 + npm-run-path: 5.1.0 onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 @@ -15048,6 +17717,42 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 + express@4.18.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + express@4.21.0: dependencies: accepts: 1.3.8 @@ -15086,7 +17791,7 @@ snapshots: ext@1.7.0: dependencies: - type: 2.7.3 + type: 2.7.2 extend@3.0.2: {} @@ -15100,11 +17805,11 @@ snapshots: extract-zip@2.0.1(supports-color@8.1.1): dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: - '@types/yauzl': 2.10.3 + '@types/yauzl': 2.10.0 transitivePeerDependencies: - supports-color @@ -15124,15 +17829,15 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.8 + micromatch: 4.0.5 fast-json-stable-stringify@2.1.0: {} fast-json-stringify@5.16.1: dependencies: '@fastify/merge-json-schemas': 0.1.1 - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) + ajv: 8.12.0 + ajv-formats: 3.0.1(ajv@8.12.0) fast-deep-equal: 3.1.3 fast-uri: 2.4.0 json-schema-ref-resolver: 1.0.1 @@ -15144,7 +17849,7 @@ snapshots: dependencies: fast-decode-uri-component: 1.0.1 - fast-redact@3.5.0: {} + fast-redact@3.3.0: {} fast-shuffle@6.1.0: dependencies: @@ -15152,8 +17857,6 @@ snapshots: fast-uri@2.4.0: {} - fast-uri@3.0.2: {} - fastest-levenshtein@1.0.16: {} fastestsmallesttextencoderdecoder@1.0.22: {} @@ -15169,8 +17872,8 @@ snapshots: avvio: 8.4.0 fast-content-type-parse: 1.1.0 fast-json-stringify: 5.16.1 - find-my-way: 8.2.2 - light-my-request: 5.14.0 + find-my-way: 8.2.0 + light-my-request: 5.13.0 pino: 9.4.0 process-warning: 3.0.0 proxy-addr: 2.0.7 @@ -15179,6 +17882,10 @@ snapshots: semver: 7.6.3 toad-cache: 3.7.0 + fastq@1.15.0: + dependencies: + reusify: 1.0.4 + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -15212,7 +17919,7 @@ snapshots: fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 + web-streams-polyfill: 3.2.1 fflate@0.8.2: {} @@ -15224,10 +17931,6 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-entry-cache@9.1.0: - dependencies: - flat-cache: 5.0.0 - file-saver@2.0.5: {} filelist@1.0.4: @@ -15248,10 +17951,26 @@ snapshots: tsconfig-paths: 4.2.0 typescript: 5.4.5 + fill-range@7.0.1: + dependencies: + to-regex-range: 5.0.1 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + finalhandler@1.2.0: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + finalhandler@1.3.1: dependencies: debug: 2.6.9 @@ -15275,13 +17994,13 @@ snapshots: common-path-prefix: 3.0.0 pkg-dir: 7.0.0 - find-cypress-specs@1.43.4(@babel/core@7.25.7): + find-cypress-specs@1.43.4(@babel/core@7.22.10): dependencies: '@actions/core': 1.11.1 arg: 5.0.2 console.table: 0.10.0 - debug: 4.3.7(supports-color@8.1.1) - find-test-names: 1.28.18(@babel/core@7.25.7) + debug: 4.3.7 + find-test-names: 1.28.18(@babel/core@7.22.10) globby: 11.1.0 minimatch: 3.1.2 pluralize: 8.0.0 @@ -15293,7 +18012,7 @@ snapshots: - '@babel/core' - supports-color - find-my-way@8.2.2: + find-my-way@8.2.0: dependencies: fast-deep-equal: 3.1.3 fast-querystring: 1.1.2 @@ -15303,16 +18022,16 @@ snapshots: dependencies: chalk: 4.1.2 commander: 5.1.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - find-test-names@1.28.18(@babel/core@7.25.7): + find-test-names@1.28.18(@babel/core@7.22.10): dependencies: - '@babel/parser': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) + '@babel/parser': 7.25.6 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.22.10) acorn-walk: 8.3.4 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 globby: 11.1.0 simple-bin-help: 1.8.0 transitivePeerDependencies: @@ -15345,24 +18064,19 @@ snapshots: flatted: 3.3.1 keyv: 4.5.4 - flat-cache@5.0.0: - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - - flat@5.0.2: {} - flatted@3.3.1: {} - flexsearch@0.7.43: {} + flexsearch@0.7.31: {} - focus-trap@7.6.0: + focus-trap@7.5.4: dependencies: tabbable: 6.2.0 + follow-redirects@1.15.5: {} + follow-redirects@1.15.9(debug@4.3.7): optionalDependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 font-awesome@4.7.0: {} @@ -15370,12 +18084,16 @@ snapshots: dependencies: is-callable: 1.2.7 + for-each@0.3.4: + dependencies: + is-callable: 1.2.7 + foreground-child@2.0.0: dependencies: cross-spawn: 7.0.3 signal-exit: 3.0.7 - foreground-child@3.3.0: + foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 @@ -15406,13 +18124,13 @@ snapshots: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.1 + universalify: 2.0.0 fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.1 + universalify: 2.0.0 fs-extra@7.0.1: dependencies: @@ -15431,23 +18149,27 @@ snapshots: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.1 + universalify: 2.0.0 - fs-monkey@1.0.6: {} + fs-monkey@1.0.4: {} fs.realpath@1.0.0: {} fsevents@2.3.3: optional: true + function-bind@1.1.1: {} + function-bind@1.1.2: {} - function.prototype.name@1.1.6: + function.prototype.name@1.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 functions-have-names@1.2.3: {} @@ -15466,18 +18188,43 @@ snapshots: get-func-name@2.0.2: {} + get-intrinsic@1.2.1: + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.3 + has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.2 + get-intrinsic@1.2.7: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + get-own-enumerable-property-symbols@3.0.2: {} get-package-type@0.1.0: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-stdin@5.0.1: {} get-stdin@8.0.0: {} @@ -15486,21 +18233,21 @@ snapshots: get-stream@4.1.0: dependencies: - pump: 3.0.2 + pump: 3.0.0 get-stream@5.2.0: dependencies: - pump: 3.0.2 + pump: 3.0.0 get-stream@6.0.1: {} get-stream@8.0.1: {} - get-symbol-description@1.0.2: + get-symbol-description@1.1.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.7 get-tsconfig@4.8.1: dependencies: @@ -15508,7 +18255,7 @@ snapshots: getos@3.2.1: dependencies: - async: 3.2.6 + async: 3.2.4 getpass@0.1.7: dependencies: @@ -15533,13 +18280,22 @@ snapshots: glob@10.4.5: dependencies: - foreground-child: 3.3.0 + foreground-child: 3.1.1 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.1 + package-json-from-dist: 1.0.0 path-scurry: 1.11.1 + glob@7.1.6: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -15567,25 +18323,25 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: + globals@13.21.0: dependencies: type-fest: 0.20.2 globals@14.0.0: {} - globals@15.10.0: {} + globals@15.9.0: {} globalthis@1.0.4: dependencies: define-properties: 1.2.1 - gopd: 1.0.1 + gopd: 1.2.0 globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.2 + ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -15593,7 +18349,7 @@ snapshots: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.2 + ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 @@ -15601,7 +18357,7 @@ snapshots: dependencies: '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.2 - ignore: 5.3.2 + ignore: 5.2.4 path-type: 5.0.0 slash: 5.1.0 unicorn-magic: 0.1.0 @@ -15616,12 +18372,14 @@ snapshots: dependencies: get-intrinsic: 1.2.4 + gopd@1.2.0: {} + got@11.8.6: dependencies: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 + '@types/responselike': 1.0.0 cacheable-lookup: 5.0.4 cacheable-request: 7.0.4 decompress-response: 6.0.0 @@ -15649,7 +18407,7 @@ snapshots: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.19.3 + uglify-js: 3.17.4 has-ansi@2.0.0: dependencies: @@ -15657,6 +18415,8 @@ snapshots: has-bigints@1.0.2: {} + has-bigints@1.1.0: {} + has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -15667,14 +18427,28 @@ snapshots: dependencies: es-define-property: 1.0.0 - has-proto@1.0.3: {} + has-proto@1.0.1: {} + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 has-symbols@1.0.3: {} + has-symbols@1.1.0: {} + + has-tostringtag@1.0.0: + dependencies: + has-symbols: 1.0.3 + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 + has@1.0.3: + dependencies: + function-bind: 1.1.1 + hasha@5.2.2: dependencies: is-stream: 2.0.1 @@ -15684,7 +18458,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-to-html@9.0.3: + hast-util-to-html@9.0.2: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -15719,7 +18493,7 @@ snapshots: dependencies: whatwg-encoding: 3.1.1 - html-entities@2.5.2: {} + html-entities@2.4.0: {} html-escaper@2.0.2: {} @@ -15759,24 +18533,24 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - http-proxy-middleware@2.0.7(@types/express@4.17.21): + http-proxy-middleware@2.0.6(@types/express@4.17.21): dependencies: - '@types/http-proxy': 1.17.15 + '@types/http-proxy': 1.17.11 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 - micromatch: 4.0.8 + micromatch: 4.0.5 optionalDependencies: '@types/express': 4.17.21 transitivePeerDependencies: @@ -15785,7 +18559,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.5 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -15806,23 +18580,23 @@ snapshots: appdata-path: 1.0.0 compression: 1.7.4 cors: 2.8.5 - express: 4.21.0 + express: 4.18.2 spdy: 4.0.2 - uglify-js: 3.19.3 + uglify-js: 3.17.4 transitivePeerDependencies: - supports-color https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -15850,6 +18624,8 @@ snapshots: ieee754@1.2.1: {} + ignore@5.2.4: {} + ignore@5.3.2: {} import-fresh@3.3.0: @@ -15857,11 +18633,13 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-local@3.2.0: + import-local@3.1.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + import-meta-resolve@4.0.0: {} + import-meta-resolve@4.1.0: {} imurmurhash@0.1.4: {} @@ -15885,11 +18663,17 @@ snapshots: ini@4.1.1: {} - internal-slot@1.0.7: + internal-slot@1.0.5: + dependencies: + get-intrinsic: 1.2.4 + has: 1.0.3 + side-channel: 1.0.6 + + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 internmap@1.0.1: {} @@ -15901,7 +18685,7 @@ snapshots: ipaddr.js@1.9.1: {} - ipaddr.js@2.2.0: {} + ipaddr.js@2.1.0: {} is-alphabetical@1.0.4: {} @@ -15913,28 +18697,52 @@ snapshots: is-arguments@1.1.1: dependencies: call-bind: 1.0.7 - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 - is-array-buffer@3.0.4: + is-array-buffer@3.0.2: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 + is-typed-array: 1.1.12 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 is-arrayish@0.2.1: {} is-arrayish@0.3.2: {} + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + is-binary-path@2.1.0: dependencies: - binary-extensions: 2.3.0 + binary-extensions: 2.2.0 is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 + has-tostringtag: 1.0.0 + + is-boolean-object@1.2.1: + dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-builtin-module@3.2.1: @@ -15945,18 +18753,29 @@ snapshots: is-ci@3.0.1: dependencies: - ci-info: 3.9.0 + ci-info: 3.8.0 - is-core-module@2.15.1: + is-core-module@2.13.0: + dependencies: + has: 1.0.3 + + is-core-module@2.16.1: dependencies: hasown: 2.0.2 - is-data-view@1.0.1: + is-data-view@1.0.2: dependencies: - is-typed-array: 1.1.13 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + is-typed-array: 1.1.15 is-date-object@1.0.5: dependencies: + has-tostringtag: 1.0.0 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-decimal@1.0.4: {} @@ -15965,6 +18784,10 @@ snapshots: is-extglob@2.1.1: {} + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.3 + is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} @@ -15975,6 +18798,13 @@ snapshots: is-generator-fn@2.1.0: {} + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -15992,16 +18822,21 @@ snapshots: is-module@1.0.0: {} - is-negative-zero@2.0.3: {} - is-number-object@1.0.7: dependencies: + has-tostringtag: 1.0.0 + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-number@7.0.0: {} is-obj@1.0.1: {} + is-obj@2.0.0: {} + is-path-inside@3.0.3: {} is-plain-obj@3.0.0: {} @@ -16019,16 +18854,27 @@ snapshots: is-regex@1.1.4: dependencies: call-bind: 1.0.7 + has-tostringtag: 1.0.0 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.3 + gopd: 1.2.0 has-tostringtag: 1.0.2 + hasown: 2.0.2 is-regexp@1.0.0: {} is-set@2.0.3: {} - is-shared-array-buffer@1.0.3: + is-shared-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.3 + is-stream@1.1.0: {} is-stream@2.0.1: {} @@ -16037,6 +18883,11 @@ snapshots: is-string@1.0.7: dependencies: + has-tostringtag: 1.0.0 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-subdir@1.2.0: @@ -16047,9 +18898,19 @@ snapshots: dependencies: has-symbols: 1.0.3 - is-typed-array@1.1.13: + is-symbol@1.1.1: dependencies: - which-typed-array: 1.1.15 + call-bound: 1.0.3 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.12: + dependencies: + which-typed-array: 1.1.18 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.18 is-typedarray@1.0.0: {} @@ -16061,9 +18922,9 @@ snapshots: is-weakmap@2.0.2: {} - is-weakref@1.0.2: + is-weakref@1.1.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 is-weakset@2.0.3: dependencies: @@ -16088,6 +18949,8 @@ snapshots: isstream@0.1.2: {} + istanbul-lib-coverage@3.2.0: {} + istanbul-lib-coverage@3.2.2: {} istanbul-lib-hook@3.0.0: @@ -16096,30 +18959,30 @@ snapshots: istanbul-lib-instrument@4.0.3: dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.22.10 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 + istanbul-lib-coverage: 3.2.0 semver: 6.3.1 transitivePeerDependencies: - supports-color istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.25.7 - '@babel/parser': 7.25.7 + '@babel/core': 7.23.5 + '@babel/parser': 7.26.7 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 + istanbul-lib-coverage: 3.2.0 semver: 6.3.1 transitivePeerDependencies: - supports-color istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.25.7 - '@babel/parser': 7.25.7 + '@babel/core': 7.25.2 + '@babel/parser': 7.24.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.6.3 + istanbul-lib-coverage: 3.2.0 + semver: 7.6.0 transitivePeerDependencies: - supports-color @@ -16127,21 +18990,21 @@ snapshots: dependencies: archy: 1.0.0 cross-spawn: 7.0.3 - istanbul-lib-coverage: 3.2.2 + istanbul-lib-coverage: 3.2.0 p-map: 3.0.0 rimraf: 3.0.2 uuid: 8.3.2 istanbul-lib-report@3.0.1: dependencies: - istanbul-lib-coverage: 3.2.2 + istanbul-lib-coverage: 3.2.0 make-dir: 4.0.0 supports-color: 7.2.0 istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.7(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.2 + debug: 4.3.4(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color @@ -16149,12 +19012,12 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color - istanbul-reports@3.1.7: + istanbul-reports@3.1.6: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 @@ -16170,7 +19033,7 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jake@10.9.2: + jake@10.8.7: dependencies: async: 3.2.6 chalk: 4.1.2 @@ -16189,10 +19052,10 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.16.5 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.3 + dedent: 1.5.1 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -16202,23 +19065,23 @@ snapshots: jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 - pure-rand: 6.1.0 + pure-rand: 6.0.2 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.16.11): + jest-cli@29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0 + '@jest/core': 29.7.0(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.16.11) + create-jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)) exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.16.11) + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -16228,14 +19091,14 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.16.11): + jest-config@29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)): dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.23.5 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.25.7) + babel-jest: 29.7.0(@babel/core@7.23.5) chalk: 4.1.2 - ci-info: 3.9.0 + ci-info: 3.8.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 @@ -16247,13 +19110,14 @@ snapshots: jest-runner: 29.7.0 jest-util: 29.7.0 jest-validate: 29.7.0 - micromatch: 4.0.8 + micromatch: 4.0.5 parse-json: 5.2.0 pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 + ts-node: 10.9.1(@types/node@20.16.5)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -16282,7 +19146,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.16.5 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -16291,25 +19155,25 @@ snapshots: jest-haste-map@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.16.11 + '@types/graceful-fs': 4.1.6 + '@types/node': 20.16.5 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 29.6.3 jest-util: 29.7.0 jest-worker: 29.7.0 - micromatch: 4.0.8 + micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 - jest-image-snapshot@4.2.0(jest@29.7.0(@types/node@20.16.11)): + jest-image-snapshot@4.2.0(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5))): dependencies: chalk: 1.1.3 get-stdin: 5.0.1 glur: 1.1.2 - jest: 29.7.0(@types/node@20.16.11) + jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)) lodash: 4.17.21 mkdirp: 0.5.6 pixelmatch: 5.3.0 @@ -16331,12 +19195,12 @@ snapshots: jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.25.7 + '@babel/code-frame': 7.23.5 '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 + '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.8 + micromatch: 4.0.5 pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 @@ -16344,7 +19208,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.16.5 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -16368,7 +19232,7 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.8 + resolve: 1.22.4 resolve.exports: 2.0.2 slash: 3.0.0 @@ -16379,7 +19243,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.16.5 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -16407,9 +19271,9 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.16.5 chalk: 4.1.2 - cjs-module-lexer: 1.4.1 + cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -16427,15 +19291,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) - '@babel/types': 7.25.7 + '@babel/core': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) + '@babel/types': 7.23.5 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -16446,16 +19310,16 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.3 + semver: 7.6.0 transitivePeerDependencies: - supports-color jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.16.5 chalk: 4.1.2 - ci-info: 3.9.0 + ci-info: 3.8.0 graceful-fs: 4.2.11 picomatch: 2.3.1 @@ -16472,32 +19336,38 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.16.5 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 jest-util: 29.7.0 string-length: 4.0.2 + jest-worker@26.6.2: + dependencies: + '@types/node': 20.16.5 + merge-stream: 2.0.0 + supports-color: 7.2.0 + jest-worker@27.5.1: dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.16.11): + jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0 + '@jest/core': 29.7.0(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)) '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.16.11) + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@20.16.5)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -16520,7 +19390,7 @@ snapshots: lex-parser: 0.1.4 nomnom: 1.5.2 - jiti@1.21.6: {} + jiti@1.21.0: {} jju@1.4.0: {} @@ -16563,7 +19433,7 @@ snapshots: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.13 + nwsapi: 2.2.12 parse5: 7.1.2 rrweb-cssom: 0.7.1 saxes: 6.0.0 @@ -16583,8 +19453,12 @@ snapshots: jsesc@0.5.0: {} + jsesc@2.5.2: {} + jsesc@3.0.2: {} + jsesc@3.1.0: {} + json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -16596,10 +19470,10 @@ snapshots: json-schema-to-typescript@13.1.2: dependencies: '@bcherny/json-schema-ref-parser': 10.0.5-fork - '@types/json-schema': 7.0.15 - '@types/lodash': 4.17.10 - '@types/prettier': 2.7.3 - cli-color: 2.0.4 + '@types/json-schema': 7.0.12 + '@types/lodash': 4.17.7 + '@types/prettier': 2.7.2 + cli-color: 2.0.3 get-stdin: 8.0.0 glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) @@ -16622,7 +19496,7 @@ snapshots: json5@2.2.3: {} - jsonc-parser@3.3.1: {} + jsonc-parser@3.2.0: {} jsonfile@4.0.0: optionalDependencies: @@ -16630,7 +19504,7 @@ snapshots: jsonfile@6.1.0: dependencies: - universalify: 2.0.1 + universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.11 @@ -16652,7 +19526,7 @@ snapshots: junk@4.0.1: {} - katex@0.16.11: + katex@0.16.9: dependencies: commander: 8.3.0 @@ -16690,12 +19564,12 @@ snapshots: chevrotain: 11.0.3 chevrotain-allstar: 0.3.1(chevrotain@11.0.3) vscode-languageserver: 9.0.1 - vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 launch-editor@2.9.1: dependencies: - picocolors: 1.1.0 + picocolors: 1.0.0 shell-quote: 1.8.1 layout-base@1.0.2: {} @@ -16715,11 +19589,11 @@ snapshots: lex-parser@0.1.4: {} - light-my-request@5.14.0: + light-my-request@5.13.0: dependencies: - cookie: 0.7.2 + cookie: 0.6.0 process-warning: 3.0.0 - set-cookie-parser: 2.7.0 + set-cookie-parser: 2.6.0 lilconfig@2.1.0: {} @@ -16735,10 +19609,10 @@ snapshots: dependencies: chalk: 5.3.0 commander: 12.1.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 execa: 8.0.1 lilconfig: 3.1.2 - listr2: 8.2.5 + listr2: 8.2.4 micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 @@ -16752,14 +19626,14 @@ snapshots: colorette: 2.0.20 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.4.1 + rfdc: 1.3.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 optionalDependencies: enquirer: 2.4.1 - listr2@8.2.5: + listr2@8.2.4: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -16774,8 +19648,8 @@ snapshots: local-pkg@0.5.0: dependencies: - mlly: 1.7.2 - pkg-types: 1.2.0 + mlly: 1.7.1 + pkg-types: 1.0.3 locate-path@3.0.0: dependencies: @@ -16836,12 +19710,16 @@ snapshots: loglevel-plugin-prefix@0.8.4: {} - loglevel@1.9.2: {} + loglevel@1.8.1: {} long@5.2.3: {} longest-streak@3.1.0: {} + loupe@2.3.6: + dependencies: + get-func-name: 2.0.2 + loupe@2.3.7: dependencies: get-func-name: 2.0.2 @@ -16859,9 +19737,13 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + lru-queue@0.1.0: dependencies: - es5-ext: 0.10.64 + es5-ext: 0.10.62 lunr@2.3.9: {} @@ -16873,10 +19755,18 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.5: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + magic-string@0.30.8: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + magicast@0.3.5: dependencies: - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 source-map-js: 1.2.1 make-dir@3.1.0: @@ -16885,7 +19775,10 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.3 + semver: 7.6.0 + + make-error@1.3.6: + optional: true makeerror@1.0.12: dependencies: @@ -16895,7 +19788,7 @@ snapshots: mark.js@8.11.1: {} - markdown-it@13.0.2: + markdown-it@13.0.1: dependencies: argparse: 2.0.1 entities: 3.0.1 @@ -16909,9 +19802,11 @@ snapshots: marked@4.3.0: {} + math-intrinsics@1.1.0: {} + mdast-builder@1.1.1: dependencies: - '@types/unist': 2.0.11 + '@types/unist': 2.0.7 mdast-util-find-and-replace@3.0.1: dependencies: @@ -16922,7 +19817,7 @@ snapshots: mdast-util-from-markdown@0.8.5: dependencies: - '@types/mdast': 3.0.15 + '@types/mdast': 3.0.12 mdast-util-to-string: 2.0.0 micromark: 2.11.4 parse-entities: 2.0.0 @@ -17059,27 +19954,53 @@ snapshots: memfs@3.5.3: dependencies: - fs-monkey: 1.0.6 + fs-monkey: 1.0.4 - memoizee@0.4.17: + memoizee@0.4.15: dependencies: - d: 1.0.2 - es5-ext: 0.10.64 + d: 1.0.1 + es5-ext: 0.10.62 es6-weak-map: 2.0.3 event-emitter: 0.3.5 is-promise: 2.2.2 lru-queue: 0.1.0 next-tick: 1.1.0 - timers-ext: 0.1.8 + timers-ext: 0.1.7 meow@12.1.1: {} + merge-descriptors@1.0.1: {} + merge-descriptors@1.0.3: {} merge-stream@2.0.0: {} merge2@1.4.1: {} + mermaid@11.2.0: + dependencies: + '@braintree/sanitize-url': 7.1.0 + '@iconify/utils': 2.1.32 + '@mermaid-js/parser': 0.3.0 + cytoscape: 3.30.2 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.30.2) + cytoscape-fcose: 2.2.0(cytoscape@3.30.2) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.10 + dayjs: 1.11.10 + dompurify: 3.2.1 + katex: 0.16.9 + khroma: 2.1.0 + lodash-es: 4.17.21 + marked: 13.0.3 + roughjs: 4.6.6(patch_hash=vxb6t6fqvzyhwhtjiliqr25jyq) + stylis: 4.3.4 + ts-dedent: 2.2.0 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + methods@1.1.2: {} micromark-core-commonmark@2.0.1: @@ -17260,15 +20181,15 @@ snapshots: micromark@2.11.4: dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) parse-entities: 2.0.0 transitivePeerDependencies: - supports-color micromark@4.0.0: dependencies: - '@types/debug': 4.1.12 - debug: 4.3.7(supports-color@8.1.1) + '@types/debug': 4.1.8 + debug: 4.3.4(supports-color@8.1.1) decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 @@ -17287,6 +20208,11 @@ snapshots: transitivePeerDependencies: - supports-color + micromatch@4.0.5: + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -17294,8 +20220,6 @@ snapshots: mime-db@1.52.0: {} - mime-db@1.53.0: {} - mime-types@2.1.35: dependencies: mime-db: 1.52.0 @@ -17324,6 +20248,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -17334,6 +20262,8 @@ snapshots: minisearch@6.3.0: {} + minisearch@7.1.0: {} + mitt@3.0.1: {} mkdirp@0.5.6: @@ -17342,7 +20272,7 @@ snapshots: mkdirp@1.0.4: {} - mlly@1.7.2: + mlly@1.7.1: dependencies: acorn: 8.12.1 pathe: 1.1.2 @@ -17373,7 +20303,7 @@ snapshots: multicast-dns@7.2.5: dependencies: - dns-packet: 5.6.1 + dns-packet: 5.6.0 thunky: 1.1.0 mz@2.7.0: @@ -17384,6 +20314,8 @@ snapshots: nanoid@3.3.7: {} + nanoid@3.3.8: {} + natural-compare@1.4.0: {} negotiator@0.6.3: {} @@ -17402,13 +20334,13 @@ snapshots: node-fetch-native@1.6.4: {} - node-fetch@2.6.7(encoding@0.1.13): + node-fetch@2.6.12(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 optionalDependencies: encoding: 0.1.13 - node-fetch@2.7.0(encoding@0.1.13): + node-fetch@2.6.7(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 optionalDependencies: @@ -17428,11 +20360,15 @@ snapshots: dependencies: process-on-spawn: 1.0.0 + node-releases@2.0.13: {} + node-releases@2.0.18: {} + node-releases@2.0.19: {} + node-source-walk@7.0.0: dependencies: - '@babel/parser': 7.25.7 + '@babel/parser': 7.26.7 nomnom@1.5.2: dependencies: @@ -17442,7 +20378,7 @@ snapshots: normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.8 + resolve: 1.22.4 semver: 5.7.2 validate-npm-package-license: 3.0.4 @@ -17458,11 +20394,11 @@ snapshots: dependencies: path-key: 3.1.1 - npm-run-path@5.3.0: + npm-run-path@5.1.0: dependencies: path-key: 4.0.0 - nwsapi@2.2.13: {} + nwsapi@2.2.12: {} nyc@15.1.0: dependencies: @@ -17476,13 +20412,13 @@ snapshots: foreground-child: 2.0.0 get-package-type: 0.1.0 glob: 7.2.3 - istanbul-lib-coverage: 3.2.2 + istanbul-lib-coverage: 3.2.0 istanbul-lib-hook: 3.0.0 istanbul-lib-instrument: 4.0.3 istanbul-lib-processinfo: 2.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.1.6 make-dir: 3.1.0 node-preload: 0.2.1 p-map: 3.0.0 @@ -17500,8 +20436,12 @@ snapshots: object-hash@3.0.0: {} + object-inspect@1.12.3: {} + object-inspect@1.13.2: {} + object-inspect@1.13.3: {} + object-is@1.1.6: dependencies: call-bind: 1.0.7 @@ -17509,16 +20449,25 @@ snapshots: object-keys@1.1.1: {} - object.assign@4.1.5: + object.assign@4.1.4: dependencies: call-bind: 1.0.7 - define-properties: 1.2.1 + define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + obuf@1.1.2: {} - ofetch@1.4.0: + ofetch@1.3.4: dependencies: destr: 2.0.3 node-fetch-native: 1.6.4 @@ -17526,7 +20475,7 @@ snapshots: omggif@1.0.10: {} - on-exit-leak-free@2.1.2: {} + on-exit-leak-free@2.1.0: {} on-finished@2.4.1: dependencies: @@ -17550,9 +20499,7 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-to-js@0.4.3: - dependencies: - regex: 4.3.3 + oniguruma-to-js@0.3.3: {} open@8.4.2: dependencies: @@ -17566,14 +20513,14 @@ snapshots: openapi-typescript-helpers@0.0.13: {} - optionator@0.9.4: + optionator@0.9.3: dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.5 os-tmpdir@1.0.2: {} @@ -17581,6 +20528,12 @@ snapshots: outdent@0.5.0: {} + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.2.7 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + p-cancelable@2.1.1: {} p-event@5.0.1: @@ -17609,11 +20562,11 @@ snapshots: p-limit@4.0.0: dependencies: - yocto-queue: 1.1.1 + yocto-queue: 1.0.0 p-limit@5.0.0: dependencies: - yocto-queue: 1.1.1 + yocto-queue: 1.0.0 p-locate@3.0.0: dependencies: @@ -17663,9 +20616,9 @@ snapshots: lodash.flattendeep: 4.4.0 release-zalgo: 1.0.0 - package-json-from-dist@1.0.1: {} + package-json-from-dist@1.0.0: {} - package-manager-detector@0.2.1: {} + package-manager-detector@0.2.0: {} pako@1.0.11: {} @@ -17693,7 +20646,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.25.7 + '@babel/code-frame': 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -17731,6 +20684,8 @@ snapshots: path-to-regexp@0.1.10: {} + path-to-regexp@0.1.7: {} + path-type@4.0.0: {} path-type@5.0.0: {} @@ -17754,8 +20709,12 @@ snapshots: performance-now@2.1.0: {} + picocolors@1.0.0: {} + picocolors@1.1.0: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} picomatch@4.0.2: {} @@ -17766,40 +20725,45 @@ snapshots: pify@4.0.1: {} + pino-abstract-transport@1.0.0: + dependencies: + readable-stream: 4.4.2 + split2: 4.2.0 + pino-abstract-transport@1.2.0: dependencies: - readable-stream: 4.5.2 + readable-stream: 4.4.2 split2: 4.2.0 pino-std-serializers@6.2.2: {} pino-std-serializers@7.0.0: {} - pino@8.21.0: + pino@8.15.0: dependencies: atomic-sleep: 1.0.0 - fast-redact: 3.5.0 - on-exit-leak-free: 2.1.2 - pino-abstract-transport: 1.2.0 + fast-redact: 3.3.0 + on-exit-leak-free: 2.1.0 + pino-abstract-transport: 1.0.0 pino-std-serializers: 6.2.2 - process-warning: 3.0.0 + process-warning: 2.2.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 - safe-stable-stringify: 2.5.0 - sonic-boom: 3.8.1 - thread-stream: 2.7.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 3.3.0 + thread-stream: 2.4.0 pino@9.4.0: dependencies: atomic-sleep: 1.0.0 - fast-redact: 3.5.0 - on-exit-leak-free: 2.1.2 + fast-redact: 3.3.0 + on-exit-leak-free: 2.1.0 pino-abstract-transport: 1.2.0 pino-std-serializers: 7.0.0 process-warning: 4.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 - safe-stable-stringify: 2.5.0 + safe-stable-stringify: 2.4.3 sonic-boom: 4.1.0 thread-stream: 3.1.0 @@ -17821,10 +20785,16 @@ snapshots: dependencies: find-up: 6.3.0 + pkg-types@1.0.3: + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.7.1 + pathe: 1.1.2 + pkg-types@1.2.0: dependencies: - confbox: 0.1.8 - mlly: 1.7.2 + confbox: 0.1.7 + mlly: 1.7.1 pathe: 1.1.2 plist@3.1.0: @@ -17850,51 +20820,64 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.47): + postcss-import@15.1.0(postcss@8.4.35): dependencies: - postcss: 8.4.47 + postcss: 8.4.35 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.8 + resolve: 1.22.4 - postcss-js@4.0.1(postcss@8.4.47): + postcss-js@4.0.1(postcss@8.4.35): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.47 + postcss: 8.4.35 - postcss-load-config@4.0.2(postcss@8.4.47): + postcss-load-config@4.0.1(postcss@8.4.35)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.6.3)): dependencies: - lilconfig: 3.1.2 - yaml: 2.5.1 + lilconfig: 2.1.0 + yaml: 2.4.0 optionalDependencies: - postcss: 8.4.47 + postcss: 8.4.35 + ts-node: 10.9.1(@types/node@20.16.5)(typescript@5.6.3) - postcss-nested@6.2.0(postcss@8.4.47): + postcss-nested@6.0.1(postcss@8.4.35): dependencies: - postcss: 8.4.47 - postcss-selector-parser: 6.1.2 + postcss: 8.4.35 + postcss-selector-parser: 6.0.13 - postcss-selector-parser@6.1.2: + postcss-selector-parser@6.0.13: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 postcss-value-parser@4.2.0: {} - postcss-values-parser@6.0.2(postcss@8.4.47): + postcss-values-parser@6.0.2(postcss@8.5.1): dependencies: color-name: 1.1.4 is-url-superb: 4.0.0 - postcss: 8.4.47 + postcss: 8.5.1 quote-unquote: 1.0.0 - postcss@8.4.47: + postcss@8.4.35: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + postcss@8.4.45: dependencies: nanoid: 3.3.7 picocolors: 1.1.0 source-map-js: 1.2.1 - preact@10.24.2: {} + postcss@8.5.1: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + preact@10.16.0: {} precinct@12.1.2: dependencies: @@ -17903,16 +20886,16 @@ snapshots: detective-amd: 6.0.0 detective-cjs: 6.0.0 detective-es6: 5.0.0 - detective-postcss: 7.0.0(postcss@8.4.47) + detective-postcss: 7.0.0(postcss@8.5.1) detective-sass: 6.0.0 detective-scss: 5.0.0 detective-stylus: 5.0.0 - detective-typescript: 13.0.0(typescript@5.6.2) - detective-vue2: 2.0.3(typescript@5.6.2) + detective-typescript: 13.0.0(typescript@5.6.3) + detective-vue2: 2.0.3(typescript@5.6.3) module-definition: 6.0.0 node-source-walk: 7.0.0 - postcss: 8.4.47 - typescript: 5.6.2 + postcss: 8.5.1 + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -17921,7 +20904,7 @@ snapshots: prettier-plugin-jsdoc@1.3.0(prettier@3.3.3): dependencies: binary-searching: 2.0.5 - comment-parser: 1.4.1 + comment-parser: 1.4.0 mdast-util-from-markdown: 2.0.1 prettier: 3.3.3 transitivePeerDependencies: @@ -17939,7 +20922,7 @@ snapshots: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.3.1 + react-is: 18.2.0 process-nextick-args@2.0.1: {} @@ -17947,6 +20930,8 @@ snapshots: dependencies: fromentries: 1.3.2 + process-warning@2.2.0: {} + process-warning@3.0.0: {} process-warning@4.0.0: {} @@ -17977,14 +20962,20 @@ snapshots: psl@1.9.0: {} - pump@3.0.2: + pump@3.0.0: dependencies: end-of-stream: 1.4.4 once: 1.4.0 + punycode@2.3.0: {} + punycode@2.3.1: {} - pure-rand@6.1.0: {} + pure-rand@6.0.2: {} + + qs@6.11.0: + dependencies: + side-channel: 1.0.4 qs@6.13.0: dependencies: @@ -18012,6 +21003,13 @@ snapshots: range-parser@1.2.1: {} + raw-body@2.5.1: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + raw-body@2.5.2: dependencies: bytes: 3.1.2 @@ -18019,7 +21017,7 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - react-is@18.3.1: {} + react-is@18.2.0: {} read-cache@1.0.0: dependencies: @@ -18033,7 +21031,7 @@ snapshots: read-pkg@5.2.0: dependencies: - '@types/normalize-package-data': 2.4.4 + '@types/normalize-package-data': 2.4.1 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 @@ -18061,7 +21059,7 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readable-stream@4.5.2: + readable-stream@4.4.2: dependencies: abort-controller: 3.0.0 buffer: 6.0.3 @@ -18077,11 +21075,22 @@ snapshots: rechoir@0.6.2: dependencies: - resolve: 1.22.8 + resolve: 1.22.4 rechoir@0.7.1: dependencies: - resolve: 1.22.8 + resolve: 1.22.4 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 regenerate-unicode-properties@10.2.0: dependencies: @@ -18089,13 +21098,13 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.14.1: {} + regenerator-runtime@0.14.0: {} regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.7 - regex@4.3.3: {} + regex@4.3.2: {} regexp-tree@0.1.27: {} @@ -18106,14 +21115,23 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 - regexpu-core@6.1.1: + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexpu-core@6.2.0: dependencies: regenerate: 1.4.2 regenerate-unicode-properties: 10.2.0 regjsgen: 0.8.0 - regjsparser: 0.11.1 + regjsparser: 0.12.0 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.0 + unicode-match-property-value-ecmascript: 2.1.0 regjsgen@0.8.0: {} @@ -18121,7 +21139,7 @@ snapshots: dependencies: jsesc: 0.5.0 - regjsparser@0.11.1: + regjsparser@0.12.0: dependencies: jsesc: 3.0.2 @@ -18177,11 +21195,11 @@ snapshots: request-progress@3.0.0: dependencies: - throttleit: 1.0.1 + throttleit: 1.0.0 require-and-forget@1.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -18216,9 +21234,21 @@ snapshots: resolve.exports@2.0.2: {} + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@1.22.4: + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + resolve@1.22.8: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -18242,6 +21272,8 @@ snapshots: reusify@1.0.4: {} + rfdc@1.3.1: {} + rfdc@1.4.1: {} rimraf@2.7.1: @@ -18258,39 +21290,76 @@ snapshots: robust-predicates@3.0.2: {} - rollup-plugin-visualizer@5.12.0(rollup@4.24.0): + rollup-plugin-terser@7.0.2(rollup@2.79.2): + dependencies: + '@babel/code-frame': 7.26.2 + jest-worker: 26.6.2 + rollup: 2.79.2 + serialize-javascript: 4.0.0 + terser: 5.37.0 + + rollup-plugin-visualizer@5.12.0(rollup@4.32.0): dependencies: open: 8.4.2 picomatch: 2.3.1 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.24.0 + rollup: 4.32.0 + + rollup@2.79.1: + optionalDependencies: + fsevents: 2.3.3 rollup@2.79.2: optionalDependencies: fsevents: 2.3.3 - rollup@4.24.0: + rollup@4.21.3: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.21.3 + '@rollup/rollup-android-arm64': 4.21.3 + '@rollup/rollup-darwin-arm64': 4.21.3 + '@rollup/rollup-darwin-x64': 4.21.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.3 + '@rollup/rollup-linux-arm-musleabihf': 4.21.3 + '@rollup/rollup-linux-arm64-gnu': 4.21.3 + '@rollup/rollup-linux-arm64-musl': 4.21.3 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.3 + '@rollup/rollup-linux-riscv64-gnu': 4.21.3 + '@rollup/rollup-linux-s390x-gnu': 4.21.3 + '@rollup/rollup-linux-x64-gnu': 4.21.3 + '@rollup/rollup-linux-x64-musl': 4.21.3 + '@rollup/rollup-win32-arm64-msvc': 4.21.3 + '@rollup/rollup-win32-ia32-msvc': 4.21.3 + '@rollup/rollup-win32-x64-msvc': 4.21.3 + fsevents: 2.3.3 + + rollup@4.32.0: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.24.0 - '@rollup/rollup-android-arm64': 4.24.0 - '@rollup/rollup-darwin-arm64': 4.24.0 - '@rollup/rollup-darwin-x64': 4.24.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 - '@rollup/rollup-linux-arm-musleabihf': 4.24.0 - '@rollup/rollup-linux-arm64-gnu': 4.24.0 - '@rollup/rollup-linux-arm64-musl': 4.24.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 - '@rollup/rollup-linux-riscv64-gnu': 4.24.0 - '@rollup/rollup-linux-s390x-gnu': 4.24.0 - '@rollup/rollup-linux-x64-gnu': 4.24.0 - '@rollup/rollup-linux-x64-musl': 4.24.0 - '@rollup/rollup-win32-arm64-msvc': 4.24.0 - '@rollup/rollup-win32-ia32-msvc': 4.24.0 - '@rollup/rollup-win32-x64-msvc': 4.24.0 + '@rollup/rollup-android-arm-eabi': 4.32.0 + '@rollup/rollup-android-arm64': 4.32.0 + '@rollup/rollup-darwin-arm64': 4.32.0 + '@rollup/rollup-darwin-x64': 4.32.0 + '@rollup/rollup-freebsd-arm64': 4.32.0 + '@rollup/rollup-freebsd-x64': 4.32.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.32.0 + '@rollup/rollup-linux-arm-musleabihf': 4.32.0 + '@rollup/rollup-linux-arm64-gnu': 4.32.0 + '@rollup/rollup-linux-arm64-musl': 4.32.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.32.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.32.0 + '@rollup/rollup-linux-riscv64-gnu': 4.32.0 + '@rollup/rollup-linux-s390x-gnu': 4.32.0 + '@rollup/rollup-linux-x64-gnu': 4.32.0 + '@rollup/rollup-linux-x64-musl': 4.32.0 + '@rollup/rollup-win32-arm64-msvc': 4.32.0 + '@rollup/rollup-win32-ia32-msvc': 4.32.0 + '@rollup/rollup-win32-x64-msvc': 4.32.0 fsevents: 2.3.3 roughjs@4.6.6(patch_hash=vxb6t6fqvzyhwhtjiliqr25jyq): @@ -18310,30 +21379,36 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.7.0 + tslib: 2.6.2 - safe-array-concat@1.1.2: + safe-array-concat@1.1.3: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + has-symbols: 1.1.0 isarray: 2.0.5 safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} - safe-regex-test@1.0.3: + safe-push-apply@1.0.0: dependencies: - call-bind: 1.0.7 es-errors: 1.3.0 - is-regex: 1.1.4 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-regex: 1.2.1 safe-regex2@3.1.0: dependencies: ret: 0.4.3 - safe-stable-stringify@2.5.0: {} + safe-stable-stringify@2.4.3: {} safer-buffer@2.1.2: {} @@ -18347,16 +21422,23 @@ snapshots: schema-utils@3.3.0: dependencies: - '@types/json-schema': 7.0.15 + '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) schema-utils@4.2.0: + dependencies: + '@types/json-schema': 7.0.12 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.12.0) + + schema-utils@4.3.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - ajv-keywords: 5.1.0(ajv@8.17.1) + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.12.0) search-insights@2.17.2: {} @@ -18364,19 +21446,40 @@ snapshots: select-hose@2.0.0: {} - selfsigned@2.4.1: + selfsigned@2.1.1: dependencies: - '@types/node-forge': 1.3.11 node-forge: 1.3.1 semver@5.7.2: {} semver@6.3.1: {} + semver@7.6.0: + dependencies: + lru-cache: 6.0.0 + semver@7.6.2: {} semver@7.6.3: {} + send@0.18.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + send@0.19.0: dependencies: debug: 2.6.9 @@ -18395,7 +21498,11 @@ snapshots: transitivePeerDependencies: - supports-color - serialize-javascript@6.0.2: + serialize-javascript@4.0.0: + dependencies: + randombytes: 2.1.0 + + serialize-javascript@6.0.1: dependencies: randombytes: 2.1.0 @@ -18411,6 +21518,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@1.15.0: + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 @@ -18422,7 +21538,7 @@ snapshots: set-blocking@2.0.0: {} - set-cookie-parser@2.7.0: {} + set-cookie-parser@2.6.0: {} set-function-length@1.2.2: dependencies: @@ -18440,6 +21556,12 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + setprototypeof@1.1.0: {} setprototypeof@1.2.0: {} @@ -18497,19 +21619,43 @@ snapshots: shiki@0.14.7: dependencies: ansi-sequence-parser: 1.1.1 - jsonc-parser: 3.3.1 + jsonc-parser: 3.2.0 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 - shiki@1.22.0: + shiki@1.17.0: dependencies: - '@shikijs/core': 1.22.0 - '@shikijs/engine-javascript': 1.22.0 - '@shikijs/engine-oniguruma': 1.22.0 - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/core': 1.17.0 + '@shikijs/types': 1.17.0 + '@shikijs/vscode-textmate': 9.2.2 '@types/hast': 3.0.4 + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 + + side-channel@1.0.4: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + side-channel@1.0.6: dependencies: call-bind: 1.0.7 @@ -18517,6 +21663,14 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.2 + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -18531,7 +21685,7 @@ snapshots: sirv@2.0.4: dependencies: - '@polka/url': 1.0.0-next.28 + '@polka/url': 1.0.0-next.25 mrmime: 2.0.0 totalist: 3.0.1 @@ -18567,15 +21721,13 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 - smob@1.5.0: {} - sockjs@0.3.24: dependencies: faye-websocket: 0.11.4 uuid: 8.3.2 websocket-driver: 0.7.4 - sonic-boom@3.8.1: + sonic-boom@3.3.0: dependencies: atomic-sleep: 1.0.0 @@ -18585,6 +21737,8 @@ snapshots: source-map-js@1.0.1: {} + source-map-js@1.0.2: {} + source-map-js@1.2.1: {} source-map-support@0.5.13: @@ -18633,25 +21787,25 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.20 + spdx-license-ids: 3.0.13 - spdx-exceptions@2.5.0: {} + spdx-exceptions@2.3.0: {} spdx-expression-parse@3.0.1: dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.20 + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.13 spdx-expression-parse@4.0.0: dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.20 + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.13 - spdx-license-ids@3.0.20: {} + spdx-license-ids@3.0.13: {} spdy-transport@3.0.0: dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -18662,7 +21816,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -18675,7 +21829,7 @@ snapshots: spec-change@1.11.11: dependencies: arg: 5.0.2 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 deep-equal: 2.2.3 dependency-tree: 11.0.1 lazy-ass: 2.0.3 @@ -18711,16 +21865,16 @@ snapshots: stackback@0.0.2: {} - start-server-and-test@2.0.8: + start-server-and-test@2.0.7: dependencies: arg: 5.0.2 bluebird: 3.7.2 check-more-types: 2.24.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.7 execa: 5.1.1 lazy-ass: 1.6.0 ps-tree: 1.2.0 - wait-on: 8.0.1(debug@4.3.7) + wait-on: 8.0.0(debug@4.3.7) transitivePeerDependencies: - supports-color @@ -18732,7 +21886,7 @@ snapshots: stop-iteration-iterator@1.0.0: dependencies: - internal-slot: 1.0.7 + internal-slot: 1.0.5 stream-combiner@0.0.4: dependencies: @@ -18763,39 +21917,44 @@ snapshots: get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 - string.prototype.matchall@4.0.11: + string.prototype.matchall@4.0.12: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.3 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 set-function-name: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 - string.prototype.trim@1.2.9: + string.prototype.trim@1.2.10: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 - string.prototype.trimend@1.0.8: + string.prototype.trimend@1.0.9: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string_decoder@1.1.1: dependencies: @@ -18826,7 +21985,7 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.0.1 strip-bom@3.0.0: {} @@ -18856,11 +22015,11 @@ snapshots: dependencies: commander: 12.1.0 - sucrase@3.35.0: + sucrase@3.34.0: dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.3 commander: 4.1.1 - glob: 10.4.5 + glob: 7.1.6 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -18888,14 +22047,14 @@ snapshots: symbol-tree@3.2.4: {} - synckit@0.9.2: + synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.7.0 + tslib: 2.6.2 tabbable@6.2.0: {} - tailwindcss@3.4.13: + tailwindcss@3.3.3(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.6.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -18905,20 +22064,20 @@ snapshots: fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.6 + jiti: 1.21.0 lilconfig: 2.1.0 - micromatch: 4.0.8 + micromatch: 4.0.5 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.1.0 - postcss: 8.4.47 - postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47) - postcss-nested: 6.2.0(postcss@8.4.47) - postcss-selector-parser: 6.1.2 - resolve: 1.22.8 - sucrase: 3.35.0 + picocolors: 1.0.0 + postcss: 8.4.35 + postcss-import: 15.1.0(postcss@8.4.35) + postcss-js: 4.0.1(postcss@8.4.35) + postcss-load-config: 4.0.1(postcss@8.4.35)(ts-node@10.9.1(@types/node@20.16.5)(typescript@5.6.3)) + postcss-nested: 6.0.1(postcss@8.4.35) + postcss-selector-parser: 6.0.13 + resolve: 1.22.4 + sucrase: 3.34.0 transitivePeerDependencies: - ts-node @@ -18926,7 +22085,7 @@ snapshots: teen_process@1.16.0: dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.22.10 bluebird: 3.7.2 lodash: 4.17.21 shell-quote: 1.8.1 @@ -18949,32 +22108,39 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.10(esbuild@0.21.5)(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0)): + terser-webpack-plugin@5.3.10(esbuild@0.21.5)(webpack@5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.34.1 - webpack: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) + serialize-javascript: 6.0.1 + terser: 5.32.0 + webpack: 5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0) optionalDependencies: esbuild: 0.21.5 - terser-webpack-plugin@5.3.10(esbuild@0.21.5)(webpack@5.95.0(esbuild@0.21.5)): + terser-webpack-plugin@5.3.10(esbuild@0.21.5)(webpack@5.94.0(esbuild@0.21.5)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.34.1 - webpack: 5.95.0(esbuild@0.21.5) + serialize-javascript: 6.0.1 + terser: 5.32.0 + webpack: 5.94.0(esbuild@0.21.5) optionalDependencies: esbuild: 0.21.5 - terser@5.34.1: + terser@5.32.0: dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.12.1 + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + terser@5.37.0: + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -18994,7 +22160,7 @@ snapshots: dependencies: any-promise: 1.3.0 - thread-stream@2.7.0: + thread-stream@2.4.0: dependencies: real-require: 0.2.0 @@ -19004,15 +22170,15 @@ snapshots: throat@6.0.2: {} - throttleit@1.0.1: {} + throttleit@1.0.0: {} through@2.3.8: {} thunky@1.1.0: {} - timers-ext@0.1.8: + timers-ext@0.1.7: dependencies: - es5-ext: 0.10.64 + es5-ext: 0.10.62 next-tick: 1.1.0 tinybench@2.9.0: {} @@ -19048,10 +22214,17 @@ snapshots: totalist@3.0.1: {} + tough-cookie@4.1.3: + dependencies: + psl: 1.9.0 + punycode: 2.3.0 + universalify: 0.2.0 + url-parse: 1.5.10 + tough-cookie@4.1.4: dependencies: psl: 1.9.0 - punycode: 2.3.1 + punycode: 2.3.0 universalify: 0.2.0 url-parse: 1.5.10 @@ -19071,20 +22244,58 @@ snapshots: trim-lines@3.0.1: {} - trough@2.2.0: {} + trough@2.1.0: {} ts-api-utils@1.3.0(typescript@5.4.5): dependencies: typescript: 5.4.5 - ts-api-utils@1.3.0(typescript@5.6.2): + ts-api-utils@1.3.0(typescript@5.6.3): dependencies: - typescript: 5.6.2 + typescript: 5.6.3 ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} + ts-node@10.9.1(@types/node@20.16.5)(typescript@5.4.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.16.5 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + + ts-node@10.9.1(@types/node@20.16.5)(typescript@5.6.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.16.5 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.6.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + ts-toolbelt@6.15.5: {} tsconfig-paths@4.2.0: @@ -19093,7 +22304,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.7.0: {} + tslib@2.6.2: {} tsx@4.19.1: dependencies: @@ -19128,6 +22339,8 @@ snapshots: type-fest@0.8.1: {} + type-fest@1.4.0: {} + type-fest@4.26.1: {} type-is@1.6.18: @@ -19135,39 +22348,42 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - type@2.7.3: {} + type@1.2.0: {} - typed-array-buffer@1.0.2: + type@2.7.2: {} + + typed-array-buffer@1.0.3: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-typed-array: 1.1.13 + is-typed-array: 1.1.15 - typed-array-byte-length@1.0.1: + typed-array-byte-length@1.0.3: dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.2: + typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 - typed-array-length@1.0.6: + typed-array-length@1.0.7: dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + is-typed-array: 1.1.15 possible-typed-array-names: 1.0.0 + reflect.getprototypeof: 1.0.10 typedarray-to-buffer@3.1.5: dependencies: @@ -19182,15 +22398,15 @@ snapshots: dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 9.0.5 + minimatch: 9.0.3 shiki: 0.14.7 typescript: 5.4.5 - typescript-eslint@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5): + typescript-eslint@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5): dependencies: - '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5))(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/parser': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: @@ -19199,45 +22415,43 @@ snapshots: typescript@5.4.5: {} - typescript@5.6.2: {} + typescript@5.6.3: {} uc.micro@1.0.6: {} ufo@1.5.4: {} - uglify-js@3.19.3: {} + uglify-js@3.17.4: {} - unbox-primitive@1.0.2: + unbox-primitive@1.1.0: dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 + call-bound: 1.0.3 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 unconfig@0.3.13: dependencies: '@antfu/utils': 0.7.10 defu: 6.1.4 - jiti: 1.21.6 + jiti: 1.21.0 underscore@1.1.7: {} - undici-types@5.26.5: {} - undici-types@6.19.8: {} undici@5.28.4: dependencies: '@fastify/busboy': 2.1.1 - unicode-canonical-property-names-ecmascript@2.0.1: {} + unicode-canonical-property-names-ecmascript@2.0.0: {} unicode-match-property-ecmascript@2.0.0: dependencies: - unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-canonical-property-names-ecmascript: 2.0.0 unicode-property-aliases-ecmascript: 2.1.0 - unicode-match-property-value-ecmascript@2.2.0: {} + unicode-match-property-value-ecmascript@2.1.0: {} unicode-property-aliases-ecmascript@2.1.0: {} @@ -19250,7 +22464,7 @@ snapshots: devlop: 1.1.0 extend: 3.0.2 is-plain-obj: 4.1.0 - trough: 2.2.0 + trough: 2.1.0 vfile: 6.0.3 unified@11.0.5: @@ -19260,13 +22474,17 @@ snapshots: devlop: 1.1.0 extend: 3.0.2 is-plain-obj: 4.1.0 - trough: 2.2.0 + trough: 2.1.0 vfile: 6.0.3 unique-string@2.0.0: dependencies: crypto-random-string: 2.0.0 + unique-string@3.0.0: + dependencies: + crypto-random-string: 4.0.0 + unist-util-flatmap@1.0.0: {} unist-util-inspect@8.0.0: @@ -19283,7 +22501,7 @@ snapshots: unist-util-stringify-position@2.0.3: dependencies: - '@types/unist': 2.0.11 + '@types/unist': 2.0.7 unist-util-stringify-position@4.0.0: dependencies: @@ -19304,15 +22522,15 @@ snapshots: universalify@0.2.0: {} - universalify@2.0.1: {} + universalify@2.0.0: {} - unocss@0.59.4(postcss@8.4.47)(rollup@2.79.2)(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1)): + unocss@0.59.4(postcss@8.5.1)(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0)): dependencies: - '@unocss/astro': 0.59.4(rollup@2.79.2)(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1)) + '@unocss/astro': 0.59.4(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0)) '@unocss/cli': 0.59.4(rollup@2.79.2) '@unocss/core': 0.59.4 '@unocss/extractor-arbitrary-variants': 0.59.4 - '@unocss/postcss': 0.59.4(postcss@8.4.47) + '@unocss/postcss': 0.59.4(postcss@8.5.1) '@unocss/preset-attributify': 0.59.4 '@unocss/preset-icons': 0.59.4 '@unocss/preset-mini': 0.59.4 @@ -19327,9 +22545,9 @@ snapshots: '@unocss/transformer-compile-class': 0.59.4 '@unocss/transformer-directives': 0.59.4 '@unocss/transformer-variant-group': 0.59.4 - '@unocss/vite': 0.59.4(rollup@2.79.2)(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1)) + '@unocss/vite': 0.59.4(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0)) optionalDependencies: - vite: 5.4.8(@types/node@20.16.11)(terser@5.34.1) + vite: 5.4.12(@types/node@20.16.5)(terser@5.37.0) transitivePeerDependencies: - postcss - rollup @@ -19337,46 +22555,57 @@ snapshots: unpipe@1.0.0: {} - unplugin-vue-components@0.26.0(@babel/parser@7.25.7)(rollup@2.79.2)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3): + unplugin-vue-components@0.26.0(@babel/parser@7.26.7)(rollup@2.79.2)(vue@3.4.21(typescript@5.6.3)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.2(rollup@2.79.2) + '@rollup/pluginutils': 5.1.0(rollup@2.79.2) chokidar: 3.6.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.3.2 local-pkg: 0.4.3 - magic-string: 0.30.11 - minimatch: 9.0.5 - resolve: 1.22.8 - unplugin: 1.14.1(webpack-sources@3.2.3) - vue: 3.5.11(typescript@5.6.2) + magic-string: 0.30.5 + minimatch: 9.0.3 + resolve: 1.22.4 + unplugin: 1.4.0 + vue: 3.4.21(typescript@5.6.3) optionalDependencies: - '@babel/parser': 7.25.7 + '@babel/parser': 7.26.7 transitivePeerDependencies: - rollup - supports-color - - webpack-sources - unplugin@1.14.1(webpack-sources@3.2.3): + unplugin@1.4.0: dependencies: - acorn: 8.12.1 - webpack-virtual-modules: 0.6.2 - optionalDependencies: + acorn: 8.10.0 + chokidar: 3.6.0 webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 untildify@4.0.0: {} upath@1.2.0: {} - update-browserslist-db@1.1.1(browserslist@4.24.0): + update-browserslist-db@1.0.11(browserslist@4.21.10): dependencies: - browserslist: 4.24.0 - escalade: 3.2.0 + browserslist: 4.21.10 + escalade: 3.1.1 picocolors: 1.1.0 + update-browserslist-db@1.1.0(browserslist@4.23.3): + dependencies: + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-browserslist-db@1.1.2(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: - punycode: 2.3.1 + punycode: 2.3.0 url-parse@1.5.10: dependencies: @@ -19391,11 +22620,14 @@ snapshots: uuid@9.0.1: {} - v8-to-istanbul@9.3.0: + v8-compile-cache-lib@3.0.1: + optional: true + + v8-to-istanbul@9.1.0: dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 + '@jridgewell/trace-mapping': 0.3.19 + '@types/istanbul-lib-coverage': 2.0.4 + convert-source-map: 1.9.0 validate-npm-package-license@3.0.4: dependencies: @@ -19420,13 +22652,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@1.6.0(@types/node@20.16.11)(terser@5.34.1): + vite-node@1.6.0(@types/node@20.16.5)(terser@5.37.0): dependencies: cac: 6.7.14 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.1.0 - vite: 5.4.8(@types/node@20.16.11)(terser@5.34.1) + vite: 5.4.12(@types/node@20.16.5)(terser@5.37.0) transitivePeerDependencies: - '@types/node' - less @@ -19438,68 +22670,88 @@ snapshots: - supports-color - terser - vite-plugin-istanbul@6.0.2(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1)): + vite-plugin-istanbul@6.0.2(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0)): dependencies: '@istanbuljs/load-nyc-config': 1.1.0 - espree: 10.2.0 + espree: 10.1.0 istanbul-lib-instrument: 6.0.3 - picocolors: 1.1.0 + picocolors: 1.0.0 source-map: 0.7.4 test-exclude: 6.0.0 - vite: 5.4.8(@types/node@20.16.11)(terser@5.34.1) + vite: 5.4.12(@types/node@20.16.5)(terser@5.37.0) transitivePeerDependencies: - supports-color - vite-plugin-pwa@0.19.8(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): + vite-plugin-pwa@0.19.8(vite@5.4.12(@types/node@20.16.5)(terser@5.37.0))(workbox-build@7.0.0(@types/babel__core@7.20.1))(workbox-window@7.0.0): dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 5.4.8(@types/node@20.16.11)(terser@5.34.1) - workbox-build: 7.1.1(@types/babel__core@7.20.5) - workbox-window: 7.1.0 + vite: 5.4.12(@types/node@20.16.5)(terser@5.37.0) + workbox-build: 7.0.0(@types/babel__core@7.20.1) + workbox-window: 7.0.0 transitivePeerDependencies: - supports-color - vite@5.4.8(@types/node@20.16.11)(terser@5.34.1): + vite@5.4.12(@types/node@20.16.5)(terser@5.37.0): dependencies: esbuild: 0.21.5 - postcss: 8.4.47 - rollup: 4.24.0 + postcss: 8.5.1 + rollup: 4.32.0 optionalDependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 fsevents: 2.3.3 - terser: 5.34.1 + terser: 5.37.0 - vitepress-plugin-search@1.0.4-alpha.22(flexsearch@0.7.43)(vitepress@1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.4.47)(search-insights@2.17.2)(terser@5.34.1)(typescript@5.4.5))(vue@3.5.11(typescript@5.4.5)): + vite@5.4.2(@types/node@20.16.5)(terser@5.37.0): dependencies: - '@types/flexsearch': 0.7.6 + esbuild: 0.21.5 + postcss: 8.4.45 + rollup: 4.21.3 + optionalDependencies: + '@types/node': 20.16.5 + fsevents: 2.3.3 + terser: 5.37.0 + + vite@5.4.8(@types/node@20.16.5)(terser@5.37.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.45 + rollup: 4.21.3 + optionalDependencies: + '@types/node': 20.16.5 + fsevents: 2.3.3 + terser: 5.37.0 + + vitepress-plugin-search@1.0.4-alpha.22(flexsearch@0.7.31)(vitepress@1.3.4(@algolia/client-search@4.19.1)(@types/node@20.16.5)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.4.5))(vue@3.5.4(typescript@5.4.5)): + dependencies: + '@types/flexsearch': 0.7.3 '@types/markdown-it': 12.2.3 - flexsearch: 0.7.43 + flexsearch: 0.7.31 glob-to-regexp: 0.4.1 - markdown-it: 13.0.2 - vitepress: 1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.4.47)(search-insights@2.17.2)(terser@5.34.1)(typescript@5.4.5) - vue: 3.5.11(typescript@5.4.5) + markdown-it: 13.0.1 + vitepress: 1.3.4(@algolia/client-search@4.19.1)(@types/node@20.16.5)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.4.5) + vue: 3.5.4(typescript@5.4.5) - vitepress@1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.4.47)(search-insights@2.17.2)(terser@5.34.1)(typescript@5.4.5): + vitepress@1.1.4(@algolia/client-search@4.19.1)(@types/node@20.16.5)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.6.3): dependencies: - '@docsearch/css': 3.6.2 - '@docsearch/js': 3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2) - '@shikijs/core': 1.22.0 - '@shikijs/transformers': 1.22.0 + '@docsearch/css': 3.6.1 + '@docsearch/js': 3.6.1(@algolia/client-search@4.19.1)(search-insights@2.17.2) + '@shikijs/core': 1.17.0 + '@shikijs/transformers': 1.17.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.1.4(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))(vue@3.5.11(typescript@5.4.5)) - '@vue/devtools-api': 7.4.6 - '@vueuse/core': 10.11.1(vue@3.5.11(typescript@5.4.5)) - '@vueuse/integrations': 10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.11(typescript@5.4.5)) - focus-trap: 7.6.0 + '@vitejs/plugin-vue': 5.1.4(vite@5.4.8(@types/node@20.16.5)(terser@5.37.0))(vue@3.5.4(typescript@5.6.3)) + '@vue/devtools-api': 7.4.5 + '@vueuse/core': 10.11.1(vue@3.5.4(typescript@5.6.3)) + '@vueuse/integrations': 10.11.1(axios@1.7.7)(focus-trap@7.5.4)(vue@3.5.4(typescript@5.6.3)) + focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 6.3.0 - shiki: 1.22.0 - vite: 5.4.8(@types/node@20.16.11)(terser@5.34.1) - vue: 3.5.11(typescript@5.4.5) + shiki: 1.17.0 + vite: 5.4.8(@types/node@20.16.5)(terser@5.37.0) + vue: 3.5.4(typescript@5.6.3) optionalDependencies: - postcss: 8.4.47 + postcss: 8.5.1 transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -19528,25 +22780,26 @@ snapshots: - typescript - universal-cookie - vitepress@1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.4.47)(search-insights@2.17.2)(terser@5.34.1)(typescript@5.6.2): + vitepress@1.3.4(@algolia/client-search@4.19.1)(@types/node@20.16.5)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.4.5): dependencies: - '@docsearch/css': 3.6.2 - '@docsearch/js': 3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2) - '@shikijs/core': 1.22.0 - '@shikijs/transformers': 1.22.0 + '@docsearch/css': 3.6.1 + '@docsearch/js': 3.6.1(@algolia/client-search@4.19.1)(search-insights@2.17.2) + '@shikijs/core': 1.17.0 + '@shikijs/transformers': 1.17.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.1.4(vite@5.4.8(@types/node@20.16.11)(terser@5.34.1))(vue@3.5.11(typescript@5.6.2)) - '@vue/devtools-api': 7.4.6 - '@vueuse/core': 10.11.1(vue@3.5.11(typescript@5.6.2)) - '@vueuse/integrations': 10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.11(typescript@5.6.2)) - focus-trap: 7.6.0 + '@vitejs/plugin-vue': 5.1.4(vite@5.4.2(@types/node@20.16.5)(terser@5.37.0))(vue@3.5.4(typescript@5.4.5)) + '@vue/devtools-api': 7.4.5 + '@vue/shared': 3.5.4 + '@vueuse/core': 11.1.0(vue@3.5.4(typescript@5.4.5)) + '@vueuse/integrations': 11.1.0(axios@1.7.7)(focus-trap@7.5.4)(vue@3.5.4(typescript@5.4.5)) + focus-trap: 7.5.4 mark.js: 8.11.1 - minisearch: 6.3.0 - shiki: 1.22.0 - vite: 5.4.8(@types/node@20.16.11)(terser@5.34.1) - vue: 3.5.11(typescript@5.6.2) + minisearch: 7.1.0 + shiki: 1.17.0 + vite: 5.4.2(@types/node@20.16.5)(terser@5.37.0) + vue: 3.5.4(typescript@5.4.5) optionalDependencies: - postcss: 8.4.47 + postcss: 8.5.1 transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -19575,7 +22828,7 @@ snapshots: - typescript - universal-cookie - vitest@1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.34.1): + vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -19584,21 +22837,21 @@ snapshots: '@vitest/utils': 1.6.0 acorn-walk: 8.3.4 chai: 4.5.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) execa: 8.0.1 local-pkg: 0.5.0 - magic-string: 0.30.11 + magic-string: 0.30.8 pathe: 1.1.2 - picocolors: 1.1.0 + picocolors: 1.0.0 std-env: 3.7.0 strip-literal: 2.1.0 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.4.8(@types/node@20.16.11)(terser@5.34.1) - vite-node: 1.6.0(@types/node@20.16.11)(terser@5.34.1) - why-is-node-running: 2.3.0 + vite: 5.4.12(@types/node@20.16.5)(terser@5.37.0) + vite-node: 1.6.0(@types/node@20.16.5)(terser@5.37.0) + why-is-node-running: 2.2.2 optionalDependencies: - '@types/node': 20.16.11 + '@types/node': 20.16.5 '@vitest/ui': 1.6.0(vitest@1.6.0) jsdom: 24.1.3 transitivePeerDependencies: @@ -19613,9 +22866,9 @@ snapshots: vscode-json-languageservice@4.2.1: dependencies: - jsonc-parser: 3.3.1 - vscode-languageserver-textdocument: 1.0.12 - vscode-languageserver-types: 3.17.5 + jsonc-parser: 3.2.0 + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.17.3 vscode-nls: 5.2.0 vscode-uri: 3.0.8 @@ -19626,8 +22879,12 @@ snapshots: vscode-jsonrpc: 8.2.0 vscode-languageserver-types: 3.17.5 + vscode-languageserver-textdocument@1.0.11: {} + vscode-languageserver-textdocument@1.0.12: {} + vscode-languageserver-types@3.17.3: {} + vscode-languageserver-types@3.17.5: {} vscode-languageserver@9.0.1: @@ -19642,44 +22899,62 @@ snapshots: vscode-uri@3.0.8: {} - vue-demi@0.14.10(vue@3.5.11(typescript@5.4.5)): + vue-demi@0.14.10(vue@3.4.21(typescript@5.6.3)): dependencies: - vue: 3.5.11(typescript@5.4.5) + vue: 3.4.21(typescript@5.6.3) - vue-demi@0.14.10(vue@3.5.11(typescript@5.6.2)): + vue-demi@0.14.10(vue@3.5.4(typescript@5.4.5)): dependencies: - vue: 3.5.11(typescript@5.6.2) + vue: 3.5.4(typescript@5.4.5) - vue@3.5.11(typescript@5.4.5): + vue-demi@0.14.10(vue@3.5.4(typescript@5.6.3)): dependencies: - '@vue/compiler-dom': 3.5.11 - '@vue/compiler-sfc': 3.5.11 - '@vue/runtime-dom': 3.5.11 - '@vue/server-renderer': 3.5.11(vue@3.5.11(typescript@5.4.5)) - '@vue/shared': 3.5.11 + vue: 3.5.4(typescript@5.6.3) + + vue-demi@0.14.6(vue@3.4.21(typescript@5.6.3)): + dependencies: + vue: 3.4.21(typescript@5.6.3) + + vue@3.4.21(typescript@5.6.3): + dependencies: + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-sfc': 3.4.21 + '@vue/runtime-dom': 3.4.21 + '@vue/server-renderer': 3.4.21(vue@3.4.21(typescript@5.6.3)) + '@vue/shared': 3.4.21 + optionalDependencies: + typescript: 5.6.3 + + vue@3.5.4(typescript@5.4.5): + dependencies: + '@vue/compiler-dom': 3.5.4 + '@vue/compiler-sfc': 3.5.4 + '@vue/runtime-dom': 3.5.4 + '@vue/server-renderer': 3.5.4(vue@3.5.4(typescript@5.4.5)) + '@vue/shared': 3.5.4 optionalDependencies: typescript: 5.4.5 - vue@3.5.11(typescript@5.6.2): + vue@3.5.4(typescript@5.6.3): dependencies: - '@vue/compiler-dom': 3.5.11 - '@vue/compiler-sfc': 3.5.11 - '@vue/runtime-dom': 3.5.11 - '@vue/server-renderer': 3.5.11(vue@3.5.11(typescript@5.6.2)) - '@vue/shared': 3.5.11 + '@vue/compiler-dom': 3.5.4 + '@vue/compiler-sfc': 3.5.4 + '@vue/runtime-dom': 3.5.4 + '@vue/server-renderer': 3.5.4(vue@3.5.4(typescript@5.6.3)) + '@vue/shared': 3.5.4 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 - vuex@4.1.0(vue@3.5.11(typescript@5.6.2)): + vuex@4.1.0(vue@3.4.21(typescript@5.6.3)): dependencies: - '@vue/devtools-api': 6.6.4 - vue: 3.5.11(typescript@5.6.2) + '@vue/devtools-api': 6.5.1 + vue: 3.4.21(typescript@5.6.3) w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 - wait-on@8.0.1(debug@4.3.7): + wait-on@8.0.0(debug@4.3.7): dependencies: axios: 1.7.7(debug@4.3.7) joi: 17.13.3 @@ -19707,11 +22982,11 @@ snapshots: defaults: 1.0.4 optional: true - web-streams-polyfill@3.3.3: {} + web-streams-polyfill@3.2.1: {} webdriver@7.31.1(typescript@5.4.5): dependencies: - '@types/node': 18.19.55 + '@types/node': 18.17.5 '@wdio/config': 7.31.1(typescript@5.4.5) '@wdio/logger': 7.26.0 '@wdio/protocols': 7.27.0 @@ -19729,44 +23004,44 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0): + webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0))(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0)) - '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0)) - '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0))(webpack-dev-server@4.15.2(webpack-cli@4.10.0)(webpack@5.95.0)) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0))(webpack@5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0)) + '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0)) + '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0))(webpack-dev-server@4.15.2(webpack-cli@4.10.0)(webpack@5.94.0)) colorette: 2.0.20 commander: 7.2.0 cross-spawn: 7.0.3 fastest-levenshtein: 1.0.16 - import-local: 3.2.0 + import-local: 3.1.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) - webpack-merge: 5.10.0 + webpack: 5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0) + webpack-merge: 5.9.0 optionalDependencies: - webpack-dev-server: 4.15.2(webpack-cli@4.10.0)(webpack@5.95.0) + webpack-dev-server: 4.15.2(webpack-cli@4.10.0)(webpack@5.94.0) - webpack-dev-middleware@5.3.4(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0)): + webpack-dev-middleware@5.3.4(webpack@5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) + webpack: 5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0) - webpack-dev-server@4.15.2(webpack-cli@4.10.0)(webpack@5.95.0): + webpack-dev-server@4.15.2(webpack-cli@4.10.0)(webpack@5.94.0): dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 + '@types/bonjour': 3.5.10 + '@types/connect-history-api-fallback': 1.5.0 '@types/express': 4.17.21 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.7 - '@types/sockjs': 0.3.36 - '@types/ws': 8.5.12 + '@types/serve-index': 1.9.1 + '@types/serve-static': 1.15.2 + '@types/sockjs': 0.3.33 + '@types/ws': 8.5.5 ansi-html-community: 0.0.8 - bonjour-service: 1.2.1 + bonjour-service: 1.1.1 chokidar: 3.6.0 colorette: 2.0.20 compression: 1.7.4 @@ -19774,51 +23049,50 @@ snapshots: default-gateway: 6.0.3 express: 4.21.0 graceful-fs: 4.2.11 - html-entities: 2.5.2 - http-proxy-middleware: 2.0.7(@types/express@4.17.21) - ipaddr.js: 2.2.0 + html-entities: 2.4.0 + http-proxy-middleware: 2.0.6(@types/express@4.17.21) + ipaddr.js: 2.1.0 launch-editor: 2.9.1 open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 schema-utils: 4.2.0 - selfsigned: 2.4.1 + selfsigned: 2.1.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0)) - ws: 8.18.0 + webpack-dev-middleware: 5.3.4(webpack@5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0)) + ws: 8.13.0 optionalDependencies: - webpack: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + webpack: 5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-merge@5.10.0: + webpack-merge@5.9.0: dependencies: clone-deep: 4.0.1 - flat: 5.0.2 wildcard: 2.0.1 webpack-sources@3.2.3: {} - webpack-virtual-modules@0.6.2: {} + webpack-virtual-modules@0.5.0: {} - webpack@5.95.0(esbuild@0.21.5): + webpack@5.94.0(esbuild@0.21.5): dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.1 - acorn-import-attributes: 1.9.5(acorn@8.12.1) - browserslist: 4.24.0 - chrome-trace-event: 1.0.4 + acorn: 8.10.0 + acorn-import-attributes: 1.9.5(acorn@8.10.0) + browserslist: 4.21.10 + chrome-trace-event: 1.0.3 enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 + es-module-lexer: 1.3.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -19829,7 +23103,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.21.5)(webpack@5.95.0(esbuild@0.21.5)) + terser-webpack-plugin: 5.3.10(esbuild@0.21.5)(webpack@5.94.0(esbuild@0.21.5)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -19837,18 +23111,18 @@ snapshots: - esbuild - uglify-js - webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0): + webpack@5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0): dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.1 - acorn-import-attributes: 1.9.5(acorn@8.12.1) - browserslist: 4.24.0 - chrome-trace-event: 1.0.4 + acorn: 8.10.0 + acorn-import-attributes: 1.9.5(acorn@8.10.0) + browserslist: 4.21.10 + chrome-trace-event: 1.0.3 enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 + es-module-lexer: 1.3.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -19859,11 +23133,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.21.5)(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0)) + terser-webpack-plugin: 5.3.10(esbuild@0.21.5)(webpack@5.94.0(esbuild@0.21.5)(webpack-cli@4.10.0)) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.94.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -19907,6 +23181,30 @@ snapshots: is-string: 1.0.7 is-symbol: 1.0.4 + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.1 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.3 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.0 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.18 + which-collection@1.0.2: dependencies: is-map: 2.0.3 @@ -19924,6 +23222,15 @@ snapshots: gopd: 1.0.1 has-tostringtag: 1.0.2 + which-typed-array@1.1.18: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + for-each: 0.3.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@1.3.1: dependencies: isexe: 2.0.0 @@ -19932,7 +23239,7 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.3.0: + why-is-node-running@2.2.2: dependencies: siginfo: 2.0.0 stackback: 0.0.2 @@ -19943,31 +23250,28 @@ snapshots: wildcard@2.0.1: {} - word-wrap@1.2.5: {} - wordwrap@1.0.0: {} - workbox-background-sync@7.1.0: + workbox-background-sync@7.0.0: dependencies: idb: 7.1.1 - workbox-core: 7.1.0 + workbox-core: 7.0.0 - workbox-broadcast-update@7.1.0: + workbox-broadcast-update@7.0.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.0.0 - workbox-build@7.1.1(@types/babel__core@7.20.5): + workbox-build@7.0.0(@types/babel__core@7.20.1): dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) - '@babel/core': 7.25.7 - '@babel/preset-env': 7.25.7(@babel/core@7.25.7) - '@babel/runtime': 7.25.7 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.25.7)(@types/babel__core@7.20.5)(rollup@2.79.2) - '@rollup/plugin-node-resolve': 15.3.0(rollup@2.79.2) + '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) + '@babel/core': 7.26.7 + '@babel/preset-env': 7.26.7(@babel/core@7.26.7) + '@babel/runtime': 7.26.7 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.26.7)(@types/babel__core@7.20.1)(rollup@2.79.2) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) - '@rollup/plugin-terser': 0.4.4(rollup@2.79.2) '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.17.1 + ajv: 8.12.0 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 @@ -19975,90 +23279,91 @@ snapshots: lodash: 4.17.21 pretty-bytes: 5.6.0 rollup: 2.79.2 + rollup-plugin-terser: 7.0.2(rollup@2.79.2) source-map: 0.8.0-beta.0 stringify-object: 3.3.0 strip-comments: 2.0.1 tempy: 0.6.0 upath: 1.2.0 - workbox-background-sync: 7.1.0 - workbox-broadcast-update: 7.1.0 - workbox-cacheable-response: 7.1.0 - workbox-core: 7.1.0 - workbox-expiration: 7.1.0 - workbox-google-analytics: 7.1.0 - workbox-navigation-preload: 7.1.0 - workbox-precaching: 7.1.0 - workbox-range-requests: 7.1.0 - workbox-recipes: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 - workbox-streams: 7.1.0 - workbox-sw: 7.1.0 - workbox-window: 7.1.0 + workbox-background-sync: 7.0.0 + workbox-broadcast-update: 7.0.0 + workbox-cacheable-response: 7.0.0 + workbox-core: 7.0.0 + workbox-expiration: 7.0.0 + workbox-google-analytics: 7.0.0 + workbox-navigation-preload: 7.0.0 + workbox-precaching: 7.0.0 + workbox-range-requests: 7.0.0 + workbox-recipes: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 + workbox-streams: 7.0.0 + workbox-sw: 7.0.0 + workbox-window: 7.0.0 transitivePeerDependencies: - '@types/babel__core' - supports-color - workbox-cacheable-response@7.1.0: + workbox-cacheable-response@7.0.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.0.0 - workbox-core@7.1.0: {} + workbox-core@7.0.0: {} - workbox-expiration@7.1.0: + workbox-expiration@7.0.0: dependencies: idb: 7.1.1 - workbox-core: 7.1.0 + workbox-core: 7.0.0 - workbox-google-analytics@7.1.0: + workbox-google-analytics@7.0.0: dependencies: - workbox-background-sync: 7.1.0 - workbox-core: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 + workbox-background-sync: 7.0.0 + workbox-core: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 - workbox-navigation-preload@7.1.0: + workbox-navigation-preload@7.0.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.0.0 - workbox-precaching@7.1.0: + workbox-precaching@7.0.0: dependencies: - workbox-core: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 + workbox-core: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 - workbox-range-requests@7.1.0: + workbox-range-requests@7.0.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.0.0 - workbox-recipes@7.1.0: + workbox-recipes@7.0.0: dependencies: - workbox-cacheable-response: 7.1.0 - workbox-core: 7.1.0 - workbox-expiration: 7.1.0 - workbox-precaching: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 + workbox-cacheable-response: 7.0.0 + workbox-core: 7.0.0 + workbox-expiration: 7.0.0 + workbox-precaching: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 - workbox-routing@7.1.0: + workbox-routing@7.0.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.0.0 - workbox-strategies@7.1.0: + workbox-strategies@7.0.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.0.0 - workbox-streams@7.1.0: + workbox-streams@7.0.0: dependencies: - workbox-core: 7.1.0 - workbox-routing: 7.1.0 + workbox-core: 7.0.0 + workbox-routing: 7.0.0 - workbox-sw@7.1.0: {} + workbox-sw@7.0.0: {} - workbox-window@7.1.0: + workbox-window@7.0.0: dependencies: - '@types/trusted-types': 2.0.7 - workbox-core: 7.1.0 + '@types/trusted-types': 2.0.3 + workbox-core: 7.0.0 wrap-ansi@6.2.0: dependencies: @@ -20098,6 +23403,8 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 + ws@8.13.0: {} + ws@8.17.1: {} ws@8.18.0: {} @@ -20122,6 +23429,10 @@ snapshots: yallist@3.1.1: {} + yallist@4.0.0: {} + + yaml@2.4.0: {} + yaml@2.5.1: {} yargs-parser@18.1.3: @@ -20150,7 +23461,7 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.2.0 + escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -20162,8 +23473,11 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 + yn@3.1.1: + optional: true + yocto-queue@0.1.0: {} - yocto-queue@1.1.1: {} + yocto-queue@1.0.0: {} zwitch@2.0.4: {} diff --git a/tests/webpack/package.json b/tests/webpack/package.json index 12bb73195..59cc1ea55 100644 --- a/tests/webpack/package.json +++ b/tests/webpack/package.json @@ -18,6 +18,6 @@ }, "dependencies": { "@mermaid-js/mermaid-example-diagram": "workspace:*", - "mermaid": "workspace:*" + "@mermaid-chart/mermaid": "workspace:*" } }