From 5cfa919672ebeaaf5b45bc21a32d7cf49dd8cba2 Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Sun, 27 Nov 2022 18:19:13 +0000 Subject: [PATCH 01/81] fix: support parsing indented mmd YAML from HTML In order to parse the YAML front-matter in a Mermaid diagram, the YAML seperators **MUST NOT** be indented, e.g.: ````markdown ```mermaid --- title: This is fine. --- ``` ```mermaid --- title: This is not fine, because the `---` are indented. --- ``` ```` However, this makes it very difficult to write nice Mermaid diagrams in HTML code-blocks. This commit uses [`ts-dedent`](https://www.npmjs.com/package/ts-dedent) to automatically remove the indentation from Mermaid diagrams when parsed from HTML. Mermaid diagrams from mermaidAPI.render() are **NOT** dedented, as that API is called from JavaScript code, and therefore users can easily `dedent` their own diagrams. --- packages/mermaid/package.json | 1 + packages/mermaid/src/mermaid.ts | 8 ++++---- pnpm-lock.yaml | 16 +++++++++++----- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 4b24fb661..ac905fd06 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -64,6 +64,7 @@ "moment-mini": "^2.24.0", "non-layered-tidy-tree-layout": "^2.0.2", "stylis": "^4.1.2", + "ts-dedent": "^2.2.0", "uuid": "^9.0.0" }, "devDependencies": { diff --git a/packages/mermaid/src/mermaid.ts b/packages/mermaid/src/mermaid.ts index 993f2f944..b0a7e4c3e 100644 --- a/packages/mermaid/src/mermaid.ts +++ b/packages/mermaid/src/mermaid.ts @@ -2,6 +2,8 @@ * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid * functionality and to render the diagrams to svg code! */ +import dedent from 'ts-dedent'; + import { MermaidConfig } from './config.type'; import { log } from './logger'; import utils from './utils'; @@ -147,8 +149,7 @@ const initThrowsErrors = function ( txt = element.innerHTML; // transforms the html to pure text - txt = utils - .entityDecode(txt) + txt = dedent(utils.entityDecode(txt)) // removes indentation, required for YAML parsing .trim() .replace(//gi, '
'); @@ -288,8 +289,7 @@ const initThrowsErrorsAsync = async function ( txt = element.innerHTML; // transforms the html to pure text - txt = utils - .entityDecode(txt) + txt = dedent(utils.entityDecode(txt)) // removes indentation, required for YAML parsing .trim() .replace(//gi, '
'); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ebb71f65e..cc91b753c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -211,6 +211,9 @@ importers: stylis: specifier: ^4.1.2 version: 4.1.2 + ts-dedent: + specifier: ^2.2.0 + version: 2.2.0 uuid: specifier: ^9.0.0 version: 9.0.0 @@ -3634,7 +3637,7 @@ packages: /axios/0.21.4_debug@4.3.2: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} dependencies: - follow-redirects: 1.15.2_debug@4.3.2 + follow-redirects: 1.15.2 transitivePeerDependencies: - debug dev: true @@ -6309,7 +6312,7 @@ packages: resolution: {integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==} dev: true - /follow-redirects/1.15.2_debug@4.3.2: + /follow-redirects/1.15.2: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} peerDependencies: @@ -6317,8 +6320,6 @@ packages: peerDependenciesMeta: debug: optional: true - dependencies: - debug: 4.3.2 dev: true /foreground-child/2.0.0: @@ -6911,7 +6912,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2_debug@4.3.2 + follow-redirects: 1.15.2 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -10613,6 +10614,11 @@ packages: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: true + /ts-dedent/2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + dev: false + /ts-node/10.9.1_cbe7ovvae6zqfnmtgctpgpys54: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true From 4cc3b17d362b3c8edff9ac0ab7d7248a309fa988 Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Sun, 27 Nov 2022 18:25:37 +0000 Subject: [PATCH 02/81] docs(demos): fix indentation of YAML front-matter Mermaid diagrams that have YAML front-matter can now be indented in HTML code, see commit: 5cfa9196 (fix: support parsing indented mmd YAML from HTML, 2022-11-27) Some diagrams previously had a mix of tabs/spaces for indentation. In order for `dedent` to work, these diagrams had to be converted to using a consistent indentation. --- demos/classchart.html | 8 +++--- demos/er.html | 61 +++++++++++++++++++++---------------------- demos/flowchart.html | 12 ++++----- demos/git.html | 6 ++--- demos/journey.html | 6 ++--- demos/state.html | 20 +++++++------- 6 files changed, 56 insertions(+), 57 deletions(-) diff --git a/demos/classchart.html b/demos/classchart.html index 031f3b608..b879618b6 100644 --- a/demos/classchart.html +++ b/demos/classchart.html @@ -17,10 +17,10 @@

Class diagram demos

----
-title: Demo Class Diagram
----
-		classDiagram
+    ---
+    title: Demo Class Diagram
+    ---
+    classDiagram
       accTitle: Demo Class Diagram
       accDescr: This class diagram show the abstract Animal class, and 3 classes that inherit from it: Duck, Fish, and Zebra.
 
diff --git a/demos/er.html b/demos/er.html
index 06fbf020e..b5d1966f7 100644
--- a/demos/er.html
+++ b/demos/er.html
@@ -19,43 +19,42 @@
 
   
     
+      ---
+      title: This is a title
+      ---
+      erDiagram
+        %% title This is a title
+        %% accDescription Test a description
 
----
-title: This is a title
----
-erDiagram
-  %% title This is a title
-  %% accDescription Test a description
+        "Person . CUSTOMER"||--o{ ORDER : places
 
-  "Person . CUSTOMER"||--o{ ORDER : places
+        ORDER ||--|{ "€£LINE_ITEM ¥" : contains
 
-  ORDER ||--|{ "€£LINE_ITEM ¥" : contains
+        "Person . CUSTOMER" }|..|{ "Address//StreetAddress::[DELIVERY ADDRESS]" : uses
 
-  "Person . CUSTOMER" }|..|{ "Address//StreetAddress::[DELIVERY ADDRESS]" : uses
+        "Address//StreetAddress::[DELIVERY ADDRESS]" {
+            int customerID FK
+            string line1 "this is the first address line comment"
+            string line2
+            string city
+            string region
+            string state
+            string postal_code
+            string country
+            }
 
-  "Address//StreetAddress::[DELIVERY ADDRESS]" {
-      int customerID FK
-      string line1 "this is the first address line comment"
-      string line2
-      string city
-      string region
-      string state
-      string postal_code
-      string country
-      }
+            "a_~`!@#$^&*()-_=+[]{}|/;:'.?¡⁄™€£‹¢›∞fi§‡•°ª·º‚≠±œŒ∑„®†ˇ¥Á¨ˆˆØπ∏“«»åÅßÍ∂΃ϩ˙Ó∆Ô˚¬Ò…ÚæÆΩ¸≈π˛çÇ√◊∫ı˜µÂ≤¯≥˘÷¿" {
+              string name "this is an entity with an absurd name just to show characters that are now acceptable as long as the name is in double quotes"
+            }
 
-      "a_~`!@#$^&*()-_=+[]{}|/;:'.?¡⁄™€£‹¢›∞fi§‡•°ª·º‚≠±œŒ∑„®†ˇ¥Á¨ˆˆØπ∏“«»åÅßÍ∂΃ϩ˙Ó∆Ô˚¬Ò…ÚæÆΩ¸≈π˛çÇ√◊∫ı˜µÂ≤¯≥˘÷¿" {
-        string name "this is an entity with an absurd name just to show characters that are now acceptable as long as the name is in double quotes"
-      }
-
-      "€£LINE_ITEM ¥" {
-        int orderID FK
-        int currencyId FK
-        number price
-        number quantity
-        number adjustment
-        number final_price
-      }
+            "€£LINE_ITEM ¥" {
+              int orderID FK
+              int currencyId FK
+              number price
+              number quantity
+              number adjustment
+              number final_price
+            }
     
diff --git a/demos/flowchart.html b/demos/flowchart.html index 7251e586e..60e6160c3 100644 --- a/demos/flowchart.html +++ b/demos/flowchart.html @@ -17,9 +17,9 @@

Sample 1

graph

----
-title: This is a complicated flow
----
+    ---
+    title: This is a complicated flow
+    ---
     graph LR
       accTitle: This is a complicated flow
       accDescr: This is the descriptoin for the complicated flow.
@@ -224,9 +224,9 @@ title: This is a complicated flow
     

Sample 2

graph

----
-title: What to buy
----
+    ---
+    title: What to buy
+    ---
     graph TD
       accTitle: What to buy
       accDescr: Options of what to buy with Christmas money
diff --git a/demos/git.html b/demos/git.html
index 99c53d7d0..5e683152a 100644
--- a/demos/git.html
+++ b/demos/git.html
@@ -16,9 +16,9 @@
   
     

Git diagram demo

----
-title: Simple Git diagram
----
+    ---
+    title: Simple Git diagram
+    ---
     gitGraph:
     options
     {
diff --git a/demos/journey.html b/demos/journey.html
index dadcfb13c..96c89a215 100644
--- a/demos/journey.html
+++ b/demos/journey.html
@@ -16,9 +16,9 @@
   
     

Journey diagram demo

----
-title: My working day 
----
+    ---
+    title: My working day 
+    ---
      journey
       accTitle: Very simple journey demo
       accDescr: 2 main sections: work and home, each with just a few tasks
diff --git a/demos/state.html b/demos/state.html
index 3d070f379..9251e837c 100644
--- a/demos/state.html
+++ b/demos/state.html
@@ -17,11 +17,11 @@
     

State diagram demos

Very simple showing change from State1 to State2

----
-title: Very simple diagram
----
-		stateDiagram
-		  accTitle: This is the accessible title
+    ---
+    title: Very simple diagram
+    ---
+    stateDiagram
+      accTitle: This is the accessible title
       accDescr:This is an accessible description
       State1 --> State2
     
@@ -47,13 +47,13 @@ title: Very simple diagram

----
-title: Very simple diagram
----
-		stateDiagram
+    ---
+    title: Very simple diagram
+    ---
+    stateDiagram
       direction TB
 
-		  accTitle: This is the accessible title
+      accTitle: This is the accessible title
       accDescr: This is an accessible description
 
       classDef notMoving fill:white

From accba3f408d1f1a9a68a05fff9899e2d51627fe7 Mon Sep 17 00:00:00 2001
From: Alois Klink 
Date: Thu, 1 Dec 2022 22:43:03 +0000
Subject: [PATCH 03/81] chore: improve errors for bad YAML frontmatter

Adds a custom error message for any mermaid diagram that starts with
a `---`. Normally, these are expected to be part of a YAML front-matter
block, but indentation issues or a missing closing `---` may cause
these to be not parsed correctly.
---
 .../src/diagram-api/diagram-orchestration.ts  | 27 +++++++++++++++++++
 packages/mermaid/src/mermaidAPI.spec.ts       | 13 +++++++++
 packages/mermaid/src/utils.spec.js            |  4 +--
 3 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/packages/mermaid/src/diagram-api/diagram-orchestration.ts b/packages/mermaid/src/diagram-api/diagram-orchestration.ts
index a26edb303..6c7ab6907 100644
--- a/packages/mermaid/src/diagram-api/diagram-orchestration.ts
+++ b/packages/mermaid/src/diagram-api/diagram-orchestration.ts
@@ -125,6 +125,33 @@ export const addDiagrams = () => {
     },
     (text) => text.toLowerCase().trim() === 'error'
   );
+  registerDiagram(
+    '---',
+    // --- diagram type may appear if YAML front-matter is not parsed correctly
+    {
+      db: {
+        clear: () => {
+          // Quite ok, clear needs to be there for --- to work as a regular diagram
+        },
+      },
+      styles: errorStyles, // should never be used
+      renderer: errorRenderer, // should never be used
+      parser: {
+        parser: { yy: {} },
+        parse: () => {
+          throw new Error(
+            'Diagrams beginning with --- are not valid. ' +
+              'If you were trying to use a YAML front-matter, please ensure that ' +
+              "you've correctly opened and closed the YAML front-matter with unindented `---` blocks"
+          );
+        },
+      },
+      init: () => null, // no op
+    },
+    (text) => {
+      return text.toLowerCase().trimStart().startsWith('---');
+    }
+  );
 
   registerDiagram(
     'c4',
diff --git a/packages/mermaid/src/mermaidAPI.spec.ts b/packages/mermaid/src/mermaidAPI.spec.ts
index 55d46ae7c..092661dc6 100644
--- a/packages/mermaid/src/mermaidAPI.spec.ts
+++ b/packages/mermaid/src/mermaidAPI.spec.ts
@@ -629,6 +629,19 @@ describe('mermaidAPI', function () {
       expect(mermaid.parseError).toEqual(undefined);
       expect(() => mermaidAPI.parse('this is not a mermaid diagram definition')).toThrow();
     });
+    it('throws for a nicer error for a invalid definition starting with `---`', function () {
+      expect(mermaid.parseError).toEqual(undefined);
+      expect(() =>
+        mermaidAPI.parse(`
+      ---
+      title: a malformed YAML front-matter
+      `)
+      ).toThrow(
+        'Diagrams beginning with --- are not valid. ' +
+          'If you were trying to use a YAML front-matter, please ensure that ' +
+          "you've correctly opened and closed the YAML front-matter with unindented `---` blocks"
+      );
+    });
     it('does not throw for a valid definition', function () {
       expect(() => mermaidAPI.parse('graph TD;A--x|text including URL space|B;')).not.toThrow();
     });
diff --git a/packages/mermaid/src/utils.spec.js b/packages/mermaid/src/utils.spec.js
index 54262f10e..bdf94d992 100644
--- a/packages/mermaid/src/utils.spec.js
+++ b/packages/mermaid/src/utils.spec.js
@@ -238,9 +238,9 @@ Alice->Bob: hi`;
     const type = detectType(str);
     expect(type).toBe('gitGraph');
   });
-  it('should not allow frontmatter with leading spaces', function () {
+  it('should handle malformed frontmatter (with leading spaces) with `---` error graphtype', function () {
     const str = '    ---\ntitle: foo\n---\n  gitGraph TB:\nbfs1:queue';
-    expect(() => detectType(str)).toThrow('No diagram type detected for text');
+    expect(detectType(str)).toBe('---');
   });
 });
 describe('when finding substring in array ', function () {

From 49ca2e358897ab366ac008b89603025fcf188aa0 Mon Sep 17 00:00:00 2001
From: BD103 <59022059+BD103@users.noreply.github.com>
Date: Mon, 5 Dec 2022 17:41:30 -0500
Subject: [PATCH 04/81] feat: add links to theme listing

---
 packages/mermaid/src/docs/config/theming.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/mermaid/src/docs/config/theming.md b/packages/mermaid/src/docs/config/theming.md
index 78f3546cc..b9c5d0850 100644
--- a/packages/mermaid/src/docs/config/theming.md
+++ b/packages/mermaid/src/docs/config/theming.md
@@ -10,15 +10,15 @@ Themes follow and build upon the Levels of Configuration, and employ `directives
 
 The following are a list of **Deployable themes**, sample `%%init%%` directives and `initialize` calls.
 
-1. **base**- Designed to be modified, as the name implies it is supposed to be used as the base for making custom themes.
+1. [**base**](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/themes/theme-base.js) - Designed to be modified, as the name implies it is supposed to be used as the base for making custom themes.
 
-2. **forest**- A theme full of light greens that is easy on the eyes.
+2. [**forest**](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/themes/theme-forest.js) - A theme full of light greens that is easy on the eyes.
 
-3. **dark**- A theme that would go well with other dark-colored elements.
+3. [**dark**](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/themes/theme-dark.js) - A theme that would go well with other dark-colored elements.
 
-4. **default**- The default theme for all diagrams.
+4. [**default**](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/themes/theme-default.js) - The default theme for all diagrams.
 
-5. **neutral**- The theme to be used for black and white printing.
+5. [**neutral**](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/themes/theme-neutral.js) - The theme to be used for black and white printing.
 
 ## Site-wide Themes
 

From 4dadf8a72da15f2236c26989c1a9f55b917f8025 Mon Sep 17 00:00:00 2001
From: Maho Pacheco 
Date: Tue, 6 Dec 2022 10:38:21 -0800
Subject: [PATCH 05/81] Adding support for parentheses

---
 cypress/integration/rendering/erDiagram.spec.js    | 14 ++++++++++++++
 docs/syntax/entityRelationshipDiagram.md           |  8 +++++---
 .../mermaid/src/diagrams/er/parser/erDiagram.jison |  2 +-
 .../src/docs/syntax/entityRelationshipDiagram.md   |  5 +++--
 4 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/cypress/integration/rendering/erDiagram.spec.js b/cypress/integration/rendering/erDiagram.spec.js
index 8e8946170..c72df49b6 100644
--- a/cypress/integration/rendering/erDiagram.spec.js
+++ b/cypress/integration/rendering/erDiagram.spec.js
@@ -182,6 +182,20 @@ describe('Entity Relationship Diagram', () => {
     cy.get('svg');
   });
 
+  it('should render entities with length in attributes type', () => {
+    renderGraph(
+      `
+    erDiagram
+        CLUSTER {
+          varchar(99) name
+          string(255) description 
+        }
+      `,
+      { logLevel: 1 }
+    );
+    cy.get('svg');
+  });
+
   it('should render entities and attributes with big and small entity names', () => {
     renderGraph(
       `
diff --git a/docs/syntax/entityRelationshipDiagram.md b/docs/syntax/entityRelationshipDiagram.md
index 9b938bc36..4f33b1edc 100644
--- a/docs/syntax/entityRelationshipDiagram.md
+++ b/docs/syntax/entityRelationshipDiagram.md
@@ -230,7 +230,7 @@ erDiagram
     }
 ```
 
-The `type` and `name` values must begin with an alphabetic character and may contain digits, hyphens or underscores. Other than that, there are no restrictions, and there is no implicit set of valid data types.
+The `type` and `name` values must begin with an alphabetic character and may contain digits, hyphens, underscores, parentheses and square brackets. Other than that, there are no restrictions, and there is no implicit set of valid data types.
 
 #### Attribute Keys and Comments
 
@@ -244,11 +244,12 @@ erDiagram
         string registrationNumber
         string make
         string model
+        string[] parts
     }
     PERSON ||--o{ NAMED-DRIVER : is
     PERSON {
         string driversLicense PK "The license #"
-        string firstName
+        string(99) firstName "Only 99 characters are allowed"
         string lastName
         int age
     }
@@ -263,11 +264,12 @@ erDiagram
         string registrationNumber
         string make
         string model
+        string[] parts
     }
     PERSON ||--o{ NAMED-DRIVER : is
     PERSON {
         string driversLicense PK "The license #"
-        string firstName
+        string(99) firstName "Only 99 characters are allowed"
         string lastName
         int age
     }
diff --git a/packages/mermaid/src/diagrams/er/parser/erDiagram.jison b/packages/mermaid/src/diagrams/er/parser/erDiagram.jison
index f0411fd72..bd8dc20f0 100644
--- a/packages/mermaid/src/diagrams/er/parser/erDiagram.jison
+++ b/packages/mermaid/src/diagrams/er/parser/erDiagram.jison
@@ -31,7 +31,7 @@ accDescr\s*"{"\s*                                { this.begin("acc_descr_multili
 \s+                      /* skip whitespace in block */
 \b((?:PK)|(?:FK))\b      return 'ATTRIBUTE_KEY'
 (.*?)[~](.*?)*[~]        return 'ATTRIBUTE_WORD';
-[A-Za-z][A-Za-z0-9\-_\[\]]*  return 'ATTRIBUTE_WORD'
+[A-Za-z][A-Za-z0-9\-_\[\]\(\)]*  return 'ATTRIBUTE_WORD'
 \"[^"]*\"                return 'COMMENT';
 [\n]+                    /* nothing */
 "}"                      { this.popState(); return 'BLOCK_STOP'; }
diff --git a/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md b/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md
index c666877c5..d83fd4b09 100644
--- a/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md
+++ b/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md
@@ -160,7 +160,7 @@ erDiagram
     }
 ```
 
-The `type` and `name` values must begin with an alphabetic character and may contain digits, hyphens or underscores. Other than that, there are no restrictions, and there is no implicit set of valid data types.
+The `type` and `name` values must begin with an alphabetic character and may contain digits, hyphens, underscores, parentheses and square brackets. Other than that, there are no restrictions, and there is no implicit set of valid data types.
 
 #### Attribute Keys and Comments
 
@@ -174,11 +174,12 @@ erDiagram
         string registrationNumber
         string make
         string model
+        string[] parts
     }
     PERSON ||--o{ NAMED-DRIVER : is
     PERSON {
         string driversLicense PK "The license #"
-        string firstName
+        string(99) firstName "Only 99 characters are allowed"
         string lastName
         int age
     }

From 9b27396344648d11c4f459edeae6fd4a3440642b Mon Sep 17 00:00:00 2001
From: Knut Sveidqvist 
Date: Thu, 8 Dec 2022 13:21:56 +0100
Subject: [PATCH 06/81] Small fix

---
 cypress/integration/other/ghsa.spec.js        |   6 +
 cypress/platform/ghsa1.html                   |   2 +-
 cypress/platform/ghsa3.html                   | 100 +++++++
 cypress/platform/knsv3.html                   | 276 ++++--------------
 .../mermaid/src/diagrams/common/common.ts     |   4 +-
 packages/mermaid/src/mermaidAPI.ts            |   4 +-
 6 files changed, 173 insertions(+), 219 deletions(-)
 create mode 100644 cypress/platform/ghsa3.html

diff --git a/cypress/integration/other/ghsa.spec.js b/cypress/integration/other/ghsa.spec.js
index 5b168a8a8..4fadc7855 100644
--- a/cypress/integration/other/ghsa.spec.js
+++ b/cypress/integration/other/ghsa.spec.js
@@ -7,4 +7,10 @@ describe('CSS injections', () => {
       flowchart: { htmlLabels: false },
     });
   });
+  it('should not allow adding styletags affecting the page', () => {
+    urlSnapshotTest('http://localhost:9000/ghsa3.html', {
+      logLevel: 1,
+      flowchart: { htmlLabels: false },
+    });
+  });
 });
diff --git a/cypress/platform/ghsa1.html b/cypress/platform/ghsa1.html
index c54358862..890a8e0dd 100644
--- a/cypress/platform/ghsa1.html
+++ b/cypress/platform/ghsa1.html
@@ -4,7 +4,7 @@
   
   
     
-

This element does not belong to the SVG but we can style it

+

Background should be yellow!!!

diff --git a/cypress/platform/ghsa3.html b/cypress/platform/ghsa3.html new file mode 100644 index 000000000..63dfa0d01 --- /dev/null +++ b/cypress/platform/ghsa3.html @@ -0,0 +1,100 @@ + + + + + + + + + +

PAGE SHOULD NOT BE RED

+
+
+
+
+ + + + diff --git a/cypress/platform/knsv3.html b/cypress/platform/knsv3.html index 0c1afadb7..e5ca66c87 100644 --- a/cypress/platform/knsv3.html +++ b/cypress/platform/knsv3.html @@ -6,6 +6,10 @@ rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" /> + -
info below
-
-
-flowchart TB;subgraph "number as labels";1;end;
-      
-
-flowchart TB;a[APA];
-      
-
-graph TD
-      work --> sleep
-      sleep --> work
-      eat --> sleep
-      work --> eat
-      
-
-flowchart TD
-      work --> sleep
-      sleep --> work
-      eat --> sleep
-      work --> eat
-      
-
- graph TB
-      A
-      B
-      subgraph foo[Foo SubGraph]
-        C
-        D
-      end
-      subgraph bar[Bar SubGraph]
-        E
-        F
-      end
-      G
-
-      A-->B
-      B-->C
-      C-->D
-      B-->D
-      D-->E
-      E-->A
-      E-->F
-      F-->D
-      F-->G
-      B-->G
-      G-->D
-
-      style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
-      style bar fill:#999,stroke-width:2px,stroke:#0F0,color:blue
-      
-
-      graph TB
-%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
-      A
-      B
-      subgraph foo[Foo SubGraph]
-        C
-        D
-      end
-      subgraph bar[Bar SubGraph]
-        E
-        F
-      end
-      G
-
-      A-->B
-      B-->C
-      C-->D
-      B-->D
-      D-->E
-      E-->A
-      E-->F
-      F-->D
-      F-->G
-      B-->G
-      G-->D
-
-      style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
-      style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
-      
-
+    
Security check
+
       graph TD
-        A[Christmas] ==> D
-        A[Christmas] -->|Get money| B(Go shopping)
-        A[Christmas] ==> C
-      
-
-      graph TD
-%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
-        A[Christmas] ==> D
-        A[Christmas] -->|Get money| B(Go shopping)
-        A[Christmas] ==> C
-      
-
-      flowchart TD
-        A[Christmas] ==> D
-        A[Christmas] -->|Get money| B(Go shopping)
-        A[Christmas] ==> C
-      
-
-      flowchart TD
-%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
-        A[Christmas] ==> D
-        A[Christmas] -->|Get money| B(Go shopping)
-        A[Christmas] ==> C
-      
-
-flowchart LR
-        a["Haiya"]---->b
-      
-
-flowchart LR
-%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
-        a["Haiya"]---->b
-      
-
-      flowchart TD
-        A[Christmas] ==> D
-        A[Christmas] -->|Get money| B(Go shopping)
-        A[Christmas] ==> C
-      
-
-      flowchart TD
-%%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
-        A[Christmas] ==> D
-        A[Christmas] -->|Get money| B(Go shopping)
-        A[Christmas] ==> C
-      
-
-      %%{init: { "logLevel": 1, "flowchart": {"htmlLabels":true }} }%%
-classDiagram-v2
-      Class01 <|-- AveryLongClass : Cool
-      <<interface>> Class01
-      Class03 *-- Class04
-      Class05 o-- Class06
-      Class07 .. Class08
-      Class09 --> C2 : Where am i?
-      Class09 --* C3
-      Class09 --|> Class07
-      Class12 <|.. Class08
-      Class11 ..>Class12
-      Class07 : equals()
-      Class07 : Object[] elementData
-      Class01 : size()
-      Class01 : int chimp
-      Class01 : int gorilla
-      Class01 : -int privateChimp
-      Class01 : +int publicGorilla
-      Class01 : #int protectedMarmoset
-      Class08 <--> C2: Cool label
-      class Class10 {
-        <<service>>
-        int id
-        test()
-      }
-      
-
-classDiagram-v2
-      Class01 <|-- AveryLongClass : Cool
-      <<interface>> Class01
-      Class03 *-- Class04
-      Class05 o-- Class06
-      Class07 .. Class08
-      Class09 --> C2 : Where am i?
-      Class09 --* C3
-      Class09 --|> Class07
-      Class12 <|.. Class08
-      Class11 ..>Class12
-      Class07 : equals()
-      Class07 : Object[] elementData
-      Class01 : size()
-      Class01 : int chimp
-      Class01 : int gorilla
-      Class01 : -int privateChimp
-      Class01 : +int publicGorilla
-      Class01 : #int protectedMarmoset
-      Class08 <--> C2: Cool label
-      class Class10 {
-        <<service>>
-        int id
-        test()
-      }
-      
-
-flowchart BT
-   subgraph S1
-    sub1 -->sub2
-   end
-  subgraph S2
-    sub4
-   end
-   S1 --> S2
-   sub1 --> sub4
-      
-
- - diff --git a/packages/mermaid/src/diagrams/common/common.ts b/packages/mermaid/src/diagrams/common/common.ts index 194a9a4c0..628908aab 100644 --- a/packages/mermaid/src/diagrams/common/common.ts +++ b/packages/mermaid/src/diagrams/common/common.ts @@ -47,7 +47,9 @@ export const sanitizeText = (text: string, config: MermaidConfig): string => { if (config.dompurifyConfig) { text = DOMPurify.sanitize(sanitizeMore(text, config), config.dompurifyConfig).toString(); } else { - text = DOMPurify.sanitize(sanitizeMore(text, config)); + text = DOMPurify.sanitize(sanitizeMore(text, config), { + FORBID_TAGS: ['style'], + }).toString(); } return text; }; diff --git a/packages/mermaid/src/mermaidAPI.ts b/packages/mermaid/src/mermaidAPI.ts index a77aed96d..193f5a9cc 100644 --- a/packages/mermaid/src/mermaidAPI.ts +++ b/packages/mermaid/src/mermaidAPI.ts @@ -536,7 +536,7 @@ const render = function ( if (isSandboxed) { const svgEl = root.select(enclosingDivID_selector + ' svg').node(); svgCode = putIntoIFrame(svgCode, svgEl); - } else if (isLooseSecurityLevel) { + } else if (!isLooseSecurityLevel) { // Sanitize the svgCode using DOMPurify svgCode = DOMPurify.sanitize(svgCode, { ADD_TAGS: DOMPURE_TAGS, @@ -738,7 +738,7 @@ const renderAsync = async function ( if (isSandboxed) { const svgEl = root.select(enclosingDivID_selector + ' svg').node(); svgCode = putIntoIFrame(svgCode, svgEl); - } else if (isLooseSecurityLevel) { + } else if (!isLooseSecurityLevel) { // Sanitize the svgCode using DOMPurify svgCode = DOMPurify.sanitize(svgCode, { ADD_TAGS: DOMPURE_TAGS, From c6fce2431b81b72a8915f224aa038300e72df1ac Mon Sep 17 00:00:00 2001 From: Knut Sveidqvist Date: Thu, 8 Dec 2022 14:14:31 +0100 Subject: [PATCH 07/81] Fixes for tests --- cypress/integration/rendering/classDiagram-v2.spec.js | 3 +-- cypress/integration/rendering/classDiagram.spec.js | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/cypress/integration/rendering/classDiagram-v2.spec.js b/cypress/integration/rendering/classDiagram-v2.spec.js index f97458857..9536a074d 100644 --- a/cypress/integration/rendering/classDiagram-v2.spec.js +++ b/cypress/integration/rendering/classDiagram-v2.spec.js @@ -485,8 +485,7 @@ describe('Class diagram V2', () => { classDiagram-v2 note "I love this diagram!\nDo you love it?" class Class10 { - <> - int id + int id size() } note for Class10 "Cool class\nI said it's very cool class!" diff --git a/cypress/integration/rendering/classDiagram.spec.js b/cypress/integration/rendering/classDiagram.spec.js index 16601652d..e21be67ec 100644 --- a/cypress/integration/rendering/classDiagram.spec.js +++ b/cypress/integration/rendering/classDiagram.spec.js @@ -414,7 +414,6 @@ describe('Class diagram', () => { classDiagram note "I love this diagram!\nDo you love it?" class Class10 { - <> int id size() } From 98fc8664443f12e5bed5fe6209fa67e073619bc5 Mon Sep 17 00:00:00 2001 From: Per Brolin Date: Thu, 8 Dec 2022 14:16:25 +0100 Subject: [PATCH 08/81] Minor change of test code --- cypress/integration/rendering/current.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/integration/rendering/current.spec.js b/cypress/integration/rendering/current.spec.js index 56b5f774b..033752c66 100644 --- a/cypress/integration/rendering/current.spec.js +++ b/cypress/integration/rendering/current.spec.js @@ -1,6 +1,6 @@ import { imgSnapshotTest } from '../../helpers/util'; -describe('State diagram', () => { +describe('Current diagram', () => { it('should render a state with states in it', () => { imgSnapshotTest( ` From 7656916cef292828785b9f104df93ca1e2fe5211 Mon Sep 17 00:00:00 2001 From: Per Brolin Date: Thu, 8 Dec 2022 15:03:51 +0100 Subject: [PATCH 09/81] Updated package number to 9.3.0-rc1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1faa1628d..c027fa71f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mermaid-monorepo", "private": true, - "version": "9.2.2", + "version": "9.3.0-rc1", "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "type": "module", "packageManager": "pnpm@7.17.1", From 23a44952ace8d7e2779769d124c8e9d1a96945d0 Mon Sep 17 00:00:00 2001 From: Per Brolin Date: Thu, 8 Dec 2022 15:09:49 +0100 Subject: [PATCH 10/81] Updated package number --- packages/mermaid/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 66fa4f224..81d1d9be9 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -1,6 +1,6 @@ { "name": "mermaid", - "version": "9.2.3-rc.1", + "version": "9.3.0-rc.1", "description": "Markdown-ish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "main": "./dist/mermaid.min.js", "module": "./dist/mermaid.core.mjs", From 4f169dd2b8bd6aa0e1e1023b8e2b6754620a1e64 Mon Sep 17 00:00:00 2001 From: Per Brolin Date: Thu, 8 Dec 2022 15:16:13 +0100 Subject: [PATCH 11/81] Updated package number --- packages/mermaid-mindmap/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid-mindmap/package.json b/packages/mermaid-mindmap/package.json index 852c0871b..2795cf73b 100644 --- a/packages/mermaid-mindmap/package.json +++ b/packages/mermaid-mindmap/package.json @@ -1,6 +1,6 @@ { "name": "@mermaid-js/mermaid-mindmap", - "version": "9.2.2", + "version": "9.3.0-rc1", "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "module": "dist/mermaid-mindmap.core.mjs", "types": "dist/detector.d.ts", From e1a501c66b7b03d30aa66177bd88b747e1c7ec70 Mon Sep 17 00:00:00 2001 From: Knut Sveidqvist Date: Thu, 8 Dec 2022 16:38:47 +0100 Subject: [PATCH 12/81] Update url snapshot test for external diagrams --- cypress/integration/other/external-diagrams.spec.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/cypress/integration/other/external-diagrams.spec.js b/cypress/integration/other/external-diagrams.spec.js index 3a6c37e88..903f8b77b 100644 --- a/cypress/integration/other/external-diagrams.spec.js +++ b/cypress/integration/other/external-diagrams.spec.js @@ -1,13 +1,16 @@ +import { urlSnapshotTest } from '../../helpers/util'; + describe('mermaid', () => { describe('registerDiagram', () => { it('should work on @mermaid-js/mermaid-mindmap and mermaid-example-diagram', () => { const url = 'http://localhost:9000/external-diagrams-mindmap.html'; - cy.visit(url); + urlSnapshotTest(url, {}, false, false); + // cy.visit(url); - cy.get('svg', { - // may be a bit slower than normal, since vite might need to re-compile mermaid/mermaid-mindmap/mermaid-example-diagram - timeout: 10000, - }).matchImageSnapshot(); + // cy.get('svg', { + // // may be a bit slower than normal, since vite might need to re-compile mermaid/mermaid-mindmap/mermaid-example-diagram + // timeout: 10000, + // }).matchImageSnapshot(); }); }); }); From 6c2647e8cf79c5c5a3d57ef3ebff036a38773e30 Mon Sep 17 00:00:00 2001 From: Knut Sveidqvist Date: Thu, 8 Dec 2022 16:39:21 +0100 Subject: [PATCH 13/81] Update url snapshot test for external diagrams --- cypress/integration/other/external-diagrams.spec.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cypress/integration/other/external-diagrams.spec.js b/cypress/integration/other/external-diagrams.spec.js index 903f8b77b..be69dfc98 100644 --- a/cypress/integration/other/external-diagrams.spec.js +++ b/cypress/integration/other/external-diagrams.spec.js @@ -5,12 +5,6 @@ describe('mermaid', () => { it('should work on @mermaid-js/mermaid-mindmap and mermaid-example-diagram', () => { const url = 'http://localhost:9000/external-diagrams-mindmap.html'; urlSnapshotTest(url, {}, false, false); - // cy.visit(url); - - // cy.get('svg', { - // // may be a bit slower than normal, since vite might need to re-compile mermaid/mermaid-mindmap/mermaid-example-diagram - // timeout: 10000, - // }).matchImageSnapshot(); }); }); }); From e59b830d747750977d5ac4bf24ce86bb96e90292 Mon Sep 17 00:00:00 2001 From: "Ashley Engelund (weedySeaDragon @ github)" Date: Thu, 8 Dec 2022 11:25:04 -0800 Subject: [PATCH 14/81] set svg role to 'graphics-document document' --- packages/mermaid/src/accessibility.spec.ts | 12 ++++++++++-- packages/mermaid/src/accessibility.ts | 17 ++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/mermaid/src/accessibility.spec.ts b/packages/mermaid/src/accessibility.spec.ts index c633d0e15..60415ea37 100644 --- a/packages/mermaid/src/accessibility.spec.ts +++ b/packages/mermaid/src/accessibility.spec.ts @@ -6,6 +6,13 @@ describe('accessibility', () => { const fauxSvgNode = new MockedD3(); describe('setA11yDiagramInfo', () => { + it('sets the svg element role to "graphics-document document"', () => { + // @ts-ignore Required to easily handle the d3 select types + const svgAttrSpy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); + setA11yDiagramInfo(fauxSvgNode, 'flowchart'); + expect(svgAttrSpy).toHaveBeenCalledWith('role', 'graphics-document document'); + }); + it('sets the aria-roledescription to the diagram type', () => { // @ts-ignore Required to easily handle the d3 select types const svgAttrSpy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); @@ -13,11 +20,12 @@ describe('accessibility', () => { expect(svgAttrSpy).toHaveBeenCalledWith('aria-roledescription', 'flowchart'); }); - it('does nothing if the diagram type is empty', () => { + it('does not set the aria-roledescription if the diagram type is empty', () => { // @ts-ignore Required to easily handle the d3 select types const svgAttrSpy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); setA11yDiagramInfo(fauxSvgNode, ''); - expect(svgAttrSpy).not.toHaveBeenCalled(); + expect(svgAttrSpy).toHaveBeenCalledTimes(1); + expect(svgAttrSpy).toHaveBeenCalledWith('role', expect.anything()); // only called to set the role }); }); diff --git a/packages/mermaid/src/accessibility.ts b/packages/mermaid/src/accessibility.ts index b9e088e0b..13c2aa43a 100644 --- a/packages/mermaid/src/accessibility.ts +++ b/packages/mermaid/src/accessibility.ts @@ -1,5 +1,8 @@ /** * Accessibility (a11y) functions, types, helpers + * @see https://www.w3.org/WAI/ + * @see https://www.w3.org/TR/wai-aria-1.1/ + * @see https://www.w3.org/TR/svg-aam-1.0/ * */ import { D3Element } from './mermaidAPI'; @@ -7,12 +10,24 @@ import { D3Element } from './mermaidAPI'; import isEmpty from 'lodash-es/isEmpty'; /** - * Add aria-roledescription to the svg element to the diagramType + * SVG element role: + * The SVG element role _should_ be set to 'graphics-document' per SVG standard + * but in practice is not always done by browsers, etc. (As of 2022-12-08). + * A fallback role of 'document' should be set for those browsers, etc., that only support ARIA 1.0. + * + * @see https://www.w3.org/TR/svg-aam-1.0/#roleMappingGeneralRules + * @see https://www.w3.org/TR/graphics-aria-1.0/#graphics-document + */ +const SVG_ROLE = 'graphics-document document'; + +/** + * Add role and aria-roledescription to the svg element * * @param svg - d3 object that contains the SVG HTML element * @param diagramType - diagram name for to the aria-roledescription */ export function setA11yDiagramInfo(svg: D3Element, diagramType: string | null | undefined) { + svg.attr('role', SVG_ROLE); if (!isEmpty(diagramType)) { svg.attr('aria-roledescription', diagramType); } From 72a3cff13e3cf630ebf009a661d2abdada3febc1 Mon Sep 17 00:00:00 2001 From: steph Date: Sun, 11 Dec 2022 14:04:41 -0800 Subject: [PATCH 15/81] fix dev server watch mode --- .vite/build.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vite/build.ts b/.vite/build.ts index 50b7fb1ad..9d2295322 100644 --- a/.vite/build.ts +++ b/.vite/build.ts @@ -127,7 +127,7 @@ const main = async () => { }; if (watch) { - build(getBuildConfig({ minify: false, watch, core: true, entryName: 'mermaid' })); + build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' })); if (!mermaidOnly) { build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-mindmap' })); // build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' })); From 1b0ea981f9415ae1daa987243bfc90c79c9a2ec0 Mon Sep 17 00:00:00 2001 From: steph Date: Sun, 11 Dec 2022 18:59:01 -0800 Subject: [PATCH 16/81] update navbar --- .../mermaid/src/docs/.vitepress/config.ts | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/mermaid/src/docs/.vitepress/config.ts b/packages/mermaid/src/docs/.vitepress/config.ts index 7d3ec40dd..b7c033b11 100644 --- a/packages/mermaid/src/docs/.vitepress/config.ts +++ b/packages/mermaid/src/docs/.vitepress/config.ts @@ -32,19 +32,13 @@ export default defineConfig({ function nav() { return [ - { text: 'Intro', link: '/intro/', activeMatch: '/intro/' }, + { text: 'Docs', link: '/intro/', activeMatch: '/intro/' }, { - text: 'Configuration', + text: 'Tutorials', link: '/config/Tutorials', activeMatch: '/config/', }, - { text: 'Syntax', link: '/syntax/classDiagram', activeMatch: '/syntax/' }, - { text: 'Misc', link: '/misc/integrations', activeMatch: '/misc/' }, - { - text: 'Community', - link: '/community/n00b-overview', - activeMatch: '/community/', - }, + { text: 'Integrations', link: '/misc/integrations', activeMatch: '/misc/' }, { text: version, items: [ @@ -62,6 +56,14 @@ function nav() { text: '💻 Live Editor', link: 'https://mermaid.live', }, + { + text: 'Slack', + link: 'https://mermaid-talk.slack.com', + }, + { + text: 'GitHub', + link: 'https://github.com/mermaid-js/mermaid', + }, ]; } From 07d8684fc76c6ffdbe77e8652d3de026bfa7b24c Mon Sep 17 00:00:00 2001 From: Maho Pacheco Date: Sun, 11 Dec 2022 19:34:25 -0800 Subject: [PATCH 17/81] Adding size to postal code --- demos/er.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/er.html b/demos/er.html index 06fbf020e..124311a03 100644 --- a/demos/er.html +++ b/demos/er.html @@ -40,7 +40,7 @@ erDiagram string city string region string state - string postal_code + string(5) postal_code string country } From 6fb9b3b35367719e75ca61ade50991ab2fd9eb6a Mon Sep 17 00:00:00 2001 From: Maho Pacheco Date: Sun, 11 Dec 2022 19:45:05 -0800 Subject: [PATCH 18/81] Adding UTs for attributes with variable length in er diagram --- .../src/diagrams/er/parser/erDiagram.spec.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js b/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js index eb738fe4b..06e2d7993 100644 --- a/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js +++ b/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js @@ -214,6 +214,19 @@ describe('when parsing ER diagram it...', function () { expect(entities[entity].attributes.length).toBe(2); }); + it('should allow an entity with attribute that is a limited length string', function () { + const entity = 'BOOK'; + const attribute1 = 'character(10) isbn FK'; + const attribute2 = 'varchar(5) postal_code "Five digits"'; + + erDiagram.parser.parse(`erDiagram\n${entity} {\n${attribute1}\n${attribute2}\n}`); + const entities = erDb.getEntities(); + expect(Object.keys(entities).length).toBe(1); + expect(entities[entity].attributes.length).toBe(2); + expect(entities[entity].attributes[0].attributeType).toBe('character(10)'); + expect(entities[entity].attributes[1].attributeType).toBe('varchar(5)'); + }); + it('should allow an entity with multiple attributes to be defined', function () { const entity = 'BOOK'; const attribute1 = 'string title'; From e4622ba06e3cc8c5b1980f415db6b71260c00294 Mon Sep 17 00:00:00 2001 From: steph Date: Sun, 11 Dec 2022 20:53:14 -0800 Subject: [PATCH 19/81] fix text overflow --- docs/config/accessibility.md | 9 +- docs/config/directives.md | 4 +- docs/config/n00b-advanced.md | 20 ++-- docs/config/usage.md | 19 ++- docs/syntax/gantt.md | 109 ++++++++++-------- .../mermaid/src/docs/config/accessibility.md | 9 +- .../mermaid/src/docs/config/directives.md | 6 +- .../mermaid/src/docs/config/n00b-advanced.md | 14 +-- packages/mermaid/src/docs/config/usage.md | 21 ++-- packages/mermaid/src/docs/syntax/gantt.md | 59 +++++----- 10 files changed, 143 insertions(+), 127 deletions(-) diff --git a/docs/config/accessibility.md b/docs/config/accessibility.md index e5b96670e..bf8b3e591 100644 --- a/docs/config/accessibility.md +++ b/docs/config/accessibility.md @@ -80,9 +80,12 @@ A **multiple line accessible description** _does not have a colon (`:`) after th Ex: - accDescr { The official Bob's Burgers corporate processes that are used - for making very, very big decisions. - This is actually a very simple flow: see the big decision and then make the big decision.} +```markdown +accDescr { +This is a multiple line accessible description. +It does not have a colon and is surrounded by curly brackets. +} +``` See [the accTitle and accDescr usage examples](#acctitle-and-accdescr-usage-examples) for how this can be used in a diagram and the resulting HTML generated. diff --git a/docs/config/directives.md b/docs/config/directives.md index 550707080..f011085c3 100644 --- a/docs/config/directives.md +++ b/docs/config/directives.md @@ -32,7 +32,9 @@ Mermaid basically supports two types of configuration options to be overridden b **NOTE:** These options listed here are not all the configuration options. To get hold of all the configuration options, please refer to the [defaultConfig.ts](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/defaultConfig.ts) in the source code. - Soon we plan to publish a complete list of top-level configurations & all the diagram specific configurations, with their possible values in the docs +::: info +We plan to publish a complete list of top-level configurations & all the diagram specific configurations, with their possible values in the docs soon. +::: ## Declaring directives diff --git a/docs/config/n00b-advanced.md b/docs/config/n00b-advanced.md index 5dd907429..39c20d632 100644 --- a/docs/config/n00b-advanced.md +++ b/docs/config/n00b-advanced.md @@ -10,17 +10,21 @@ A more condensed html code can be achieved by embedding the mermaid code in its own .js file, which is referenced like so: - stuff stuff - - - +```html +... + + + +``` The actual mermaid file could for example look like this: - mermaid content... - ---- +```javascript +mermaid content ... +``` ## mermaid configuration options -... +```markdown +(coming soon) +``` diff --git a/docs/config/usage.md b/docs/config/usage.md index 476806d8f..0e1f4552b 100644 --- a/docs/config/usage.md +++ b/docs/config/usage.md @@ -22,24 +22,21 @@ For the majority of users, Using the [Live Editor](https://mermaid.live/) would We have compiled some Video [Tutorials](./Tutorials.md) on how to use the mermaid Live Editor. -**Installing and Hosting Mermaid on a Webpage** +### Installing and Hosting Mermaid on a Webpage -**Using the npm package** +**Using the npm package:** - 1. You will need to install node v16, which would have npm. +1. You will need to install `node v16`, which would have npm. - 2. download yarn using npm. +2. Download `yarn` using npm. - 3. enter the following command: - yarn add mermaid +3. Enter the following command: `yarn add mermaid`. - 4. At this point, you can add mermaid as a dev dependency using this command: - yarn add --dev mermaid +4. At this point, you can add mermaid as a dev dependency using this command: `yarn add --dev mermaid`. - 5. Alternatively, you can also deploy mermaid using the script tag in an HTML file with mermaid diagram descriptions. - as is shown in the example below +5. Alternatively, you can also deploy mermaid using the script tag in an HTML file with mermaid diagram descriptions as is shown in the example below. -**Hosting mermaid on a web page.** +**Hosting mermaid on a web page:** > Note:This topic explored in greater depth in the [User Guide for Beginners](../intro/n00b-gettingStarted.md) diff --git a/docs/syntax/gantt.md b/docs/syntax/gantt.md index b20b6b776..f54554bd4 100644 --- a/docs/syntax/gantt.md +++ b/docs/syntax/gantt.md @@ -172,30 +172,35 @@ Final milestone : milestone, m2, 18:14, 2min The default input date format is `YYYY-MM-DD`. You can define your custom `dateFormat`. - dateFormat YYYY-MM-DD +```markdown +dateFormat YYYY-MM-DD +``` The following formatting options are supported: - Input Example Description: - YYYY 2014 4 digit year - YY 14 2 digit year - Q 1..4 Quarter of year. Sets month to first month in quarter. - M MM 1..12 Month number - MMM MMMM January..Dec Month name in locale set by moment.locale() - D DD 1..31 Day of month - Do 1st..31st Day of month with ordinal - DDD DDDD 1..365 Day of year - X 1410715640.579 Unix timestamp - x 1410715640579 Unix ms timestamp - H HH 0..23 24 hour time - h hh 1..12 12 hour time used with a A. - a A am pm Post or ante meridiem - m mm 0..59 Minutes - s ss 0..59 Seconds - S 0..9 Tenths of a second - SS 0..99 Hundreds of a second - SSS 0..999 Thousandths of a second - Z ZZ +12:00 Offset from UTC as +-HH:mm, +-HHmm, or Z +```markdown +Input Example Description: + +YYYY 2014 4 digit year +YY 14 2 digit year +Q 1..4 Quarter of year. Sets month to first month in quarter. +M MM 1..12 Month number +MMM MMMM January..Dec Month name in locale set by moment.locale() +D DD 1..31 Day of month +Do 1st..31st Day of month with ordinal +DDD DDDD 1..365 Day of year +X 1410715640.579 Unix timestamp +x 1410715640579 Unix ms timestamp +H HH 0..23 24 hour time +h hh 1..12 12 hour time used with a A. +a A am pm Post or ante meridiem +m mm 0..59 Minutes +s ss 0..59 Seconds +S 0..9 Tenths of a second +SS 0..99 Hundreds of a second +SSS 0..999 Thousandths of a second +Z ZZ +12:00 Offset from UTC as +-HH:mm, +-HHmm, or Z +``` More info in: https://momentjs.com/docs/#/parsing/string-format/ @@ -203,34 +208,38 @@ More info in: https://momentjs.com/docs/#/parsing/string-format/ The default output date format is `YYYY-MM-DD`. You can define your custom `axisFormat`, like `2020-Q1` for the first quarter of the year 2020. - axisFormat %Y-%m-%d +```markdown +axisFormat %Y-%m-%d +``` The following formatting strings are supported: - %a - abbreviated weekday name. - %A - full weekday name. - %b - abbreviated month name. - %B - full month name. - %c - date and time, as "%a %b %e %H:%M:%S %Y". - %d - zero-padded day of the month as a decimal number [01,31]. - %e - space-padded day of the month as a decimal number [ 1,31]; equivalent to %_d. - %H - hour (24-hour clock) as a decimal number [00,23]. - %I - hour (12-hour clock) as a decimal number [01,12]. - %j - day of the year as a decimal number [001,366]. - %m - month as a decimal number [01,12]. - %M - minute as a decimal number [00,59]. - %L - milliseconds as a decimal number [000, 999]. - %p - either AM or PM. - %S - second as a decimal number [00,61]. - %U - week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. - %w - weekday as a decimal number [0(Sunday),6]. - %W - week number of the year (Monday as the first day of the week) as a decimal number [00,53]. - %x - date, as "%m/%d/%Y". - %X - time, as "%H:%M:%S". - %y - year without century as a decimal number [00,99]. - %Y - year with century as a decimal number. - %Z - time zone offset, such as "-0700". - %% - a literal "%" character. +```markdown +%a - abbreviated weekday name. +%A - full weekday name. +%b - abbreviated month name. +%B - full month name. +%c - date and time, as "%a %b %e %H:%M:%S %Y". +%d - zero-padded day of the month as a decimal number [01,31]. +%e - space-padded day of the month as a decimal number [ 1,31]; equivalent to %\_d. +%H - hour (24-hour clock) as a decimal number [00,23]. +%I - hour (12-hour clock) as a decimal number [01,12]. +%j - day of the year as a decimal number [001,366]. +%m - month as a decimal number [01,12]. +%M - minute as a decimal number [00,59]. +%L - milliseconds as a decimal number [000, 999]. +%p - either AM or PM. +%S - second as a decimal number [00,61]. +%U - week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. +%w - weekday as a decimal number [0(Sunday),6]. +%W - week number of the year (Monday as the first day of the week) as a decimal number [00,53]. +%x - date, as "%m/%d/%Y". +%X - time, as "%H:%M:%S". +%y - year without century as a decimal number [00,99]. +%Y - year with century as a decimal number. +%Z - time zone offset, such as "-0700". +%% - a literal "%" character. +``` More info in: @@ -238,11 +247,15 @@ More info in: The default output ticks are auto. You can custom your `tickInterval`, like `1day` or `1week`. - tickInterval 1day +```markdown +tickInterval 1day +``` The pattern is: - /^([1-9][0-9]*)(minute|hour|day|week|month)$/ +```markdown +/^([1-9][0-9]\*)(minute|hour|day|week|month)$/ +``` More info in: diff --git a/packages/mermaid/src/docs/config/accessibility.md b/packages/mermaid/src/docs/config/accessibility.md index e7947adec..67fb090b8 100644 --- a/packages/mermaid/src/docs/config/accessibility.md +++ b/packages/mermaid/src/docs/config/accessibility.md @@ -74,10 +74,11 @@ A **multiple line accessible description** _does not have a colon (`:`) after th Ex: -``` -accDescr { The official Bob's Burgers corporate processes that are used - for making very, very big decisions. - This is actually a very simple flow: see the big decision and then make the big decision.} +```markdown +accDescr { +This is a multiple line accessible description. +It does not have a colon and is surrounded by curly brackets. +} ``` See [the accTitle and accDescr usage examples](#acctitle-and-accdescr-usage-examples) for how this can be used in a diagram and the resulting HTML generated. diff --git a/packages/mermaid/src/docs/config/directives.md b/packages/mermaid/src/docs/config/directives.md index bc74ad309..968ea337b 100644 --- a/packages/mermaid/src/docs/config/directives.md +++ b/packages/mermaid/src/docs/config/directives.md @@ -26,9 +26,9 @@ Mermaid basically supports two types of configuration options to be overridden b **NOTE:** These options listed here are not all the configuration options. To get hold of all the configuration options, please refer to the [defaultConfig.ts](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/defaultConfig.ts) in the source code. -``` -Soon we plan to publish a complete list of top-level configurations & all the diagram specific configurations, with their possible values in the docs -``` +::: info +We plan to publish a complete list of top-level configurations & all the diagram specific configurations, with their possible values in the docs soon. +::: ## Declaring directives diff --git a/packages/mermaid/src/docs/config/n00b-advanced.md b/packages/mermaid/src/docs/config/n00b-advanced.md index 1e6546f5c..2932faa48 100644 --- a/packages/mermaid/src/docs/config/n00b-advanced.md +++ b/packages/mermaid/src/docs/config/n00b-advanced.md @@ -4,8 +4,8 @@ A more condensed html code can be achieved by embedding the mermaid code in its own .js file, which is referenced like so: -``` -stuff stuff +```html +... @@ -13,12 +13,12 @@ stuff stuff The actual mermaid file could for example look like this: +```javascript +mermaid content ... ``` -mermaid content... -``` - ---- ## mermaid configuration options -... +```markdown +(coming soon) +``` diff --git a/packages/mermaid/src/docs/config/usage.md b/packages/mermaid/src/docs/config/usage.md index 3eac4ad6f..bbfc192c7 100644 --- a/packages/mermaid/src/docs/config/usage.md +++ b/packages/mermaid/src/docs/config/usage.md @@ -16,26 +16,21 @@ For the majority of users, Using the [Live Editor](https://mermaid.live/) would We have compiled some Video [Tutorials](./Tutorials.md) on how to use the mermaid Live Editor. -**Installing and Hosting Mermaid on a Webpage** +### Installing and Hosting Mermaid on a Webpage -**Using the npm package** +**Using the npm package:** -``` -1. You will need to install node v16, which would have npm. +1. You will need to install `node v16`, which would have npm. -2. download yarn using npm. +2. Download `yarn` using npm. -3. enter the following command: - yarn add mermaid +3. Enter the following command: `yarn add mermaid`. -4. At this point, you can add mermaid as a dev dependency using this command: - yarn add --dev mermaid +4. At this point, you can add mermaid as a dev dependency using this command: `yarn add --dev mermaid`. -5. Alternatively, you can also deploy mermaid using the script tag in an HTML file with mermaid diagram descriptions. - as is shown in the example below -``` +5. Alternatively, you can also deploy mermaid using the script tag in an HTML file with mermaid diagram descriptions as is shown in the example below. -**Hosting mermaid on a web page.** +**Hosting mermaid on a web page:** > Note:This topic explored in greater depth in the [User Guide for Beginners](../intro/n00b-gettingStarted.md) diff --git a/packages/mermaid/src/docs/syntax/gantt.md b/packages/mermaid/src/docs/syntax/gantt.md index c9301bfee..7ddb72734 100644 --- a/packages/mermaid/src/docs/syntax/gantt.md +++ b/packages/mermaid/src/docs/syntax/gantt.md @@ -104,33 +104,34 @@ Final milestone : milestone, m2, 18:14, 2min The default input date format is `YYYY-MM-DD`. You can define your custom `dateFormat`. -``` +```markdown dateFormat YYYY-MM-DD ``` The following formatting options are supported: -``` -Input Example Description: -YYYY 2014 4 digit year -YY 14 2 digit year -Q 1..4 Quarter of year. Sets month to first month in quarter. -M MM 1..12 Month number -MMM MMMM January..Dec Month name in locale set by moment.locale() -D DD 1..31 Day of month -Do 1st..31st Day of month with ordinal -DDD DDDD 1..365 Day of year -X 1410715640.579 Unix timestamp -x 1410715640579 Unix ms timestamp -H HH 0..23 24 hour time -h hh 1..12 12 hour time used with a A. -a A am pm Post or ante meridiem -m mm 0..59 Minutes -s ss 0..59 Seconds -S 0..9 Tenths of a second -SS 0..99 Hundreds of a second -SSS 0..999 Thousandths of a second -Z ZZ +12:00 Offset from UTC as +-HH:mm, +-HHmm, or Z +```markdown +Input Example Description: + +YYYY 2014 4 digit year +YY 14 2 digit year +Q 1..4 Quarter of year. Sets month to first month in quarter. +M MM 1..12 Month number +MMM MMMM January..Dec Month name in locale set by moment.locale() +D DD 1..31 Day of month +Do 1st..31st Day of month with ordinal +DDD DDDD 1..365 Day of year +X 1410715640.579 Unix timestamp +x 1410715640579 Unix ms timestamp +H HH 0..23 24 hour time +h hh 1..12 12 hour time used with a A. +a A am pm Post or ante meridiem +m mm 0..59 Minutes +s ss 0..59 Seconds +S 0..9 Tenths of a second +SS 0..99 Hundreds of a second +SSS 0..999 Thousandths of a second +Z ZZ +12:00 Offset from UTC as +-HH:mm, +-HHmm, or Z ``` More info in: https://momentjs.com/docs/#/parsing/string-format/ @@ -139,20 +140,20 @@ More info in: https://momentjs.com/docs/#/parsing/string-format/ The default output date format is `YYYY-MM-DD`. You can define your custom `axisFormat`, like `2020-Q1` for the first quarter of the year 2020. -``` -axisFormat %Y-%m-%d +```markdown +axisFormat %Y-%m-%d ``` The following formatting strings are supported: -``` +```markdown %a - abbreviated weekday name. %A - full weekday name. %b - abbreviated month name. %B - full month name. %c - date and time, as "%a %b %e %H:%M:%S %Y". %d - zero-padded day of the month as a decimal number [01,31]. -%e - space-padded day of the month as a decimal number [ 1,31]; equivalent to %_d. +%e - space-padded day of the month as a decimal number [ 1,31]; equivalent to %\_d. %H - hour (24-hour clock) as a decimal number [00,23]. %I - hour (12-hour clock) as a decimal number [01,12]. %j - day of the year as a decimal number [001,366]. @@ -178,14 +179,14 @@ More info in: [https://github.com/d3/d3-time-format/tree/v4.0.0#locale_format](h The default output ticks are auto. You can custom your `tickInterval`, like `1day` or `1week`. -``` +```markdown tickInterval 1day ``` The pattern is: -``` -/^([1-9][0-9]*)(minute|hour|day|week|month)$/ +```markdown +/^([1-9][0-9]\*)(minute|hour|day|week|month)$/ ``` More info in: [https://github.com/d3/d3-time#interval_every](https://github.com/d3/d3-time#interval_every) From d7610dda8fac9277413915a20849c59a969f9900 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 12 Dec 2022 23:51:46 +0530 Subject: [PATCH 20/81] fix: Throw correct errors when parsing diagrams with errors --- cSpell.json | 4 ++ packages/mermaid/src/Diagram.ts | 2 +- packages/mermaid/src/diagram.spec.ts | 67 ++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 packages/mermaid/src/diagram.spec.ts diff --git a/cSpell.json b/cSpell.json index 45e7fe99a..5711d29dc 100644 --- a/cSpell.json +++ b/cSpell.json @@ -14,6 +14,7 @@ "bilkent", "bisheng", "braintree", + "brkt", "brolin", "brotli", "classdef", @@ -60,12 +61,14 @@ "mindmaps", "mitigations", "mkdocs", + "mult", "orlandoni", "phpbb", "plantuml", "playfair", "pnpm", "podlite", + "quence", "ranksep", "rect", "rects", @@ -81,6 +84,7 @@ "substate", "sveidqvist", "techn", + "teststr", "treemap", "ts-nocheck", "tuleap", diff --git a/packages/mermaid/src/Diagram.ts b/packages/mermaid/src/Diagram.ts index a2349c255..83412e4aa 100644 --- a/packages/mermaid/src/Diagram.ts +++ b/packages/mermaid/src/Diagram.ts @@ -102,7 +102,6 @@ export const getDiagramFromText = ( try { // Trying to find the diagram getDiagram(type); - return new Diagram(txt, parseError); } catch (error) { const loader = getDiagramLoader(type); if (!loader) { @@ -118,6 +117,7 @@ export const getDiagramFromText = ( return new Diagram(txt, parseError); }); } + return new Diagram(txt, parseError); }; export default Diagram; diff --git a/packages/mermaid/src/diagram.spec.ts b/packages/mermaid/src/diagram.spec.ts new file mode 100644 index 000000000..ebe088a86 --- /dev/null +++ b/packages/mermaid/src/diagram.spec.ts @@ -0,0 +1,67 @@ +import { describe, test, expect } from 'vitest'; +import Diagram, { getDiagramFromText } from './Diagram'; +import { addDetector } from './diagram-api/detectType'; +import { addDiagrams } from './diagram-api/diagram-orchestration'; + +addDiagrams(); + +describe('diagram detection', () => { + test('should detect inbuilt diagrams', () => { + const graph = getDiagramFromText('graph TD; A-->B') as Diagram; + expect(graph).toBeInstanceOf(Diagram); + expect(graph.type).toBe('flowchart-v2'); + const sequence = getDiagramFromText( + 'sequenceDiagram; Alice->>+John: Hello John, how are you?' + ) as Diagram; + expect(sequence).toBeInstanceOf(Diagram); + expect(sequence.type).toBe('sequence'); + }); + + test('should detect external diagrams', async () => { + addDetector( + 'loki', + (str) => str.startsWith('loki'), + () => + Promise.resolve({ + id: 'loki', + diagram: { + db: {}, + parser: { + parse: () => { + // no-op + }, + parser: { + yy: {}, + }, + }, + renderer: {}, + styles: {}, + }, + }) + ); + const diagram = (await getDiagramFromText('loki TD; A-->B')) as Diagram; + expect(diagram).toBeInstanceOf(Diagram); + expect(diagram.type).toBe('loki'); + }); + + test('should throw the right error for incorrect diagram', () => { + expect(() => getDiagramFromText('graph TD; A-->')).toThrowErrorMatchingInlineSnapshot(` +"Parse error on line 3: +graph TD; A--> +--------------^ +Expecting 'AMP', 'ALPHA', 'COLON', 'PIPE', 'TESTSTR', 'DOWN', 'DEFAULT', 'NUM', 'COMMA', 'MINUS', 'BRKT', 'DOT', 'PUNCTUATION', 'UNICODE_TEXT', 'PLUS', 'EQUALS', 'MULT', 'UNDERSCORE', got 'EOF'" + `); + expect(() => getDiagramFromText('sequenceDiagram; A-->B')).toThrowErrorMatchingInlineSnapshot(` +"Parse error on line 1: +...quenceDiagram; A-->B +-----------------------^ +Expecting 'TXT', got 'NEWLINE'" + `); + }); + + test('should throw the right error for unregistered diagrams', () => { + expect(() => getDiagramFromText('thor TD; A-->B')).toThrowError( + 'No diagram type detected for text: thor TD; A-->B' + ); + }); +}); From fac3a4d29bc7335f6a9df59f2c72bb3ea094d7a6 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 12 Dec 2022 23:52:48 +0530 Subject: [PATCH 21/81] Bump mermaid version --- packages/mermaid/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 81d1d9be9..306ab318e 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -1,6 +1,6 @@ { "name": "mermaid", - "version": "9.3.0-rc.1", + "version": "9.3.0-rc.2", "description": "Markdown-ish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "main": "./dist/mermaid.min.js", "module": "./dist/mermaid.core.mjs", From 89451ca6406f27f9eb50f558bc07d98005f8e5a8 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Tue, 13 Dec 2022 00:22:57 +0530 Subject: [PATCH 22/81] fix: add .js to external imports. --- cSpell.json | 1 + packages/mermaid/src/accessibility.ts | 2 +- packages/mermaid/src/mermaidAPI.ts | 14 +++++++------- packages/mermaid/src/utils.ts | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/cSpell.json b/cSpell.json index 5711d29dc..4e9e4945a 100644 --- a/cSpell.json +++ b/cSpell.json @@ -85,6 +85,7 @@ "sveidqvist", "techn", "teststr", + "textlength", "treemap", "ts-nocheck", "tuleap", diff --git a/packages/mermaid/src/accessibility.ts b/packages/mermaid/src/accessibility.ts index b9e088e0b..ed28ff689 100644 --- a/packages/mermaid/src/accessibility.ts +++ b/packages/mermaid/src/accessibility.ts @@ -4,7 +4,7 @@ */ import { D3Element } from './mermaidAPI'; -import isEmpty from 'lodash-es/isEmpty'; +import isEmpty from 'lodash-es/isEmpty.js'; /** * Add aria-roledescription to the svg element to the diagramType diff --git a/packages/mermaid/src/mermaidAPI.ts b/packages/mermaid/src/mermaidAPI.ts index 193f5a9cc..a63071364 100644 --- a/packages/mermaid/src/mermaidAPI.ts +++ b/packages/mermaid/src/mermaidAPI.ts @@ -29,7 +29,7 @@ import utils, { directiveSanitizer } from './utils'; import DOMPurify from 'dompurify'; import { MermaidConfig } from './config.type'; import { evaluate } from './diagrams/common/common'; -import isEmpty from 'lodash-es/isEmpty'; +import isEmpty from 'lodash-es/isEmpty.js'; import { setA11yDiagramInfo, addSVGa11yTitleDescription } from './accessibility'; // diagram names that support classDef statements @@ -55,8 +55,8 @@ const IFRAME_SANDBOX_OPTS = 'allow-top-navigation-by-user-activation allow-popup const IFRAME_NOT_SUPPORTED_MSG = 'The "iframe" tag is not supported by your browser.'; // DOMPurify settings for svgCode -const DOMPURE_TAGS = ['foreignobject']; -const DOMPURE_ATTR = ['dominant-baseline']; +const DOMPURIFY_TAGS = ['foreignobject']; +const DOMPURIFY_ATTR = ['dominant-baseline']; // This is what is returned from getClasses(...) methods. // It is slightly renamed to ..StyleClassDef instead of just ClassDef because "class" is a greatly ambiguous and overloaded word. @@ -539,8 +539,8 @@ const render = function ( } else if (!isLooseSecurityLevel) { // Sanitize the svgCode using DOMPurify svgCode = DOMPurify.sanitize(svgCode, { - ADD_TAGS: DOMPURE_TAGS, - ADD_ATTR: DOMPURE_ATTR, + ADD_TAGS: DOMPURIFY_TAGS, + ADD_ATTR: DOMPURIFY_ATTR, }); } @@ -741,8 +741,8 @@ const renderAsync = async function ( } else if (!isLooseSecurityLevel) { // Sanitize the svgCode using DOMPurify svgCode = DOMPurify.sanitize(svgCode, { - ADD_TAGS: DOMPURE_TAGS, - ADD_ATTR: DOMPURE_ATTR, + ADD_TAGS: DOMPURIFY_TAGS, + ADD_ATTR: DOMPURIFY_ATTR, }); } diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts index 767fdaa7d..628bf37d3 100644 --- a/packages/mermaid/src/utils.ts +++ b/packages/mermaid/src/utils.ts @@ -21,7 +21,7 @@ import { log } from './logger'; import { detectType } from './diagram-api/detectType'; import assignWithDepth from './assignWithDepth'; import { MermaidConfig } from './config.type'; -import memoize from 'lodash-es/memoize'; +import memoize from 'lodash-es/memoize.js'; // Effectively an enum of the supported curve types, accessible by name const d3CurveTypes = { From 1d529d80d12a239a621afbcb8ed060c9e9a3edfd Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Tue, 13 Dec 2022 00:23:41 +0530 Subject: [PATCH 23/81] Bump mermaid version --- packages/mermaid/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 306ab318e..19e2325c1 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -1,6 +1,6 @@ { "name": "mermaid", - "version": "9.3.0-rc.2", + "version": "9.3.0-rc.3", "description": "Markdown-ish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "main": "./dist/mermaid.min.js", "module": "./dist/mermaid.core.mjs", From 3c44379af9b3149bdcedb2757c6aa4d02989b0aa Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Tue, 13 Dec 2022 00:34:31 +0530 Subject: [PATCH 24/81] fix: add .js to external imports. --- packages/mermaid/package.json | 2 +- packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js | 2 +- packages/mermaid/src/dagre-wrapper/mermaid-graphlib.spec.js | 2 +- packages/mermaid/src/diagrams/class/classRenderer-v2.js | 2 +- packages/mermaid/src/diagrams/er/erRenderer.js | 2 +- packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js | 2 +- packages/mermaid/src/diagrams/flowchart/flowRenderer.js | 2 +- .../src/diagrams/flowchart/parser/flow-direction.spec.js | 1 - packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js | 1 - packages/mermaid/src/diagrams/state/stateRenderer-v2.js | 2 +- packages/mermaid/src/utils.spec.js | 2 +- 11 files changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 19e2325c1..e4ce9e93a 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -1,6 +1,6 @@ { "name": "mermaid", - "version": "9.3.0-rc.3", + "version": "9.3.0-rc.4", "description": "Markdown-ish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "main": "./dist/mermaid.min.js", "module": "./dist/mermaid.core.mjs", diff --git a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js index 5722f7cc0..cb80e658f 100644 --- a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js +++ b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js @@ -1,7 +1,7 @@ /** Decorates with functions required by mermaids dagre-wrapper. */ import { log } from '../logger'; import * as graphlibJson from 'dagre-d3-es/src/graphlib/json'; -import * as graphlib from 'dagre-d3-es/src/graphlib'; +import * as graphlib from 'dagre-d3-es/src/graphlib.js'; export let clusterDb = {}; let descendants = {}; diff --git a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.spec.js b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.spec.js index f594e3430..ffc3e7803 100644 --- a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.spec.js +++ b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.spec.js @@ -1,5 +1,5 @@ import * as graphlibJson from 'dagre-d3-es/src/graphlib/json'; -import * as graphlib from 'dagre-d3-es/src/graphlib'; +import * as graphlib from 'dagre-d3-es/src/graphlib.js'; import { validate, adjustClustersAndEdges, diff --git a/packages/mermaid/src/diagrams/class/classRenderer-v2.js b/packages/mermaid/src/diagrams/class/classRenderer-v2.js index 3fecfcb9f..72bc3f0b1 100644 --- a/packages/mermaid/src/diagrams/class/classRenderer-v2.js +++ b/packages/mermaid/src/diagrams/class/classRenderer-v2.js @@ -1,5 +1,5 @@ import { select } from 'd3'; -import * as graphlib from 'dagre-d3-es/src/graphlib'; +import * as graphlib from 'dagre-d3-es/src/graphlib.js'; import { log } from '../../logger'; import { getConfig } from '../../config'; import { render } from '../../dagre-wrapper/index.js'; diff --git a/packages/mermaid/src/diagrams/er/erRenderer.js b/packages/mermaid/src/diagrams/er/erRenderer.js index ebf338ae1..59097760f 100644 --- a/packages/mermaid/src/diagrams/er/erRenderer.js +++ b/packages/mermaid/src/diagrams/er/erRenderer.js @@ -1,4 +1,4 @@ -import * as graphlib from 'dagre-d3-es/src/graphlib'; +import * as graphlib from 'dagre-d3-es/src/graphlib.js'; import { line, curveBasis, select } from 'd3'; import { layout as dagreLayout } from 'dagre-d3-es/src/dagre/index.js'; import { getConfig } from '../../config'; diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js index 3e46aaaa5..b09a3227d 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js +++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js @@ -1,4 +1,4 @@ -import * as graphlib from 'dagre-d3-es/src/graphlib'; +import * as graphlib from 'dagre-d3-es/src/graphlib.js'; import { select, curveLinear, selectAll } from 'd3'; import flowDb from './flowDb'; diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer.js b/packages/mermaid/src/diagrams/flowchart/flowRenderer.js index 6cbc65532..32ab31159 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowRenderer.js +++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer.js @@ -1,4 +1,4 @@ -import * as graphlib from 'dagre-d3-es/src/graphlib'; +import * as graphlib from 'dagre-d3-es/src/graphlib.js'; import { select, curveLinear, selectAll } from 'd3'; import { getConfig } from '../../config'; import { render as Render } from 'dagre-d3-es'; 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 5c2094737..7726ce0f7 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-direction.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-direction.spec.js @@ -1,6 +1,5 @@ import flowDb from '../flowDb'; import flow from './flow'; -import filter from 'lodash-es/filter'; import { setConfig } from '../../../config'; setConfig({ diff --git a/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js index 5ba6a5361..ae6f178b8 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js @@ -1,6 +1,5 @@ import flowDb from '../flowDb'; import flow from './flow'; -import filter from 'lodash-es/filter'; import { setConfig } from '../../../config'; setConfig({ diff --git a/packages/mermaid/src/diagrams/state/stateRenderer-v2.js b/packages/mermaid/src/diagrams/state/stateRenderer-v2.js index fa2470d6b..625dddef4 100644 --- a/packages/mermaid/src/diagrams/state/stateRenderer-v2.js +++ b/packages/mermaid/src/diagrams/state/stateRenderer-v2.js @@ -1,4 +1,4 @@ -import * as graphlib from 'dagre-d3-es/src/graphlib'; +import * as graphlib from 'dagre-d3-es/src/graphlib.js'; import { select } from 'd3'; import { getConfig } from '../../config'; import { render } from '../../dagre-wrapper/index.js'; diff --git a/packages/mermaid/src/utils.spec.js b/packages/mermaid/src/utils.spec.js index e983d21c8..e9a9fc7dc 100644 --- a/packages/mermaid/src/utils.spec.js +++ b/packages/mermaid/src/utils.spec.js @@ -3,7 +3,7 @@ import utils from './utils'; import assignWithDepth from './assignWithDepth'; import { detectType } from './diagram-api/detectType'; import { addDiagrams } from './diagram-api/diagram-orchestration'; -import memoize from 'lodash-es/memoize'; +import memoize from 'lodash-es/memoize.js'; import { MockedD3 } from './tests/MockedD3'; addDiagrams(); From 3f0b13a1311459d52d42d31f03adb9f6a6d54097 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Tue, 13 Dec 2022 00:38:54 +0530 Subject: [PATCH 25/81] fix: add .js to external imports. --- packages/mermaid/src/dagre-wrapper/index.js | 2 +- packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js | 4 ++-- packages/mermaid/src/dagre-wrapper/mermaid-graphlib.spec.js | 4 ++-- packages/mermaid/src/diagrams/class/classRenderer-v2.js | 2 +- packages/mermaid/src/diagrams/er/erRenderer.js | 2 +- packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js | 2 +- packages/mermaid/src/diagrams/flowchart/flowRenderer.js | 2 +- packages/mermaid/src/diagrams/state/stateRenderer-v2.js | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/mermaid/src/dagre-wrapper/index.js b/packages/mermaid/src/dagre-wrapper/index.js index e2d7d51f4..ce3ef6014 100644 --- a/packages/mermaid/src/dagre-wrapper/index.js +++ b/packages/mermaid/src/dagre-wrapper/index.js @@ -1,5 +1,5 @@ import { layout as dagreLayout } from 'dagre-d3-es/src/dagre/index.js'; -import * as graphlibJson from 'dagre-d3-es/src/graphlib/json'; +import * as graphlibJson from 'dagre-d3-es/src/graphlib/json.js'; import insertMarkers from './markers'; import { updateNodeBounds } from './shapes/util'; import { diff --git a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js index cb80e658f..875ac4def 100644 --- a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js +++ b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js @@ -1,7 +1,7 @@ /** Decorates with functions required by mermaids dagre-wrapper. */ import { log } from '../logger'; -import * as graphlibJson from 'dagre-d3-es/src/graphlib/json'; -import * as graphlib from 'dagre-d3-es/src/graphlib.js'; +import * as graphlibJson from 'dagre-d3-es/src/graphlib/json.js'; +import * as graphlib from 'dagre-d3-es/src/graphlib/index.js'; export let clusterDb = {}; let descendants = {}; diff --git a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.spec.js b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.spec.js index ffc3e7803..25fb75d64 100644 --- a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.spec.js +++ b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.spec.js @@ -1,5 +1,5 @@ -import * as graphlibJson from 'dagre-d3-es/src/graphlib/json'; -import * as graphlib from 'dagre-d3-es/src/graphlib.js'; +import * as graphlibJson from 'dagre-d3-es/src/graphlib/json.js'; +import * as graphlib from 'dagre-d3-es/src/graphlib/index.js'; import { validate, adjustClustersAndEdges, diff --git a/packages/mermaid/src/diagrams/class/classRenderer-v2.js b/packages/mermaid/src/diagrams/class/classRenderer-v2.js index 72bc3f0b1..d95c29fd5 100644 --- a/packages/mermaid/src/diagrams/class/classRenderer-v2.js +++ b/packages/mermaid/src/diagrams/class/classRenderer-v2.js @@ -1,5 +1,5 @@ import { select } from 'd3'; -import * as graphlib from 'dagre-d3-es/src/graphlib.js'; +import * as graphlib from 'dagre-d3-es/src/graphlib/index.js'; import { log } from '../../logger'; import { getConfig } from '../../config'; import { render } from '../../dagre-wrapper/index.js'; diff --git a/packages/mermaid/src/diagrams/er/erRenderer.js b/packages/mermaid/src/diagrams/er/erRenderer.js index 59097760f..e8b80b646 100644 --- a/packages/mermaid/src/diagrams/er/erRenderer.js +++ b/packages/mermaid/src/diagrams/er/erRenderer.js @@ -1,4 +1,4 @@ -import * as graphlib from 'dagre-d3-es/src/graphlib.js'; +import * as graphlib from 'dagre-d3-es/src/graphlib/index.js'; import { line, curveBasis, select } from 'd3'; import { layout as dagreLayout } from 'dagre-d3-es/src/dagre/index.js'; import { getConfig } from '../../config'; diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js index b09a3227d..29c7ba07a 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js +++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js @@ -1,4 +1,4 @@ -import * as graphlib from 'dagre-d3-es/src/graphlib.js'; +import * as graphlib from 'dagre-d3-es/src/graphlib/index.js'; import { select, curveLinear, selectAll } from 'd3'; import flowDb from './flowDb'; diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer.js b/packages/mermaid/src/diagrams/flowchart/flowRenderer.js index 32ab31159..63234b57c 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowRenderer.js +++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer.js @@ -1,4 +1,4 @@ -import * as graphlib from 'dagre-d3-es/src/graphlib.js'; +import * as graphlib from 'dagre-d3-es/src/graphlib/index.js'; import { select, curveLinear, selectAll } from 'd3'; import { getConfig } from '../../config'; import { render as Render } from 'dagre-d3-es'; diff --git a/packages/mermaid/src/diagrams/state/stateRenderer-v2.js b/packages/mermaid/src/diagrams/state/stateRenderer-v2.js index 625dddef4..ebe18535d 100644 --- a/packages/mermaid/src/diagrams/state/stateRenderer-v2.js +++ b/packages/mermaid/src/diagrams/state/stateRenderer-v2.js @@ -1,4 +1,4 @@ -import * as graphlib from 'dagre-d3-es/src/graphlib.js'; +import * as graphlib from 'dagre-d3-es/src/graphlib/index.js'; import { select } from 'd3'; import { getConfig } from '../../config'; import { render } from '../../dagre-wrapper/index.js'; From 9f9c95b0b3b6ac651df4f78721b9daf34c489a7a Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Tue, 13 Dec 2022 13:42:07 +0530 Subject: [PATCH 26/81] fix: Incorrect removal of existing elements --- docs/config/setup/modules/mermaidAPI.md | 19 +++---- packages/mermaid/src/mermaidAPI.spec.ts | 73 ++++++++++--------------- packages/mermaid/src/mermaidAPI.ts | 23 +++----- 3 files changed, 47 insertions(+), 68 deletions(-) diff --git a/docs/config/setup/modules/mermaidAPI.md b/docs/config/setup/modules/mermaidAPI.md index 1b840dcd3..40e4b567f 100644 --- a/docs/config/setup/modules/mermaidAPI.md +++ b/docs/config/setup/modules/mermaidAPI.md @@ -90,7 +90,7 @@ mermaid.initialize(config); #### Defined in -[mermaidAPI.ts:968](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L968) +[mermaidAPI.ts:961](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L961) ## Functions @@ -295,19 +295,18 @@ Put the svgCode into an iFrame. Return the iFrame code ### removeExistingElements -▸ **removeExistingElements**(`doc`, `isSandboxed`, `id`, `divSelector`, `iFrameSelector`): `void` +▸ **removeExistingElements**(`doc`, `id`, `divId`, `iFrameId`): `void` Remove any existing elements from the given document #### Parameters -| Name | Type | Description | -| :--------------- | :--------- | :---------------------------------------------- | -| `doc` | `Document` | the document to removed elements from | -| `isSandboxed` | `boolean` | whether or not we are in sandboxed mode | -| `id` | `string` | id for any existing SVG element | -| `divSelector` | `string` | selector for any existing enclosing div element | -| `iFrameSelector` | `string` | selector for any existing iFrame element | +| Name | Type | Description | +| :--------- | :--------- | :------------------------------------ | +| `doc` | `Document` | the document to removed elements from | +| `id` | `string` | id for any existing SVG element | +| `divId` | `string` | - | +| `iFrameId` | `string` | - | #### Returns @@ -315,4 +314,4 @@ Remove any existing elements from the given document #### Defined in -[mermaidAPI.ts:336](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L336) +[mermaidAPI.ts:335](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L335) diff --git a/packages/mermaid/src/mermaidAPI.spec.ts b/packages/mermaid/src/mermaidAPI.spec.ts index f9bad66d7..d2fd49f34 100644 --- a/packages/mermaid/src/mermaidAPI.spec.ts +++ b/packages/mermaid/src/mermaidAPI.spec.ts @@ -470,61 +470,48 @@ describe('mermaidAPI', function () { svgElement.id = svgId; const tempDivElement = givenDocument.createElement('div'); // doesn't matter what the tag is in the test tempDivElement.id = tempDivId; - const tempiFrameElement = givenDocument.createElement('div'); // doesn't matter what the tag is in the test + const tempiFrameElement = givenDocument.createElement('iframe'); // doesn't matter what the tag is in the test tempiFrameElement.id = tempIframeId; it('removes an existing element with given id', () => { rootHtml.appendChild(svgElement); + rootHtml.append(tempDivElement); + rootHtml.append(tempiFrameElement); + expect(givenDocument.getElementById(svgElement.id)).toEqual(svgElement); - removeExistingElements(givenDocument, false, svgId, tempDivId, tempIframeId); + expect(givenDocument.getElementById(tempDivElement.id)).toEqual(tempDivElement); + expect(givenDocument.getElementById(tempiFrameElement.id)).toEqual(tempiFrameElement); + removeExistingElements(givenDocument, svgId, tempDivId, tempIframeId); expect(givenDocument.getElementById(svgElement.id)).toBeNull(); + expect(givenDocument.getElementById(tempDivElement.id)).toBeNull(); + expect(givenDocument.getElementById(tempiFrameElement.id)).toBeNull(); }); - describe('is in sandboxed mode', () => { - const inSandboxedMode = true; + it('removes an existing iframe element even if div element is absent', () => { + tempiFrameElement.append(svgElement); + rootHtml.append(tempiFrameElement); - it('removes an existing element with the given iFrame selector', () => { - tempiFrameElement.append(svgElement); - rootHtml.append(tempiFrameElement); - rootHtml.append(tempDivElement); - - expect(givenDocument.getElementById(tempIframeId)).toEqual(tempiFrameElement); - expect(givenDocument.getElementById(tempDivId)).toEqual(tempDivElement); - expect(givenDocument.getElementById(svgId)).toEqual(svgElement); - removeExistingElements( - givenDocument, - inSandboxedMode, - svgId, - '#' + tempDivId, - '#' + tempIframeId - ); - expect(givenDocument.getElementById(tempDivId)).toEqual(tempDivElement); - expect(givenDocument.getElementById(tempIframeId)).toBeNull(); - expect(givenDocument.getElementById(svgId)).toBeNull(); - }); + expect(givenDocument.getElementById(tempIframeId)).toEqual(tempiFrameElement); + expect(givenDocument.getElementById(tempDivId)).toBeNull(); + expect(givenDocument.getElementById(svgId)).toEqual(svgElement); + removeExistingElements(givenDocument, svgId, tempDivId, tempIframeId); + expect(givenDocument.getElementById(tempDivId)).toBeNull(); + expect(givenDocument.getElementById(tempIframeId)).toBeNull(); + expect(givenDocument.getElementById(svgId)).toBeNull(); }); - describe('not in sandboxed mode', () => { - const inSandboxedMode = false; - it('removes an existing element with the given enclosing div selector', () => { - tempDivElement.append(svgElement); - rootHtml.append(tempDivElement); - rootHtml.append(tempiFrameElement); + it('removes both existing div and iframe elements when both are present', () => { + tempDivElement.append(svgElement); + rootHtml.append(tempDivElement); + rootHtml.append(tempiFrameElement); - expect(givenDocument.getElementById(tempIframeId)).toEqual(tempiFrameElement); - expect(givenDocument.getElementById(tempDivId)).toEqual(tempDivElement); - expect(givenDocument.getElementById(svgId)).toEqual(svgElement); - removeExistingElements( - givenDocument, - inSandboxedMode, - svgId, - '#' + tempDivId, - '#' + tempIframeId - ); - expect(givenDocument.getElementById(tempIframeId)).toEqual(tempiFrameElement); - expect(givenDocument.getElementById(tempDivId)).toBeNull(); - expect(givenDocument.getElementById(svgId)).toBeNull(); - }); + expect(givenDocument.getElementById(tempIframeId)).toEqual(tempiFrameElement); + expect(givenDocument.getElementById(tempDivId)).toEqual(tempDivElement); + expect(givenDocument.getElementById(svgId)).toEqual(svgElement); + removeExistingElements(givenDocument, svgId, tempDivId, tempIframeId); + expect(givenDocument.getElementById(tempIframeId)).toBeNull(); + expect(givenDocument.getElementById(tempDivId)).toBeNull(); + expect(givenDocument.getElementById(svgId)).toBeNull(); }); }); diff --git a/packages/mermaid/src/mermaidAPI.ts b/packages/mermaid/src/mermaidAPI.ts index a63071364..5bf11fad1 100644 --- a/packages/mermaid/src/mermaidAPI.ts +++ b/packages/mermaid/src/mermaidAPI.ts @@ -328,29 +328,22 @@ function sandboxedIframe(parentNode: D3Element, iFrameId: string): D3Element { * Remove any existing elements from the given document * * @param doc - the document to removed elements from - * @param isSandboxed - whether or not we are in sandboxed mode * @param id - id for any existing SVG element * @param divSelector - selector for any existing enclosing div element * @param iFrameSelector - selector for any existing iFrame element */ export const removeExistingElements = ( doc: Document, - isSandboxed: boolean, id: string, - divSelector: string, - iFrameSelector: string + divId: string, + iFrameId: string ) => { // Remove existing SVG element if it exists - const existingSvg = doc.getElementById(id); - if (existingSvg) { - existingSvg.remove(); - } - + doc.getElementById(id)?.remove(); // Remove previous temporary element if it exists - const element = isSandboxed ? doc.querySelector(iFrameSelector) : doc.querySelector(divSelector); - if (element) { - element.remove(); - } + // Both div and iframe needs to be cleared in case there is a config change happening between renders. + doc.getElementById(divId)?.remove(); + doc.getElementById(iFrameId)?.remove(); }; /** @@ -443,7 +436,7 @@ const render = function ( // No svgContainingElement was provided // If there is an existing element with the id, we remove it. This likely a previously rendered diagram - removeExistingElements(document, isSandboxed, id, iFrameID_selector, enclosingDivID_selector); + removeExistingElements(document, id, enclosingDivID, iFrameID); // Add the temporary div used for rendering with the enclosingDivID. // This temporary div will contain a svg with the id == id @@ -650,7 +643,7 @@ const renderAsync = async function ( // No svgContainingElement was provided // If there is an existing element with the id, we remove it. This likely a previously rendered diagram - removeExistingElements(document, isSandboxed, id, iFrameID_selector, enclosingDivID_selector); + removeExistingElements(document, id, enclosingDivID, iFrameID); // Add the temporary div used for rendering with the enclosingDivID. // This temporary div will contain a svg with the id == id From 2176bef537dbf668c5782ca22af8a777ad61b43d Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Tue, 13 Dec 2022 13:44:03 +0530 Subject: [PATCH 27/81] Bump mermaid version --- packages/mermaid/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index e4ce9e93a..1a271f27a 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -1,6 +1,6 @@ { "name": "mermaid", - "version": "9.3.0-rc.4", + "version": "9.3.0-rc.5", "description": "Markdown-ish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "main": "./dist/mermaid.min.js", "module": "./dist/mermaid.core.mjs", From 16b51800d0dd4c2271c2ea569d23f9eb12061551 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Wed, 14 Dec 2022 09:45:18 +0530 Subject: [PATCH 28/81] Update dagre-es --- packages/mermaid/package.json | 2 +- pnpm-lock.yaml | 20 +++++--------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 1a271f27a..3fa78bfe1 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -54,7 +54,7 @@ "dependencies": { "@braintree/sanitize-url": "^6.0.0", "d3": "^7.0.0", - "dagre-d3-es": "7.0.4", + "dagre-d3-es": "7.0.5", "dompurify": "2.4.1", "khroma": "^2.0.0", "lodash-es": "^4.17.21", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 55d775801..3a9195738 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -173,8 +173,8 @@ importers: specifier: ^7.0.0 version: 7.6.1 dagre-d3-es: - specifier: 7.0.4 - version: 7.0.4 + specifier: 7.0.5 + version: 7.0.5 dompurify: specifier: 2.4.1 version: 2.4.1 @@ -4899,8 +4899,8 @@ packages: d3-zoom: 3.0.0 dev: false - /dagre-d3-es/7.0.4: - resolution: {integrity: sha512-fQL8ldFR9UYpecz48d1smrXNJ9zGUK38Vl5OzX6Fhn9LR+oQh0GzHRPQylP5kWawmMTKm1QtqcHMVySMJ5CYaQ==} + /dagre-d3-es/7.0.5: + resolution: {integrity: sha512-E42LEJ3KFzXCwNlYkY69HOlksJ2g+uuRIZkHd09Fe0yxOJqzHIzVn78Myjv8ZwFpFt9Izax2KHOK6B/GHfawTA==} dependencies: d3: 7.6.1 lodash-es: 4.17.21 @@ -6161,16 +6161,6 @@ packages: resolution: {integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==} dev: true - /follow-redirects/1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: true - /follow-redirects/1.15.2_debug@4.3.2: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} @@ -6715,7 +6705,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2 + follow-redirects: 1.15.2_debug@4.3.2 requires-port: 1.0.0 transitivePeerDependencies: - debug From d194e78677d398b9e5a3a083388857ffe48deff2 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Wed, 14 Dec 2022 09:45:34 +0530 Subject: [PATCH 29/81] Bump mermaid version --- packages/mermaid/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 3fa78bfe1..87837f81d 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -1,6 +1,6 @@ { "name": "mermaid", - "version": "9.3.0-rc.5", + "version": "9.3.0-rc.6", "description": "Markdown-ish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "main": "./dist/mermaid.min.js", "module": "./dist/mermaid.core.mjs", From 152994047e74edd5731bde1dcedbad5602ad1c4e Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Thu, 15 Dec 2022 09:12:08 +0530 Subject: [PATCH 30/81] bump dagre-es 7.0.6 --- packages/mermaid/package.json | 4 +-- pnpm-lock.yaml | 46 +++++++++++++++++++++++++++++++---- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 87837f81d..96f0a1c49 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -1,6 +1,6 @@ { "name": "mermaid", - "version": "9.3.0-rc.6", + "version": "9.3.0-rc.7", "description": "Markdown-ish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "main": "./dist/mermaid.min.js", "module": "./dist/mermaid.core.mjs", @@ -54,7 +54,7 @@ "dependencies": { "@braintree/sanitize-url": "^6.0.0", "d3": "^7.0.0", - "dagre-d3-es": "7.0.5", + "dagre-d3-es": "7.0.6", "dompurify": "2.4.1", "khroma": "^2.0.0", "lodash-es": "^4.17.21", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3a9195738..af68b5340 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -173,8 +173,8 @@ importers: specifier: ^7.0.0 version: 7.6.1 dagre-d3-es: - specifier: 7.0.5 - version: 7.0.5 + specifier: 7.0.6 + version: 7.0.6 dompurify: specifier: 2.4.1 version: 2.4.1 @@ -4899,10 +4899,46 @@ packages: d3-zoom: 3.0.0 dev: false - /dagre-d3-es/7.0.5: - resolution: {integrity: sha512-E42LEJ3KFzXCwNlYkY69HOlksJ2g+uuRIZkHd09Fe0yxOJqzHIzVn78Myjv8ZwFpFt9Izax2KHOK6B/GHfawTA==} + /d3/7.7.0: + resolution: {integrity: sha512-VEwHCMgMjD2WBsxeRGUE18RmzxT9Bn7ghDpzvTEvkLSBAKgTMydJjouZTjspgQfRHpPt/PB3EHWBa6SSyFQq4g==} + engines: {node: '>=12'} dependencies: - d3: 7.6.1 + d3-array: 3.2.0 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.0 + d3-delaunay: 6.0.2 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.0 + d3-geo: 3.0.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.0.1 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.0.0 + d3-selection: 3.0.0 + d3-shape: 3.1.0 + d3-time: 3.0.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1_d3-selection@3.0.0 + d3-zoom: 3.0.0 + dev: false + + /dagre-d3-es/7.0.6: + resolution: {integrity: sha512-CaaE/nZh205ix+Up4xsnlGmpog5GGm81Upi2+/SBHxwNwrccBb3K51LzjZ1U6hgvOlAEUsVWf1xSTzCyKpJ6+Q==} + dependencies: + d3: 7.7.0 lodash-es: 4.17.21 dev: false From 774512df570b8105ea535ebc88daafbf2d4ded2b Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Thu, 15 Dec 2022 14:18:54 +0530 Subject: [PATCH 31/81] v9.3.0 --- packages/mermaid-mindmap/package.json | 4 ++-- packages/mermaid/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/mermaid-mindmap/package.json b/packages/mermaid-mindmap/package.json index 2795cf73b..0f1a98303 100644 --- a/packages/mermaid-mindmap/package.json +++ b/packages/mermaid-mindmap/package.json @@ -1,7 +1,7 @@ { "name": "@mermaid-js/mermaid-mindmap", - "version": "9.3.0-rc1", - "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", + "version": "9.3.0", + "description": "Mindmap diagram module for MermaidJS.", "module": "dist/mermaid-mindmap.core.mjs", "types": "dist/detector.d.ts", "type": "module", diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 96f0a1c49..24d17fd36 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -1,6 +1,6 @@ { "name": "mermaid", - "version": "9.3.0-rc.7", + "version": "9.3.0", "description": "Markdown-ish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "main": "./dist/mermaid.min.js", "module": "./dist/mermaid.core.mjs", From bbc4e90c8910a835e4f34a397148bbd3d1d208e9 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Thu, 15 Dec 2022 14:57:08 +0530 Subject: [PATCH 32/81] fix Top level await --- .../mermaid/src/docs/.vitepress/theme/mermaid.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/mermaid/src/docs/.vitepress/theme/mermaid.ts b/packages/mermaid/src/docs/.vitepress/theme/mermaid.ts index b287346f9..e9a038ec4 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/mermaid.ts +++ b/packages/mermaid/src/docs/.vitepress/theme/mermaid.ts @@ -1,13 +1,16 @@ import mermaid, { type MermaidConfig } from 'mermaid'; import mindmap from '@mermaid-js/mermaid-mindmap'; -try { - await mermaid.registerExternalDiagrams([mindmap]); -} catch (e) { - console.error(e); -} +const init = (async () => { + try { + await mermaid.registerExternalDiagrams([mindmap]); + } catch (e) { + console.error(e); + } +})(); export const render = async (id: string, code: string, config: MermaidConfig): Promise => { + await init; mermaid.initialize(config); const svg = await mermaid.renderAsync(id, code); return svg; From 3fb0b2792eb726af9c8f088e1c1076f0b0173b4a Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Thu, 15 Dec 2022 15:33:51 +0530 Subject: [PATCH 33/81] fix: Add icon css --- docs/syntax/mindmap.md | 2 +- packages/mermaid/src/docs/.vitepress/theme/custom.css | 3 +++ packages/mermaid/src/docs/syntax/mindmap.md | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/syntax/mindmap.md b/docs/syntax/mindmap.md index 0214a5512..7e1d9c080 100644 --- a/docs/syntax/mindmap.md +++ b/docs/syntax/mindmap.md @@ -180,7 +180,7 @@ More shapes will be added, beginning with the shapes available in flowcharts. # Icons and classes -## icons +## Icons As with flowcharts you can add icons to your nodes but with an updated syntax. The styling for the font based icons are added during the integration so that they are available for the web page. _This is not something a diagram author can do but has to be done with the site administrator or the integrator_. Once the icon fonts are in place you add them to the mind map nodes using the `::icon()` syntax. You place the classes for the icon within the parenthesis like in the following example where icons for material design and fontawesome 4 are displayed. The intention is that this approach should be used for all diagrams supporting icons. **Experimental feature:** This wider scope is also the reason Mindmaps are experimental as this syntax and approach could change. diff --git a/packages/mermaid/src/docs/.vitepress/theme/custom.css b/packages/mermaid/src/docs/.vitepress/theme/custom.css index e1ef049cd..28ef8d338 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/custom.css +++ b/packages/mermaid/src/docs/.vitepress/theme/custom.css @@ -1,3 +1,6 @@ +@import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css'); +@import url('https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css'); + :root { --vp-c-brand: #ff3670; --vp-c-brand-light: #ff5e8c; diff --git a/packages/mermaid/src/docs/syntax/mindmap.md b/packages/mermaid/src/docs/syntax/mindmap.md index beaae7ad5..3b737a572 100644 --- a/packages/mermaid/src/docs/syntax/mindmap.md +++ b/packages/mermaid/src/docs/syntax/mindmap.md @@ -112,7 +112,7 @@ More shapes will be added, beginning with the shapes available in flowcharts. # Icons and classes -## icons +## Icons As with flowcharts you can add icons to your nodes but with an updated syntax. The styling for the font based icons are added during the integration so that they are available for the web page. _This is not something a diagram author can do but has to be done with the site administrator or the integrator_. Once the icon fonts are in place you add them to the mind map nodes using the `::icon()` syntax. You place the classes for the icon within the parenthesis like in the following example where icons for material design and fontawesome 4 are displayed. The intention is that this approach should be used for all diagrams supporting icons. **Experimental feature:** This wider scope is also the reason Mindmaps are experimental as this syntax and approach could change. From d841ad8f3ecc34e4091bc8c1eaaa981e6d7e2c2a Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Thu, 15 Dec 2022 17:09:24 +0530 Subject: [PATCH 34/81] Update vitepress --- packages/mermaid/package.json | 4 +- pnpm-lock.yaml | 438 +++++++++++++++++++++++++++------- 2 files changed, 360 insertions(+), 82 deletions(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 24d17fd36..f31fac80b 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -93,8 +93,8 @@ "typedoc-plugin-markdown": "^3.13.6", "typescript": "^4.8.4", "unist-util-flatmap": "^1.0.0", - "vitepress": "^1.0.0-alpha.28", - "vitepress-plugin-search": "^1.0.4-alpha.15" + "vitepress": "^1.0.0-alpha.31", + "vitepress-plugin-search": "^1.0.4-alpha.16" }, "files": [ "dist", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af68b5340..01cb0787e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -285,11 +285,11 @@ importers: specifier: ^1.0.0 version: 1.0.0 vitepress: - specifier: ^1.0.0-alpha.28 - version: 1.0.0-alpha.28_tbpndr44ulefs3hehwpi2mkf2y + specifier: ^1.0.0-alpha.31 + version: 1.0.0-alpha.31_tbpndr44ulefs3hehwpi2mkf2y vitepress-plugin-search: - specifier: ^1.0.4-alpha.15 - version: 1.0.4-alpha.15_s3edpouswd4dgoi2en7bdlrp54 + specifier: ^1.0.4-alpha.16 + version: 1.0.4-alpha.16_ifjhkyx3os4sbm7zdnvthc52am packages/mermaid-example-diagram: devDependencies: @@ -1727,6 +1727,96 @@ packages: dev: true optional: true + /@esbuild/android-arm/0.16.7: + resolution: {integrity: sha512-yhzDbiVcmq6T1/XEvdcJIVcXHdLjDJ5cQ0Dp9R9p9ERMBTeO1dR5tc8YYv8zwDeBw1xZm+Eo3MRo8cwclhBS0g==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64/0.16.7: + resolution: {integrity: sha512-tYFw0lBJSEvLoGzzYh1kXuzoX1iPkbOk3O29VqzQb0HbOy7t/yw1hGkvwoJhXHwzQUPsShyYcTgRf6bDBcfnTw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64/0.16.7: + resolution: {integrity: sha512-3P2OuTxwAtM3k/yEWTNUJRjMPG1ce8rXs51GTtvEC5z1j8fC1plHeVVczdeHECU7aM2/Buc0MwZ6ciM/zysnWg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64/0.16.7: + resolution: {integrity: sha512-VUb9GK23z8jkosHU9yJNUgQpsfJn+7ZyBm6adi2Ec5/U241eR1tAn82QicnUzaFDaffeixiHwikjmnec/YXEZg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64/0.16.7: + resolution: {integrity: sha512-duterlv3tit3HI9vhzMWnSVaB1B6YsXpFq1Ntd6Fou82BB1l4tucYy3FI9dHv3tvtDuS0NiGf/k6XsdBqPZ01w==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64/0.16.7: + resolution: {integrity: sha512-9kkycpBFes/vhi7B7o0cf+q2WdJi+EpVzpVTqtWFNiutARWDFFLcB93J8PR1cG228sucsl3B+7Ts27izE6qiaQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64/0.16.7: + resolution: {integrity: sha512-5Ahf6jzWXJ4J2uh9dpy5DKOO+PeRUE/9DMys6VuYfwgQzd6n5+pVFm58L2Z2gRe611RX6SdydnNaiIKM3svY7g==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm/0.16.7: + resolution: {integrity: sha512-QqJnyCfu5OF78Olt7JJSZ7OSv/B4Hf+ZJWp4kkq9xwMsgu7yWq3crIic8gGOpDYTqVKKMDAVDgRXy5Wd/nWZyQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64/0.16.7: + resolution: {integrity: sha512-2wv0xYDskk2+MzIm/AEprDip39a23Chptc4mL7hsHg26P0gD8RUhzmDu0KCH2vMThUI1sChXXoK9uH0KYQKaDg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32/0.16.7: + resolution: {integrity: sha512-APVYbEilKbD5ptmKdnIcXej2/+GdV65TfTjxR2Uk8t1EsOk49t6HapZW6DS/Bwlvh5hDwtLapdSumIVNGxgqLg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64/0.15.13: resolution: {integrity: sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==} engines: {node: '>=12'} @@ -1736,6 +1826,114 @@ packages: dev: true optional: true + /@esbuild/linux-loong64/0.16.7: + resolution: {integrity: sha512-5wPUAGclplQrAW7EFr3F84Y/d++7G0KykohaF4p54+iNWhUnMVU8Bh2sxiEOXUy4zKIdpHByMgJ5/Ko6QhtTUw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el/0.16.7: + resolution: {integrity: sha512-hxzlXtWF6yWfkE/SMTscNiVqLOAn7fOuIF3q/kiZaXxftz1DhZW/HpnTmTTWrzrS7zJWQxHHT4QSxyAj33COmA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64/0.16.7: + resolution: {integrity: sha512-WM83Dac0LdXty5xPhlOuCD5Egfk1xLND/oRLYeB7Jb/tY4kzFSDgLlq91wYbHua/s03tQGA9iXvyjgymMw62Vw==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64/0.16.7: + resolution: {integrity: sha512-3nkNnNg4Ax6MS/l8O8Ynq2lGEVJYyJ2EoY3PHjNJ4PuZ80EYLMrFTFZ4L/Hc16AxgtXKwmNP9TM0YKNiBzBiJQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x/0.16.7: + resolution: {integrity: sha512-3SA/2VJuv0o1uD7zuqxEP+RrAyRxnkGddq0bwHQ98v1KNlzXD/JvxwTO3T6GM5RH6JUd29RTVQTOJfyzMkkppA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64/0.16.7: + resolution: {integrity: sha512-xi/tbqCqvPIzU+zJVyrpz12xqciTAPMi2fXEWGnapZymoGhuL2GIWIRXg4O2v5BXaYA5TSaiKYE14L0QhUTuQg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64/0.16.7: + resolution: {integrity: sha512-NUsYbq3B+JdNKn8SXkItFvdes9qTwEoS3aLALtiWciW/ystiCKM20Fgv9XQBOXfhUHyh5CLEeZDXzLOrwBXuCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64/0.16.7: + resolution: {integrity: sha512-qjwzsgeve9I8Tbsko2FEkdSk2iiezuNGFgipQxY/736NePXDaDZRodIejYGWOlbYXugdxb0nif5yvypH6lKBmA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64/0.16.7: + resolution: {integrity: sha512-mFWDz4RoBTzPphTCkM7Kc7Qpa0o/Z01acajR+Ai7LdfKgcP/C6jYOaKwv7nKzD0+MjOT20j7You9g4ozYy1dKQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64/0.16.7: + resolution: {integrity: sha512-m39UmX19RvEIuC8sYZ0M+eQtdXw4IePDSZ78ZQmYyFaXY9krq4YzQCK2XWIJomNLtg4q+W5aXr8bW3AbqWNoVg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32/0.16.7: + resolution: {integrity: sha512-1cbzSEZA1fANwmT6rjJ4G1qQXHxCxGIcNYFYR9ctI82/prT38lnwSRZ0i5p/MVXksw9eMlHlet6pGu2/qkXFCg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64/0.16.7: + resolution: {integrity: sha512-QaQ8IH0JLacfGf5cf0HCCPnQuCTd/dAI257vXBgb/cccKGbH/6pVtI1gwhdAQ0Y48QSpTIFrh9etVyNdZY+zzw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2853,15 +3051,15 @@ packages: eslint-visitor-keys: 3.3.0 dev: true - /@vitejs/plugin-vue/3.2.0_vite@3.2.3+vue@3.2.41: - resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==} + /@vitejs/plugin-vue/4.0.0_vite@4.0.1+vue@3.2.45: + resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^3.0.0 + vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 3.2.3 - vue: 3.2.41 + vite: 4.0.1 + vue: 3.2.45 dev: true /@vitest/coverage-c8/0.25.1_oullksb5ic6y72oh2wekoaiuii: @@ -2889,114 +3087,113 @@ packages: sirv: 2.0.2 dev: true - /@vue/compiler-core/3.2.41: - resolution: {integrity: sha512-oA4mH6SA78DT+96/nsi4p9DX97PHcNROxs51lYk7gb9Z4BPKQ3Mh+BLn6CQZBw857Iuhu28BfMSRHAlPvD4vlw==} + /@vue/compiler-core/3.2.45: + resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==} dependencies: '@babel/parser': 7.19.1 - '@vue/shared': 3.2.41 + '@vue/shared': 3.2.45 estree-walker: 2.0.2 source-map: 0.6.1 dev: true - /@vue/compiler-dom/3.2.41: - resolution: {integrity: sha512-xe5TbbIsonjENxJsYRbDJvthzqxLNk+tb3d/c47zgREDa/PCp6/Y4gC/skM4H6PIuX5DAxm7fFJdbjjUH2QTMw==} + /@vue/compiler-dom/3.2.45: + resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==} dependencies: - '@vue/compiler-core': 3.2.41 - '@vue/shared': 3.2.41 + '@vue/compiler-core': 3.2.45 + '@vue/shared': 3.2.45 dev: true - /@vue/compiler-sfc/3.2.41: - resolution: {integrity: sha512-+1P2m5kxOeaxVmJNXnBskAn3BenbTmbxBxWOtBq3mQTCokIreuMULFantBUclP0+KnzNCMOvcnKinqQZmiOF8w==} - requiresBuild: true + /@vue/compiler-sfc/3.2.45: + resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==} dependencies: '@babel/parser': 7.19.1 - '@vue/compiler-core': 3.2.41 - '@vue/compiler-dom': 3.2.41 - '@vue/compiler-ssr': 3.2.41 - '@vue/reactivity-transform': 3.2.41 - '@vue/shared': 3.2.41 + '@vue/compiler-core': 3.2.45 + '@vue/compiler-dom': 3.2.45 + '@vue/compiler-ssr': 3.2.45 + '@vue/reactivity-transform': 3.2.45 + '@vue/shared': 3.2.45 estree-walker: 2.0.2 magic-string: 0.25.9 postcss: 8.4.18 source-map: 0.6.1 dev: true - /@vue/compiler-ssr/3.2.41: - resolution: {integrity: sha512-Y5wPiNIiaMz/sps8+DmhaKfDm1xgj6GrH99z4gq2LQenfVQcYXmHIOBcs5qPwl7jaW3SUQWjkAPKMfQemEQZwQ==} + /@vue/compiler-ssr/3.2.45: + resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==} dependencies: - '@vue/compiler-dom': 3.2.41 - '@vue/shared': 3.2.41 + '@vue/compiler-dom': 3.2.45 + '@vue/shared': 3.2.45 dev: true /@vue/devtools-api/6.4.5: resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==} dev: true - /@vue/reactivity-transform/3.2.41: - resolution: {integrity: sha512-mK5+BNMsL4hHi+IR3Ft/ho6Za+L3FA5j8WvreJ7XzHrqkPq8jtF/SMo7tuc9gHjLDwKZX1nP1JQOKo9IEAn54A==} + /@vue/reactivity-transform/3.2.45: + resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==} dependencies: '@babel/parser': 7.19.1 - '@vue/compiler-core': 3.2.41 - '@vue/shared': 3.2.41 + '@vue/compiler-core': 3.2.45 + '@vue/shared': 3.2.45 estree-walker: 2.0.2 magic-string: 0.25.9 dev: true - /@vue/reactivity/3.2.41: - resolution: {integrity: sha512-9JvCnlj8uc5xRiQGZ28MKGjuCoPhhTwcoAdv3o31+cfGgonwdPNuvqAXLhlzu4zwqavFEG5tvaoINQEfxz+l6g==} + /@vue/reactivity/3.2.45: + resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==} dependencies: - '@vue/shared': 3.2.41 + '@vue/shared': 3.2.45 dev: true - /@vue/runtime-core/3.2.41: - resolution: {integrity: sha512-0LBBRwqnI0p4FgIkO9q2aJBBTKDSjzhnxrxHYengkAF6dMOjeAIZFDADAlcf2h3GDALWnblbeprYYpItiulSVQ==} + /@vue/runtime-core/3.2.45: + resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==} dependencies: - '@vue/reactivity': 3.2.41 - '@vue/shared': 3.2.41 + '@vue/reactivity': 3.2.45 + '@vue/shared': 3.2.45 dev: true - /@vue/runtime-dom/3.2.41: - resolution: {integrity: sha512-U7zYuR1NVIP8BL6jmOqmapRAHovEFp7CSw4pR2FacqewXNGqZaRfHoNLQsqQvVQ8yuZNZtxSZy0FFyC70YXPpA==} + /@vue/runtime-dom/3.2.45: + resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==} dependencies: - '@vue/runtime-core': 3.2.41 - '@vue/shared': 3.2.41 + '@vue/runtime-core': 3.2.45 + '@vue/shared': 3.2.45 csstype: 2.6.21 dev: true - /@vue/server-renderer/3.2.41_vue@3.2.41: - resolution: {integrity: sha512-7YHLkfJdTlsZTV0ae5sPwl9Gn/EGr2hrlbcS/8naXm2CDpnKUwC68i1wGlrYAfIgYWL7vUZwk2GkYLQH5CvFig==} + /@vue/server-renderer/3.2.45_vue@3.2.45: + resolution: {integrity: sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==} peerDependencies: - vue: 3.2.41 + vue: 3.2.45 dependencies: - '@vue/compiler-ssr': 3.2.41 - '@vue/shared': 3.2.41 - vue: 3.2.41 + '@vue/compiler-ssr': 3.2.45 + '@vue/shared': 3.2.45 + vue: 3.2.45 dev: true - /@vue/shared/3.2.41: - resolution: {integrity: sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw==} + /@vue/shared/3.2.45: + resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==} dev: true - /@vueuse/core/9.4.0_vue@3.2.41: - resolution: {integrity: sha512-JzgenGj1ZF2BHOen5rsFiAyyI9sXAv7aKhNLlm9b7SwYQeKTcxTWdhudonURCSP3Egl9NQaRBzes2lv/1JUt/Q==} + /@vueuse/core/9.6.0_vue@3.2.45: + resolution: {integrity: sha512-qGUcjKQXHgN+jqXEgpeZGoxdCbIDCdVPz3QiF1uyecVGbMuM63o96I1GjYx5zskKgRI0FKSNsVWM7rwrRMTf6A==} dependencies: '@types/web-bluetooth': 0.0.16 - '@vueuse/metadata': 9.4.0 - '@vueuse/shared': 9.4.0_vue@3.2.41 - vue-demi: 0.13.11_vue@3.2.41 + '@vueuse/metadata': 9.6.0 + '@vueuse/shared': 9.6.0_vue@3.2.45 + vue-demi: 0.13.11_vue@3.2.45 transitivePeerDependencies: - '@vue/composition-api' - vue dev: true - /@vueuse/metadata/9.4.0: - resolution: {integrity: sha512-7GKMdGAsJyQJl35MYOz/RDpP0FxuiZBRDSN79QIPbdqYx4Sd0sVTnIC68KJ6Oln0t0SouvSUMvRHuno216Ud2Q==} + /@vueuse/metadata/9.6.0: + resolution: {integrity: sha512-sIC8R+kWkIdpi5X2z2Gk8TRYzmczDwHRhEFfCu2P+XW2JdPoXrziqsGpDDsN7ykBx4ilwieS7JUIweVGhvZ93w==} dev: true - /@vueuse/shared/9.4.0_vue@3.2.41: - resolution: {integrity: sha512-fTuem51KwMCnqUKkI8B57qAIMcFovtGgsCtAeqxIzH3i6nE9VYge+gVfneNHAAy7lj8twbkNfqQSygOPJTm4tQ==} + /@vueuse/shared/9.6.0_vue@3.2.45: + resolution: {integrity: sha512-/eDchxYYhkHnFyrb00t90UfjCx94kRHxc7J1GtBCqCG4HyPMX+krV9XJgVtWIsAMaxKVU4fC8NSUviG1JkwhUQ==} dependencies: - vue-demi: 0.13.11_vue@3.2.41 + vue-demi: 0.13.11_vue@3.2.45 transitivePeerDependencies: - '@vue/composition-api' - vue @@ -5541,6 +5738,36 @@ packages: esbuild-windows-arm64: 0.15.13 dev: true + /esbuild/0.16.7: + resolution: {integrity: sha512-P6OBFYFSQOGzfApqCeYKqfKRRbCIRsdppTXFo4aAvtiW3o8TTyiIplBvHJI171saPAiy3WlawJHCveJVIOIx1A==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.16.7 + '@esbuild/android-arm64': 0.16.7 + '@esbuild/android-x64': 0.16.7 + '@esbuild/darwin-arm64': 0.16.7 + '@esbuild/darwin-x64': 0.16.7 + '@esbuild/freebsd-arm64': 0.16.7 + '@esbuild/freebsd-x64': 0.16.7 + '@esbuild/linux-arm': 0.16.7 + '@esbuild/linux-arm64': 0.16.7 + '@esbuild/linux-ia32': 0.16.7 + '@esbuild/linux-loong64': 0.16.7 + '@esbuild/linux-mips64el': 0.16.7 + '@esbuild/linux-ppc64': 0.16.7 + '@esbuild/linux-riscv64': 0.16.7 + '@esbuild/linux-s390x': 0.16.7 + '@esbuild/linux-x64': 0.16.7 + '@esbuild/netbsd-x64': 0.16.7 + '@esbuild/openbsd-x64': 0.16.7 + '@esbuild/sunos-x64': 0.16.7 + '@esbuild/win32-arm64': 0.16.7 + '@esbuild/win32-ia32': 0.16.7 + '@esbuild/win32-x64': 0.16.7 + dev: true + /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -9057,6 +9284,15 @@ packages: source-map-js: 1.0.2 dev: true + /postcss/8.4.20: + resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /preact/10.11.0: resolution: {integrity: sha512-Fk6+vB2kb6mSJfDgODq0YDhMfl0HNtK5+Uc9QqECO4nlyPAQwCI+BKyWO//idA7ikV7o+0Fm6LQmNuQi1wXI1w==} dev: true @@ -9520,6 +9756,14 @@ packages: fsevents: 2.3.2 dev: true + /rollup/3.7.4: + resolution: {integrity: sha512-jN9rx3k5pfg9H9al0r0y1EYKSeiRANZRYX32SuNXAnKzh6cVyf4LZVto1KAuDnbHT03E1CpsgqDKaqQ8FZtgxw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -9873,6 +10117,7 @@ packages: /sourcemap-codec/1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead dev: true /spawn-command/0.0.2-1: @@ -10774,8 +11019,41 @@ packages: fsevents: 2.3.2 dev: true - /vitepress-plugin-search/1.0.4-alpha.15_s3edpouswd4dgoi2en7bdlrp54: - resolution: {integrity: sha512-Ef/VkhTVYlECVI0H9Ck6745UNPfYFppAqnlxVSMJXdxP2vjOZ5TYNczlTTQ2p9dh16MFw/IurbL1/GrG4nXdNw==} + /vite/4.0.1: + resolution: {integrity: sha512-kZQPzbDau35iWOhy3CpkrRC7It+HIHtulAzBhMqzGHKRf/4+vmh8rPDDdv98SWQrFWo6//3ozwsRmwQIPZsK9g==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.16.7 + postcss: 8.4.20 + resolve: 1.22.1 + rollup: 3.7.4 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vitepress-plugin-search/1.0.4-alpha.16_ifjhkyx3os4sbm7zdnvthc52am: + resolution: {integrity: sha512-D+rs7bwzH+IO+7T9NlxvqSOqmSKbN1yHxUoqClTy5JH+DomL3CcrH2TgSvXc2s58ztlc1dC07c7THo4cNjlUAg==} engines: {node: ^14.13.1 || ^16.7.0 || >=18} peerDependencies: flexsearch: ^0.7.31 @@ -10788,23 +11066,23 @@ packages: flexsearch: 0.7.31 markdown-it: 13.0.1 vite: 3.2.3 - vitepress: 1.0.0-alpha.28_tbpndr44ulefs3hehwpi2mkf2y - vue: 3.2.41 + vitepress: 1.0.0-alpha.31_tbpndr44ulefs3hehwpi2mkf2y + vue: 3.2.45 dev: true - /vitepress/1.0.0-alpha.28_tbpndr44ulefs3hehwpi2mkf2y: - resolution: {integrity: sha512-pvbLssDMgLUN1terajmPlFBxHSDGO4DqwexKbjFyr7LeELerVuwGrG6F2J1hxmwOlbpLd1kHXEDqGm9JX/kTDQ==} + /vitepress/1.0.0-alpha.31_tbpndr44ulefs3hehwpi2mkf2y: + resolution: {integrity: sha512-FWFXLs7WLbFbemxjBWo2S2+qUZCIoeLLyAKfVUpIu3LUB8oQ8cyIANRGO6f6zsM51u2bvJU9Sm+V6Z0WjOWS2Q==} hasBin: true dependencies: '@docsearch/css': 3.3.0 '@docsearch/js': 3.3.0_tbpndr44ulefs3hehwpi2mkf2y - '@vitejs/plugin-vue': 3.2.0_vite@3.2.3+vue@3.2.41 + '@vitejs/plugin-vue': 4.0.0_vite@4.0.1+vue@3.2.45 '@vue/devtools-api': 6.4.5 - '@vueuse/core': 9.4.0_vue@3.2.41 + '@vueuse/core': 9.6.0_vue@3.2.45 body-scroll-lock: 4.0.0-beta.0 shiki: 0.11.1 - vite: 3.2.3 - vue: 3.2.41 + vite: 4.0.1 + vue: 3.2.45 transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -10956,7 +11234,7 @@ packages: resolution: {integrity: sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ==} dev: true - /vue-demi/0.13.11_vue@3.2.41: + /vue-demi/0.13.11_vue@3.2.45: resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} engines: {node: '>=12'} hasBin: true @@ -10968,17 +11246,17 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.2.41 + vue: 3.2.45 dev: true - /vue/3.2.41: - resolution: {integrity: sha512-uuuvnrDXEeZ9VUPljgHkqB5IaVO8SxhPpqF2eWOukVrBnRBx2THPSGQBnVRt0GrIG1gvCmFXMGbd7FqcT1ixNQ==} + /vue/3.2.45: + resolution: {integrity: sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==} dependencies: - '@vue/compiler-dom': 3.2.41 - '@vue/compiler-sfc': 3.2.41 - '@vue/runtime-dom': 3.2.41 - '@vue/server-renderer': 3.2.41_vue@3.2.41 - '@vue/shared': 3.2.41 + '@vue/compiler-dom': 3.2.45 + '@vue/compiler-sfc': 3.2.45 + '@vue/runtime-dom': 3.2.45 + '@vue/server-renderer': 3.2.45_vue@3.2.45 + '@vue/shared': 3.2.45 dev: true /w3c-hr-time/1.0.2: From 9f2d29b68b00d9719add89b4f23938ff2db45077 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Thu, 15 Dec 2022 06:09:22 -0800 Subject: [PATCH 35/81] fix typescript error --- packages/mermaid/src/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts index 767fdaa7d..7c844ca8c 100644 --- a/packages/mermaid/src/utils.ts +++ b/packages/mermaid/src/utils.ts @@ -194,7 +194,7 @@ export const isSubstringInArray = function (str: string, arr: string[]): number * @param defaultCurve - The default curve to return * @returns The curve factory to use */ -export function interpolateToCurve(interpolate?: string, defaultCurve: CurveFactory): CurveFactory { +export function interpolateToCurve(interpolate: string | undefined, defaultCurve: CurveFactory): CurveFactory { if (!interpolate) { return defaultCurve; } From 78dd03dcdbae77ebf5cb163209be48dbb594d7a2 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Thu, 15 Dec 2022 09:29:30 -0500 Subject: [PATCH 36/81] lint --- packages/mermaid/src/utils.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts index 7c844ca8c..70e47531f 100644 --- a/packages/mermaid/src/utils.ts +++ b/packages/mermaid/src/utils.ts @@ -194,7 +194,10 @@ export const isSubstringInArray = function (str: string, arr: string[]): number * @param defaultCurve - The default curve to return * @returns The curve factory to use */ -export function interpolateToCurve(interpolate: string | undefined, defaultCurve: CurveFactory): CurveFactory { +export function interpolateToCurve( + interpolate: string | undefined, + defaultCurve: CurveFactory +): CurveFactory { if (!interpolate) { return defaultCurve; } From 992d1623a7168d98894452ef4932dca9f7e6e123 Mon Sep 17 00:00:00 2001 From: BD103 <59022059+BD103@users.noreply.github.com> Date: Thu, 15 Dec 2022 09:46:00 -0500 Subject: [PATCH 37/81] chore: update docs folder --- docs/config/theming.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/config/theming.md b/docs/config/theming.md index cfd86caa0..ee5831fbb 100644 --- a/docs/config/theming.md +++ b/docs/config/theming.md @@ -16,15 +16,15 @@ Themes follow and build upon the Levels of Configuration, and employ `directives The following are a list of **Deployable themes**, sample `%%init%%` directives and `initialize` calls. -1. **base**- Designed to be modified, as the name implies it is supposed to be used as the base for making custom themes. +1. [**base**](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/themes/theme-base.js) - Designed to be modified, as the name implies it is supposed to be used as the base for making custom themes. -2. **forest**- A theme full of light greens that is easy on the eyes. +2. [**forest**](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/themes/theme-forest.js) - A theme full of light greens that is easy on the eyes. -3. **dark**- A theme that would go well with other dark-colored elements. +3. [**dark**](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/themes/theme-dark.js) - A theme that would go well with other dark-colored elements. -4. **default**- The default theme for all diagrams. +4. [**default**](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/themes/theme-default.js) - The default theme for all diagrams. -5. **neutral**- The theme to be used for black and white printing. +5. [**neutral**](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/themes/theme-neutral.js) - The theme to be used for black and white printing. ## Site-wide Themes From 333b974f10337d5ae9c332d0212fe87d0e7029f0 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Thu, 15 Dec 2022 21:50:00 +0530 Subject: [PATCH 38/81] Add `workflow_dispatch` to lint.yml --- .github/workflows/lint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index d67144540..95e4256b1 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -7,6 +7,7 @@ on: - opened - synchronize - ready_for_review + workflow_dispatch: permissions: contents: write From ac5a1b45014d7e049cea46ff3d32a0404dec62fc Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Thu, 15 Dec 2022 00:01:29 +0000 Subject: [PATCH 39/81] fix(er): switch to deterministic uuids in ER The entity relation diagram uses uuid v4, which is randomly generated. uuid v5 uses a SHA-1 hash, which makes the uuid deterministic. The input strings are unique for each diagram, so this should be okay. --- packages/mermaid/src/diagrams/er/erRenderer.js | 16 +++++++++++++--- .../mermaid/src/diagrams/er/erRenderer.spec.ts | 12 ++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 packages/mermaid/src/diagrams/er/erRenderer.spec.ts diff --git a/packages/mermaid/src/diagrams/er/erRenderer.js b/packages/mermaid/src/diagrams/er/erRenderer.js index ebf338ae1..7a7920160 100644 --- a/packages/mermaid/src/diagrams/er/erRenderer.js +++ b/packages/mermaid/src/diagrams/er/erRenderer.js @@ -7,7 +7,7 @@ import utils from '../../utils'; import erMarkers from './erMarkers'; import { configureSvgSize } from '../../setupGraphViewbox'; import { parseGenericTypes } from '../common/common'; -import { v4 as uuid4 } from 'uuid'; +import { v5 as uuid5 } from 'uuid'; /** Regex used to remove chars from the entity name so the result can be used in an id */ const BAD_ID_CHARS_REGEXP = /[^\dA-Za-z](\W)*/g; @@ -643,9 +643,15 @@ export const draw = function (text, id, _version, diagObj) { svg.attr('viewBox', `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); }; // draw +/** UUID namespace for ER diagram IDs */ +const MERMAID_ERDIAGRAM_UUID = uuid5( + 'https://mermaid-js.github.io/mermaid/syntax/entityRelationshipDiagram.html', + uuid5.URL +); + /** * Return a unique id based on the given string. Start with the prefix, then a hyphen, then the - * simplified str, then a hyphen, then a unique uuid. (Hyphens are only included if needed.) + * simplified str, then a hyphen, then a unique uuid based on the str. (Hyphens are only included if needed.) * Although the official XML standard for ids says that many more characters are valid in the id, * this keeps things simple by accepting only A-Za-z0-9. * @@ -656,7 +662,11 @@ export const draw = function (text, id, _version, diagObj) { */ export function generateId(str = '', prefix = '') { const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, ''); - return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${uuid4()}`; + // we use `uuid v5` so that UUIDs are consistent given a string. + return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${uuid5( + str, + MERMAID_ERDIAGRAM_UUID + )}`; } /** diff --git a/packages/mermaid/src/diagrams/er/erRenderer.spec.ts b/packages/mermaid/src/diagrams/er/erRenderer.spec.ts new file mode 100644 index 000000000..ca0f62bd2 --- /dev/null +++ b/packages/mermaid/src/diagrams/er/erRenderer.spec.ts @@ -0,0 +1,12 @@ +import { generateId } from './erRenderer'; + +describe('erRenderer', () => { + describe('generateId', () => { + it('should be deterministic', () => { + const id1 = generateId('hello world', 'my-prefix'); + const id2 = generateId('hello world', 'my-prefix'); + + expect(id1).toBe(id2); + }); + }); +}); From e2b05d3cf68ba1f89b163bc51d4109167b59c0a5 Mon Sep 17 00:00:00 2001 From: BD103 Date: Thu, 15 Dec 2022 18:24:23 +0000 Subject: [PATCH 40/81] Update docs --- docs/config/theming.md | 78 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/docs/config/theming.md b/docs/config/theming.md index 3fcd1cda1..8ccab7804 100644 --- a/docs/config/theming.md +++ b/docs/config/theming.md @@ -3,6 +3,12 @@ > ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. > > ## Please edit the corresponding file in [/packages/mermaid/src/docs/config/theming.md](../../packages/mermaid/src/docs/config/theming.md). +> +> **Warning** +> +> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. +> +> ## Please edit the corresponding file in [/packages/mermaid/src/docs/config/theming.md](../../packages/mermaid/src/docs/config/theming.md). # Theme Configuration @@ -53,6 +59,18 @@ Example of `init` directive setting the `theme` to `forest`: a --> b ``` +```mermaid-example +%%{init: {'theme':'forest'}}%% + graph TD + a --> b +``` + +```mermaid +%%{init: {'theme':'forest'}}%% + graph TD + a --> b +``` + > **Reminder**: the only theme that can be customed is the `base` theme. The following section covers how to use `themeVariables` for customizations. ## Customizing Themes with `themeVariables` @@ -127,6 +145,66 @@ Example of modifying `themeVariables` using the `init` directive: end ``` +```mermaid-example +%%{ + init: { + 'theme': 'base', + 'themeVariables': { + 'primaryColor': '#BB2528', + 'primaryTextColor': '#fff', + 'primaryBorderColor': '#7C0000', + 'lineColor': '#F8B229', + 'secondaryColor': '#006100', + 'tertiaryColor': '#fff' + } + } +}%% + graph TD + A[Christmas] -->|Get money| B(Go shopping) + B --> C{Let me think} + B --> G[/Another/] + C ==>|One| D[Laptop] + C -->|Two| E[iPhone] + C -->|Three| F[fa:fa-car Car] + subgraph section + C + D + E + F + G + end +``` + +```mermaid +%%{ + init: { + 'theme': 'base', + 'themeVariables': { + 'primaryColor': '#BB2528', + 'primaryTextColor': '#fff', + 'primaryBorderColor': '#7C0000', + 'lineColor': '#F8B229', + 'secondaryColor': '#006100', + 'tertiaryColor': '#fff' + } + } +}%% + graph TD + A[Christmas] -->|Get money| B(Go shopping) + B --> C{Let me think} + B --> G[/Another/] + C ==>|One| D[Laptop] + C -->|Two| E[iPhone] + C -->|Three| F[fa:fa-car Car] + subgraph section + C + D + E + F + G + end +``` + ## Color and Color Calculation To ensure diagram readability, the default value of certain variables is calculated or derived from other variables. For example, `primaryBorderColor` is derived from the `primaryColor` variable. So if the `primaryColor` variable is customized, Mermaid will adjust `primaryBorderColor` automatically. Adjustments can mean a color inversion, a hue change, a darkening/lightening by 10%, etc. From 32a8061cc2e8b5a315329d3a970a905fbd2e0a08 Mon Sep 17 00:00:00 2001 From: Tom PERRILLAT-COLLOMB Date: Thu, 15 Dec 2022 18:55:08 +0000 Subject: [PATCH 41/81] feat(er): add UK attribute constraint Any attribute can now be PK, FK or UK --- demos/er.html | 14 ++++++++++++++ .../mermaid/src/diagrams/er/parser/erDiagram.jison | 2 +- .../src/diagrams/er/parser/erDiagram.spec.js | 9 +++++---- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/demos/er.html b/demos/er.html index 06fbf020e..a326185de 100644 --- a/demos/er.html +++ b/demos/er.html @@ -57,6 +57,20 @@ erDiagram number final_price }
+
+ +
+    erDiagram
+      "HOSPITAL" {
+        int id PK
+        int doctor_id FK
+        string address UK
+        string name
+        string phone_number
+        string fax_number
+      }
+    
+
+ + + + + + +
+
+ +
+
+
+

MermaidPress

+

+ The Official Guide to Mermaid.js +

+

+ Learn to create complex diagrams and beautiful flowcharts easily using text and code + using Mermaid.js. +

+ + + +
+
+
+ +
+ +
+
+
+
+ + + + + + + + + + + + +
+
+
+

+ Get up to speed with using Mermaid diagrams along with real-world examples and expert tips + from the authors to facilitate a seamless development workflow +

+
+
+
+
+
+

+ Flowcharts is a diagram type that visualizes a process or an algorithm by showing the + steps in order, as well as the different paths the execution can take. +

+
+
+ +
+
+
+
+ +
+
+
+

+ Sequence diagrams lets you model and visualize interactions between different actors + or objects in a system, as well as the order of those interactions +

+
+
+
+
+
+

+ A class diagram is a graphical representation that is used to visualize and describe + an object-oriented system. +

+
+
+ +
+
+
+
+ +
+
+
+

+ An entity-relationship diagram is a graphical representation that is used to + visualize the different types of entities that exist within a system. +

+
+
+
+
+
+

+ Use State diagrams to model and document state machines, an abstract way of + representing a system or an algorithm. +

+
+
+ +
+
+
+
+ +
+
+
+

+ A Gantt chart is a graphical representation that is used to visualize and describe + tasks (events or activities) over time. +

+
+
+
+
+

+ These were a few of the diagrams supported by Mermaid. +

+
+ +
+
+

+ Book description +

+
+

+ Mermaid lets you represent diagrams using text and code which simplifies the maintenance + of complex diagrams. This is a great option for developers as they’re more familiar with + code, rather than special tools for generating diagrams. Besides, diagrams in code + simplify maintenance and ensure that the code is supported by version control systems. + In some cases, Mermaid makes refactoring support for name changes possible while also + enabling team collaboration for review distribution and updates. +

+

+ Developers working with any system will be able to put their knowledge to work with this + practical guide to using Mermaid for documentation. The book is also a great reference + for looking up the syntax for specific diagrams when authoring diagrams. +

+

+ You’ll start by getting up to speed with the importance of accurate and visual + documentation. Next, the book introduces Mermaid and establishes how to use it to create + effective documentation. By using different tools, editors, or a custom documentation + platform, you’ll also learn how to use Mermaid syntax for various diagrams. Later + chapters cover advanced configuration settings and theme options to manipulate your + diagram as per your needs. +

+

+ By the end of this Mermaid book, you’ll have become well-versed with the different types + of Mermaid diagrams and how they can be used in your workflows. +

+
+
+
+
+
+

+ What you will learn +

+
+
+
+
+
+
+
    +
  • + Understand good and bad documentation, and the art of effective documentation +
  • +
  • + Become well-versed with maintaining complex diagrams with ease +
  • +
  • + Learn how to set up a custom documentation system +
  • +
  • + Learn how to implement Mermaid diagrams in your workflows +
  • +
  • + Understand how to set up themes for a Mermaid diagram for an entire site +
  • +
  • + Discover how to draw different types of diagrams such as flowcharts, class + diagrams, Gantt charts, and more +
  • +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + +
+

+ Purchase The Official Guide to Mermaid.js +

+
+
+
+

+

Written by Knut Sveidqvist and Ashish Jain.

+

+ Knut is the creator of Mermaid and both authors are active core team members of the + Mermaid open-source project. +

+

+ + + +
+ + + diff --git a/docs/book/sequence-diagram.png b/docs/book/sequence-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..8c51ac1c5d6601960112784757061943d9d6dc8c GIT binary patch literal 19823 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%0D)Muw-s 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 DRc_Wx literal 0 HcmV?d00001 diff --git a/docs/config/theming.md b/docs/config/theming.md index 8ccab7804..9b81be1b9 100644 --- a/docs/config/theming.md +++ b/docs/config/theming.md @@ -3,12 +3,6 @@ > ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. > > ## Please edit the corresponding file in [/packages/mermaid/src/docs/config/theming.md](../../packages/mermaid/src/docs/config/theming.md). -> -> **Warning** -> -> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. -> -> ## Please edit the corresponding file in [/packages/mermaid/src/docs/config/theming.md](../../packages/mermaid/src/docs/config/theming.md). # Theme Configuration diff --git a/packages/mermaid/src/docs/config/theming.md b/packages/mermaid/src/docs/config/theming.md index 3fcd1cda1..fb3026fec 100644 --- a/packages/mermaid/src/docs/config/theming.md +++ b/packages/mermaid/src/docs/config/theming.md @@ -1,9 +1,3 @@ -> **Warning** -> -> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. -> -> ## Please edit the corresponding file in [/packages/mermaid/src/docs/config/theming.md](../../packages/mermaid/src/docs/config/theming.md). - # Theme Configuration Dynamic and integrated theme configuration was introduced in Mermaid version 8.7.0. From 2743b72a8702bdcfdaac20f79906d59466e8d767 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Fri, 16 Dec 2022 01:12:50 +0530 Subject: [PATCH 45/81] Add book landing page back --- packages/mermaid/package.json | 3 +- packages/mermaid/src/docs.mts | 2 +- packages/mermaid/src/docs/landing/class.png | Bin 0 -> 34954 bytes packages/mermaid/src/docs/landing/cover.jpg | Bin 0 -> 17803 bytes packages/mermaid/src/docs/landing/er.png | Bin 0 -> 13419 bytes .../mermaid/src/docs/landing/flowchart.png | Bin 0 -> 14794 bytes packages/mermaid/src/docs/landing/gantt.png | Bin 0 -> 43239 bytes packages/mermaid/src/docs/landing/index.html | 337 ++++++++++++++++++ .../src/docs/landing/sequence-diagram.png | Bin 0 -> 19823 bytes packages/mermaid/src/docs/landing/state.png | Bin 0 -> 15574 bytes pnpm-lock.yaml | 180 ++++++++++ 11 files changed, 520 insertions(+), 2 deletions(-) create mode 100644 packages/mermaid/src/docs/landing/class.png create mode 100644 packages/mermaid/src/docs/landing/cover.jpg create mode 100644 packages/mermaid/src/docs/landing/er.png create mode 100644 packages/mermaid/src/docs/landing/flowchart.png create mode 100644 packages/mermaid/src/docs/landing/gantt.png create mode 100644 packages/mermaid/src/docs/landing/index.html create mode 100644 packages/mermaid/src/docs/landing/sequence-diagram.png create mode 100644 packages/mermaid/src/docs/landing/state.png diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index f31fac80b..cd809fef1 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -28,7 +28,7 @@ "docs:build": "rimraf ../../docs && pnpm docs:spellcheck && pnpm docs:code && ts-node-esm src/docs.mts", "docs:verify": "pnpm docs:spellcheck && pnpm docs:code && ts-node-esm src/docs.mts --verify", "docs:pre:vitepress": "rimraf src/vitepress && pnpm docs:code && ts-node-esm src/docs.mts --vitepress", - "docs:build:vitepress": "pnpm docs:pre:vitepress && vitepress build src/vitepress", + "docs:build:vitepress": "pnpm docs:pre:vitepress && vitepress build src/vitepress && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing", "docs:dev": "pnpm docs:pre:vitepress && concurrently \"vitepress dev src/vitepress\" \"ts-node-esm src/docs.mts --watch --vitepress\"", "docs:serve": "pnpm docs:build:vitepress && vitepress serve src/vitepress", "docs:spellcheck": "cspell --config ../../cSpell.json \"src/docs/**/*.md\"", @@ -77,6 +77,7 @@ "chokidar": "^3.5.3", "concurrently": "^7.5.0", "coveralls": "^3.1.1", + "cpy-cli": "^4.2.0", "cspell": "^6.14.3", "globby": "^13.1.2", "jison": "^0.4.18", diff --git a/packages/mermaid/src/docs.mts b/packages/mermaid/src/docs.mts index 313d1f2de..17505b6b9 100644 --- a/packages/mermaid/src/docs.mts +++ b/packages/mermaid/src/docs.mts @@ -260,7 +260,7 @@ const transformHtml = (filename: string) => { }; const getGlobs = (globs: string[]): string[] => { - globs.push('!**/dist', '!**/redirect.spec.ts'); + globs.push('!**/dist', '!**/redirect.spec.ts', '!**/landing'); if (!vitepress) { globs.push('!**/.vitepress', '!**/vite.config.ts', '!src/docs/index.md'); } diff --git a/packages/mermaid/src/docs/landing/class.png b/packages/mermaid/src/docs/landing/class.png new file mode 100644 index 0000000000000000000000000000000000000000..5b2f663d86f967ca5d96c5fffca73b6e8efb3ad4 GIT binary patch literal 34954 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

y{(-`u^dIjWHRrLfhUK$DDj6 zAJZ;K3mKaPEk0j~wW~8}E9FG(;;Tw9#r*+vY)AgRg8gsuiRNcmHjMAH?C&^9I71TF z-v^s9p8s6C3j_cV0Q&z)x!$j}&etf4Jy?d__G8Y}xizNDG;ip^i%~$K8 zbK9qpe)8<+;=o?Z^3GgH1C{e zq>Zpj9r?`69=R*xnNW7wJ!H0rGhQV+X_)$Fy?|KvS);Ll#; zD7H39tmsy3QP~zZ1ta`pPC>cjqjBOY+f9NvvgRXTLnHm?Y{L0I31{|B$34B{g!>1NtU-p+uP-~e196Sb`@^7l&I z-!izuiw^_KE|SfWkcvw%V5NrmFsSE@edMF6qSRDRKnUYiOY~e{#`BhsPz9&{G3;;p zQMK<2_RHZ3xPWhJwKw0{{u!$$tJ9jTIJ3oQA=*-XTFttL?<#qGsOM5KOgT!$5UXvU zfMKjNS>5_^;`0Po=(~s-9=;brH?l|WIo~P?_uNVT08+{Wo{R3EMm4a|e8B$DYK!nxt3=L3^sjkHMfV_mhkTxJ4&5E_NVj_sD4ll$RNdu! zEsvxB;S;^|{7D*petLAQa{78N0k*mb!!MVt#oX&=jSXQ{3h{qDo0yEaeL0o_nL59r zVm}hdgYM=q!TF{%@Yy)e+Q=Gj8?T7beMsA?vTH8)dKq6=oy%A8M`*suVA^t%P(;h_ zq#Xwso&DU($cSNQyty`lrK&9-$0?z%#9HqT#mVyM`o@OW!ryVex;lcTi!UZpn`GTv zczw)aQhEt3mAHZ7K*U)zIgH@6qneiFGL9hMxQ(>!giY7-7cZ%-$DU(G)79xFEvVt7 zG4-k&D!o?{%k-lz;*)RT73Y%AE%1ZMuy@>Bk-IuF2Y$yh&sATMFyilyd!3ly8sCyc zQ|?hENr2d77~7|uD10C9U7@G2%MF6QZ&Z`bEcB?zeqR|(+1g)jbQLXol9@s5SkrB} zy*%LU{?=}B+E*;SPItE4p?zhR`RSu&COHI z>_=z(1BE1>1BDFlhgUc|IeC+9g>ZF|_{*X#Xix@XKPJucui+MmAegLkT@M;Q6xUL@ zY}ZmH=He%50s4N!R7R=wR7Ue0?oN#o<-fn^cBUz*^&DXc%dAYp=cDq^_#3yjNS~Uo)3^j^0>L%71a~I{32woqg9HgQ&>^@J+$BKc zK>~rs-KTTsy;*O5%vy8rn;-MS^(4_*X;m6;H8o*M9X__chSd`V&fKk;Kh_c_7MMLm|;3`$Wyu`vbbRglNN=n zMmq}wbo|Yfc3Z`1t^Rmm#nszyx2Lc-6;yU|6nrpjjE%nP1gTDDp{EIcA|H^dm<@qJ zPqR>eRtPM-@{k$lJB(h|5r_Q8G)qIMA<4CIe3tyd9p)y0<&7jR4mklIC{i&J0+E#_ zB4l~^4oa3t7WyIbBQ=HW)1NRV7Uus=h|d6baHB&Q3X{&N6ot8^d>Dy#;w}4I?av^0 zJF{e(5nv?3pz&XH{(pwz|4m;0h0AcL=Ds~-u1|x1-sA3XUBOFBDh1_k*jQ@Mz4+3} zyOTEgy34JH+yn49is)j7OxM7UHQ*ULfHz<{Bfa-gfg%&(@W>ymyce<^WTlpD^q}Dp zZdj^C(8u2=#~}2$`!!;`o69ON4A^pVuxg9HNXd_jn{@I_S)%-)xu#zbEwC`H4_YIpDMcOHA+7q3Kk0y zlv-r3PhNJnBZ~(KJf#3(05#b`T3kWIfGHwl=i=Kp48R&=CH~3r?`uaMpzG1g<$Jc5 zL-nd>b_v+x`C|#Z0*s=~+ReCt^O5U!%K zCl}ZFXGBCuOn{@UgB4s{Cj_hrU3#;ggBeF^GJ0QVVLcg{H#Fwz-a)6*3|agO}}RKg{kNHgB9|yC#%FdnUm(TRntNN zy#UZGjR9cc0>N+&rknZOe$wB5EvRiJ5?maQ;qm*zjWuQ`q-6pf5#e@bOkGF>W110; zQYQ=sKfFdx6$&He61e`Ue2y)2q#hm~f&NdG+5c4yBdmF)#ghPDM_G+ffsOEiC_oGm zoE9@Hc9fS(hY0(BqLkHLMtx)7-j#@N#&KC!7#d3zPD`mqBtJS}(8!yK=4l}gVMEp? zrkOI4n3QR+o(X>>PND>EnDo}Q&U$V0A?dgNmTk6%qVi1M`&6L@L75Z80~S9b!Xm|x z>QmL`-6t>lzKg+tHaL_PH|)(%-+4MGg?R=O0I;iV<7krZ^>Oq2ar<#0>h3C4=(1?3 z8o^okikc$IOv-U5i((xasNH(^`E!H?)s}FCc55Si$n(P@hTLN!#Dl_GG>kmDIVx3X zeCe|2g;QMM)xZp!M6x9s+b^N=#^iQgaq#-ae}5}gh%&!vj*TKZLmg{&<%cs|qjG1hw90a8n)7xr9qa){&nahrix8THa` z?VHLkL*G5U-s?)|r=iNSZThmGe1ECFcYMy(+H+NL^(E?Vd{O_I2u`T9(&}W4YLLo^ z^}hJV8e^5Pyr?!C?*OgpVTQdXT%1 z@@6|g!II*!W3K5KR?%fMQaO>DLV1<`^LbZxKvRsAvw!|FsloRX1gC3A1$Exb$#jhx z%fXLIe0q_Gdv`4TztNMHl$7RmgU|ci>|yXlMFi)KrOvwhzl1!k3%20Gg|gj*+dcPYsZ zzCor5ID8`PrvjNA`N`yDe-3S&Zce|?qy{&OsXVndg@U>n))-7bGH*(osX#9xDA&tw z6&DN1YaQy>MS4W4a_y`B2Pu$Mqp`R4`-MOmQ;qQlW zU3|t+<^`)vbh=Hy-g&Z5Z9Ywhd@HKKO;nNQfpV&iiX9fB4Z3kDU^aeqUi_RsR619) zhl^jD2sh}upPpFd%bPUDNa@PF>Pg*;4SAUxLBs<#+%T?d1R{hld5)A68K_H$EE0{i zVIsVL;y7!&(B^ae@xtCRt;~ankb|2hR$+Y5G!nJd^{VR)wWfv64ws<(p%g{(GkQMS z@81=uiCQevzS$BH5)8!3KXN}z7H!Z$dg>BxMWmFT5&r#>$s4efHG-QT8Ix@$z#x%n z6*<$-t=mOS!R__ard&?8`O7i6t$uhB5S((Oi=-4&aVTv)9k#^Hrxw2s=UO}TussYX zN2pA5;f6);4$P6p@W(VQh!1zY5%{Ei7_823U}7A|L|9p>d2X@cxExqvmXFF5jDq}D z2GhhA|E6?`tiN$s($K#^mPq`TqFC#pAAPwupJv5-l5F(tF(1fqGi6+tz^EDGUzU@U zCZxFwe)41HGvtbu#j)>Yu4IlC?}2OSAR1>`$@e6Z_otU-mEnC!SJ^$Xq{UG7GJ11j zxRrU(+kf)wCtPE0559PLB&AJfcTP`1XXP`8nmg{H9>Srt76uaZtJ2fsvlxP%lWJw- z4HdfSd615X`O57tXePtcWHGaI^gRBFm-wLfiA^T68C2&U-{VO2i7I}1 zLd!Ff?=?*icr9sE57Z)O28|yLn?i+=cjZP#cXraj5VN&+sfWV6d=UE4_u7)UVVX4j zq?j(@x=0WAw`*A52A;%5srC!RF|T>ugOr~B+y`YBKj+_}@LwhNMTV7VIiQpZ4p%x< z4+$g@DjHziumbo%e|KsGNKAO%hCth0hoVgUTQRcgxm|}(z7Z%PP7I|7CiN-dN zj_Wtg_-Ci`Ys@EViun6?`6X^dgx0fZ8CayDW+^C9c={7uoM0?@)^A*S8CTAmBUS4uv%F;Z1kC z8!w1%yN2)ELv!Ls7BenC7KA{6h4pTziNAjdN>u9;YI$-{s%K?0od- zt#jJ9=N~XjhKGa+oV}mmy@R@I%2-X4n`-5Y;s(4`f&#Oj4_V196<5+I<2qnlsbw)S zET;ae)W|U5NZ${bvw4YFAD=!uqB4(bhi!$s(a>0r^D|fPut~azsUoA}6OAI)O8G#*y5%lz&oj?cGlHpHLilZyzEuzTiE^aQs8ISg)gw1?e*68U zzMt60&-E`DGz>EuPw0zznIz33QPSBmMG6!EG&Msnq^j`g-K6(h^bO=c3sB$-?_oz* z-pKDI!XUs++lu)EJG<>pDV(Gewk3KTcj8KvmHo7dg#8VAGG`M5F+-D|HEotizu^Nl zmc3KB5|L#qz2>K@Axpui^29*h2&TnYvSXVZi8O(rZP z>rbM1L5=xO0~7?`C24s})DXYG#z{!ajgU-c#~XlmTMo|H!? z(S+NWz3T)N=}}LL8`gIib0YtfT@DTAmxiKvV%F0tCeoCVtS?IeYyZu2gd|Wv^ZihkPh{!_OAF;2Pzjng_+DZO6 zbJJBV$+{XhqA1Uy`P!V`lBab6fi_+?{Gc%boAY1}%?s9q5nj+-$x`hu5j^LmwkN%- z%_~rFi@~}1SPDmg#mpBd5usRG?fVzKB^;Ubgi2iy3>5N=HT-qPgn=i0RADBpek<5g zfKKe{5pKNAF-VjL`R$Li{)4Dje#4~&8(Tu}>RB0R3u{~C1$Dw`pER~au0D)bH$5<& znpgd`B$P=zVS2xBp{VF{s4hp@vB`g7LsI*qQA2BH!hd4u9ll+Z^9)RJFDmfXAd1C@4Z*l;q@Wp~t~KyJxgO zdjK;=W?MshthyZ#k{l83+KgO@{xDk4j}tJq+x_lQ`Inql z_l^IEfUvjee8Ud69x1Eu;)3W8kIIHAnfF1ZfJct+)Qh&aV8ymA1E8;26Mex%4`@?Q zKVE)9Lw1>tBWyMMAr?23nNj$#=1ZI7mJzb$bS+}!B{fmQnHy#v^%Zf<&8`~KUT(zW z4*3^?)eCkds+zao6QaoV^|(X%@G#boIaZGI%;BxncbF=c*?*r&H;JPg3%XIkLCg#s z(!R}~OR}bC@oVWm+WeEoqsx`rOU{4^q`#}S5KtejH9WA-nP0^-4ZY1yy?+(ZT&R4O z+3==oq6nelT>5-ar}57%>}OylP5hr;Qtm6ybFba=Oo8Zbe1P)IFV;tUvUgu+(3oFA zbCg_eaZyCKp85RviK7x^njhaJ2$eK(#$?>%Y-yIO~zSEXCz^>vT zgV=UeaZv&j<{@6sn8c9wLsHl=7*I{Rdt+1R0e^Jsg304Z+ZSDvHA8yVohLq#tv}LG zr>=Yz3shq$0@DCOUf&RfrWUK8e*oFsYsM3T=YKaoVVDCzTZ0Vgkip5u9YSh3L!m;& z7HJ<962?*QS-Sj|vcO_nBwv?!aUTFATwdXk;$TuE$PBhIF1j(P|3+v|`|wbrxKH9} zsGPms1oVsNhLN1KS*_StCG1M2EoGH1Dulqvflb|v;S+#~T$umeg6T@}2YujRa&2L6 zrZw;#99uWIBg(d~ zE0@y3ti+0ToaOTS(O0Sl@H-gSE!*Q_T3yIp=YKIh|LY4F6dO5K(%f)Gt)|f>w&<(D zGGW4+pLln6T-zA|UNX@8j4odS)aqU`6qM)0~1mp^DZzC z%l-YICTtatdsBK(iTFdtk86sXUPG_@Z&#Hj#fn>#TCCQ^u^dQKz5TiA+lvjVzYR=Y z;;(Y?N~fJoD^EQ({fGfwSoEipTU=f4S^F#Sk0-ipe%*9xf{+l|^>Qr0P#Q+EKaB;t zr68z{cujRq-@FpL+5tG@28sffHvBiT(Pg;pLCjSuXHkjA*x@TYa=<@&!9sBYK!^+R zmie65*-JlFw%`(zXbe5+*(UY@04O+D&-YuU0yJDi6HV zQ$MFznLT|DuBe#jWfWdIJTg|kgJ1o$W0L+ihW8C+`q_KS-Q0Nw`CdQOJ&1-|X?s>Mmb(cP|rCcf{D!@U zzN2f0v}r^4M8EN|@^MZ^g=&JL)b1oy5n0|)K=2%YHc?bBc50NM3EdVu|L*>@(WCOP3Z185d?1kL-uTQ;B-;*mrotA0dgb%YW?pVSIDK(wVyyKk z>H$oCS!w-2V?F% zq86>MD)~wAaPIr{pex>U(x{2f=UdXhyegvBkE5s!ZJzUn*_m&7zQyZq=p;NLB~CEH zElpWgG#U?M-S~pl)CTI-bb+Qn7#wH+Xl|c;Ohl_?sHMRttaYmn(NTrg(3^hcX8k^G zKY{%t;PN%euUou_5qNtGKGizX`F3|K9@2t4Gk?U2P&Jy0jjh+C2~Xd;wF@P-f}@vG zj1zpiu#r2fhGh-$ooZ%tYO+I-iALeq<8uKNBuQzWbm272izW%KrGFwj<&EZgGF$nr z+=C#pMi2R4y%M68@4`-3HH<4{te3?^|h?+!@ zNy_l6`?~Sw`Wm)K*s_y@Wh!)#TAs4w38~tP);&a&x6e`+y6dZLZT0-D7hoef>PC=i z>otNOL8Y=$zudH6XS%2^#pt5j@6b#&3FXO`WUtKqNH#80=rX4hao9fAHfT6`{= zKij;tDu^bf9l0=ifp$mZBV@$hL=vGny!@?m%J6kIU(NLcmhEt3q29t>eGm8Axsjk> z4=I+5^)ap3``{n&Wzu5Q7Tqk)1dtxWsiGh9p9G7~N%tXpvD^mNt0{Lk5z_GBPjw$B{A?GrxKF7%Ap8c@EI% zXK3^`yx=?gAiPUsK?3x;RGvXC;USysSF1pGi(2@#${S1}(x{lq(PK241C1^_+(OBs zseClRlk3*W5YKilXYel%!TJvqXN$Ntlqg+$j??cE1I^B^Pu%rG-xKGM;T%SJdLHTx zE+1k%tV92lnc}kvkwjI_n6G9-5Z|1!hzK)A{C_+UT4ZU8a&(*5jPDe@_8Zk$esMZ5 zdC`3-c43AK^FSI-NcNR{4mY4Cc@99Vj}ssKU>b*Zz53x3v(X7 zO?G+Gvz|7^?756;yeb16X7pC>usCu^x>}=2u?RI2Dh%ZIelIpWl#FWl{iRZ?N>e*wfj9D1@p3N z_mhWGs(8yv(?)h8F_HT=BPtRLE~AO;ul!a2WVtPRTX>&~o$^*(Ol8+WER3I|$rd&0MyBDki@5xRSdDR&YZ*670e3 zLp%y3Tj0AQOr-sW+7(ahx6w4tkv{IVvWCTt@h--+*o>}2Tez%hSM{}PrZHT-!z9nv z_p;Nx9Wm3%Ly6Iz;*>b!k7st)*ElxtHO)3Tq+Qum2C=2k_UO1460R?a>k656Xg*eg&xY~E^RNK+XyaFoG2OMh zk*|8*H6P~P#{_TgAIw@a4r4OB$CkWxJC@ep9Jgu5ehg&4u{kb_>5#|? zZlGHPLweoT;H_my`m}4(%u8#&Dqfr!?u|uC9Xro9bxBEnbx%s2?v^-^cI8>nM-i89 zZJBd1KuSG(xI-oc2I(!`1M*kDQ+96xeY59VL})!V4L0d8xR&vF+2IRQ*8vmS zecY>M^_tKru6xIef^l?qf@81whJA_Gu*XhjcgLla2I)ddYOWs{6cekqZj81!cn%WE zvf+ZG^Do#GEGknCqWo+WNAiXd-|7h+DJU!lT^}*fa5WJMxqp3VHa)Wu3pK3P=20ShaqR?bA#WPkeF1!vVl1dRfif{( zLc%S5)ETBkFvFP}Ngx?;V|>?w`sHfgvK(XM57R~`T|05$j>ajz{H?Yp`Cj=~45`IW zJ*GRQotM%9z1GC1?4Bge=B(isdXf)6_V)tj0S;0 z&l$UBm;1OoD_n+NTV7pDHvi^qiiE$pDeb-NCF{**qV%<)W2i_llGWir*J^dMiCaW8 zlWREMvsEQ8nlIA7AsRlY+r19zlF?7zze53}5g5hfM8GKI~;d%DI2a z4`sPmPp^e~lFN>K2jTEEb|-vLCW$iVS-TRmpn|Nw_EPK3Tm0QyNZ2awixM2l=4`@` zwe=tCS`7TSayISIo;(mF8|xYmdT!D+JVc;lueArJvlBdj)?9WIfyE&N%I*G%MA$RA zwi-M-Q&~b+$9n4n5h#{OLv}mz zrRRU|-eoI%g17{-J-bC`p)6d$$7&7lF&Z2GFmx45^Jx&iJT1RhXMeoqj57@(QPgL= zhy~UrTo#=sR<2Ecq@cT+52V_s>AVy2FIs|aV*a%biAJ);6jT&)J1z=^|3-3}^)Kg1 zHIlWqxC51M9hCCFJ)m({O&Km4qZIihewa}3Pxkoa$39-e*mcIEz+YGJt~N$Q--D=v zzZGp=q$;%IH+I(p!3tOwP86!!^^EJv*2}_8V^{T*VW%?s(DK2M(I4a?t-NUr%Q|6) zs-u*GEymTtkh53gg>lyq_~*;JV1=w)`ih!BMZ&14?_^P@qUyoaE5(QoXsp(4RHi>E z0BL(_=nDv(M{;X@x=naQu|u-`7#Z;BH?XpCO zibxqOP;ld|8|L4=8itIFpKg4*`5^say=NA6zBb3eQ1B(-drhEoT;@{^q(=Nz&SHd5E*%q5DL<5JFp znAgm#ptu$N_%lsE!)W|m?>;n-o>lb1i~t9-G@30rMKRg<_&R?5sLaaSqU1oLE?eYh z+vK{3{|rZ%stWpLpd2nTHoEM$_#d0ZrF1NZlu;2eu#yi>3dsQ)Y-knr^%t%vRK#ka zgtF`aD=Wy~bk7Ds6Ts#~6uVu+*sP>YD0e0!4<(YeRY+FpIJ7G?1*ga*{u_D**3~PN z*AD&kM7m3Kw^tCsIr;2Au(Iz=@Y?j=&qjm(y9zG|#T>@+kCJp(nP*L2rg4Q%yOgB< z&p=Q#TD(!F@UXVVZ&vB>@l)jmlFVr(a1z`~Zz=#yH3de^$6z0b$UB+Tq2>vw=c(8( zVYKHpt4B4~D5C?w&mdrSV107)AQXorr@Ws&Xh*F z%}txo9d#30Pk)UflNAmR8Jj2Q`ySYdSnu$Nxac(WedqM!rbFfjTowFm;b{|7tfoFV zh0ic(F{j|E6CPqWLNalgs^4>E()dLsR1CxHCNdIHUq1!@lwVKFnNjM2s*VKlL$j}#>1 z7{(qwN=De*6a~ZjD z4(*jOQu^`{wnC1hf%m~jcD!ulCo5ro9QK!HHBVygq#za>WDvZ!eF-6isi$}4tL1`v zUvxky+*TSC^YV&W2xKS8rO-}>oDVLyliZFc-9Jq-!WDe5Z7Z9LR-aB4cv||Hj2a96 zK-&wJ8tE;KL2Hw4p^gtSPCo*-pk zDONl5OoreHA@TSl4ont3=wk}GQpHceh)l#*>4mhV%T&z^^2s zk3E9t1wO&vXEL>a0#6{su*iS)D@HmmEH_vXB)-3w?3B{XCQwnts5(p9Uw&&Nnh%u* zuVc$yKE7#Y1Yo#Jz?c(5s~D@7ijAHHb$uQk)YRWvGMXj+gndiapfys|oV_rO?Mzcv6`Qp8VEroeH;9u0L6F5cx(Jjz(Ji{d=3Qk& z4(y-Is4S4tTFu96qawIo-ENsnoF*)h5-&60{Z zT>oBlm1S;Xgp)?~#76EfAHf^{mf-;xY%2yhH&=4@sB5#(+k{RyV}Qd4X-BXjBSnwf zQh&w1oqjwh0p-SRFc&_?bsaeS4s21i6ER#Gu^w124x+6!LkuTKyeekc`W*BAhJC1e z?xgGSHFHP+*dZRYe%7@Cae+0?$Y#~0i95&-(d}DGg6w5%-ev{Pnt=^RTNzti`v34} z+&cR}QL=``p?}Y4<8u(NK5ADp4&+Y-){BCaA4nvL-cOAc1kdalMcqOlcb|3rf+R*K z2Id6KscWeF&S0L&=uym*>fm)_{50NMbGgu%2pZCvph>W^JZ_ElnSq#S=J~p+=edcJ9EwdWAFo_ zVgBLn$c;#*l!YOtkQfz#0M#?XiKE_mUz-GyIDsitkYt(vYU+pU-*YgKOoB}+Q;O36 zkbS9#;mek$5PwnnAC^(@r&eMAlf>>K+Ul_GwuMfF3SA!w_aeT9=GWOg=GjY!cm2Pf zOST8XOa2Zd^^wn#T533h#ku((_7HMVigdj};s|4-?J~C`YKk)+C0-viql%9$(>BTS z(3>R9(C~36*jx7h?^ewJ)gGb$+=kBo3%soVow%P58zoKo`@uRssb!kh)ASrZFkZmE zWibPh>QU##Uc1HGjw6W202zuhFxueN~KApqc-Q zW~Q=Y+UTZxUTT5DBz^xf8KsZk&NDgyhkY~jkv;rOqb~V7#I=Ai*y%Mw$0$^CF1UUa zGx*2(>TrX(g^mpG?HMa6x_gY}j0d@fbThQCcq+7boGIx2@JJGh(*M;QzEX(^EHvU? zxZ&~7zRGXixTqb!Q>=q@hE&=G96M$aP>BUhhRDzS===;J$3Afg^bxJg4<@O z04a6a=0t=am3b@yn3^3KL@1XX>-h+SDh`2`(Rx6ar9 zBubC%QJ*Hl3}y$8Q(t5)9epq=C`XB|xx>Zt)3M95tLXu<9}>7O^L0*)xT6t=eFNuK znCh=E0qvc(3(t&>u(!5-E=*OI8&FvLoy@$vz#W4(&#_4df3V5wnV0q=R8hs-@%P*XWRa3)&$+i{}Z}n&)sD>F-Gq zGw^J0<>ppYIpH<23Dm9s50hiLax>qLU27sPz&HqIZ8P>~caE}b0BdqT{X zBiD26a|K(xd_P+<_}^#Y8=ALv-cxz}nlia}!vTnZrJVV_$zyuDD-6JJfrg-sfqvef z*AfFL$CaFJYQB?LNVQkq1YMtxdo{IKe%`Qe-Q!=EQ*WfC6_Ee{NeB(L#n$nM4^Qb z`+@|x!>X~B^}t#QVo%TnK4M+;6D@J?a2cz5S#O_sfBXC37B`FZ9^)rch|u_=mE76I z+K`6gtHy&F`kVcQ7mDK;ZlKh zdm7J2_wT#>0MwJi0go(uwLk)*XkbZbZG~th9ku$)UTe}T-3hbK5e}EAcSo;6-RL8W zSXG2ps+q3knTakdA9r=<9NM66zEh^}kKNB4fdy`L&I5Q881aC{uA=1fP2COyTq>ja zaa(<_fVd(OldnW1TfJ604?k#jVU*i7+|*c=y=TRh6=(@OC~DM023OLwT9vEF8r}s| zdId?$##_a=7B3S6HuV96JLecYt-o$M&c-j6+XUKPl^=a~qIk29VO3GH|JuvFlo9>p zD>h>Q&OyGsz%4C(@OD|dpf3;};{0Nh6luR2;a z(r>Bg$Kd=U@LypH6z%F^ln|K;D*bKsSJ-D*W8T~OtwPRx_nDF-dJ1i67W!L0*c#|~1w^Rogq(9StfRAiI7sc1UsFd0q^ zxK{o(b4#3plVe~^_cwlB95eC!UG{kTX1R4*LmCqc1DwSyPzkkf*|AMaIKXWSO zzf4!0=lbs^Vvtn~-3;24FpB4+L-cPW9$Dh*f1GUj&mNEYFBAEn2D%Lrr3{Es^21sE QcZx_!PE8grZTjKA0f;sM5dZ)H literal 0 HcmV?d00001 diff --git a/packages/mermaid/src/docs/landing/flowchart.png b/packages/mermaid/src/docs/landing/flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..714626b70e398905987bec0c460308fa7a84471f GIT binary patch literal 14794 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 literal 0 HcmV?d00001 diff --git a/packages/mermaid/src/docs/landing/gantt.png b/packages/mermaid/src/docs/landing/gantt.png new file mode 100644 index 0000000000000000000000000000000000000000..95c8d08a14bc4306426530921fd538b404dfc1da GIT binary patch literal 43239 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 + + + + + + The Official Guide to Mermaid.js + + + + + + + + + + + + + + + + +

+
+ + + + + + + + + + + + +
+
+
+

+ Get up to speed with using Mermaid diagrams along with real-world examples and expert tips + from the authors to facilitate a seamless development workflow +

+
+
+
+
+
+

+ Flowcharts is a diagram type that visualizes a process or an algorithm by showing the + steps in order, as well as the different paths the execution can take. +

+
+
+ +
+
+
+
+ +
+
+
+

+ Sequence diagrams lets you model and visualize interactions between different actors + or objects in a system, as well as the order of those interactions +

+
+
+
+
+
+

+ A class diagram is a graphical representation that is used to visualize and describe + an object-oriented system. +

+
+
+ +
+
+
+
+ +
+
+
+

+ An entity-relationship diagram is a graphical representation that is used to + visualize the different types of entities that exist within a system. +

+
+
+
+
+
+

+ Use State diagrams to model and document state machines, an abstract way of + representing a system or an algorithm. +

+
+
+ +
+
+
+
+ +
+
+
+

+ A Gantt chart is a graphical representation that is used to visualize and describe + tasks (events or activities) over time. +

+
+
+
+
+

+ These were a few of the diagrams supported by Mermaid. +

+
+ +
+
+

+ Book description +

+
+

+ Mermaid lets you represent diagrams using text and code which simplifies the maintenance + of complex diagrams. This is a great option for developers as they’re more familiar with + code, rather than special tools for generating diagrams. Besides, diagrams in code + simplify maintenance and ensure that the code is supported by version control systems. + In some cases, Mermaid makes refactoring support for name changes possible while also + enabling team collaboration for review distribution and updates. +

+

+ Developers working with any system will be able to put their knowledge to work with this + practical guide to using Mermaid for documentation. The book is also a great reference + for looking up the syntax for specific diagrams when authoring diagrams. +

+

+ You’ll start by getting up to speed with the importance of accurate and visual + documentation. Next, the book introduces Mermaid and establishes how to use it to create + effective documentation. By using different tools, editors, or a custom documentation + platform, you’ll also learn how to use Mermaid syntax for various diagrams. Later + chapters cover advanced configuration settings and theme options to manipulate your + diagram as per your needs. +

+

+ By the end of this Mermaid book, you’ll have become well-versed with the different types + of Mermaid diagrams and how they can be used in your workflows. +

+
+
+
+
+
+

+ What you will learn +

+
+
+
+
+
+
+
    +
  • + Understand good and bad documentation, and the art of effective documentation +
  • +
  • + Become well-versed with maintaining complex diagrams with ease +
  • +
  • + Learn how to set up a custom documentation system +
  • +
  • + Learn how to implement Mermaid diagrams in your workflows +
  • +
  • + Understand how to set up themes for a Mermaid diagram for an entire site +
  • +
  • + Discover how to draw different types of diagrams such as flowcharts, class + diagrams, Gantt charts, and more +
  • +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + +
+

+ Purchase The Official Guide to Mermaid.js +

+
+
+
+

+

Written by Knut Sveidqvist and Ashish Jain.

+

+ Knut is the creator of Mermaid and both authors are active core team members of the + Mermaid open-source project. +

+

+ + + +
+ + + diff --git a/packages/mermaid/src/docs/landing/sequence-diagram.png b/packages/mermaid/src/docs/landing/sequence-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..8c51ac1c5d6601960112784757061943d9d6dc8c GIT binary patch literal 19823 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%0D)Muw-s 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 DRc_Wx literal 0 HcmV?d00001 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 01cb0787e..951d3cc1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -236,6 +236,9 @@ importers: coveralls: specifier: ^3.1.1 version: 3.1.1 + cpy-cli: + specifier: ^4.2.0 + version: 4.2.0 cspell: specifier: ^6.14.3 version: 6.14.3 @@ -3492,6 +3495,14 @@ packages: indent-string: 4.0.0 dev: true + /aggregate-error/4.0.1: + resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} + engines: {node: '>=12'} + dependencies: + clean-stack: 4.2.0 + indent-string: 5.0.0 + dev: true + /ajv-formats/2.1.1_ajv@8.11.0: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -3684,6 +3695,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /arrify/3.0.0: + resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} + engines: {node: '>=12'} + dev: true + /asn1/0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: @@ -4018,6 +4034,16 @@ packages: quick-lru: 4.0.1 dev: true + /camelcase-keys/7.0.2: + resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} + engines: {node: '>=12'} + dependencies: + camelcase: 6.3.0 + map-obj: 4.3.0 + quick-lru: 5.1.1 + type-fest: 1.4.0 + dev: true + /camelcase/5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -4163,6 +4189,13 @@ packages: engines: {node: '>=6'} dev: true + /clean-stack/4.2.0: + resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} + engines: {node: '>=12'} + dependencies: + escape-string-regexp: 5.0.0 + dev: true + /clear-module/4.1.2: resolution: {integrity: sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==} engines: {node: '>=8'} @@ -4512,6 +4545,39 @@ packages: request: 2.88.2 dev: true + /cp-file/9.1.0: + resolution: {integrity: sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==} + engines: {node: '>=10'} + dependencies: + graceful-fs: 4.2.10 + make-dir: 3.1.0 + nested-error-stacks: 2.1.1 + p-event: 4.2.0 + dev: true + + /cpy-cli/4.2.0: + resolution: {integrity: sha512-b04b+cbdr29CdpREPKw/itrfjO43Ty0Aj7wRM6M6LoE4GJxZJCk9Xp+Eu1IqztkKh3LxIBt1tDplENsa6KYprg==} + engines: {node: '>=12.20'} + hasBin: true + dependencies: + cpy: 9.0.1 + meow: 10.1.5 + dev: true + + /cpy/9.0.1: + resolution: {integrity: sha512-D9U0DR5FjTCN3oMTcFGktanHnAG5l020yvOCR1zKILmAyPP7I/9pl6NFgRbDcmSENtbK1sQLBz1p9HIOlroiNg==} + engines: {node: ^12.20.0 || ^14.17.0 || >=16.0.0} + dependencies: + arrify: 3.0.0 + cp-file: 9.1.0 + globby: 13.1.2 + junk: 4.0.0 + micromatch: 4.0.5 + nested-error-stacks: 2.1.1 + p-filter: 3.0.0 + p-map: 5.5.0 + dev: true + /create-require/1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -5247,6 +5313,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /decamelize/5.0.1: + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} + dev: true + /decimal.js/10.4.1: resolution: {integrity: sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==} dev: true @@ -5792,6 +5863,11 @@ packages: engines: {node: '>=10'} dev: true + /escape-string-regexp/5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + /escodegen/1.14.3: resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} engines: {node: '>=4.0'} @@ -7080,6 +7156,11 @@ packages: engines: {node: '>=8'} dev: true + /indent-string/5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + dev: true + /inflight/1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -8041,6 +8122,11 @@ packages: verror: 1.10.0 dev: true + /junk/4.0.0: + resolution: {integrity: sha512-ojtSU++zLJ3jQG9bAYjg94w+/DOJtRyD7nPaerMFrBhmdVmiV5/exYH5t4uHga4G/95nT6hr1OJoKIFbYbrW5w==} + engines: {node: '>=12.20'} + dev: true + /keyv/4.5.0: resolution: {integrity: sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==} dependencies: @@ -8427,6 +8513,24 @@ packages: fs-monkey: 1.0.3 dev: true + /meow/10.1.5: + resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + '@types/minimist': 1.2.2 + camelcase-keys: 7.0.2 + decamelize: 5.0.1 + decamelize-keys: 1.1.0 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 8.0.0 + redent: 4.0.0 + trim-newlines: 4.0.2 + type-fest: 1.4.0 + yargs-parser: 20.2.9 + dev: true + /meow/8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} @@ -8796,6 +8900,10 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true + /nested-error-stacks/2.1.1: + resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} + dev: true + /netmask/2.0.2: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} @@ -8982,6 +9090,20 @@ packages: engines: {node: '>=8'} dev: true + /p-event/4.2.0: + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} + dependencies: + p-timeout: 3.2.0 + dev: true + + /p-filter/3.0.0: + resolution: {integrity: sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-map: 5.5.0 + dev: true + /p-finally/1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -9034,6 +9156,13 @@ packages: aggregate-error: 3.1.0 dev: true + /p-map/5.5.0: + resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} + engines: {node: '>=12'} + dependencies: + aggregate-error: 4.0.1 + dev: true + /p-retry/4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} @@ -9042,6 +9171,13 @@ packages: retry: 0.13.1 dev: true + /p-timeout/3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: true + /p-try/2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -9478,6 +9614,15 @@ packages: type-fest: 0.8.1 dev: true + /read-pkg-up/8.0.0: + resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} + engines: {node: '>=12'} + dependencies: + find-up: 5.0.0 + read-pkg: 6.0.0 + type-fest: 1.4.0 + dev: true + /read-pkg/5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} @@ -9488,6 +9633,16 @@ packages: type-fest: 0.6.0 dev: true + /read-pkg/6.0.0: + resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} + engines: {node: '>=12'} + dependencies: + '@types/normalize-package-data': 2.4.1 + normalize-package-data: 3.0.3 + parse-json: 5.2.0 + type-fest: 1.4.0 + dev: true + /readable-stream/1.1.14: resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} dependencies: @@ -9540,6 +9695,14 @@ packages: strip-indent: 3.0.0 dev: true + /redent/4.0.0: + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} + dependencies: + indent-string: 5.0.0 + strip-indent: 4.0.0 + dev: true + /regexp-tree/0.1.24: resolution: {integrity: sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==} hasBin: true @@ -10342,6 +10505,13 @@ packages: min-indent: 1.0.1 dev: true + /strip-indent/4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + dependencies: + min-indent: 1.0.1 + dev: true + /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -10566,6 +10736,11 @@ packages: engines: {node: '>=8'} dev: true + /trim-newlines/4.0.2: + resolution: {integrity: sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==} + engines: {node: '>=12'} + dev: true + /trough/2.1.0: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: true @@ -10704,6 +10879,11 @@ packages: engines: {node: '>=8'} dev: true + /type-fest/1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: true + /type-is/1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} From 60d01856984d0b98a82ec9811ea1163dbe08814e Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Fri, 16 Dec 2022 00:37:37 +0530 Subject: [PATCH 46/81] Fix book link --- README.md | 2 +- packages/mermaid/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 059940a02..9a500283c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ English | [简体中文](./README.zh-CN.md) **Thanks to all involved, people committing pull requests, people answering questions! 🙏** -Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! +Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! ## About diff --git a/packages/mermaid/README.md b/packages/mermaid/README.md index 91c2d1640..e6c7db608 100644 --- a/packages/mermaid/README.md +++ b/packages/mermaid/README.md @@ -10,7 +10,7 @@ English | [简体中文](./README.zh-CN.md) **Thanks to all involved, people committing pull requests, people answering questions! 🙏** -Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! +Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! ## About From 7855edae6babc14f9de9dd6de070d71e6800ba53 Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Thu, 15 Dec 2022 20:20:04 +0000 Subject: [PATCH 47/81] perf(er): pre-calculcate er UUID namespace Pre-calculate the entity-relationship diagram namespace UUID. This UUID is always constant, so we can pre-calculate it to save a bit of processing power on the client. Co-authored-by: "Ashley Engelund (weedySeaDragon @ github)" Co-authored-by: Sidharth Vinod --- .../mermaid/src/diagrams/er/erRenderer.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/mermaid/src/diagrams/er/erRenderer.js b/packages/mermaid/src/diagrams/er/erRenderer.js index 7a7920160..08b448219 100644 --- a/packages/mermaid/src/diagrams/er/erRenderer.js +++ b/packages/mermaid/src/diagrams/er/erRenderer.js @@ -643,11 +643,20 @@ export const draw = function (text, id, _version, diagObj) { svg.attr('viewBox', `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); }; // draw -/** UUID namespace for ER diagram IDs */ -const MERMAID_ERDIAGRAM_UUID = uuid5( - 'https://mermaid-js.github.io/mermaid/syntax/entityRelationshipDiagram.html', - uuid5.URL -); +/** + * UUID namespace for ER diagram IDs + * + * This can be generated via running: + * + * ```js + * const { v5: uuid5 } = await import('uuid'); + * uuid5( + * 'https://mermaid-js.github.io/mermaid/syntax/entityRelationshipDiagram.html', + * uuid5.URL + * ); + * ``` + */ +const MERMAID_ERDIAGRAM_UUID = '28e9f9db-3c8d-5aa5-9faf-44286ae5937c'; /** * Return a unique id based on the given string. Start with the prefix, then a hyphen, then the From 528facf88d7b474eef03b829b314cfd9b373fe91 Mon Sep 17 00:00:00 2001 From: steph Date: Thu, 15 Dec 2022 13:11:07 -0800 Subject: [PATCH 48/81] minor syntax update --- docs/config/directives.md | 5 ++--- packages/mermaid/src/docs/config/directives.md | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/config/directives.md b/docs/config/directives.md index f011085c3..e845596ad 100644 --- a/docs/config/directives.md +++ b/docs/config/directives.md @@ -32,9 +32,8 @@ Mermaid basically supports two types of configuration options to be overridden b **NOTE:** These options listed here are not all the configuration options. To get hold of all the configuration options, please refer to the [defaultConfig.ts](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/defaultConfig.ts) in the source code. -::: info -We plan to publish a complete list of top-level configurations & all the diagram specific configurations, with their possible values in the docs soon. -::: +> **Note** +> We plan to publish a complete list of top-level configurations & all the diagram specific configurations, with their possible values in the docs soon. ## Declaring directives diff --git a/packages/mermaid/src/docs/config/directives.md b/packages/mermaid/src/docs/config/directives.md index 968ea337b..ac57e6d21 100644 --- a/packages/mermaid/src/docs/config/directives.md +++ b/packages/mermaid/src/docs/config/directives.md @@ -26,9 +26,9 @@ Mermaid basically supports two types of configuration options to be overridden b **NOTE:** These options listed here are not all the configuration options. To get hold of all the configuration options, please refer to the [defaultConfig.ts](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/defaultConfig.ts) in the source code. -::: info +```note We plan to publish a complete list of top-level configurations & all the diagram specific configurations, with their possible values in the docs soon. -::: +``` ## Declaring directives From 7670ada9acc552dcec0d6db53c8458c6d16df9ac Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Fri, 16 Dec 2022 21:59:44 +0530 Subject: [PATCH 49/81] Add CNAME --- docs/CNAME | 1 + packages/mermaid/package.json | 2 +- packages/mermaid/src/docs/CNAME | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 docs/CNAME create mode 100644 packages/mermaid/src/docs/CNAME diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 000000000..878812ee9 --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +mermaid.js.org \ No newline at end of file diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index cd809fef1..c3804896e 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -28,7 +28,7 @@ "docs:build": "rimraf ../../docs && pnpm docs:spellcheck && pnpm docs:code && ts-node-esm src/docs.mts", "docs:verify": "pnpm docs:spellcheck && pnpm docs:code && ts-node-esm src/docs.mts --verify", "docs:pre:vitepress": "rimraf src/vitepress && pnpm docs:code && ts-node-esm src/docs.mts --vitepress", - "docs:build:vitepress": "pnpm docs:pre:vitepress && vitepress build src/vitepress && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing", + "docs:build:vitepress": "pnpm docs:pre:vitepress && vitepress build src/vitepress && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing && cpy --flat src/docs/CNAME ./src/vitepress/.vitepress/dist/", "docs:dev": "pnpm docs:pre:vitepress && concurrently \"vitepress dev src/vitepress\" \"ts-node-esm src/docs.mts --watch --vitepress\"", "docs:serve": "pnpm docs:build:vitepress && vitepress serve src/vitepress", "docs:spellcheck": "cspell --config ../../cSpell.json \"src/docs/**/*.md\"", diff --git a/packages/mermaid/src/docs/CNAME b/packages/mermaid/src/docs/CNAME new file mode 100644 index 000000000..878812ee9 --- /dev/null +++ b/packages/mermaid/src/docs/CNAME @@ -0,0 +1 @@ +mermaid.js.org \ No newline at end of file From 1e3d76a0aa154826771a59c6b778a7cdffee097b Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Fri, 16 Dec 2022 16:31:20 +0000 Subject: [PATCH 50/81] docs(README.zh-CN): fix book image src Copied from https://github.com/mermaid-js/mermaid/commit/ec026eaf8230d9f97fe4004f8ef0d294ca16a098 --- README.zh-CN.md | 2 +- packages/mermaid/README.zh-CN.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.zh-CN.md b/README.zh-CN.md index 4bdbc4ae7..6b3e28b19 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -10,7 +10,7 @@ **感谢所有参与进来提交 PR,解答疑问的人们! 🙏** -Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! +Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! ## 关于 Mermaid diff --git a/packages/mermaid/README.zh-CN.md b/packages/mermaid/README.zh-CN.md index 0ccef27e4..f34c7a647 100644 --- a/packages/mermaid/README.zh-CN.md +++ b/packages/mermaid/README.zh-CN.md @@ -10,7 +10,7 @@ **感谢所有参与进来提交 PR,解答疑问的人们! 🙏** -Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! +Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! ## 关于 Mermaid From 570551548319ae2b5a77c60f1ee40ef70fc633df Mon Sep 17 00:00:00 2001 From: Tom PERRILLAT-COLLOMB Date: Fri, 16 Dec 2022 22:17:39 +0000 Subject: [PATCH 51/81] fix(generic): fix generic type regex instead of looking for single tildes, we are now looking for pairs, which avoid bugs when there is an odd number of tildes --- demos/classchart.html | 13 +++++++++++++ .../mermaid/src/diagrams/common/common.spec.js | 1 + packages/mermaid/src/diagrams/common/common.ts | 14 ++++++++++---- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/demos/classchart.html b/demos/classchart.html index 031f3b608..84cc7bec5 100644 --- a/demos/classchart.html +++ b/demos/classchart.html @@ -138,7 +138,20 @@ title: Demo Class Diagram Pineapple : -int leafCount() Pineapple : -int spikeCount()
+
+
+    classDiagram
+      class Person {
+        +Id : Guid
+        +FirstName : string
+        +LastName : string
+        -privateProperty : string
+        #ProtectedProperty : string
+        ~InternalProperty : string
+        ~AnotherInternalProperty : List~MyType~
+      }
+    

diff --git a/packages/mermaid/src/diagrams/common/common.spec.js b/packages/mermaid/src/diagrams/common/common.spec.js index 68f5138e7..3ebe8b1d6 100644 --- a/packages/mermaid/src/diagrams/common/common.spec.js +++ b/packages/mermaid/src/diagrams/common/common.spec.js @@ -68,5 +68,6 @@ describe('generic parser', function () { expect(parseGenericTypes('test ~Array~Array~string[]~~~')).toEqual( 'test >>' ); + expect(parseGenericTypes('~test')).toEqual('~test'); }); }); diff --git a/packages/mermaid/src/diagrams/common/common.ts b/packages/mermaid/src/diagrams/common/common.ts index 628908aab..d34a2df68 100644 --- a/packages/mermaid/src/diagrams/common/common.ts +++ b/packages/mermaid/src/diagrams/common/common.ts @@ -154,11 +154,17 @@ export const evaluate = (val?: string | boolean): boolean => export const parseGenericTypes = function (text: string): string { let cleanedText = text; - if (text.includes('~')) { - cleanedText = cleanedText.replace(/~([^~].*)/, '<$1'); - cleanedText = cleanedText.replace(/~([^~]*)$/, '>$1'); + if (text.split('~').length - 1 >= 2) { + let newCleanedText = cleanedText; - return parseGenericTypes(cleanedText); + // use a do...while loop instead of replaceAll to detect recursion + // e.g. Array~Array~T~~ + do { + cleanedText = newCleanedText; + newCleanedText = cleanedText.replace(/~([^\s,:;]+)~/, '<$1>'); + } while (newCleanedText != cleanedText); + + return parseGenericTypes(newCleanedText); } else { return cleanedText; } From 56e28a7f405a69827790397479c9d5485d0174eb Mon Sep 17 00:00:00 2001 From: Tom PERRILLAT-COLLOMB Date: Fri, 16 Dec 2022 22:35:20 +0000 Subject: [PATCH 52/81] test(generic): add generic type unit test --- packages/mermaid/src/diagrams/common/common.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/mermaid/src/diagrams/common/common.spec.js b/packages/mermaid/src/diagrams/common/common.spec.js index 3ebe8b1d6..8fd6229da 100644 --- a/packages/mermaid/src/diagrams/common/common.spec.js +++ b/packages/mermaid/src/diagrams/common/common.spec.js @@ -69,5 +69,6 @@ describe('generic parser', function () { 'test >>' ); expect(parseGenericTypes('~test')).toEqual('~test'); + expect(parseGenericTypes('~test Array~string~')).toEqual('~test Array'); }); }); From a6ea439ef376d3d46a7ce6960d787d98b95532a4 Mon Sep 17 00:00:00 2001 From: Foo-x Date: Sun, 18 Dec 2022 23:44:14 +0900 Subject: [PATCH 53/81] docs: fix typo --- docs/community/newDiagram.md | 2 +- packages/mermaid/src/docs/community/newDiagram.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/community/newDiagram.md b/docs/community/newDiagram.md index 288af42cd..bb7e2a961 100644 --- a/docs/community/newDiagram.md +++ b/docs/community/newDiagram.md @@ -60,7 +60,7 @@ Place the renderer in the diagram folder. ### Step 3: Detection of the new diagram type -The second thing to do is to add the capability to detect the new new diagram to type to the detectType in utils.js. The detection should return a key for the new diagram type. +The second thing to do is to add the capability to detect the new diagram to type to the detectType in utils.js. The detection should return a key for the new diagram type. [This key will be used to as the aria roledescription](#aria-roledescription), so it should be a word that clearly describes the diagram type. For example, if your new diagram use a UML deployment diagram, a good key would be "UMLDeploymentDiagram" because assistive technologies such as a screen reader would voice that as "U-M-L Deployment diagram." Another good key would be "deploymentDiagram" because that would be voiced as "Deployment Diagram." A bad key would be "deployment" because that would not sufficiently describe the diagram. diff --git a/packages/mermaid/src/docs/community/newDiagram.md b/packages/mermaid/src/docs/community/newDiagram.md index 57a454671..75e17e4c9 100644 --- a/packages/mermaid/src/docs/community/newDiagram.md +++ b/packages/mermaid/src/docs/community/newDiagram.md @@ -55,7 +55,7 @@ Place the renderer in the diagram folder. ### Step 3: Detection of the new diagram type -The second thing to do is to add the capability to detect the new new diagram to type to the detectType in utils.js. The detection should return a key for the new diagram type. +The second thing to do is to add the capability to detect the new diagram to type to the detectType in utils.js. The detection should return a key for the new diagram type. [This key will be used to as the aria roledescription](#aria-roledescription), so it should be a word that clearly describes the diagram type. For example, if your new diagram use a UML deployment diagram, a good key would be "UMLDeploymentDiagram" because assistive technologies such as a screen reader would voice that as "U-M-L Deployment diagram." Another good key would be "deploymentDiagram" because that would be voiced as "Deployment Diagram." A bad key would be "deployment" because that would not sufficiently describe the diagram. From e46e918b232c41b85071baffe7ee6e5debbb92ee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Dec 2022 01:03:22 +0000 Subject: [PATCH 54/81] chore(deps): update pnpm to v7.18.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5d3e44494..596cac22b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "9.3.0-rc1", "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "type": "module", - "packageManager": "pnpm@7.18.1", + "packageManager": "pnpm@7.18.2", "keywords": [ "diagram", "markdown", From 8e7dd1d14883a438cf090a12750b72d4d89af4b5 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 19 Dec 2022 13:29:09 +0530 Subject: [PATCH 55/81] fix: Remove basepath from docs --- packages/mermaid/src/docs/.vitepress/config.ts | 4 ++-- packages/mermaid/src/docs/.vitepress/theme/index.ts | 2 +- packages/mermaid/src/docs/.vitepress/theme/redirect.ts | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/mermaid/src/docs/.vitepress/config.ts b/packages/mermaid/src/docs/.vitepress/config.ts index 216541d52..33e930cb8 100644 --- a/packages/mermaid/src/docs/.vitepress/config.ts +++ b/packages/mermaid/src/docs/.vitepress/config.ts @@ -14,9 +14,9 @@ export default defineConfig({ lang: 'en-US', title: 'Mermaid', description: 'Create diagrams and visualizations using text and code.', - base: '/mermaid/', + base: '/', markdown: allMarkdownTransformers, - head: [['link', { rel: 'icon', type: 'image/x-icon', href: '/mermaid/favicon.ico' }]], + head: [['link', { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }]], themeConfig: { nav: nav(), editLink: { diff --git a/packages/mermaid/src/docs/.vitepress/theme/index.ts b/packages/mermaid/src/docs/.vitepress/theme/index.ts index efb065fea..ef929aa5d 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/index.ts +++ b/packages/mermaid/src/docs/.vitepress/theme/index.ts @@ -18,7 +18,7 @@ export default { if (newPath) { console.log(`Redirecting to ${newPath} from ${window.location}`); // router.go isn't loading the ID properly. - window.location.href = `/mermaid/${newPath}`; + window.location.href = `/${newPath}`; } } catch (e) {} }; diff --git a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts index ca4606be0..b6cfa4de2 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts +++ b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts @@ -10,7 +10,9 @@ export interface Redirect { const getBaseFile = (link: string): Redirect => { const url = new URL(link); if ( - (url.hostname !== 'mermaid-js.github.io' && url.hostname !== 'localhost') || + (url.hostname !== 'mermaid-js.github.io' && + url.hostname !== 'mermaid.js.org' && + url.hostname !== 'localhost') || url.pathname !== '/mermaid/' ) { throw new Error('Not mermaidjs url'); From fd5780d5a13aa583322105c5f70afdafe28e03d5 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 19 Dec 2022 13:51:05 +0530 Subject: [PATCH 56/81] fix Redirect --- .../mermaid/src/docs/.vitepress/theme/redirect.spec.ts | 4 +--- packages/mermaid/src/docs/.vitepress/theme/redirect.ts | 7 +++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/mermaid/src/docs/.vitepress/theme/redirect.spec.ts b/packages/mermaid/src/docs/.vitepress/theme/redirect.spec.ts index c26364108..6070abee4 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/redirect.spec.ts +++ b/packages/mermaid/src/docs/.vitepress/theme/redirect.spec.ts @@ -8,6 +8,7 @@ test.each([ ['http://localhost:1234/mermaid/#/flowchart.md', 'syntax/flowchart.html'], ['http://localhost/mermaid/#/flowchart.md', 'syntax/flowchart.html'], ['https://mermaid-js.github.io/mermaid/#/flowchart.md', 'syntax/flowchart.html'], + ['https://mermaid.js.org/#/flowchart.md', 'syntax/flowchart.html'], ['https://mermaid-js.github.io/mermaid/#/./flowchart', 'syntax/flowchart.html'], ['https://mermaid-js.github.io/mermaid/#/flowchart', 'syntax/flowchart.html'], ['https://mermaid-js.github.io/mermaid/#flowchart', 'syntax/flowchart.html'], @@ -31,7 +32,4 @@ test.each([ test('should throw for invalid URL', () => { // Not mermaid domain expect(() => getRedirect('https://www.google.com')).toThrowError(); - - // Not `/mermaid/` path - expect(() => getRedirect('http://localhost/#/flowchart.md')).toThrowError(); }); diff --git a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts index b6cfa4de2..58537b0ef 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts +++ b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts @@ -10,10 +10,9 @@ export interface Redirect { const getBaseFile = (link: string): Redirect => { const url = new URL(link); if ( - (url.hostname !== 'mermaid-js.github.io' && - url.hostname !== 'mermaid.js.org' && - url.hostname !== 'localhost') || - url.pathname !== '/mermaid/' + url.hostname !== 'mermaid-js.github.io' && + url.hostname !== 'mermaid.js.org' && + url.hostname !== 'localhost' ) { throw new Error('Not mermaidjs url'); } From 81aee3554ea2caba457aa31cf1e93aca4c42b59c Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 19 Dec 2022 14:26:20 +0530 Subject: [PATCH 57/81] Revert "Add CNAME" This reverts commit 7670ada9acc552dcec0d6db53c8458c6d16df9ac. --- docs/CNAME | 1 - packages/mermaid/package.json | 2 +- packages/mermaid/src/docs/CNAME | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 docs/CNAME delete mode 100644 packages/mermaid/src/docs/CNAME diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index 878812ee9..000000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -mermaid.js.org \ No newline at end of file diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index c3804896e..cd809fef1 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -28,7 +28,7 @@ "docs:build": "rimraf ../../docs && pnpm docs:spellcheck && pnpm docs:code && ts-node-esm src/docs.mts", "docs:verify": "pnpm docs:spellcheck && pnpm docs:code && ts-node-esm src/docs.mts --verify", "docs:pre:vitepress": "rimraf src/vitepress && pnpm docs:code && ts-node-esm src/docs.mts --vitepress", - "docs:build:vitepress": "pnpm docs:pre:vitepress && vitepress build src/vitepress && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing && cpy --flat src/docs/CNAME ./src/vitepress/.vitepress/dist/", + "docs:build:vitepress": "pnpm docs:pre:vitepress && vitepress build src/vitepress && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing", "docs:dev": "pnpm docs:pre:vitepress && concurrently \"vitepress dev src/vitepress\" \"ts-node-esm src/docs.mts --watch --vitepress\"", "docs:serve": "pnpm docs:build:vitepress && vitepress serve src/vitepress", "docs:spellcheck": "cspell --config ../../cSpell.json \"src/docs/**/*.md\"", diff --git a/packages/mermaid/src/docs/CNAME b/packages/mermaid/src/docs/CNAME deleted file mode 100644 index 878812ee9..000000000 --- a/packages/mermaid/src/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -mermaid.js.org \ No newline at end of file From 86946c9bfdc97940a388733c4ded4cd9199410d3 Mon Sep 17 00:00:00 2001 From: Frank Mayer Date: Mon, 19 Dec 2022 15:38:52 +0100 Subject: [PATCH 58/81] fixed Composition arrow Composition arrow was displayed as \*-- but should be *-- --- packages/mermaid/src/docs/syntax/classDiagram.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/docs/syntax/classDiagram.md b/packages/mermaid/src/docs/syntax/classDiagram.md index 8cd5796ff..50593f729 100644 --- a/packages/mermaid/src/docs/syntax/classDiagram.md +++ b/packages/mermaid/src/docs/syntax/classDiagram.md @@ -172,7 +172,7 @@ There are eight different types of relations defined for classes under UML which | Type | Description | | ------- | ------------- | | `<\|--` | Inheritance | -| `\*--` | Composition | +| `*--` | Composition | | `o--` | Aggregation | | `-->` | Association | | `--` | Link (Solid) | From fca58f59429da0221c8431b7c2c32441aea6c996 Mon Sep 17 00:00:00 2001 From: steph Date: Mon, 19 Dec 2022 17:45:25 -0800 Subject: [PATCH 59/81] remove text and add social icons --- docs/book/class.png | Bin 34954 -> 0 bytes docs/book/cover.jpg | Bin 17803 -> 0 bytes docs/book/er.png | Bin 13419 -> 0 bytes docs/book/flowchart.png | Bin 14794 -> 0 bytes docs/book/gantt.png | Bin 43239 -> 0 bytes docs/book/index.html | 340 ------------------ docs/book/sequence-diagram.png | Bin 19823 -> 0 bytes docs/book/state.png | Bin 15574 -> 0 bytes .../mermaid/src/docs/.vitepress/config.ts | 13 +- 9 files changed, 4 insertions(+), 349 deletions(-) delete mode 100644 docs/book/class.png delete mode 100644 docs/book/cover.jpg delete mode 100644 docs/book/er.png delete mode 100644 docs/book/flowchart.png delete mode 100644 docs/book/gantt.png delete mode 100644 docs/book/index.html delete mode 100644 docs/book/sequence-diagram.png delete mode 100644 docs/book/state.png diff --git a/docs/book/class.png b/docs/book/class.png deleted file mode 100644 index 5b2f663d86f967ca5d96c5fffca73b6e8efb3ad4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34954 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

y{(-`u^dIjWHRrLfhUK$DDj6 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 QcZx_!PE8grZTjKA0f;sM5dZ)H diff --git a/docs/book/flowchart.png b/docs/book/flowchart.png deleted file mode 100644 index 714626b70e398905987bec0c460308fa7a84471f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14794 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 diff --git a/docs/book/gantt.png b/docs/book/gantt.png deleted file mode 100644 index 95c8d08a14bc4306426530921fd538b404dfc1da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43239 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 - - - - - - The Official Guide to Mermaid.js - - - - - - - - - - - - - - - - -

-
- - - - - - - - - - - - -
-
-
-

- Get up to speed with using Mermaid diagrams along with real-world examples and expert tips - from the authors to facilitate a seamless development workflow -

-
-
-
-
-
-

- Flowcharts is a diagram type that visualizes a process or an algorithm by showing the - steps in order, as well as the different paths the execution can take. -

-
-
- -
-
-
-
- -
-
-
-

- Sequence diagrams lets you model and visualize interactions between different actors - or objects in a system, as well as the order of those interactions -

-
-
-
-
-
-

- A class diagram is a graphical representation that is used to visualize and describe - an object-oriented system. -

-
-
- -
-
-
-
- -
-
-
-

- An entity-relationship diagram is a graphical representation that is used to - visualize the different types of entities that exist within a system. -

-
-
-
-
-
-

- Use State diagrams to model and document state machines, an abstract way of - representing a system or an algorithm. -

-
-
- -
-
-
-
- -
-
-
-

- A Gantt chart is a graphical representation that is used to visualize and describe - tasks (events or activities) over time. -

-
-
-
-
-

- These were a few of the diagrams supported by Mermaid. -

-
- -
-
-

- Book description -

-
-

- Mermaid lets you represent diagrams using text and code which simplifies the maintenance - of complex diagrams. This is a great option for developers as they’re more familiar with - code, rather than special tools for generating diagrams. Besides, diagrams in code - simplify maintenance and ensure that the code is supported by version control systems. - In some cases, Mermaid makes refactoring support for name changes possible while also - enabling team collaboration for review distribution and updates. -

-

- Developers working with any system will be able to put their knowledge to work with this - practical guide to using Mermaid for documentation. The book is also a great reference - for looking up the syntax for specific diagrams when authoring diagrams. -

-

- You’ll start by getting up to speed with the importance of accurate and visual - documentation. Next, the book introduces Mermaid and establishes how to use it to create - effective documentation. By using different tools, editors, or a custom documentation - platform, you’ll also learn how to use Mermaid syntax for various diagrams. Later - chapters cover advanced configuration settings and theme options to manipulate your - diagram as per your needs. -

-

- By the end of this Mermaid book, you’ll have become well-versed with the different types - of Mermaid diagrams and how they can be used in your workflows. -

-
-
-
-
-
-

- What you will learn -

-
-
-
-
-
-
-
    -
  • - Understand good and bad documentation, and the art of effective documentation -
  • -
  • - Become well-versed with maintaining complex diagrams with ease -
  • -
  • - Learn how to set up a custom documentation system -
  • -
  • - Learn how to implement Mermaid diagrams in your workflows -
  • -
  • - Understand how to set up themes for a Mermaid diagram for an entire site -
  • -
  • - Discover how to draw different types of diagrams such as flowcharts, class - diagrams, Gantt charts, and more -
  • -
-
-
-
-
-
- - - - - - - - - - - - - - - - - -
-

- Purchase The Official Guide to Mermaid.js -

-
-
-
-

-

Written by Knut Sveidqvist and Ashish Jain.

-

- Knut is the creator of Mermaid and both authors are active core team members of the - Mermaid open-source project. -

-

- - - -
- - - diff --git a/docs/book/sequence-diagram.png b/docs/book/sequence-diagram.png deleted file mode 100644 index 8c51ac1c5d6601960112784757061943d9d6dc8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19823 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%0D)Muw-s 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 DRc_Wx diff --git a/packages/mermaid/src/docs/.vitepress/config.ts b/packages/mermaid/src/docs/.vitepress/config.ts index 707bdf03b..9b5f1547e 100644 --- a/packages/mermaid/src/docs/.vitepress/config.ts +++ b/packages/mermaid/src/docs/.vitepress/config.ts @@ -23,10 +23,13 @@ export default defineConfig({ pattern: 'https://github.com/mermaid-js/mermaid/edit/develop/packages/mermaid/src/docs/:path', text: 'Edit this page on GitHub', }, - sidebar: { '/': sidebarAll(), }, + socialLinks: [ + { icon: 'github', link: 'https://github.com/mermaid-js/mermaid' }, + { icon: 'slack', link: 'https://mermaid-talk.slack.com' }, + ], }, }); @@ -56,14 +59,6 @@ function nav() { text: '💻 Live Editor', link: 'https://mermaid.live', }, - { - text: 'Slack', - link: 'https://mermaid-talk.slack.com', - }, - { - text: 'GitHub', - link: 'https://github.com/mermaid-js/mermaid', - }, ]; } From 72d9e872846cf900ee19144aab853e76620314ee Mon Sep 17 00:00:00 2001 From: sidharthv96 Date: Tue, 20 Dec 2022 05:14:37 +0000 Subject: [PATCH 60/81] Update docs --- docs/syntax/classDiagram.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/syntax/classDiagram.md b/docs/syntax/classDiagram.md index c4fc07732..97032ff56 100644 --- a/docs/syntax/classDiagram.md +++ b/docs/syntax/classDiagram.md @@ -267,7 +267,7 @@ There are eight different types of relations defined for classes under UML which | Type | Description | | ------- | ------------- | | `<\|--` | Inheritance | -| `\*--` | Composition | +| `*--` | Composition | | `o--` | Aggregation | | `-->` | Association | | `--` | Link (Solid) | From 469bdcef2fb938d3d884826cf59329663e6aae96 Mon Sep 17 00:00:00 2001 From: steph Date: Sun, 18 Dec 2022 20:15:29 -0800 Subject: [PATCH 61/81] add support for vitepress blocks --- packages/mermaid/src/docs.mts | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/packages/mermaid/src/docs.mts b/packages/mermaid/src/docs.mts index 313d1f2de..a4ec0d718 100644 --- a/packages/mermaid/src/docs.mts +++ b/packages/mermaid/src/docs.mts @@ -146,9 +146,22 @@ const readSyncedUTF8file = (filename: string): string => { return readFileSync(filename, 'utf8'); }; -const transformToBlockQuote = (content: string, type: string) => { - const title = type === 'warning' ? 'Warning' : 'Note'; - return `> **${title}** \n> ${content.replace(/\n/g, '\n> ')}`; +const blockIcons: Record = { + tip: '💡 ', + danger: '‼️ ', +}; + +const capitalize = (word: string) => word[0].toUpperCase() + word.slice(1); + +const transformToBlockQuote = (content: string, type: string, customTitle?: string | null) => { + if (vitepress) { + const vitepressType = type === 'note' ? 'info' : type; + return `::: ${vitepressType} ${customTitle || ''}\n${content}\n:::`; + } else { + const icon = blockIcons[type] || ''; + const title = `${icon}${customTitle || capitalize(type)}`; + return `> **${title}** \n> ${content.replace(/\n/g, '\n> ')}`; + } }; const injectPlaceholders = (text: string): string => @@ -194,8 +207,8 @@ const transformMarkdown = (file: string) => { } // Transform codeblocks into block quotes. - if (['note', 'tip', 'warning'].includes(c.lang)) { - return [remark.parse(transformToBlockQuote(c.value, c.lang))]; + if (['note', 'tip', 'warning', 'danger'].includes(c.lang)) { + return [remark.parse(transformToBlockQuote(c.value, c.lang, c.meta))]; } return [c]; From 3beb828988e2255c210b0908eb5c70c9a17a511b Mon Sep 17 00:00:00 2001 From: Tom PERRILLAT-COLLOMB Date: Tue, 20 Dec 2022 18:35:03 +0100 Subject: [PATCH 62/81] chore(pr): add task in PR template --- .github/pull_request_template.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 41d9c4cff..3574c3599 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -14,4 +14,5 @@ Make sure you - [ ] :book: have read the [contribution guidelines](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) - [ ] :computer: have added unit/e2e tests (if appropriate) +- [ ] :notebook: have added documentation (if appropriate) - [ ] :bookmark: targeted `develop` branch From 0f337d654f3f11c7828a2f1105790df619a806f9 Mon Sep 17 00:00:00 2001 From: Steph <35910788+huynhicode@users.noreply.github.com> Date: Tue, 20 Dec 2022 09:37:26 -0800 Subject: [PATCH 63/81] Update packages/mermaid/src/docs/syntax/gantt.md Co-authored-by: Alois Klink --- packages/mermaid/src/docs/syntax/gantt.md | 44 +++++++++++------------ 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/packages/mermaid/src/docs/syntax/gantt.md b/packages/mermaid/src/docs/syntax/gantt.md index 7ddb72734..920869fba 100644 --- a/packages/mermaid/src/docs/syntax/gantt.md +++ b/packages/mermaid/src/docs/syntax/gantt.md @@ -110,29 +110,27 @@ dateFormat YYYY-MM-DD The following formatting options are supported: -```markdown -Input Example Description: - -YYYY 2014 4 digit year -YY 14 2 digit year -Q 1..4 Quarter of year. Sets month to first month in quarter. -M MM 1..12 Month number -MMM MMMM January..Dec Month name in locale set by moment.locale() -D DD 1..31 Day of month -Do 1st..31st Day of month with ordinal -DDD DDDD 1..365 Day of year -X 1410715640.579 Unix timestamp -x 1410715640579 Unix ms timestamp -H HH 0..23 24 hour time -h hh 1..12 12 hour time used with a A. -a A am pm Post or ante meridiem -m mm 0..59 Minutes -s ss 0..59 Seconds -S 0..9 Tenths of a second -SS 0..99 Hundreds of a second -SSS 0..999 Thousandths of a second -Z ZZ +12:00 Offset from UTC as +-HH:mm, +-HHmm, or Z -``` +| Input | Example | Description | +| ---------- | -------------- | ------------------------------------------------------ | +| `YYYY` | 2014 | 4 digit year | +| `YY` | 14 | 2 digit year | +| `Q` | 1..4 | Quarter of year. Sets month to first month in quarter. | +| `M MM` | 1..12 | Month number | +| `MMM MMMM` | January..Dec | Month name in locale set by `moment.locale()` | +| `D DD` | 1..31 | Day of month | +| `Do` | 1st..31st | Day of month with ordinal | +| `DDD DDDD` | 1..365 | Day of year | +| `X` | 1410715640.579 | Unix timestamp | +| `x` | 1410715640579 | Unix ms timestamp | +| `H HH` | 0..23 | 24 hour time | +| `h hh` | 1..12 | 12 hour time used with `a A`. | +| `a A` | am pm | Post or ante meridiem | +| `m mm` | 0..59 | Minutes | +| `s ss` | 0..59 | Seconds | +| `S` | 0..9 | Tenths of a second | +| `SS` | 0..99 | Hundreds of a second | +| `SSS` | 0..999 | Thousandths of a second | +| `Z ZZ` | +12:00 | Offset from UTC as +-HH:mm, +-HHmm, or Z | More info in: https://momentjs.com/docs/#/parsing/string-format/ From b220718b96a432eb343489353e1d9bdb21e40b00 Mon Sep 17 00:00:00 2001 From: Steph <35910788+huynhicode@users.noreply.github.com> Date: Tue, 20 Dec 2022 09:37:42 -0800 Subject: [PATCH 64/81] Update packages/mermaid/src/docs/syntax/gantt.md Co-authored-by: Alois Klink --- packages/mermaid/src/docs/syntax/gantt.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mermaid/src/docs/syntax/gantt.md b/packages/mermaid/src/docs/syntax/gantt.md index 920869fba..b51b3ab5c 100644 --- a/packages/mermaid/src/docs/syntax/gantt.md +++ b/packages/mermaid/src/docs/syntax/gantt.md @@ -183,8 +183,8 @@ tickInterval 1day The pattern is: -```markdown -/^([1-9][0-9]\*)(minute|hour|day|week|month)$/ +```javascript +/^([1-9][0-9]*)(minute|hour|day|week|month)$/ ``` More info in: [https://github.com/d3/d3-time#interval_every](https://github.com/d3/d3-time#interval_every) From 895c16a79343d94d0a84d6aa2ddd20c1405d90f9 Mon Sep 17 00:00:00 2001 From: Omer Rosenbaum <52040016+Omerr@users.noreply.github.com> Date: Wed, 21 Dec 2022 10:56:09 +0200 Subject: [PATCH 65/81] Add Swimm to the list of integrations --- packages/mermaid/src/docs/misc/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/mermaid/src/docs/misc/integrations.md b/packages/mermaid/src/docs/misc/integrations.md index 55d0e5b20..e16375872 100644 --- a/packages/mermaid/src/docs/misc/integrations.md +++ b/packages/mermaid/src/docs/misc/integrations.md @@ -15,6 +15,7 @@ They also serve as proof of concept, for the variety of things that can be built - [Azure Devops](https://docs.microsoft.com/en-us/azure/devops/project/wiki/wiki-markdown-guidance?view=azure-devops#add-mermaid-diagrams-to-a-wiki-page) (**Native support**) - [Tuleap](https://docs.tuleap.org/user-guide/writing-in-tuleap.html#graphs) (**Native support**) - [Joplin](https://joplinapp.org) (**Native support**) +- [Swimm](https://swimm.io) (**Native support**) - [Notion](https://notion.so) (**Native support**) - [Observable](https://observablehq.com/@observablehq/mermaid) (**Native support**) - [Obsidian](https://help.obsidian.md/How+to/Format+your+notes#Diagram) (**Native support**) From 22b66193dc774fc71115ae899f834dad3edb1fe9 Mon Sep 17 00:00:00 2001 From: steph Date: Wed, 21 Dec 2022 11:24:48 -0800 Subject: [PATCH 66/81] update outdate format info formatting --- docs/syntax/gantt.md | 100 +++++++++++----------- packages/mermaid/src/docs/syntax/gantt.md | 54 ++++++------ 2 files changed, 76 insertions(+), 78 deletions(-) diff --git a/docs/syntax/gantt.md b/docs/syntax/gantt.md index f54554bd4..5a9729d63 100644 --- a/docs/syntax/gantt.md +++ b/docs/syntax/gantt.md @@ -178,29 +178,27 @@ dateFormat YYYY-MM-DD The following formatting options are supported: -```markdown -Input Example Description: - -YYYY 2014 4 digit year -YY 14 2 digit year -Q 1..4 Quarter of year. Sets month to first month in quarter. -M MM 1..12 Month number -MMM MMMM January..Dec Month name in locale set by moment.locale() -D DD 1..31 Day of month -Do 1st..31st Day of month with ordinal -DDD DDDD 1..365 Day of year -X 1410715640.579 Unix timestamp -x 1410715640579 Unix ms timestamp -H HH 0..23 24 hour time -h hh 1..12 12 hour time used with a A. -a A am pm Post or ante meridiem -m mm 0..59 Minutes -s ss 0..59 Seconds -S 0..9 Tenths of a second -SS 0..99 Hundreds of a second -SSS 0..999 Thousandths of a second -Z ZZ +12:00 Offset from UTC as +-HH:mm, +-HHmm, or Z -``` +| Input | Example | Description | +| ---------- | -------------- | ------------------------------------------------------ | +| `YYYY` | 2014 | 4 digit year | +| `YY` | 14 | 2 digit year | +| `Q` | 1..4 | Quarter of year. Sets month to first month in quarter. | +| `M MM` | 1..12 | Month number | +| `MMM MMMM` | January..Dec | Month name in locale set by `moment.locale()` | +| `D DD` | 1..31 | Day of month | +| `Do` | 1st..31st | Day of month with ordinal | +| `DDD DDDD` | 1..365 | Day of year | +| `X` | 1410715640.579 | Unix timestamp | +| `x` | 1410715640579 | Unix ms timestamp | +| `H HH` | 0..23 | 24 hour time | +| `h hh` | 1..12 | 12 hour time used with `a A`. | +| `a A` | am pm | Post or ante meridiem | +| `m mm` | 0..59 | Minutes | +| `s ss` | 0..59 | Seconds | +| `S` | 0..9 | Tenths of a second | +| `SS` | 0..99 | Hundreds of a second | +| `SSS` | 0..999 | Thousandths of a second | +| `Z ZZ` | +12:00 | Offset from UTC as +-HH:mm, +-HHmm, or Z | More info in: https://momentjs.com/docs/#/parsing/string-format/ @@ -214,32 +212,32 @@ axisFormat %Y-%m-%d The following formatting strings are supported: -```markdown -%a - abbreviated weekday name. -%A - full weekday name. -%b - abbreviated month name. -%B - full month name. -%c - date and time, as "%a %b %e %H:%M:%S %Y". -%d - zero-padded day of the month as a decimal number [01,31]. -%e - space-padded day of the month as a decimal number [ 1,31]; equivalent to %\_d. -%H - hour (24-hour clock) as a decimal number [00,23]. -%I - hour (12-hour clock) as a decimal number [01,12]. -%j - day of the year as a decimal number [001,366]. -%m - month as a decimal number [01,12]. -%M - minute as a decimal number [00,59]. -%L - milliseconds as a decimal number [000, 999]. -%p - either AM or PM. -%S - second as a decimal number [00,61]. -%U - week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. -%w - weekday as a decimal number [0(Sunday),6]. -%W - week number of the year (Monday as the first day of the week) as a decimal number [00,53]. -%x - date, as "%m/%d/%Y". -%X - time, as "%H:%M:%S". -%y - year without century as a decimal number [00,99]. -%Y - year with century as a decimal number. -%Z - time zone offset, such as "-0700". -%% - a literal "%" character. -``` +| Format | Definition | +| ------ | ------------------------------------------------------------------------------------------ | +| %a | abbreviated weekday name | +| %A | full weekday name | +| %b | abbreviated month name | +| %B | full month name | +| %c | date and time, as "%a %b %e %H:%M:%S %Y" | +| %d | zero-padded day of the month as a decimal number \[01,31] | +| %e | space-padded day of the month as a decimal number \[ 1,31]; equivalent to %\_d | +| %H | hour (24-hour clock) as a decimal number \[00,23] | +| %I | hour (12-hour clock) as a decimal number \[01,12] | +| %j | day of the year as a decimal number \[001,366] | +| %m | month as a decimal number \[01,12] | +| %M | minute as a decimal number \[00,59] | +| %L | milliseconds as a decimal number \[000, 999] | +| %p | either AM or PM | +| %S | second as a decimal number \[00,61] | +| %U | week number of the year (Sunday as the first day of the week) as a decimal number \[00,53] | +| %w | weekday as a decimal number \[0(Sunday),6] | +| %W | week number of the year (Monday as the first day of the week) as a decimal number \[00,53] | +| %x | date, as "%m/%d/%Y" | +| %X | time, as "%H:%M:%S" | +| %y | year without century as a decimal number \[00,99] | +| %Y | year with century as a decimal number | +| %Z | time zone offset, such as "-0700" | +| %% | a literal "%" character | More info in: @@ -253,8 +251,8 @@ tickInterval 1day The pattern is: -```markdown -/^([1-9][0-9]\*)(minute|hour|day|week|month)$/ +```javascript +/^([1-9][0-9]*)(minute|hour|day|week|month)$/; ``` More info in: diff --git a/packages/mermaid/src/docs/syntax/gantt.md b/packages/mermaid/src/docs/syntax/gantt.md index b51b3ab5c..0cc915ca1 100644 --- a/packages/mermaid/src/docs/syntax/gantt.md +++ b/packages/mermaid/src/docs/syntax/gantt.md @@ -144,32 +144,32 @@ axisFormat %Y-%m-%d The following formatting strings are supported: -```markdown -%a - abbreviated weekday name. -%A - full weekday name. -%b - abbreviated month name. -%B - full month name. -%c - date and time, as "%a %b %e %H:%M:%S %Y". -%d - zero-padded day of the month as a decimal number [01,31]. -%e - space-padded day of the month as a decimal number [ 1,31]; equivalent to %\_d. -%H - hour (24-hour clock) as a decimal number [00,23]. -%I - hour (12-hour clock) as a decimal number [01,12]. -%j - day of the year as a decimal number [001,366]. -%m - month as a decimal number [01,12]. -%M - minute as a decimal number [00,59]. -%L - milliseconds as a decimal number [000, 999]. -%p - either AM or PM. -%S - second as a decimal number [00,61]. -%U - week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. -%w - weekday as a decimal number [0(Sunday),6]. -%W - week number of the year (Monday as the first day of the week) as a decimal number [00,53]. -%x - date, as "%m/%d/%Y". -%X - time, as "%H:%M:%S". -%y - year without century as a decimal number [00,99]. -%Y - year with century as a decimal number. -%Z - time zone offset, such as "-0700". -%% - a literal "%" character. -``` +| Format | Definition | +| ------ | ----------------------------------------------------------------------------------------- | +| %a | abbreviated weekday name | +| %A | full weekday name | +| %b | abbreviated month name | +| %B | full month name | +| %c | date and time, as "%a %b %e %H:%M:%S %Y" | +| %d | zero-padded day of the month as a decimal number [01,31] | +| %e | space-padded day of the month as a decimal number [ 1,31]; equivalent to %\_d | +| %H | hour (24-hour clock) as a decimal number [00,23] | +| %I | hour (12-hour clock) as a decimal number [01,12] | +| %j | day of the year as a decimal number [001,366] | +| %m | month as a decimal number [01,12] | +| %M | minute as a decimal number [00,59] | +| %L | milliseconds as a decimal number [000, 999] | +| %p | either AM or PM | +| %S | second as a decimal number [00,61] | +| %U | week number of the year (Sunday as the first day of the week) as a decimal number [00,53] | +| %w | weekday as a decimal number [0(Sunday),6] | +| %W | week number of the year (Monday as the first day of the week) as a decimal number [00,53] | +| %x | date, as "%m/%d/%Y" | +| %X | time, as "%H:%M:%S" | +| %y | year without century as a decimal number [00,99] | +| %Y | year with century as a decimal number | +| %Z | time zone offset, such as "-0700" | +| %% | a literal "%" character | More info in: [https://github.com/d3/d3-time-format/tree/v4.0.0#locale_format](https://github.com/d3/d3-time-format/tree/v4.0.0#locale_format) @@ -184,7 +184,7 @@ tickInterval 1day The pattern is: ```javascript -/^([1-9][0-9]*)(minute|hour|day|week|month)$/ +/^([1-9][0-9]*)(minute|hour|day|week|month)$/; ``` More info in: [https://github.com/d3/d3-time#interval_every](https://github.com/d3/d3-time#interval_every) From 69928e3ede028c8e2de0eee531e662c863a6013d Mon Sep 17 00:00:00 2001 From: steph Date: Wed, 21 Dec 2022 14:21:47 -0800 Subject: [PATCH 67/81] retrigger CI From 1da20d7aa539e9291928b627d68cdd66960e647d Mon Sep 17 00:00:00 2001 From: Omer Rosenbaum Date: Thu, 22 Dec 2022 11:39:21 +0200 Subject: [PATCH 68/81] Added swimm to cSpell --- cSpell.json | 1 + 1 file changed, 1 insertion(+) diff --git a/cSpell.json b/cSpell.json index 4e9e4945a..49cb8ada1 100644 --- a/cSpell.json +++ b/cSpell.json @@ -83,6 +83,7 @@ "stylis", "substate", "sveidqvist", + "swimm", "techn", "teststr", "textlength", From d75f70f8085afc98f273dd733a10a24e2963cf5a Mon Sep 17 00:00:00 2001 From: Omer Rosenbaum Date: Thu, 22 Dec 2022 11:41:54 +0200 Subject: [PATCH 69/81] Rebuild the docs -> update integrations with swimm --- docs/misc/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/misc/integrations.md b/docs/misc/integrations.md index 5f4d87792..50f3237cd 100644 --- a/docs/misc/integrations.md +++ b/docs/misc/integrations.md @@ -21,6 +21,7 @@ They also serve as proof of concept, for the variety of things that can be built - [Azure Devops](https://docs.microsoft.com/en-us/azure/devops/project/wiki/wiki-markdown-guidance?view=azure-devops#add-mermaid-diagrams-to-a-wiki-page) (**Native support**) - [Tuleap](https://docs.tuleap.org/user-guide/writing-in-tuleap.html#graphs) (**Native support**) - [Joplin](https://joplinapp.org) (**Native support**) +- [Swimm](https://swimm.io) (**Native support**) - [Notion](https://notion.so) (**Native support**) - [Observable](https://observablehq.com/@observablehq/mermaid) (**Native support**) - [Obsidian](https://help.obsidian.md/How+to/Format+your+notes#Diagram) (**Native support**) From df42f96b5a1900fb1d830e1604128e3605cfc6e2 Mon Sep 17 00:00:00 2001 From: Tom PERRILLAT-COLLOMB Date: Thu, 22 Dec 2022 11:17:44 +0100 Subject: [PATCH 70/81] docs(classDiagram): add nested generic type example in docs --- demos/classchart.html | 2 +- docs/book/class.png | Bin 34954 -> 0 bytes docs/book/cover.jpg | Bin 17803 -> 0 bytes docs/book/er.png | Bin 13419 -> 0 bytes docs/book/flowchart.png | Bin 14794 -> 0 bytes docs/book/gantt.png | Bin 43239 -> 0 bytes docs/book/index.html | 340 ------------------ docs/book/sequence-diagram.png | Bin 19823 -> 0 bytes docs/book/state.png | Bin 15574 -> 0 bytes docs/syntax/classDiagram.md | 4 +- .../mermaid/src/docs/syntax/classDiagram.md | 3 +- 11 files changed, 6 insertions(+), 343 deletions(-) delete mode 100644 docs/book/class.png delete mode 100644 docs/book/cover.jpg delete mode 100644 docs/book/er.png delete mode 100644 docs/book/flowchart.png delete mode 100644 docs/book/gantt.png delete mode 100644 docs/book/index.html delete mode 100644 docs/book/sequence-diagram.png delete mode 100644 docs/book/state.png diff --git a/demos/classchart.html b/demos/classchart.html index 84cc7bec5..0f564d421 100644 --- a/demos/classchart.html +++ b/demos/classchart.html @@ -149,7 +149,7 @@ title: Demo Class Diagram -privateProperty : string #ProtectedProperty : string ~InternalProperty : string - ~AnotherInternalProperty : List~MyType~ + ~AnotherInternalProperty : List~List~string~~ }

diff --git a/docs/book/class.png b/docs/book/class.png deleted file mode 100644 index 5b2f663d86f967ca5d96c5fffca73b6e8efb3ad4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34954 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

y{(-`u^dIjWHRrLfhUK$DDj6 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 QcZx_!PE8grZTjKA0f;sM5dZ)H diff --git a/docs/book/flowchart.png b/docs/book/flowchart.png deleted file mode 100644 index 714626b70e398905987bec0c460308fa7a84471f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14794 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 diff --git a/docs/book/gantt.png b/docs/book/gantt.png deleted file mode 100644 index 95c8d08a14bc4306426530921fd538b404dfc1da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43239 zcmdSB1yozz*EdL&r?fx?r$8xC99rC=MFYhpI4u;nQUVkW6`*+0;O-LKtu4hZNN_10 zyg+agz8m`V|GnR=cg>nvGi%L!dja<*_uM13I+???=)OKmU*sWo@&J6L5w|3-rfrU6EnIU%l zVGpQR8PUJ}VRFBths+yQO=0&E*cR`c!Us;bnRqKC&dxCCg8cmadq8I{$(OpW z9rgDE9^NGNt-F6e{c=_C{dUHIt#W zO)EAgzi0@>f*T#=<|SXmWgRl?1QK6xG$q|9cagLx1U@__?_hn#Bwa@|d$$JuQqM`? zMtJb(`qqSqv0=^G(sOf1?xWaAZ? z?$O9kdY{PQ|irLk(tDRz9_Yt(4EH z+OD5fr?s6EKNo4He_sl_HZn_~c`vzs=j%26xSE8x(m=6{|IirC{9>1AI~Q+y*S zyJKhOJp8mTR7vf8;UB%mkT8r!O)Namhc`yQg{EHF#GFm3Hgf;lZlp~JCGZeg1 zzy*;J6lt8B#Sf9essVS&!BW5q}%D9 zeNwt+7CP?L4Y?Zr6MB%q#K(qZW@2FfvPe>PLe0%9%uzMc46w^aFLRgpR+%J~F8I=)(&oh$_T zYSopw#@0fsu^wHZ(R?q+6YBRuInsLkYBrOMOG8Zey9Y%)XE)ZvJOx;*%6ah{6xIT# zsH+8-%nf%nw9~1HQHIv}8*?c~QB@AxPx-OS!g&RZr1Z=qkXwBpP6@B$jjqxRVI=Oudgn=LmoD^-Oi^8Hi z+c#u$@+8K7bt;Z5bl%lVIt}?UupYf|U;z^xjUgPfgXyxB&V3AThMfoXXT2`$nGkqf@5($!&*^%~^Ka z+CPU_4^naFHxZ*dyb-x}Hh(M+FY#7;X!6{&;Dsg05vIKY7sWG6Rf)0w!p zwGMaN$!ps>DysI|4(eCK65mv{u`QQ>EN-|cW%6)ZeV%NGs(5+to`6g7*bf-Ft-42% zU91lkd6WKB1@)8?v&&P@1_92%(OMre*(Xbt(vgMc=6X)$@n_bCXvL;lUV~6NgR(G7 zOWU&?Pl$Y4Do4bv`XvIV7}xBdlW(@&3N2%5QL6}!9b=X$g!V=5|~oYhOK^d89T1W_fTeMQ6o_SCX9g%SZ*JfrB$&SmO7 zUXB&^?E)5d*@^x_)E(MFHKi@~o$klEKV_Y&M+0O#kA^wgj1~-L+BP1L7_1`Fi8~S@(O|OwnJK9@~xz&u6 z(yNVb%$$|&osVLX&B?R6BwcoM)u4#26fM}txt!PO~=lp=%lC&7Ny%Wq~=ymBQzenX&c+Yhp?#3 z3?9~>HQQY4DUvWKyUK+>m9E#+s&w(H;klPw$YYMk39`&b#aby@jmISBoJ6t3Mm+X0 z-O3@3arPNy)Kx-1YV@cZoc(3g32r&e830C{Z(=@R@JJ23ePtAyRi8@9-?ggmh+VFJ zn|qj(;DWEe;b_$NVN|s6*4VEEO6s|iE^d3DW5bpDgtt*tXSe5c_RWhbLcWiB%i$E#!4|m2BWV=#F`Di{`9MM%4 ztVqc!!BPju+usyC1MyQesK@y!LmeUATk6yaXKQEM#Tc8c@BF+17NcGhoBJ%q zUC@@URRLGCzTCcclvH1RS^t2PJ#;nU0Ia^h{K1}|{RRFQheyluz|Ob&o?|<>zO3>J zTh#FJD6~9v)b5VWc|$2%#ln5e!#usQ^;Io(XD-PKi>V+)`!l-6v?p6Vv8V5vt2g#> zR&nKLrc&U7c&Vq-n6Yim!CRCjB>UM=HXxQIJ9;vPmYTlMalh5VAW0*VtV^rKO!YK- zLsWsPflc!;L`arzYeZ0{j5Sb2cKV2gp=Q6(8J1n54rwJHRo372@xPz>F_Ck^th$Yr z!7}m3hTBr{SVDBhs38s>jS^W+Ku>*@<~-9MhrtZExz=86Tzz3cw{%+E!S znFJC~Uip^aVd5u|G)as5a;hpYZcSNaTCCbtU&PeuDmOQhKTz6Q-iSVBkiA9S#g-%tp zQ7iC3jo;cveM-&E#U)XTw!s=&t)nW-hUH}KciP$~xtg&pj$av*P z?OlDdeS6GxrRaqPD#@BHN)>)kH%~Mo4x@&szux9=n9;(O!NG1ssJin}L6}&&lv9q- z?c6kI^7XhaA(6Vw=j8<@WK2wcC+Y)ki`KmOW7$mRdtSvXZK0Lz93>@ZAR8|^CsMXF zj$UonLzrY;e;gGx6%oV_*6J;>G;|a7@!*TvuZWD~J4*$2jS!CYyQ%+{g(wB3@s zlF;R4uYjzuI4`%w()#+74@+$9`A$L4U%r_l=)w<>;d97Z6==-j?&-36`Pj;T!4%#| zq`dl0d6qNCCerFob^h!7U#i(zGn29A$-j&3c#SXnu;yxOD6d*HJt$4Njp{q)O3q6Hh{W031=RNqQr zQXo#+rubiuEh&zV1M*>%$#T7C=rL29F84Frd7kKH7W$#bJ3fmfO>d&AEiE_RW5zJS z;q0DguGuR_NYeUf9{Gr2oi7~r?kD!HD!vMb8KWkv)Ug*7VmiEJ_UeWM| zt)ViJrA~+Ggx6)2tRyhTvHpxgC0`O!VWwiZ+E?&QlZe(*65^J%(u-X7JS`nXFEg50 z(g*_U`PSQIZ6e4`keY`Bb;HqKOi9T`IMaB}mpol23zD^-r8+_k*-oAOvs?W%p82~O zkwM*Y_W)PeSLZ-L1eiHIir4;;1KI3DJ#|E#*&7hU{O;-NvT{WuDW+qXOC`vZuOT~u z@3N;TBHy9sCdKdcoz0o;`oi+Ylya<7y?(lWOtl=WsXMNuYPp^XHWjXJ7?he=$+q{H z_uC7*AbwC`FcYgPNUtu4kf?dR#~|Z=Ok6}kybJqVnvelC6}z`arU;HgWeppn#fJ?+ zB;Sj0?!O@k&PDg7Ez&f$5FH|2Ogew+XCv#?XquV86})um?U@{ae>c?dWL~q%S-fwy zmA*(Ou&@2LR9PT+&~3afXy^g;Mr@oZ$-Q@F0}?XT?RUQH8Qv!aw}R;-oU^xF^uiV% zl9Gbx$?{#hDjxB_B<)cGJE#|Z3gmk2bgWw2 zRhEsB9{SC|YXZ(CS(Qf3zMLhm7U3+K||Q59iH zg75U|Duu7i+3A^buSLBAI)&Q4l&fjiCSsySjw2y*FJ5f4mCpnU>xS;^SG?h_N3$y5 z&c#2-Y^etw0 zPh*k1jCW)Kw%lg{a~u(6I8zq{Njs-Atz}?>p zo#G{vH=MEacjz1=%Wgk!rEO!XjO8n5f97Dmc>65PC5WJI(goT0COBw#{IqX@oU}q{ zd5F8WhbuCqREEt#-E7Fz5^c(~WV~L-r5TaAEMQSs>||!?|E_1m2iO)$`d^ERY2_aV2ySp2U68xw5cam8A@bogvg*~vC~5WVb>EiDWRHox7N zTc-0RYqMyYOZV>io^HlM6@1?Qly(M~-(wE>DA*~0ba3eWq)8lkduAqRqpU@oz^OUV zlQaIaj&T2Bkf2{zwNUm+u#bG~0)w6YP^n=QD0qQhEIxv0;Ai;z|FAZXYxYK#aYQ9%Hk&>-S3>u-JUh!Rz;(2a-B7L++=NxPeeltvp#LO$V&!4CSzt3X9vr= zU_>{C3BB=WqY6wx_+Ty_FN53=fRAaOh5tuO8s6NaDj4RnuE`&nZ=s6{N;n#*<13)t z7?R@$q#=KLI_|gC=B3K2zrVQh(1d4P3I(o=s8{7ef>Wh>kF!9_Wh9eIb= z;HdWwFTbdO>&%CQplZn0p5rT{zP6q1o`fTE{_yl&XIuKPG#7q+uKO}=A6)p;l~b?4 zp!mwEpVAUsI9+wrqv|r&FvM_51M=agQ8px%Wh=uy*h-1w35q4J)Z$QOrPlR_npS<) z+(u!eMVkAbE$D$?2{)`ws(t3Uqio6UG@mysr*GIKV66f6_?>%0K@EwQ{0QH$6Okt!Pn5AT|S++Bscx%OS1E25XQ&KX#^UeLpwJQQS-hTpxP zP*fObDi{>>gR8ysfdddxv0$YPE32SM7yAoy8_kYZKDWgy6BP?23!d8afKo_He1yZ2 zeG6ZyztM>3r%@Pfm*pi9DOw);+Fbp9IjLtPR+g8qdOmdTRVblR8tK$5*vC2|(zIxA zk3ik9{ffPHc8NpR{rt~Gu^nA}99n=KptbkGnXNkr);ETF)o|712Db`W-MV>puKLC8 z7abx@kM-X>h_KwWeHj^~*kVV2Gs@r3-{yM|r(%CEIG;i3mij1Jtj)WjZr(@3PyPJ+ z5gDOf-M!o~ttlDf!A6B*pf@=&~w{<>O(#rEH2d4(G3-BE8`Lm7Z z#NiZVWO=lw9?hN6aRjA)rA^|HggCRj&c}=*`^MWQg&FtDwIJJ?+4ctMH`3GJ(M+oO zap|VpTc@rYMi{Y{!9*p1HG=B@FQ6{o(O!V$`FHcPTuDs+AU#OfX`SD}duu1h<#gm; z?yF2QfQxvD*KwD~e40ES!_3+m)&Br&$h$yjT8&%7Ic+-6+xO#pcA>rhfNh*Ma2QVre8(VPOZ09t(bJxZA< z44IL|AM~4FL;?4dCiG7|M;dxLo12>!4a%)6Hp+?_WcX)PH1t3LUzJOk71#k(Vmj$$ z6-D$BL0^K@WJ>jnGp*v7dCk{T)bp?idpg!qkd`K8*`K6tZk|0z@4~{(%}q%0 zRO-r=E2q2R&>}46jGE^D<$HK|XazIV`nuhG}8$ui({D|f^Hl`NGG75`|M*5RQW1^$qKrW+9Kq189SG?y9XFC^I zMM8Dv%+`Nv@ul@+Dn-EiQ^X6CMcwK*H|APee9)P6U1MY5l#~>? zfbn@O_NZl}1d1ud0=?$joT{)4_rF8=LK)`+;0VRo3$$~(SutQ(eRi}{a_hkpls~lt z>RuNysD9p`nuLrjhwl6rKH(V~J9}a%;h(qg(k{El#=!xZzz&A{yn!hAp8ySPmd`-! z{w;z>1B41EkrNe`M%9kB^EWf4c|uA`N_t#}%PvI+Pz>_${v#`JOiYYi0K%NlXfOEh z6W{*-`>{wIDk_f1KO#B$(cB~S`eSUn>TsHC{kdOe398018G#Um=6lK?S`Q18T86VR zY|C3T9?LMJ`^46^3p_GvB~??+6p0~ob*1};n3DQL2hjj zjP5mH&PsP%PxqAXR<(3lc$J@(PH<9Y5;ZzoFKm?u+58;lckGegWQjc|-y!~zLtRxS(FfZhf znzCmFi5lqON7^>^ENU*+=>$ilHjB+il}@i}Q@q$z9`wo0`QWn&=Y$B(jik>Lua|*1a|LeR zkhglZCr?H4ENQ7j_F%9xo;WWR3_Wn`emebHv;aKXlKp^E-bJ7@2O9~Q{~VTbtTUuA z)3mNaSlHwCGV#z2)8xj!7PzkIaS>Akc_BIS*-w+YUvq8lz>kq|i(9fPqg-Q-O8n*D z6+}*BaP1A6ZL70a%fcdu=cqAvX%)=om6kQ^iQX`2%)gqs(|j%Fq2kaf&6$?5%dUWg z8SO}6d;>ZWw4HRz2HywX6+Y=LP0FXGv34t&y?Ab-p$j^?=KRT_)(V@cpUX3=aR_eW zNB4X3+kf5Xh;Rh`-KSE5NOyiIG4D6D5=Ktk$9Z0pQIl?`Ml@`3xxRRr0eCYnhD9D3 zOYEKKL^dNPZWnN>&06NQ&kh+dW8bMY4B_Vwj70Q3U{=Sevn|a<|RdYl%J2NCkKQnBOZB ztztZ~x1T-Dk?7*qt`b`kd=v7dFIc@d3lEm?xI-YodVq$?EBF$o*Bt3Spc!y&}e%?UT}IU<<}SXRgY-d2Oa1tR;Nly zhtcQ8SVSgpF;KNOgOPTLA-*miG^ z{G1r%@zm*xNKEft1+(tYSczW@y&!a?4^;bo$c^5dVoDJ54zqwQ6?iRB#4`~lP!wCA zD(uj3#ag5JlnL^b2JVz78NDYO`iZiNzil(cM;&OE=yFj`BT~FUN+Doy&jQ(2p%K5+ zKf2G&=@y!MD&EwjCla$8==DTpDCrj)>6PEoMcdz2H+OI4lr?~taq=(HE)Tu7QvhQVpjGRIU8 z;wDYvmqOX()ifgpP!ae%Z$N&!cB;f_de)G$Nq)H>qJVv!tn+l97!>wrRpUvK51-t+ zD-W0Gj>;M&c-y55?AVXyli2 z-}@}oLyY5#a&rWY-?$@Lo6ZW)s&;?NVb-_iJzR{pP7P98$=CDe1_mF&e93H1S5EZn z81x){cvM^Bmlmm_iEKOMhbtwPSwpQOjVL6%(|c2HcwuZ}VI3WAv-d0!#%}N8tFMmc?G4y~{pe-QjC5e_KDB zbis?k{?;)kc{$YRP(Px(7WheIw|I&C-d6N^E#D5ce^>R}(2rrw8J4pm>6=U51p3-w zjwY2IpLG5AM+yf=6a}IIwAy>$A?DY`^MFanmO4FN3y4%fB{j3f+~n7zFRVmIGg@0g zWBYNQ2|&K^9JAmw(Ly%Z;&?;Qh3wXlD(&lG{y`@0S3?720;)cFY+%rCfOhe%AWx2r zE)L>~#|yM0R-k}6tW0h~(s}~o>yog-FpPWTE+{vO2U4^vwO_rb^*bvtGRwO|pKDCw z_52TuuJA(b-`f`EI!ZaIoDfByk#=6M`FF}uTA0}e5v^^HS(N)TWz$=TxPPLuOqa=` zD;>Wkqkc?qGlHb?4_Y$zF>=^|c14XfauK)h2jhUSD{$3Npu3@*T=0Pn*<2~Prsd)t z>{EY220DEq+@X|+K6mqWLMLT?pz`6}m;5tQytKl#@#~%Q2MIJ}Ii;mf{rprl(dD6& z&iX^&CKSIUvWy9nKHzW6)+4wP5UtK>jb^-YR{3^XQtJB?kYAmMHe89C&(KVaQ9E^r z71k&PNI4IK3sO-N&DI|zWCD5>J~8T^sA%av&3~RJ2uFXaJoAq)zr5@sl#eSL;Zth#`oZF-<$WP?J~WCNnhqUN3*Q*b=(3orI3-3V^ANFXL-!+=)y)t`&XlBuRsCB zh2Q9rHy04{E%hd<+h_WFzlTxQg9N|x3$JN-l=+Am5FHl?X}#5r{K(%qJ>&!>q+(nv zg>1zHAJ)p$WCH!uEFbUiJ=(FFZ5W2aV-R&&zg8p3NPehkj5|%t#*2qor3}xZ2 z1x^3d<+zqMJN9kQZegfQ3`V<}8c^)NYBTkd!PXs`_rPG^ z28sN86gj9@&g_H%?8iY|TG?g>&~)Y_Z_e<+LUe(1XoQ)@N;wUUhzwZdp}2p?BV~hH zHSbvuO{j>I+Jwn*-W=l5%*m_IA01f6OonGi49?2YHWi&KNrNnNUd@`7 zpb|PH>I;9UR5h%t#iv_Z>a!_Xm~{Y%oG7_FhAOy}Zdkr6H=E2h1R_vz zRZdAHsZf)!LetR9jYJ_b;A*dfz?m6>udPGX_Cz-|(Y)aZT+T20E0=D-Fo$lSXzozw zB2AQ!8x^L*jkH{93Zk3Xdlvqh_aN~&Uir|Y5Q^aIBTo2h*h(EC++`6ZBWbVvKpO4L z-S**Y#5d|r^YkNGb+2F}6(3f$4PWcXn^E#m5Yc`oe4`UXde<&et62I5C&>wmWRB_{ zqjiSA+r=I(aCS+MICv`FZhW4*BsGh6OK#tQ52O6>;&Ml{0pguSR-?80*F8gfY{^`q zE-h8l(-&7Fmn0Rg&_?bNuf-|da|z&yoNZbt#o*uQl-Af~?ilg+SSGys*pyFSV}7Nt z`)%FCeVWO7?K4Kgkd(}4G+&GUs^o7*kQ1g-M%GuenjU*2+~^H)RkqV8M&&p@^-o?| zdzz`JOz+%-gRg+v7<$N`Oj2fv3VMKllGhzk7%tHTwyxrPdj3pYDBtH+{(J)V zmsL}fPijhteu3)akLIz`b(HaJ6cW!f#Shnh&xb=g@1=j~(WA3HhKLJ^=xq=?jtphj z1^pwS6lQob;QoByzvf*E^fT@G0dxIDm$$woG*%+$i<+-$9RUvyq_$F@_JicG*|XNE z7VKr@3dcK#ECWU<#)>EHO<7Bz9UI%B#M7mwH(OB<%(q9OfnkG# zk+aGY#U;!1E%XogJdHz4pWNtlzv?HvAm{-~ByBknH{b3o*%GwK^xR<@o1v(D4PxA<9ntib$fVuUDifZc*5f|JKB4#ohc+* znXONfK=$jNYCk`D&@X&n3Anm~%6CgDSu6RH%R@RCizjxC4^u`C{KgWW$%|$821Aw} zJO%YYo!7<?;-9um#Z)E8} zPmdCVT*y-qzCYFAp`LkA)8I`jU0^Y!w6t&lG!WRt;T-^iU< zdx*=c#?c)hwoilO9OK{pgqIvf_2}{$@aNkWdV4rGeDK*fLZl>E%p^JZFSMrn2l9Ek z4PLeB2*u$&{~~e!0fIh+b=>)jfB*<$-j%D6Ys@N1YOb!;{Yk=^EtoAwHg0amDsL^V z=t24;tN&m~wd1vC$H%C4YR3`ZE7x$~h%ewINnd*JX~RHhtiIH-1)~F`Ur$!q!fb48 zLWuD35X#XoSdT*u@UxK_E-{2&8+KVub}Mjm#O7XdC~fuE#f@u5<7VOFIo!?1KTuDB zG+13_HGo73qxFoLV=n9@>P*0yqgxRsI1I%as|&y(9h4$W23kxgb2v^#XW7k zb2sfa8w-n?zJ5Yavw=gMY!tJqPKyr)&3&=QEf??)9_j}$gILwo{$x!#Ie&?Z^L>Ae zsOu)8GlIcozfX{w<}t1&Jen}dM^fbI@A!1JcHtDyUMR(K41T4TR`3Bb^wvxOu#4|a z=Uq;N>X(uLv}6?KeLNo^7jW4{saycRhdc+CrprY0Vwh+M(Jg=n%JDpH<_&Amj?3DA z!4-V*j1c*nxtF+;BSZl}mDd5}>FtDs^Ge7d{pFk^ST9Qn&Ur1Cd(XIxQ38-#T4Fu+ zbi=56AXO6g7LFhUe~@h4{r|;m^)-7Of-D$w@zDYLXp2WBE`QFuRO`bQ;N9&c0QG?$vYr*>!gbSofMQUZVa*Gvo3=?SE z{{{bQZE(RyBWY0cVOACk=SC@kQXvzuBq62!aBm)qAHF~`yGBN1wDM$hxk+wItk}7~ zRi%B7MIV9Y*NF;bkI-S!XcKjqLMH7f`^FD*_y)K0fnl-uLOMO~n2iH6Q@>#fb>+{N z`i8_sT2NOND_7U>E9W~8sDymVSBTIN-M6dU920=V((EF6ld<}z7yi}pg*!u&49LCT z)Y+_>0i6{>s-D9FoxD~rHg4VRptYZTD}$uftUL@nU6LB4^>|RflJN|Bi7N!Zt*1SqBeccMo}a=R8^JeTs}p?9ifo883=dcu=b!*~KkN3r~H>;ap{tL<0O9F@= zUVT`Oixm7Q$|QynBkPwP*&BH-Z(GnOEnn_x+mj=8!go^#y?x8WoLdRPZt#^!|4PJ=`~zChNNZF;XPMil*xrzl zfd{UvElZCvWI3qa4!1)6$iuCn`TKunCJi4qGf#~{IkZp~Z9n8SerM@~q13bN*jZ@H zcDT39(Tys^tn=3&bf6JBW8=azhltGv!L<(!WE+YYAJp4n)FH;NE;0Dcw$r{E~ZF}^i#xaiLzM@ zwVQPsito$RUX>ddW5^WKYVwRS?q<00r>0+*2@`j~`p4v;p}cRt>>_gyB}_D#@`Y6W zlw)fN5`>ki_y;hg)o=2P*mNdyz%i;sf3)VeV%+kl=qC|UjD#@GxnSkoje|78`5aA3 z9m5H_lU=o9Hf%wW;a*|}b%?ZleWy98HAsQ+xMw$N>W|`-!e77K!^f&|CGpq7S+T)mGdj-UQe zSourw+@ZSEIOf!R98+xEE$Njk@sHz4+$u^Jv-@d0IEA_vea(pDC2o%a!jKpzi2kMj z=f`zWADfSwcIxb)n1eC7fa`duoCK_!!th1dWgFj&a5^t7(V@P}yrH&s9Q75@Tw22y zM0F=CiJ^ep2gp|iNNYiTyh%*ES)Lpb@%oRb4~L#-_Efi-J`-WQ?5oI)TY%z9;Iobt z6BDDVmOR_!6$ez)=|V8Kmb&_D$a_3rE_h?3p^4Y7pMc|RQ498U^R|^xF5t5JQn{~gcA7V& z4a|C~h=yTXQBuEFEPCV8aZ0@vhyn!CVNmi30`>`muP+-wSc_QP?6e%PJ{OC-(W=8)dx>RS~?I+v?>RRa>3XRIkx_l^%{Dee_RP?X}NdJSm#T#34lg zY}@rE@B{iA2{&rc($qAA2mz`u4_soLAmLrV-MFukDSg?wG)))8eO+xXAQDq>x_T?Q zQzG4EV#jLcSN`PhX{w1+YVR}fHy#a5e8(~49<9(vCm)DL8{8Z*t59sNTsSR|D`1x_ z>?{X8o0`)yHg6}cg)CztohCUa8X=Ap(sWqR(ZjT{khsv)){Wl2$_(qK*;_q+1%U zbcs*o!$$;}U9HDHxS@YGI`4VaSkLcOSGTB;O_62J}UMJ3;pZsG49z!P%L_!8K`b5;1Goi^3izDVPa>JTyz=^4y zvCWc7+;DpjlfTSND;ANw^6oJ2kTxdEiE46Zs1N$ozG{|YQohyyzgb2Kd*ufaS&z4LEA*HPPFYXe1P_30HP2w$ z+|&X07x-9rt&RZ@17|XJ4G<2rzkUWj=)oT4p~xo2$l~-GUpy1r>&f+ilC0BM;ZD)MuJA zGACU$h7c5ev}+JYOs@6G51&XCwzG-~`-VqA<^!<(wrV^ULj}>ti{Trs#FEi74$LQ4 z0E^Dpn5$t1PAqw@h7(dTNl8V3PcVuq1-j~6I8??fMI@H~MO~F|PEtspTf#vzRlp5R z?0q=v%EYvT{P5sHE5-|r*%^apx}bkbG99!)$mcGaIfi5{94e*Hg4Z*5fV_S9ZCMd| z(A-h9YDLeeaaG?D;DR9J!o?5cnvWN51Huc@1|0sg0*w6A^ZkKPBAka(%a&YoJ$Cho zAM#TnG?A(pWz8^YJhzZIfSwi)uEfa1EbW&hJQUZ)h}mxVK79J7bMpI9fK66brtHOt zBonOccvUi(5yTMSb3q^i=wK^78ymJRVmw$j5ak{-bPk0#9qRv)U2uhtCsOU=@Q~FU zBiUy=P^*E~s;=xHPos>mDz=zxJdIhym_L8 z#$W(+3Rb4=+60c`AtVS02%=+SSIT$lH{em>;o%-f+r_rwG5@Q+PkR9o zl#BDcfYo!llIUo7xG#uX8Z+9f)eRuXKN*49{| zP$*_U^+HQqTf4Pvr}?b^G8XL1K2-JK(S=xgW+b1(XMai>CD8_lp92RA!9y9Iz)6Uv zu2aKEKxA-2EviiAj8Bp%ffbR1bA!uga>LKOimywZZA{gaT*m6{#&BmhadFnSvh^>o z{v6iSKw65ZGlrIqY;7KuP%*E4`!E18WT1|EL>^}2sUc{DE$H7BTwP0{xhUwE>qi{> zNUEi7goFWsxY|O^T$MVzqwN`UEb}8@t~~2L;!Bqa1+VYCIHO7Lx{YspwlYxVFe^r5 z)U02)8mg8`H(vSFqm+ozaa4R>p5J9%?V#@Miw0MkuLHGen2jzw@02RAJS-g1=@27z z9H8=0D7^rBI5>C|>GI=5?IJxvtUu>9rU6NK1*do1#i5{eWFZW2>`*`Q0M8Z3b{&+x z|7fT*jGGGTstb%fbg*rZdXDN8FT0-g5DocE&?$$4;_fhnOa}E4-z6d7ccz zYgf4e!`3^vsq zgJGZ*$q1f#r_=$b7Em47iXSW55|rIpn|D`5eS44?V{X7stpxdFDFRb95jQp6W@t&7 z+r_}N_L0lWxvJ?>nFHfR@J8T0QyipaYH~9qPuQ09l=2K$+}q5>_F{pjm-H(L5>NF= zTq(k}=p;>dhL15li>b>}C|(*em6kyTg414M2-&MzS5&ixk7=NoqyX z?29qeDzFy&3H`o1zjb7vC(wFh7j>o%>FA2%YeEsPqH4s}4>9w^(5I#&xVF-++`22R z%O}bzEj_2Cvj^wcf?76|Gr9Xf^V<9Li`{Qq+P-lsSOZR)`KD}Co9j#PO3k_?B9TZ9 zX{t*TK1BNJ&!>`zFV=uYu$B}QxeHVZk?q>mpMZ$SV~V~8UCkCh1#*8g!louV=++0! zZd%D4&}X+Kz*Uu)x>Oh2^+LmNYF~;N=Zye!q+PnPMHs$r5A)8J!@opSaBeWLP7oS2 zVe3Jr$>;kW9{XDuIBOtw(dFnopK1_Mtxwv<90NU;ZaPeFiYYu^t2Pg}vha1=;)u>o z9qU-SgfSuNV-&b!uz>V+NwiR*$;6AQ(NfP?STH4pX?3yNz^Qr06l<}>}y6=66lX(CcQD2@@_I21XYl@#QLEN5D zyr_J}KJPZgBhCXb>xvm)2k^*cK>C_(n|qEjph?2L9%S;b0R}g-SAI z!ml+2+Fqz)|9xDoX@!4sL4Vy;lvHs8`HXCzy|iRw>@vx@=OWsoy~vGJu|LYSJ(At0 z(~+HXFMLU>A^V-HDb6c!GvL4>GvIO|{z+=84US#+9of@Kz2efcEt!?^8}G*90n7!< z(>D>5Q$w6;UuCk<AREid&%RqJBW9#O6>VeCG#zVjT<4a8Y@{6dH zxs8rq+0B!fQ^U`yYn@C;D*hO01jGbqZ-)>qA_}bjE*-x&$4f{El}Jq7IowgMB|J!U%2mO zwjrW#M!?j!k!h`$zUg=}7p9w0V4N>8g9%!o^VV-5U}JReCaAr%LlL%K-t9&UKpb)=wO#UP&qPB0McVii2NOl~}_F5qaW(x5sOv4IQ?nZo{KKL58(2BWgsH4@y18`X8xR6>uA#i)1&LAhEp2$N*4{O7hTq z&KA}LNgt`LAuv-at9Ts(^#>;V_n-+L*zzJEb*=il*&C{-&%=uewRTT{3F7aXYtUaE z0QY2;1iZZB)>AO{hK@&@;p(*|y5qQZ8L|y8zkt((^JUKb`f+%;r2Up+wxa5p*66a? zoAQ^4#;L=NlkjZTeQEQ2?(;#*&)eSXtl8Oh{a4-JhgHtoXUgO7S}D~Zmw;+oLk06j z8(Olk_C;h(%gZNGr+K<36D6qK&qm$c`LXBM4x*+QwZ~&pO^WtOk$c;=kzGsNJL?3b ztCs91ZEq&HU5bCa$sQw@x#&u!!bF`AR0+k1AN~FsAivLpYRV769ehoTdUgrDqqrg$ zt9a^`rL)gWG|#bP`a-5-qs)@7lM+QWHMFDIPt3f|&ofVtA9rk)h~>xhi~Ec>_SHHq z8dfiI-xmZb!h?`l_~NdY^#8`czxcKCud{qK;|4g(X}4`p1v7GT+Hr0%@IM7E537Ca zn}G}~b4|_poE2Yc!vt(-?FtpvkpU=E&y0m}07Vn2#om|pxVpR7T^2c}zEqf($3wpL zDJSrOXlZE)r{=u&LlqSjwTz7V-s$2oBDp+q7(5iapNg}As15-O0ySw{!hd;g_*W46 z&v_&W$A9&YaoFl!hO#A3Ll!zHBoP5U)2s^CkT z;kGk-I&g8W8cHj!59CFP07x(Pu%<=*H-)d4mlp&urft6YULm-B+pHZIV3@x8=a7;G z3Xx6)c$+|CrRab0HKQE>b$0xz$5m0WTl=8n7$^H`4LLqs>JH!@Z~8w;qG}lDwtZyX ze-c6eWa8dj^l^c^PXEcz{hKuUCqI`4T%ejN0pumxUorq!8&ElojW3|DoKXn+rrmaG z5ufwgP1gos211DPjnG?DW2n0xd^ktt?5xM8s@tY&9p11#l&7AFL%;#@b@&8`DD+*x zYV_FaVm_F59$0JGY33Dqh-a^+p^`@`IV8?sM69^FedW;1EHDK2UBWgj1k=Z6s z>O(q7A47|ZiGLFwQA0Qdh1!ChA z6jlIW1ecPM^6e48EeC+~aTde0;V>*qLIRkh>%Rz&Pfh@c3W#3dAS!^QU~-p61@0c0 zw*Ry6K-wAWz*q{*m9^w2O6rwR%AeKq_8ySZOAiEaE)kl4v$-$!qBr%5ryN_1YFfTR zC+zn$X@~qrls%5uUK&k!?szr5J=?0s9Fj*vWmg4*wLEp^;JCuvm8t>BSrXgG$>Eg` z9O@RpQNs(F*#_Nk=1q;1%mU4wU+bwi(zcF89sk>eaeNV4VBAtQyicvlZ?1cUraokW zW`0`xps(oUL$Ow%6h`KlcoFq51#$4?ayxKf(@W_oA#aqNy+H-; zHL;S_yv0Vco1V%(F<-CZ2g#d5yVeRd_(ySW>){?x+m2tSAL`o#lwK>UuN$kLyre14 z`*!Lh&{auqRCaCupg$HCT|NLGTJQJ%GgDG$K*}#(+S%`iS+|^5ZMs=BZ{rt6rp7pP>Mh( z5fBgvC80!0KspwrNiU%zNDm!C=(#)K_uq5woVhc1=I+4^lD*eneZA{_pXXU^A73EM z$gM-G>z8+wb#shEL<+9BJWal#lcBtm$}Hkhm>sdMUg2N2vWSre&eLi}1Y0vPfHhQL*UdD~Qw`9X zCS)~u%}?;@iaR8IN_4YpOrLU2>gTUein8+D9675>6|5Z34qcJVe=_SV#D+Ii>IW}5 zSDeiG)i+Y1NsoGB;oz;~#TNkCxhSfW@v9F=3Q2065L48gY47X3Njsh8&{_DcQocay zJV%S)K0n{!XZ>L6?zjp!5suFWJ5{1KJzR*no^>0quiP*ypbyn8(^cvC zHrW^t@$fk6qm>+#jusKW73ipHXQrPfqg*4c#^Fni+j~|-DAKIj+-wcTJZS3;`H@A9 zNuIlB*K0dkHSt!Ftic`nTDWPNJ@k2rk@jToV~-O0Wms=&U#0K&%QYV>RW;#ak6G^< zXRvR$NXF@LNBZbs3(g}e4(l~SxAJRYEL+&VY{|!ZjLQOP=SqYd%<4Q>#UkdP-bk2UTU%0l>b)Xba{$?r}oq!py6@HApdoj+c*7UC)oUCJ<$gn42P75J@s~Wg28FFo(J|M zvYg&t<>9@`fEUa7-Z)>})bt%6Z>Lw^m~-$)6&mRH8W{ATa_0pBUk|&hpN=&rCIX71!FMX`c zQDNr-D3(iv$c7gXuBFx6hxotLO0L@3)mq|pkdDfBYC4z}RYM$ReCvMTJ~f|7Q?RY} zQpY!sBeGZoa=JHE;^|`mmgg-F#3%pxEY}RSAxr39Y^cgx_nZfO$(6#2#H`2E1f%_^ zVk-1>VUX4^(I!66?WLjy5Yrvx@E)M=oqQVhiaO~gL_zDNB7$tKjPrgrRKN%LC4Lvb z=7T{--&|5n<4i+E)$OxGa;B}7bw~*KkzboV(4tDGimX zr&&21^H(pfRdtUM!XqV?n2Db?@WBLE7y|4PYVS!dGu_wA+SDfO`*LJ|W_4(kZ+X(MUa}eE?gF>e)wvchgxsMlhO%6lLJ5LKTn9 z?G@uc%Kz^pyK&^T825AS1Gz1j*ZgX)PGq6)ilN6B&+Iq(Ce(t)eH=py{xe@~dq!?* z@?Jc}(7TElQ=qd{j%hp`Rcr=#_M&r$?aQ{_&l9uGN%46|!V0`t-3Q+#x2kJ=$T5X5 zGjMAfn)e~hnX`DxZWZ)G@7p~&h&$i$m>SNmPB(L-zfifZuay!qt*H_wC5{6j!v5L0 z(<&csN0pAYC=TXTas9H*-E#%=%IP8=Wj|MYadu4lxa%-ey3RQjj?Qu!xex%9(ASjOJ-&iuWc z2Ru*5#nT>VG7z6v+WXpu59Sd z@ud2jgX}gdwUw{O9T;xv$3ejX&?xB|<6`;dtDU8G$+lJPgaM91evD$y*kFdT2T>|x z0Xb`%YgeoQulTl0m|5LP0z(?S!PVvmG$r2x5_3Zx0xccnR zbPkUYKY=%10mgB?GW}digLGfdv>VaYHpvsd`buj1rXlvx<>}HmEymwMkKI-P4BtwB zf^yCNE52TFgS1q-$|`*-zAnE0gVW-w(0zM;6me5?4`S+orvXOsSD zn$gIx1%*M$_@)NPgqL5BnMzmZU3Sw;<(1Jy4ouyuGI}X4x6>AuBoT*PN$TSsz@xUk zp%t}-HA*`MU?j9wRh7JHWO32^2{x-w@;rP$C^h^dEHLV*TgcFUy`lpGk<>JDzX$h$ zE2LC?$9dev%x{?X}mLa&FF|BR}lFmxR7~Ep@+ERI~^ROmX#O{fb)A}iToM)tpbfvs6eyqSB z8;Nw-m)XfR$RSzTkms=?=FP2&AEDzVb@HmX=0DF8Jf(LvQ&QL8-guYNIg|BGuNoG0 zD`~%pS@O!vPps7yk;Hn{@fb>AoKqFbFw0|?W|)*vF>KbY;KZT$$^G;_yWex_NtcA5O+7xU5@$HY zgSY%u`ZBjT;NAmL%uzsFuUiv3UT?#0|uFTM9r;mPVI0bWnC}evX zF5gk3@0R(EUxVwr=3~v-R@)m{pTarZe$j0{o3txl^3la+FZL|=0ypF9_2uoBN8K10 zW`;^S-WV?sFUpqMv`UCqOQ>ccV?Z{)Cvt8DowP_1hnCo9isUvdzRo$Bk=jFe>>Gzb zU}|)2ij@FNOGZ~L%v!tGoT@KvR_v)JTVfv8YY9J5=?Q=kv588{{rjH-mGCS7e9RKj zTqkZW3uir$OaMDvd#G8bWPm9w22(^WfDQ4rn)WnlV>9$K42a z5!HsVk^!h*r9Cpvpg8b#GP)Zr8D+N?atBjZpgttPwYo&Uk!Rp7@aR)$k4mfi_|=*l z49-MDPeC{wPaFY~1>jDSim(HTacB+saF2i3Ys96IvhV#LNTpvi{C79+i@$LUq5$SZ zXVH%{9jFngb=RP!aI{Vw!cKV}38F^D6+I13A;?c+St`1X>G`IExn>ljF<} zb?q`<^BYQ^95vdRVBFkJ7~S=0&08-~iRNo!@4%Q&TP(%a0C3a(y;4(GB=?!)t%LX_ zV4oA{drcVHkww#$>NVCib`VMkgZnl)HCZd`-dEblInzwW2)tgdw{p)nf_uL%9vjRu z+#~Vu;q-99zqzcJ5fx$7=U;FhZxba!l=SviX|=Ww>VSXpXHRDCTwpFh7iEfw^v@k* z#{$(UMfiIi370y%amE5@20*$7aN8KX$|ieatCqzxWsi5_N))!P<8p$&qst&aH}^ft z4))W0ouRR@@qfR?@yFZC{KH3l&|4?IoK%%QC~e&$)siItkK4Y!rUH zsqIh4oMq6^SHRChf9cYTzo<5MZvap$RtAj)NCq?eLf#3>Q3nDJ2e~rSDc+$RZ1aQA z4#E!C3aq=Rz4{)=osWr$DJ(LwPXxdDc0}~ICnX>#x&1q67r>2L|3$aCpJy#StsRd^ zUdHf4O^mXsHw5E9(ia*_Gvq*KRKCcPLCP04)g1e-D^Il|KtA_WRaFo0@B?JFN(u%* zF32`Uu^~qtVGzi>uJjXM{s97Ux&_+64}cCd{55sdM!yB!?Jq`m<(2+H|Fffnz)U^d ziWwW*&-a{K>5AP@LdE3>H`ir4xkP8zeTMZ&>HLG>9e*PKPKrW}X~-N^#{x@jR1i74;;_mk*< z|LNBBejHLJRRv|*$-?v#nXd`U_vCc+pdcsKk?!_x9}<>woh0=;toZTHNTun8HmkJ0 zcITgxeg@_Y`ygn3_s-pkZp zAnhp%bK93?SgFPh7OB=5lYLpYlCyJeBu^#vHo;*|QhU6kqK|8fT)FYnq`t+eEH#v6aU`2}jaq?Kje$C5~Jx>xO0G8ek z0k_g@6@Pg@?)HAx>nH?e8)G3b7c3TJ%ffF^sF~9ul6wfIW3-+4VK(&fBiav1Nb9az ztAm-~ASI%;sOhgBLP`MoRA2^+pXfGVc!>J_xP6u${QbV6K#h=L&?ACpTXHTr%ts@! z*@@6u-6-6p0Muj3OlP_*1q$H4zwI)(Q>Y_ik`|^!H@T_vW)K%6_QZwu zeS*7=6WkT!nU4>Rgo zDjzT8N`3hR3jIalL(32@s0P05<)EjgvB=fyo`Za~wYeP(m-+l0LG7lBHt1f3+-K%S zJG)hv&4}|mox`kag5%iX9hUfY5;kQk2G*H?{6}g%XB$Xs&OFU;{T<-nC60QHGqF;G z+$+f>@?l!4_Y6~TXebNt7r=M)FesrO3_C#52c1pih;LF?{NW0&#+Ue>12Z4?uW;fQ;J%LC#Vr|UYMsG2&IB31Y!t%{qYHN07fr^ z-HHU+!U8d`=OuDEa zl)Emh{tkH)3}1c3u^84_lu(c)7sivB>;?e2Y}muUw>2f%1vmf z;HD#vJ?fvxbJ6U_1Sk4SmotOS9tmWM!Y`)X$U$<-S#Na54;8II91g7`0))^w@0*r# zccc2Nikf|#pmEgSZqqLsXN*KVpN9EbH+3ZNzTT(QyQxvYjzy*{5Q*pF;W?I))9c+4 zkx`_v*(g~-101vu^VEf{9v7%-V%aVH5We2TM+-Zr?Z&FRC`3Ab!LUs#Frt5Sbu$p{yVE-aJfIMa?$+90e$yuTDm0LQ2S3&0U$ps-gj?g$4u*~JJ zkvQ>|R=e}zANB=OYPnzT1@QTMeVHs<>AY4_=hyTS@Tv1J4-}cnhXRi8_O(Baku;P@ ziJ=yNKcT_m7e5o*JdN2(pQ|2Nz7MHlXFVyrg68sAV65v;<;o;Nx=$-7J$xnw#-mlG zx@&uk?V14F(x&|;1o0=9y zU}q_FnoiVxI))dV6mV^2!uq=FQ8mxzVQU4&DZXfT^^^yvrgmS+(qFnKe;I%!ntp+| zM*gB>AZZkH)>J_uP5~Jt1PM}UbSmg4x432Mj52d?XD|HMlY)<1Wn%|ZY7P>#(o`XQ zJ>RC?=ojH=>wOWM2|@qO@B$wJG3;QMxwrKu21cY0mI2;&bj>A*bDj|Ns}K}I8V^>a zT1F;reE9jRLaXG3GW?!S4_meQJ-yUKbavOvGrzhtSA^@H^`S2uEF2QWs{`_+61P8a z?mqjDv|2DN?-{!PZ=x?ED9F49ZyM%I$XA3`;W{to=W)aVxFe$9jqYZSRCh8Hm2DZK z>`$~*OZ=2c!eHavO-g%QCZZGv z-83R@P|5>BqRqlSd7VFGzEPwWC3jc&2>k$Ri{s(#S2amy=Xo}fXUb6iP~$;3_SfaL zmX`cD12vGIrHYt#FfQ53kX1wQU?}WloplPt$!52+mq;Iqd&xsrIvod<#`n$=2?L z%cKv-#nAI6H^49~X&H*fi9vVFOZrE1M*%P(zkL4Hv1(XD<=A&Kx>DHi%^B+?Ak~Cku_;hk_r};{9mLSA(n38nqPG0YJ1#waBAhygiDlua_B}nk{(CUIm`!uzUWxEVxW^ zh_?vcq`nu9)xAaZN=eipC0bPYSq3ENSoDpR_Oth8F`GUyCnB^G^G@5v zS`{tFEOz5$(+8f5FDYYElHsV5>Ko)6T- zZa8~$;Rpv;GHZJ~#<2F8W%zA&$Z)(y@(K0N1!w44^W7ZI>xfl4Iw4zEO1gDg;q|_bcw)$5^E}geDI@iJ5rrqvABXJg+{Y z^x0)?>`+XzVaCiIHw`8aA)&hoO*CIhw4Exqgm_DMYo?R6)t8icUlyW7m~bTm)lW(v zO6&4I5y&+6{*3kGfW(7aJtgB7xbqGg@cCsCGU~dzv+wDEGIV}F7Ww)}m27A1j1;rA zk{8CIpLvXLAhQZV4O?*|L;hbMIB1zgMrGvdG*~h~ikq&M%XCxAo!L`#<>qP@J1A1# zQK2fg1H!dEr3;?PcM(~h>tTKl?+Oq4$Un~DAFQrx7-|-%{zAwiV9w?aHHgjz>Y`_^ z<~&6v@r9QX{q5i-KYL3Dyc9=&F?sKJ&M63&OGQ_9SgZe0<}J$dEqqsy(soI7}-kE!)FwIQk!mS1)J%6z|4Jcw_un`W>KDpig`hvL&T_1sApu zupa;6*f*quBP?wA$?+vo->lS&-ADfxS zzaN^MVzlV6{`jg`(n#0tHoe6;^@HH5)g=gV zhBrfMVuHJy6J7N7WtQw#KhX0$ME%zrtf^|RVdaLeFfcOQ4j0jI;kiY9Ka|_Pr#alq zMNnN#PQ6&?S8;=bmfAwgkj3XSSk3%`2Zb3QpW?bHGf<$)5q1USoIp@Z%wH#p;MGO-<@m>YFs!u++B^AzYPg%;%<=i}hZiHRTOj(%HMZhp zfKy9+qR?p8IM6xO=r+AQJ9S5mB|}EBI5poMz3UG(9ct`&R0YO_R0IkW^QI!$<#gMM z8#rvgW=puQ?Q4}yUMV(L`rLf|dfrI)vq4tGpe@>;|2mW6TSwm`sDL<)(hJJ`(Y`>C zYr0LSoC#%oszWexXXN>A1Gm*!64WuOtwmgKu{Dsun7rdLHWq-;Ond&?q=ne#f4_V^ zZ?*N|$`pcrT1$}{ICNq0W4+C_Ykdi{YZ{*&Qus4%<@cDXpV_>N!4ajvZt+HGpPF;^ z6MkLEA84(Z4@p*qx|^!VIxr4rB{@-RY8fn9fsMoSwZr|O*%|q#<$_1LZs80meaJxS z2*VH<9)z_mnVkl6Q>I?KxRLd2@1?Nx-BeG5fHrkvH$~ z!yOoe6-icGn2Z}bIiBzjM@^mLV}6CRcFPIo4i_Bee-Rabx%Qr&M*#Uwd=oLmuG(ap z<&-$ge(nki+C0pR%(VShxeV6e43ZTwgBGv5(J|P>0H%=UWNER~pjXQ zyzwnVFrauc$YbeS$#AUlIT1d_wL*%a2T3;V=WbQUm*r|1&&=|YTQwN^+N8K!l{FS6 zm62jC+E13~&rMtY5YY`md%oiV`WR;grwYHo%fT!BSA3Pxg0S4OdM|^J>+wc{3O{(u zGx!hpfx}$XQE?6Gde`d;8^+2Tt@_#nY?A72terzmued=uDcX?g>hogLv$MR?~;%5|?}}^R4gJL!2Z!KE|cRS*xY> zdiwSVb$mb~c7NZ`Uso?ZBd#G#?>aW5%7`KBnSR_AmZ6kb$p<<{h?ZhRob$UTd+ic- zfkau;Qcfv#rX3ulx5vTObd(_9vKRPy<{_2&iHy5f}!2T9RdKS2CO!2Su zkvKr3xbms5-a|f#TQIqJF-6^OKj!*oj&m)}595;Er{|-}LgAsiazA+_@#%ut%I$)y z-cWJ#j%U4-4U9a$V_0({Mp~|3c^J8Mw*vY#oG#u%Kr;(Cqy#wlB~RDLLJl|<1p0ij z{b~nq-X<`7Vs^rob2Z{EXa-9Vr4I*G%lRP=M&|odoTFU=8ZPq{u5sSYcvHZ^5#Nxf zLE{^8g;7BJz>u~bqVA&-(*h<8Cr(4jgCP!;<|j5p-Z6nOlth8!H!9O!Bxg(_;$rKT ziWArRN-Ml4Qx1gqt)tmR#E;OL4dJN>Npz9)Ur zHo{z@qv^?d4<)T17i(O}G{^nq4)`NERH89NKjYPvbhCh!k`rg*U!lOIn@+y&vaHtx zj59MSZF39{1@SAqES75X;>+NN1kG~t{E|j7K=RS=dV;ez3_Bk02>S3xK>gu{#er+C9ooz;7 zw}JSWOIg45k=9XNCY045ke#Ev!5{&s8A%~%UgQx7M<(xYW+~qtpT!mE_|069iS;DN zU2NY0nD*)$j+WdxPREMrtH*wUhYtsUojXwJaz`-TIZpYAYbNgh0E*A2si-KA0vi?X zqe*D=$7`zdQ`6Ic$|Ys5g;RU2|$cVx0|tp|1w1c7+x4-$Q9(rluKVFaKO*1rTchf{lZN18{?bSig;r z8z1#&C?zU$Ihzn3z!i^Uu8_obk|`V;FQ0g`f1_X@-@b0QUsop9FsVH@g)6?jc?>yxXG(P_@;GR#}KRB44pC4QX zp!lQ1B6x#4s;V6!b(h3+x{eVxu zN*zF7Y8h-oH;e5H9ypHV;#wW;NdFu->SqJW66gb8V7dsbx_z_>0EJXSMK@!F>od}} zaen*#C;U0!@W^}OT0z^9b+Fc)Gfl%lqz9;sf@4D)B&$0;4nv%2x-#@_;#PS}FAT9S z@}jz{$g}oPS~qu~>GC@1-jSciUG!)ug6g0BIp`~2#-BJ5(?&zfBrS7@V0YS~U9M~$p%|x7Iq>+_4*7{Ha?~EU&B|cL^QlYqSONc{ss{*MfRFr@z%sHNfWv~ z_lu`1fjcq$T~=IKmroozR06dJQae&|0A|ro!~1*U4x^vGYJQ9gu? zJLqjSr6j#rLzXK9D~5$b4K!}iI>nxpoh4A{B3HFZRm!cVv%JFf#$%ZN9e_{52+J*R zzD=g#|4iY5G_=z~KLNR6-~jXUYeRykM!fj^~&KkW+727kh$!cHy??N>`Z8bNuprNt5_?IMLV^SfLsy&@pl_hZ7O=&@5n$vsw1oO6G=yLoFVD;W@k0X{+Z ze!biw#h^CC(+oceAs(GMof~kaDK7BDdbF0Gp#E%!5`S=~Q;lXh&1$r}(GF82z+VO* zYp%Mm8b?YpUljj#MsC^X9#pjgb1R|JTIvpGo}Q47K@FSV_kITMZ;tpbuBpL? zd@|QxIXTY&$Ipf)d)4f%aNz2;X*(SdKck9z%LMqT6u<-k%Ko*PN*;P{#; zKZo4IJK{q3fHHm&J6^RxnGvhVI`;UuIiYwAYA%8k;7y+(@6yfhUmE?*hu%gBDsqs| zGj6i2J8{1mQ(DWD4LvwvIt5)pSF?0zVeGdjNm#^`fm0(SEB z*z(G>zm)G@NZ6bYEoM|g)a850w=VPsi>yl>3^v})85R;5c|1q zW9bSBy>g}l7a&9ROP^04L3giBJb?G9fOxtfNX%3f)R|N3suJYSI?O}GD7W)kZ29i) zIOn_>M-E%}Z{NlybLLDrRb9#y;=R|}iwCGd?Xy;MZM&|wf}0hkg>^{p?>7%$!R$mu zs++HQL!0#dmHqoPcGiHbjEW1W`5%y#!~6BL{A%@X_$#lI3e_Nx;OYazjv;vNvxyV0 z76{T$!ut>P()_nkMmuWV69tMl_CL?40{xY4hEN0#2gpFw&GSPXH`3<+z@$WXH7Q+& zg(5rwT-QFO%Qx;IEIHb|7(c4xHh@BG;Z;tcdEf9ir{-_JDc_tGnuVs<3MM`mBofs; zBF^MPH$LR zSK9bc{vtxDyl&!5j$K{NW7RsGDpdmmW~(r~uNPLstEja(D_oN(zfQ5Zm%@*o<1Yfc z@u|Hncz#!B66ZlimgxjQF-#mWA0IsMarhp9>l-}4^3*Q135*4hGuy6+A{Xl1$-_PY z&ls8-ay?&977co#k^T>9F9-znU2T zS`3n%WT%w?v!UwsYBF4qMdsP9JP`OKxFJOlb?0l)3%zq-k@ihdXQf~pt7m!N+=EIo zB_45WRdH15=XySY=LL7Ed>G|f44QiE;;HwjC!|dO8hQ(?uZecfi?l-B*Er=R{wF`| zvgW5NPcuR=wQK|XWGlMZaKhvPBIC!*Z@7>%i{Wh_> ze!#=SBksRj+C`C08R$02JW_!8J=WUX+y(Iar#!2WE9XPM+no`OwJ|mQHm7+e+MGgR zS*}`<%B%u99Hz!e*$v;e8^FSHQ#|P~Rn2&}kd-tw=6WE+pQ`6j#_o6KL5;k^rnjRiF z8dh<0cNpkHeY$MuCJ+{0m~04__X14d7YcV@Sy)U&hwN5*Sfp$7Te%1_Ygy;2j>4{L z5nOG1u9m1asmEc+8}KOZJ8g47lAsq{p|ouMfSQS!u-08~~-`YKlcwyNkYU~<)un$R9C z%|{s$Bb9;#`^Hh-wn%vn}>^i;#HvyqLt^6OD&o zva#=zEGzmwggbRH-EPZs7fBV?!&zBihXwq?o!Qs23l0tg&SSFa9yJ%;F{PUyGx#b! z9MLtS$Vqd>SGArZy$=ySg_HtQu6(Z*WPQ??jQ3~Kex5w<+S`kf zdX)X@mB~d@pp?!vOElQJ)Ha?izen%OWwdg7_`*4j7ZG?NB2; zL28+W>$A?DnX;P)0u{-VLm{`P)ZIo~nX6+l`NeGL+IzBYkJGBhjB~$=e%fu7v;`ZD zcE2ff7j6>0+W9(D9!E5Zym-O->n$HfwlDGd6l=Pi50~47j@O-k-YYnY7s-$c{lW^=uM~G=L{l5a2n~4uoPDIfopjE77?SG@|LyaR?~u$cqS}_F)j(3&DO^V z20XB*PC3>*8pwGSj_-xmRJj3TQUet_C&O&>I2M(wI-mXnga;)~AVAf=7YW$z%j|)z_uZ);( z#7O^y!>ON;!;n`* zxY#$OV(l?+g06!ZN{LDE#@~W?(};*zpf@nEJ78@G&7KhD&W-EJwyvj58}mgLY`b~C zpKmFs$se<%(CWZ-O%@Sn1q(Jrv}map z`Si;tEi%wRy5C6WMxJLI)cWGt9oTIzV(WM}&RrjN=A^_Hhj1r4uRLqy=N7afN=Lt; z%{EUto^xb@gw?--`GwxaaozIWWY^MGFERkm8xZylzTOq9cF*&Q37Mfru=-|7W$u=T z5L+CqAe_$v5i)(_LLtE=vK^Z|h%mfiH%`FsW_lsY3b%{0>w@kuD}Am}ZrgFk?UkW4 zZ67%q>z6j=X}h_lqb^reXZjwG*}$nCz{f%abQI@+xwkUlpwe-y+9q-GEa=4wfOb?6 zbsFmhq&{Op2R~CS0^3Yv<mL7 z^ZaIsiNjFu&1lNmdxo;xyu5p@QPr_qRtG?JV*ZE>G!4T5ye>z zl5yP!babI`c-`%ow_S!OKp(W&uXItgJO8dES1szV=#XTVfFpiEAnpvv)5ltc%ASz# z-_4Su<7%c~(J^l*b-yl5xRZN+jyo@~-OykGH_p(5nqD{HF2QO62cO&;HuhwuMkiv$+R z`rA@~fEL9eD`;5VpA{ef!$kxZn2YT4I5J@c>ohBYnT8>62#|>Is{b-PS#+C5h{lE_+5u* z2%j<~E|v>6iVZC1#p%qtW?O4}HjbvIdqZ#lC0bCCl8})7>(}$lDk{*ucTWBUeZT<* z1rAim&dI@j{=D8dN5Eq>K|n89w`0l-z+Ppa9y;&!K{BS`iEkn5K5;LIR2ucbH<;a~ zeipXPKRnd6xyiZr_BjuI9O`yFBUfd8e`&VY$OrSbX3P^r$N}^4l)1twDTqel=+E_| zuJO4e_({4*xsc$NZI>k|u#Z*J$GvTdxN^UKRM7i`xr!U%Oz-S|itSQrv_@;M4$jtW zW8iS=uzn!v_4jv4mQa-9ofHRGst4~ELib;#h|Y`!Ur?xFj#4`B=1Z zDu|f6DkmCEy2$f6y}*8uT9YHv+IrMGbQhcJv~dPX@1Q38>a;jgJ$q=#0OFKaBJr8? zaN-5FQq;GW(t@D9Zt{KyIlsbx`?Clm5-_rA>bAq{bliOX{6^;ZznVS|h!_0C2tFka zorvZ$drTLA^#dePI$fZ+@?6(G_t%T-%up0f>)zIRO!dJXoS}XE9aW7GSw>%G2624B zvRk|>qnMUS2Xx`vn|-4+`RptVOwyKDbxTxFrD@Ou@-_QB^UIyH>xN=k)S=2uNt&Ir zeZK*PtmqV}#An$$ztkCGV1zY999f7!#c<*R#&ZV;b%Dt@ z{J!@Il%hbHc@sQK73MS^qfw&u5~EF=?Z{jIQTbXfM0RP#P}@WyXXLw6t28Tb;4?*u zi8z8})h@Pj3c$WeW?1W6KyA@(n3h_F9`B9owgi7w2LI7Y*S?%`ERCXg#-AwLewrHYo88C41~Z(SPElF4p-&zoT`*rGxZ#F3E-Td1#VkJn8TWY&T@8 zw(|S&@S%)q!-w?mp5B)Cy6tkpBOx_bAGc6ZB=|7u;7`SDYAkyVpt&mVH7#>%`RDD! zpEv*gyt(|&8`uKiM*?ONt(Gy8lTH^V9rF*E$yRCpo^4AbBL+atf$kN(d-qPH9DYDB zW*OzsdD~1na&{ke#eugc|KkP!d_8vM*r5pmJySK@hNW~X?2-ixdyvWd`x6`3T>jaz zO7gsje;JqL%jX^CWHqY!?x{w2URs6MV9UnRuF2!d8K;`eemL2gG}_DyTcTytTwA-I zmGfg+|08}eO*%e@1Y@RNf?NWoslQua5a{_bYPmH!&Z*~5;{)0WTQ6gs!XDW(I| zmilzg)SUVBAJ_3}M|Xu2FI4|VfuglRc;UOz zYEMW3BfNsLZVSNS%53AQNcOC$M<~}!iE|*|Unn7&qilf!Km1`*G~V?Jc$M0{0J+(? z`7B^&y^i`7g}(VXq7hn7O#b z9-a)u{YOI~drN1g3tGP1v&N-O-i%v!({{|Vx;po@Pg-j0Ln^r{hnUN!InT3^l=!iC z>Q}W!x7+5ZrWMhvLps}x5JgTd5r;;j-T7=iT{U83H^e`hXSNqX06Pi zcr60tV`F2J5|Q0eGkH_uO6%y95Q-xQ!-F%)z#mE4)mOg;u)oPa>i;cP(a|dBgogz2uK$Z!552)B%8;>^9mZ zLFK~yJREg0O0hDj+)c1BRP%69Qc8S+=o2I=R+V5L5QftA-#t_Wti#&<)p4S_v${r@ zJy%-T*v{%7A8szW?ue7*B8~mGH`qG2Zxr$nU-m(!QO}skFO`8u94iF~q*z2;=4(w_ z$F6U(yLn{d=$sLckm$4t*$s3SbmR&EI@1SykeGPVZHU|M1{aPnM;1D*gu_g!9=of3LybHtu6wv$j-D1Iku7 z@i*9)?Xg~a0n$CWXzp$tMR*)3orK;07`oZpyyvdfJ+(w4W}yU}+N^6I3YA^16w3o` z2*oBDj?B!K<2#mKs^L@{6FT%REM$(+uDGn70Y%9ECtaeN{nf@11N-0PR=Y}(!`$_a zsJ!YIHamF((eM}A8`5#zW-RG-5<+=wU_`Pk0bl9D2uDB}?z*$X!_sbDVUE!KoGraV6M)f$@RTVKV}*cT`*?kG+qiF`NQA`NLub{>;QyA1 zYRrQmbfW(2HwufBa^1^m6l6#N31$x4afN=OHLNnfsLIx* z8C#MBt9(Cmy^nJ^iZJ?B)uVX1N<2w7Bg8YA(~2?PRahZ$9+(3YVLmfMF%OZ|UlGVCe4*0rRM<$Pz}#ZyP78c9KR|Cij?-#33mPREd!;iJ8~F_JUeZN7 z$6kpl;Q|AhST|?f@3q{)MpzLr6x!829ViLt#2**)L-+a())FC>GGQ{X5bzZm9fB>n z#i`hVZj4HHJXjnb>t6Y3C4$XtX>L|;@1o~xS6%3NTz*R? z?hYF}tbHFp)PUCwT23sd%{z?}md{_Dhap4gv7MdR&5~_eps%F&Ukpx886vyRB^~-( z=jgKFiLG^YscLsm)Q9~SjKtm0|7wF!-#o4uV0m!;x4Qy=X-x+K?#Scoe|+GkBYX!5 zub9~aB$dqEkBrAdN%I5W3(n<#lL`DHxmth9&hbb~+3OtWg$7|8GECE03U5fe(<+^$6zc^p(Z`W?5tmIZ!4$V2%zy3EbZ*Vvqy0TIa;3*1L0zQsd zare3CRKInIVfD+dxx)Gkos&m~HHdw2b>jQc*_oki0XjiJLCkDyctD-GJ$num=)fxG z`jj*duUp^P@Yvn7v7|RuRsU-wR%z?#Xw^)o`=I?7jfzxXL+YJ8y`T$LF zg> z>%XnamOE=&gIQGax7Xgou?X7yzzaU!=dj^-R$hwCdv8~l{gUjvtaPT)ANrzCb3C85 zr%?m0|A?B2waWb7-NUt6-{6q`sg$rJ`HflDQ-7p}>cGoe;65h?(w9A(+f@(K&@45! zXfbT6%){EoXHQbcJB`oJB){YkI^;bV;2dWg@GH@FolKQU9k-BHHmPfr?kt(M!c0pu zNHU9vzkfG$e_3-~c-ZR^DS@`kyAYAMf(&MuLzl144%S5ODN0XP7b5A`OLH@<8uP$z z_aOWD_dHs;Gu6!-H6||7zyDatAk;u&x!+C@g;Uk@e09Fg&l%F)IkjM)s~OH!y0KDL z+9FZ2@%?m&0duP>=38pfW^1JjTE6|g)I|ZwRd=<+SB{1cdva5|9!i5g^o{NOwny=pme2IDN{Emgd8) zLqxWewR&WUtpE4C_XL8PtYJ7}pv|}O_ZNZ0Jx^$ z@{KEwOjpT2*8Q8tt2kGlpA9whZbSurldoO=p1JN>5LU%0Tue_Qo^l}Nrjee1n-$8D zQLO>9h%<0w622!~#eW}hNHr#&Pv{UGR&v}&>W|(Uk99&YkWOO>1qn``{zhjS;AbtA zkMlu>((>ZK}JOx1;-%@Sb|7bAVdfdN2ElW1VTgz z=+GtzL6Cr$kk|l0YG?vNL`oz`kP;x2V51wUp#~Tw6e&SMPayf?_dRo;=l;I;d+z;l z&+mQC-e;Znto5#U@4fbm>sL9lo0|$rHV2Pg@GuvB8>vhtkw|UBNN6m68L>L9V|o`9 zTwMT!!}(pwi9R)gvE??QP6Sj^YV44jTDTTJIzV|krLAN_Ck8L3(=Ay9z8|-c+@#Df z6ta6wlCzf@<+lhhSOJ#|jeSL!)fp$A`+jeDz^JtDlS^Mj(QP+XRFX+YCKB<<-`@Kx zZL}R(vUJx}i%G?c3)^sDPg#9oYa6b7W@Q+RX(5OclQ#$gIG1kUa>}}^8|i_U4`1_# z6%=rX+j?(Id!}z%5}OLR{#%zDc|yR%D&~-X-bC zsinZRA3V0hxP?m@mo78Kcy4^Qhxx~@p-olN(kYLf6a0arWX+8rm8H~61X0Xz?!HNn zjY;v21$U>=tD6K)G7hBUD@Rv!)kUs!p~MDV>E8$7_rXnPr=Dn{74Zo#Y7EGY z^qLZ~ZAG8ySCy?#>M+UQAWd&&5^z9LH+JU;x#3{=a!ldm<&!E!%1&qPx5eN57C@o_ zWzX>0lC~qtJH~wfg)A_SQ={|S(T#@?!fxOZNgeDLhE0O{)`E9Fbb~Yv$a-P^0{=AK z;K=2guF|{s{hcXTWo07nM+GHgkEUYE`Dt zJELSe4%Peg-98KH;0y^KuV2{dgF8=3fzo_ib06w^XONMOr3F8hG1A}Zp68L|YeOwc zdC&dn@zk+U^K`X{?%@+lA;|y;1QB+U8R*5kxw{pbhbKF~(!&;ZM%Z*}BW-icNc!g# z2k#ydwwm4yN@T{Td}Q}R0_+jxyC%_x?S@N-`#oRDfdqrqByg+dyJX;4$S4P z!Xo4SUJeOdtn8Q`DqIKG+ch>u8}Gl>TJPa*sU;c#jHXh|Sn&u8OKn3NIkB2;B(Obi zZ|kmDku1zHG~8PsEOk+r4Jmya1bzM8?>YQn`1k=~4W|C8I`HW<{za`DN#CHH*>=$R zImO`d5CfIrT6rexiC6tA2*Vc?PVnsEj+n)y`BA?dz>7_|m|^22k3a7m~P$TNkHq{K?6O z>-n(>rS?c|r;fSG;kXB4_-Fz0Q@d?qXVT+(AeQILCmIEHr z>~htbSeR>&i4*(01NRStG!Gkee0|NIC*&s$sti_fZ#mzbmw(3XLP#9!vr_)F0kyID zM#xWLt=+Yj&Ey$JL_gjo_r4uFZ6q$iE%@na(Xe{xdEi$6sPa{X=dw~$8L0?VL$H?L zZsBp>(PNL6^^Uinxp(Y>W8QP1n$FFXkz@8yXgAuO&xB`r29;5fD+x!_RZn#(zro8@hAk(? z>P!TNT;a3anC@~h&&M3RH3q#(dG$lvy}ImYMPr)h#%rxf+Y!OIhdoo5B@vu= z({aq;==|buVV1eUU`}S~!n;MG@!EZBTKPqgfzwmM!+{88;^-c>7p#w_jZ(;pJ^cH- zEWliEA!cR2jOICg-ttobyZbe8iyONCOdWZO$`aUQ1*R`#Z?+~c72dnM5SoTGP`iSM zDPo(81W8pRk{3#)xP;c5VQGdrOa6$d)6uH^_HvJB@DJ`2Y_0bmsO2gpG)Me#iK%Gt z+V*lT^zoKYj>!|^y93TlhHB8niSLL92D=MSh%{QIxL@NBbQo%U#9^DV2m4aH6t%YX z+5YtlNWLjDl8e5X4#{^xp=NB5{v&aDLD8@;WJ;eci&_qoW7>h(pkiEsjaC4*Xb1W_ z@C)HhOV>TGydQ$^*+zpI9qvs{W|Ea*KIF?fVI_3qaq!!u?c5v1Mesrh!SML23xV}@ zmdE@8X`FBS%nM3vy>!JL22Xy5vQC5o?K2$Bv(jrS?ZGw;Z{|dg z#p@D3LD-No%&u0FA6Z(rhzH*&t?-FAD14*k;Pg_+H&Yb`kG8_8G~ zT~%Ek?0eauO-@DR*9AxeQq~yiuP)d>F=7{V=3pz{h1!$e21ToVQC3=HZ`JMNPZ`Wr zw5oPZ`4|RAvwOM=lv0>Iyu@1N28nlZk$9Ku*%x8pHz=48zgk~Kp? z?Tu4VY#tkxU7k>zC_6J?*yLfxbf*u>qemu6r!~MfjJFen$GA{$%C_jlng_GK8gdFftQ6Lx74BrbFtnE+J2mvhceK^SI{W|((AOUYZbaKg z1HBKUcbMc8_LOUlF2U8g;6*34iq8{bC_2ZT(W_cEq0>}jZyWB(m#TDfoH@(Z^=fG` z`LQ_maCYy&VL`e98BB?g6Qj7oDv9m<8;?^8(8vou0NHVHkO$f}yl|#}WFbjk)8o22 zdWU0w$dEh>SX3x)Lbg{H`#)JvNuQCu&UC2=TW*3#t4u7QIbm(z4P0-ib850_y8Ea* zqoqL8cWwP)uyBayZhvA+up5|GjEP1?rKBwF;#b`TY0aNC;GMPIHuL1iTTySlQZ%#D zaK`4CW$_%FV%CjE!9mdL5^7TMotjkaol4SQT)P>3(%c((TV0kn$jOtMVL+I-fNKSc{}~}TV0?i>affv&>L2~r^c@#;-I*`ed9D;=L;cFz$p6= zVLIHQp`EHviQI2Z+zrx1PyXzEXl46;Cs<=$TO|E7uS}>C#0@W*%6`<<`PXKdY4t=Q z`f!KK4O;x;!6DW>x}P$B1BL*N5HfcpynI%sk|n7(H=;-aTGm^NK5eE;jUADRhe${s zLrqEr{RifKTt{RiV`#!+x9;!4lRW8L5)kT2KQa7A7Eg#j+#p0dV7r{9@0|x*<#X$zCNg=Oi39 zH3D5XtmH1cuu)5XjV!rBz+xrP`DzXZQ$;lGEtRx1@>RX#Y5m5;=X};RoPzk$v3`6d zGAL2wd!T%(C9=L~YTlIUMgi`G=~}!iqrAr4K>-}opRuP#we>192G@#wZ*gReB{b&i z6Qzg@He=iU=sANB0!=?K*+`Na` zy;yVKYF5*aYePA6&iQVl+a>Dk8)LOjw5aRZg8GsgrI-7|`@i_7g_Uf*NeB)9W8%@C zRj0P$#`gO`Yq!NQ5T2tF2w9D(%k{$8W^hVNCafmo>M!!E&a>-ae+^bEI6t3hcsBZq zI52w+y3%^=<3aIZM>CXP!0q<3y>t}Dac$T1_8D(~4lk6kPm6$z+bGrwNIx+H~x{xVO z$D5C1DA@(*GP%oO32Pod*BFdp`_OSoGqP69t!UzAGzdzR%p0dCa2{@!Ril{DH(NeB zUvl4I8zp=&xWMKR5e8T+MWAM$c8mzvsDO$i0;4^RxzncI=B-luy$rF8CUkcE#0Ia9 zKv%P`RCkRCuEO=ZplSF(f6m~gAmO}#{U0V3korQ4jBTIoU+RtEMURPB^G#+DHO+S} zV%RDScf)|(OnXUsCw)iqN1XP#ckBwfd8R*Nkpw7-l}DAHMVcex>p~beH()^+s~t=+ z)u-NMZxQz^=X7|PquZE-a!1Fer#pSrBIOsEXW&?w4U-ADPzFE;MDu@8syV!X@M{PO zn3Tf01!WW%BSKf_g015_{L7sKys7A*QncQ&S%eT{Ks@)O-Up(&l_%4o(C8X>ZvL!9 z-`=cMJzfS^Y|LQ89gBt>3pf=3dab|)@|&811fKke+z!A9`>MA`LPR=?Mr{dQTh9zU z3)fx8l0#ou1ZaVRUp0hN+Z^)KX(CW_;v)h2&@$ORE4B+eKT>Fc&}#l?1h%fL_W4Cu zRI8dgBWuGP=C_$h4){87iwV2Sk*lXk(oNWQLtMPL7p_4vV|$;*=ar?j&7=MPys(Q@ z;iotfnz>^lX?DPK^1$s6P+QgX;4%JMX{xJyJrm@zY^JNrlg9navfp)2t2&7|ew($J z_Ai0?R^Wfm4F7NFr2l>;_P^1?vDix|59UL@Z!-Pom1OgOMqmDWNdG - - - - - - The Official Guide to Mermaid.js - - - - - - - - - - - - - - - - -

-
- - - - - - - - - - - - -
-
-
-

- Get up to speed with using Mermaid diagrams along with real-world examples and expert tips - from the authors to facilitate a seamless development workflow -

-
-
-
-
-
-

- Flowcharts is a diagram type that visualizes a process or an algorithm by showing the - steps in order, as well as the different paths the execution can take. -

-
-
- -
-
-
-
- -
-
-
-

- Sequence diagrams lets you model and visualize interactions between different actors - or objects in a system, as well as the order of those interactions -

-
-
-
-
-
-

- A class diagram is a graphical representation that is used to visualize and describe - an object-oriented system. -

-
-
- -
-
-
-
- -
-
-
-

- An entity-relationship diagram is a graphical representation that is used to - visualize the different types of entities that exist within a system. -

-
-
-
-
-
-

- Use State diagrams to model and document state machines, an abstract way of - representing a system or an algorithm. -

-
-
- -
-
-
-
- -
-
-
-

- A Gantt chart is a graphical representation that is used to visualize and describe - tasks (events or activities) over time. -

-
-
-
-
-

- These were a few of the diagrams supported by Mermaid. -

-
- -
-
-

- Book description -

-
-

- Mermaid lets you represent diagrams using text and code which simplifies the maintenance - of complex diagrams. This is a great option for developers as they’re more familiar with - code, rather than special tools for generating diagrams. Besides, diagrams in code - simplify maintenance and ensure that the code is supported by version control systems. - In some cases, Mermaid makes refactoring support for name changes possible while also - enabling team collaboration for review distribution and updates. -

-

- Developers working with any system will be able to put their knowledge to work with this - practical guide to using Mermaid for documentation. The book is also a great reference - for looking up the syntax for specific diagrams when authoring diagrams. -

-

- You’ll start by getting up to speed with the importance of accurate and visual - documentation. Next, the book introduces Mermaid and establishes how to use it to create - effective documentation. By using different tools, editors, or a custom documentation - platform, you’ll also learn how to use Mermaid syntax for various diagrams. Later - chapters cover advanced configuration settings and theme options to manipulate your - diagram as per your needs. -

-

- By the end of this Mermaid book, you’ll have become well-versed with the different types - of Mermaid diagrams and how they can be used in your workflows. -

-
-
-
-
-
-

- What you will learn -

-
-
-
-
-
-
-
    -
  • - Understand good and bad documentation, and the art of effective documentation -
  • -
  • - Become well-versed with maintaining complex diagrams with ease -
  • -
  • - Learn how to set up a custom documentation system -
  • -
  • - Learn how to implement Mermaid diagrams in your workflows -
  • -
  • - Understand how to set up themes for a Mermaid diagram for an entire site -
  • -
  • - Discover how to draw different types of diagrams such as flowcharts, class - diagrams, Gantt charts, and more -
  • -
-
-
-
-
-
- - - - - - - - - - - - - - - - - -
-

- Purchase The Official Guide to Mermaid.js -

-
-
-
-

-

Written by Knut Sveidqvist and Ashish Jain.

-

- Knut is the creator of Mermaid and both authors are active core team members of the - Mermaid open-source project. -

-

- - - -
- - - diff --git a/docs/book/sequence-diagram.png b/docs/book/sequence-diagram.png deleted file mode 100644 index 8c51ac1c5d6601960112784757061943d9d6dc8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19823 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%0D)Muw-s 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 DRc_Wx diff --git a/docs/syntax/classDiagram.md b/docs/syntax/classDiagram.md index c4fc07732..132ef9f3e 100644 --- a/docs/syntax/classDiagram.md +++ b/docs/syntax/classDiagram.md @@ -206,7 +206,7 @@ class BankAccount{ #### Generic Types -Members can be defined using generic types, such as `List`, for fields, parameters, and return types by enclosing the type within `~` (**tilde**). Note: **nested** type declarations such as `List>` are not currently supported. +Members can be defined using generic types, such as `List`, for fields, parameters, and return types by enclosing the type within `~` (**tilde**). **Nested** type declarations such as `List>` are supported. Generics can be represented as part of a class definition and also in the parameters or the return value of a method/function: @@ -222,6 +222,7 @@ class Square~Shape~{ Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ +Square : +getDistanceMatrix() List~List~int~~ ``` ```mermaid @@ -236,6 +237,7 @@ class Square~Shape~{ Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ +Square : +getDistanceMatrix() List~List~int~~ ``` #### Visibility diff --git a/packages/mermaid/src/docs/syntax/classDiagram.md b/packages/mermaid/src/docs/syntax/classDiagram.md index 8cd5796ff..54a5cff23 100644 --- a/packages/mermaid/src/docs/syntax/classDiagram.md +++ b/packages/mermaid/src/docs/syntax/classDiagram.md @@ -123,7 +123,7 @@ class BankAccount{ #### Generic Types -Members can be defined using generic types, such as `List`, for fields, parameters, and return types by enclosing the type within `~` (**tilde**). Note: **nested** type declarations such as `List>` are not currently supported. +Members can be defined using generic types, such as `List`, for fields, parameters, and return types by enclosing the type within `~` (**tilde**). **Nested** type declarations such as `List>` are supported. Generics can be represented as part of a class definition and also in the parameters or the return value of a method/function: @@ -139,6 +139,7 @@ class Square~Shape~{ Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ +Square : +getDistanceMatrix() List~List~int~~ ``` #### Visibility From d8aa44f0c50d93eb2d8c209dbb4121e3f0940fa3 Mon Sep 17 00:00:00 2001 From: nekikara Date: Sat, 24 Dec 2022 20:25:59 +0100 Subject: [PATCH 71/81] fix typos accessing techn property in drawC4Shape function --- cypress/integration/rendering/c4.spec.js | 122 ++++++++++++++++++++ packages/mermaid/src/diagrams/c4/svgDraw.js | 6 +- 2 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 cypress/integration/rendering/c4.spec.js diff --git a/cypress/integration/rendering/c4.spec.js b/cypress/integration/rendering/c4.spec.js new file mode 100644 index 000000000..0cf128ff6 --- /dev/null +++ b/cypress/integration/rendering/c4.spec.js @@ -0,0 +1,122 @@ +import { imgSnapshotTest, renderGraph } from '../../helpers/util.js'; + +describe('C4 diagram', () => { + it('should render a simple C4Context diagram', () => { + imgSnapshotTest( + ` + C4Context + accTitle: C4 context demo + accDescr: Many large C4 diagrams + + title System Context diagram for Internet Banking System + + Enterprise_Boundary(b0, "BankBoundary0") { + Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") + + System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") + + Enterprise_Boundary(b1, "BankBoundary") { + System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") + } + } + + BiRel(customerA, SystemAA, "Uses") + Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") + Rel(SystemC, customerA, "Sends e-mails to") + + UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") + UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") + UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") + `, + {} + ); + cy.get('svg'); + }); + it('should render a simple C4Container diagram', () => { + imgSnapshotTest( + ` + C4Container + title Container diagram for Internet Banking System + + System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", $tags="v1.0") + Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0") + + Container_Boundary(c1, "Internet Banking") { + Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to customers via their web browser") + } + + Rel(customer, spa, "Uses", "HTTPS") + Rel(email_system, customer, "Sends e-mails to") + `, + {} + ); + cy.get('svg'); + }); + it('should render a simple C4Component diagram', () => { + imgSnapshotTest( + ` + C4Component + title Component diagram for Internet Banking System - API Application + + Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.") + + Container_Boundary(api, "API Application") { + Component(sign, "Sign In Controller", "MVC Rest Controller", "Allows users to sign in to the internet banking system") + } + + Rel_Back(spa, sign, "Uses", "JSON/HTTPS") + UpdateRelStyle(spa, sign, $offsetY="-40") + `, + {} + ); + cy.get('svg'); + }); + it('should render a simple C4Dynamic diagram', () => { + imgSnapshotTest( + ` + C4Dynamic + title Dynamic diagram for Internet Banking System - API Application + + ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.") + Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.") + Container_Boundary(b, "API Application") { + Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.") + Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.") + } + Rel(c1, c2, "Submits credentials to", "JSON/HTTPS") + Rel(c2, c3, "Calls isAuthenticated() on") + Rel(c3, c4, "select * from users where username = ?", "JDBC") + + UpdateRelStyle(c1, c2, $textColor="red", $offsetY="-40") + UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60") + UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10") + `, + {} + ); + cy.get('svg'); + }); + it('should render a simple C4Deployment diagram', () => { + imgSnapshotTest( + ` + C4Deployment + title Deployment Diagram for Internet Banking System - Live + + Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){ + Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.") + } + + Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){ + Deployment_Node(dn, "bigbank-api*** x8", "Ubuntu 16.04 LTS"){ + Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){ + Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.") + } + } + } + + Rel(mobile, api, "Makes API calls to", "json/HTTPS") + `, + {} + ); + cy.get('svg'); + }); +}); diff --git a/packages/mermaid/src/diagrams/c4/svgDraw.js b/packages/mermaid/src/diagrams/c4/svgDraw.js index d3d66a80d..e34a9d37f 100644 --- a/packages/mermaid/src/diagrams/c4/svgDraw.js +++ b/packages/mermaid/src/diagrams/c4/svgDraw.js @@ -371,12 +371,12 @@ export const drawC4Shape = function (elem, c4Shape, conf) { textFontConf = conf[c4Shape.typeC4Shape.text + 'Font'](); textFontConf.fontColor = fontColor; - if (c4Shape.thchn && c4Shape.thchn.text !== '') { + if (c4Shape.techn && c4Shape.techn?.text !== '') { _drawTextCandidateFunc(conf)( - c4Shape.thchn.text, + c4Shape.techn.text, c4ShapeElem, c4Shape.x, - c4Shape.y + c4Shape.thchn.Y, + c4Shape.y + c4Shape.techn.Y, c4Shape.width, c4Shape.height, { fill: fontColor, 'font-style': 'italic' }, From d8c3f8fc1611c86cdd20c9b7a76f81c83103598b Mon Sep 17 00:00:00 2001 From: steph Date: Mon, 26 Dec 2022 12:04:58 -0800 Subject: [PATCH 72/81] updates to the homepage --- packages/mermaid/src/docs/index.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/mermaid/src/docs/index.md b/packages/mermaid/src/docs/index.md index 6c2763904..28d553dd3 100644 --- a/packages/mermaid/src/docs/index.md +++ b/packages/mermaid/src/docs/index.md @@ -21,13 +21,17 @@ hero: features: - title: ➕ Easy to use! - details: Mermaid allows even non-programmers to easily create detailed and diagrams through the Mermaid Live Editor. + details: Easily create and render detailed diagrams and charts with the Mermaid Live Editor. + link: https://mermaid.live/ - title: 🎥 Video Tutorials! - details: Has video tutorials for beginners and advanced users. - - title: 🏆 Award winner! - details: Mermaid was nominated and won the JS Open Source Awards (2019) in the category "The most exciting use of technology"!!! + details: Curated list of video tutorials and examples created by the community. + link: ../../config/Tutorials.html - title: 🧩 Integrations available! - details: Use Mermaid with your favorite applications, check out the list of Integrations and Usages of Mermaid. + details: Use Mermaid with your favorite applications, check out the integrations list. + link: ../../misc/integrations.md + - title: 🏆 Award winning! + details: 2019 JavaScript Open Source Award winner for "The Most Exciting Use of Technology". + link: https://osawards.com/javascript/2019 ---