@zenuml/core 3.46.4 → 3.46.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/.claude/skills/babysit-pr/SKILL.md +203 -0
  2. package/.claude/skills/babysit-pr/agents/openai.yaml +7 -0
  3. package/.claude/skills/dia-scoring/SKILL.md +1 -1
  4. package/.claude/skills/propagate-core-release/SKILL.md +200 -0
  5. package/.claude/skills/propagate-core-release/agents/openai.yaml +7 -0
  6. package/.claude/skills/propagate-core-release/references/downstreams.md +41 -0
  7. package/dist/stats.html +1 -1
  8. package/dist/zenuml.esm.mjs +3 -3
  9. package/dist/zenuml.js +3 -3
  10. package/docs/superpowers/plans/2026-03-27-e2e-test-reorg.md +698 -0
  11. package/{cy → e2e/data}/compare-cases.js +70 -37
  12. package/{cy/smoke-editable-label.html → e2e/fixtures/editable-label.html} +1 -1
  13. package/{cy/editable-span-test.html → e2e/fixtures/editable-span.html} +1 -1
  14. package/e2e/fixtures/fixture.html +31 -0
  15. package/{cy → e2e/tools}/canonical-history.html +1 -1
  16. package/{cy → e2e/tools}/compare-case.html +3 -3
  17. package/{cy → e2e/tools}/compare.html +2 -2
  18. package/{cy → e2e/tools}/native-diff-ext/content.js +2 -2
  19. package/firebase-debug.log +108 -0
  20. package/index.html +2 -2
  21. package/mermaid-zenuml-async-spa-auth.png +0 -0
  22. package/mermaid-zenuml-async-spa-auth.snapshot.md +96 -0
  23. package/package.json +1 -1
  24. package/scripts/analyze-compare-case/collect-data.mjs +1 -1
  25. package/scripts/analyze-compare-case.mjs +1 -1
  26. package/skills/dia-scoring/SKILL.md +1 -1
  27. package/vite.config.ts +5 -5
  28. package/cy/async-message-1.html +0 -32
  29. package/cy/async-message-2.html +0 -46
  30. package/cy/async-message-3.html +0 -41
  31. package/cy/creation-rtl.html +0 -28
  32. package/cy/defect-406-alt-under-creation.html +0 -40
  33. package/cy/demo1.html +0 -28
  34. package/cy/demo3.html +0 -28
  35. package/cy/demo4.html +0 -28
  36. package/cy/element-report.html +0 -705
  37. package/cy/fragments-with-return.html +0 -35
  38. package/cy/icons-test.html +0 -29
  39. package/cy/if-fragment.html +0 -28
  40. package/cy/legacy-vs-html.html +0 -291
  41. package/cy/named-parameters.html +0 -30
  42. package/cy/nested-interaction-with-fragment.html +0 -34
  43. package/cy/nested-interaction-with-outbound.html +0 -34
  44. package/cy/parity-test.html +0 -122
  45. package/cy/return-in-nested-if.html +0 -29
  46. package/cy/return.html +0 -38
  47. package/cy/self-sync-message-at-root.html +0 -28
  48. package/cy/smoke-creation.html +0 -26
  49. package/cy/smoke-fragment-issue.html +0 -36
  50. package/cy/smoke-fragment.html +0 -42
  51. package/cy/smoke-interaction.html +0 -34
  52. package/cy/smoke.html +0 -40
  53. package/cy/theme-default-test.html +0 -28
  54. package/cy/vertical-1.html +0 -25
  55. package/cy/vertical-10.html +0 -33
  56. package/cy/vertical-11.html +0 -29
  57. package/cy/vertical-2.html +0 -23
  58. package/cy/vertical-3.html +0 -37
  59. package/cy/vertical-4.html +0 -42
  60. package/cy/vertical-5.html +0 -40
  61. package/cy/vertical-6.html +0 -29
  62. package/cy/vertical-7.html +0 -27
  63. package/cy/vertical-8.html +0 -32
  64. package/cy/vertical-9.html +0 -25
  65. package/cy/xss.html +0 -21
  66. /package/{cy → e2e/data}/diff-algorithm.js +0 -0
  67. /package/{cy → e2e/fixtures}/svg-test.html +0 -0
  68. /package/{cy → e2e/tools}/native-diff-ext/background.js +0 -0
  69. /package/{cy → e2e/tools}/native-diff-ext/bridge.js +0 -0
  70. /package/{cy → e2e/tools}/svg-preview.html +0 -0
@@ -0,0 +1,96 @@
1
+ - generic [active] [ref=e1]:
2
+ - heading "Zenuml demos" [level=1] [ref=e2]
3
+ - document [ref=e4]:
4
+ - generic [ref=e7]:
5
+ - generic [ref=e16]: BookLibService
6
+ - generic [ref=e19]: Session
7
+ - generic [ref=e22]: BookRepository
8
+ - generic [ref=e25]: ErrorService
9
+ - generic [ref=e28]: Connection
10
+ - generic [ref=e37]: receipt:Receipt
11
+ - generic [ref=e38]:
12
+ - img [ref=e39]
13
+ - generic [ref=e42]: Borrow(id)
14
+ - generic [ref=e43]: "1"
15
+ - generic [ref=e44]:
16
+ - img [ref=e45]
17
+ - generic [ref=e48]: GetUser()
18
+ - generic [ref=e49]: "1.1"
19
+ - generic [ref=e50]:
20
+ - img [ref=e51]
21
+ - generic [ref=e54]: Update(id,onLoan,User)
22
+ - generic [ref=e55]: 1.2.1.1
23
+ - generic [ref=e56]:
24
+ - img [ref=e57]
25
+ - generic [ref=e60]: onException(BookNotFoundException)
26
+ - generic [ref=e61]: 1.2.1.3
27
+ - generic [ref=e62]:
28
+ - img [ref=e63]
29
+ - generic [ref=e66]: close()
30
+ - generic [ref=e67]: 1.2.1.4
31
+ - generic [ref=e68]:
32
+ - generic [ref=e70]: «id,dueDate»
33
+ - generic [ref=e71]: 1.2.1.2
34
+ - generic [ref=e72]:
35
+ - generic [ref=e74]: User
36
+ - generic [ref=e75]: 1.1.1
37
+ - generic [ref=e76]:
38
+ - generic [ref=e78]: receipt
39
+ - generic [ref=e79]: 1.2.1.2.1
40
+ - generic [ref=e80]:
41
+ - generic [ref=e82]: receipt
42
+ - generic [ref=e83]: "1.3"
43
+ - generic [ref=e84]:
44
+ - img [ref=e87]
45
+ - generic [ref=e89]: Alt
46
+ - generic [ref=e90]: "1.2"
47
+ - generic [ref=e91]:
48
+ - generic [ref=e92]: "["
49
+ - generic [ref=e93]: User.isActive
50
+ - generic [ref=e94]: "]"
51
+ - generic [ref=e95]:
52
+ - img [ref=e98]
53
+ - generic [ref=e100]: Try
54
+ - generic [ref=e101]: 1.2.1
55
+ - generic [ref=e102]:
56
+ - generic [ref=e104]: catch
57
+ - generic [ref=e105]: BookNotFoundException
58
+ - generic [ref=e108]: finally
59
+ - document [ref=e110]:
60
+ - generic [ref=e113]: Async Messages (SPA Authentication)
61
+ - generic [ref=e114]:
62
+ - generic [ref=e117]: Browser
63
+ - generic [ref=e120]: Auth0
64
+ - generic [ref=e123]: Identity Provider
65
+ - generic [ref=e126]: Your API
66
+ - generic [ref=e127]:
67
+ - img [ref=e128]
68
+ - generic [ref=e131]: 1. initiate the authentication
69
+ - generic [ref=e132]: "1"
70
+ - generic [ref=e133]:
71
+ - img [ref=e134]
72
+ - generic [ref=e137]: 2. OAuth2 / SAML, etc
73
+ - generic [ref=e138]: "2"
74
+ - generic [ref=e139]:
75
+ - img [ref=e140]
76
+ - generic [ref=e143]: "4. redirect to ${YOUR_CALLBACK_URL}/#id_token=e68..."
77
+ - generic [ref=e144]: "4"
78
+ - generic [ref=e145]:
79
+ - img [ref=e146]
80
+ - generic [ref=e149]: 5. validate id_token and get user profile
81
+ - generic [ref=e150]: "5"
82
+ - generic [ref=e151]:
83
+ - img [ref=e152]
84
+ - generic [ref=e155]: 6. call API sending JWT in Authorization header
85
+ - generic [ref=e156]: "6"
86
+ - generic [ref=e157]:
87
+ - img [ref=e158]:
88
+ - img [ref=e161]
89
+ - generic [ref=e164]: 3. user gets authenticated
90
+ - generic [ref=e165]: "3"
91
+ - generic [ref=e166]:
92
+ - img [ref=e167]:
93
+ - img [ref=e170]
94
+ - generic [ref=e173]: 7. validate token
95
+ - generic [ref=e174]: "7"
96
+ - generic [ref=e175]: "``` GET https://${account.namespace}/authorize/? response_type=token &client_id=${account.clientId} &redirect_url=YOUR_CALLBACK_URL &state=VALUE_THAT_SURVIVES_REDIRECTS &scope=openid ```"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenuml/core",
3
- "version": "3.46.4",
3
+ "version": "3.46.5",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -14,7 +14,7 @@
14
14
  *
15
15
  * Example input:
16
16
  * A Playwright `page` already loaded with
17
- * `http://localhost:8080/cy/compare-case.html?case=async-2a`
17
+ * `http://localhost:8080/e2e/tools/compare-case.html?case=async-2a`
18
18
  *
19
19
  * Example output:
20
20
  * `{ htmlLabels, svgLabels, htmlNumbers, svgNumbers, htmlArrows, svgArrows, htmlParticipants, svgParticipants, ... }`
@@ -41,7 +41,7 @@ export async function main(argv = process.argv.slice(2), stdout = process.stdout
41
41
  if (args.profileDirectory && !args.userDataDir) {
42
42
  throw new Error("--profile-directory requires --user-data-dir");
43
43
  }
44
- const compareUrl = `${args.baseUrl.replace(/\/$/, "")}/cy/compare-case.html?case=${encodeURIComponent(args.caseName)}`;
44
+ const compareUrl = `${args.baseUrl.replace(/\/$/, "")}/e2e/tools/compare-case.html?case=${encodeURIComponent(args.caseName)}`;
45
45
  const chromiumArgs = args.profileDirectory
46
46
  ? [`--profile-directory=${args.profileDirectory}`]
47
47
  : [];
@@ -9,7 +9,7 @@ Use this skill when the task is to measure **message labels, fragment labels, se
9
9
 
10
10
  The workflow is browser-native:
11
11
 
12
- 1. Open `http://localhost:8080/cy/compare-case.html?case=<name>`.
12
+ 1. Open `http://localhost:8080/e2e/tools/compare-case.html?case=<name>`.
13
13
  2. Treat the `native-diff-ext` extension as required for pixel diff work: it generates the live `#diff-panel canvas` on page load.
14
14
  3. Use the analyzer script at [../../scripts/analyze-compare-case.mjs](../../scripts/analyze-compare-case.mjs).
15
15
  4. Prefer `--json` when the next step is automated processing.
package/vite.config.ts CHANGED
@@ -16,9 +16,9 @@ const packageJson = JSON.parse(
16
16
  readFileSync(resolve(__dirname, "package.json"), "utf-8"),
17
17
  );
18
18
 
19
- function getCypressHtmlFiles() {
20
- const cypressFolder = resolve(__dirname, "cy");
21
- const strings = execSync(`find ${cypressFolder} -name '*.html'`)
19
+ function getE2eHtmlFiles() {
20
+ const e2eFolder = resolve(__dirname, "e2e");
21
+ const strings = execSync(`find ${e2eFolder} -name '*.html'`)
22
22
  .toString()
23
23
  .split("\n");
24
24
  // remove empty string
@@ -26,14 +26,14 @@ function getCypressHtmlFiles() {
26
26
  return strings;
27
27
  }
28
28
 
29
- const cypressHtmlFiles = getCypressHtmlFiles();
29
+ const e2eHtmlFiles = getE2eHtmlFiles();
30
30
 
31
31
  export default defineConfig(({ mode }) => ({
32
32
  base: mode === "gh-pages" ? "/zenuml-core/" : "/",
33
33
  build: {
34
34
  target: "esnext",
35
35
  rollupOptions: {
36
- input: ["index.html", "embed.html", "renderer.html", "test-compression.html", ...cypressHtmlFiles],
36
+ input: ["index.html", "embed.html", "renderer.html", "test-compression.html", ...e2eHtmlFiles],
37
37
  },
38
38
  },
39
39
  resolve: {
@@ -1,32 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
- <title>Self Sync Message at Root</title>
8
- <style>
9
- body {
10
- margin: 0; /* mostly for demo on mobile */
11
- }
12
- </style>
13
- </head>
14
- <body>
15
- <div id="diagram" class="diagram">
16
- <pre class="zenuml" style="margin: 0">
17
- A->A: async
18
- A->B: async
19
- A->C: async
20
- B->B: async
21
- B->C: async
22
- B->A: async
23
- C->C: async
24
- C->B: async
25
- C->A: async
26
- </pre>
27
- </div>
28
-
29
- <!-- built files will be auto injected -->
30
- <script type="module" src="/src/main-cy.ts"></script>
31
- </body>
32
- </html>
@@ -1,46 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
- <title>Self Sync Message at Root</title>
8
- <style>
9
- body {
10
- margin: 0; /* mostly for demo on mobile */
11
- }
12
- </style>
13
- </head>
14
- <body>
15
- <div id="diagram" class="diagram">
16
- <pre class="zenuml" style="margin: 0">
17
- A.method {
18
- A->A: async
19
- A->B: async
20
- A->C: async
21
- B->B: async
22
- B->C: async
23
- B->A: async
24
- C->C: async
25
- C->B: async
26
- C->A: async
27
- B.method {
28
- A->A: async
29
- A->B: async
30
- A->C: async
31
- B->B: async
32
- B->C: async
33
- B->A: async
34
- C->C: async
35
- C->B: async
36
- C->A: async
37
- }
38
- }
39
-
40
- </pre>
41
- </div>
42
-
43
- <!-- built files will be auto injected -->
44
- <script type="module" src="/src/main-cy.ts"></script>
45
- </body>
46
- </html>
@@ -1,41 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
- <title>Self Sync Message at Root</title>
8
- <style>
9
- body {
10
- margin: 0; /* mostly for demo on mobile */
11
- }
12
- </style>
13
- </head>
14
- <body>
15
- <div id="diagram" class="diagram">
16
- <pre class="zenuml" style="margin: 0">
17
- A B C
18
- C.method {
19
- A->C: async
20
- C->A: async
21
- C->B: async
22
- B->C: async
23
- B.method {
24
- A->A: async
25
- A->B: async
26
- A->C: async
27
- B->B: async
28
- B->C: async
29
- B->A: async
30
- C->C: async
31
- C->B: async
32
- C->A: async
33
- }
34
- }
35
- </pre>
36
- </div>
37
-
38
- <!-- built files will be auto injected -->
39
- <script type="module" src="/src/main-cy.ts"></script>
40
- </body>
41
- </html>
@@ -1,28 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
- <title>Creation RTL Layout Test</title>
8
- <style>
9
- body {
10
- margin: 0; /* mostly for demo on mobile */
11
- }
12
- </style>
13
- </head>
14
- <body>
15
- <div id="diagram" class="diagram">
16
- <pre class="zenuml" style="margin: 0">
17
- "b:B"
18
- a1 = A.method() {
19
- // abcde
20
- b = new B()
21
- }</pre
22
- >
23
- </div>
24
- <!-- built files will be auto injected -->
25
- <script type="module" src="/src/main-cy.ts"></script>
26
- </body>
27
- </html>
28
-
@@ -1,40 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
- <title>vue-sequence smoke 1</title>
8
- <style>
9
- body {
10
- margin: 0; /* mostly for demo on mobile */
11
- }
12
- </style>
13
- </head>
14
- <body>
15
- <div id="diagram" class="diagram">
16
- <pre class="zenuml" style="margin: 0">
17
- title Title 1
18
- A.m1 {
19
- new B(1,2,3,4) {
20
- if(x) {
21
- C.m2
22
- }
23
- while(y) {
24
- D.m3
25
- }
26
- par {
27
- E.m4
28
- F.m5
29
- }
30
- opt {
31
- G.m6
32
- }
33
- }
34
- }</pre
35
- >
36
- </div>
37
- <!-- built files will be auto injected -->
38
- <script type="module" src="/src/main-cy.ts"></script>
39
- </body>
40
- </html>
package/cy/demo1.html DELETED
@@ -1,28 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
- <title>Demo1 DSL</title>
8
- <style>
9
- body {
10
- margin: 0;
11
- }
12
- </style>
13
- </head>
14
- <body>
15
- <div id="diagram" class="diagram">
16
- <pre class="zenuml" id="dsl-slot" style="margin: 0"></pre>
17
- </div>
18
-
19
- <script type="module">
20
- import demo1 from "/src/demo1.js";
21
- const target = document.getElementById("dsl-slot");
22
- if (target) {
23
- target.textContent = demo1;
24
- }
25
- </script>
26
- <script type="module" src="/src/main-cy.ts"></script>
27
- </body>
28
- </html>
package/cy/demo3.html DELETED
@@ -1,28 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
- <title>Demo3 DSL</title>
8
- <style>
9
- body {
10
- margin: 0;
11
- }
12
- </style>
13
- </head>
14
- <body>
15
- <div id="diagram" class="diagram">
16
- <pre class="zenuml" id="dsl-slot" style="margin: 0"></pre>
17
- </div>
18
-
19
- <script type="module">
20
- import demo3 from "/src/demo3.js";
21
- const target = document.getElementById("dsl-slot");
22
- if (target) {
23
- target.textContent = demo3;
24
- }
25
- </script>
26
- <script type="module" src="/src/main-cy.ts"></script>
27
- </body>
28
- </html>
package/cy/demo4.html DELETED
@@ -1,28 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
- <title>Demo4 DSL</title>
8
- <style>
9
- body {
10
- margin: 0;
11
- }
12
- </style>
13
- </head>
14
- <body>
15
- <div id="diagram" class="diagram">
16
- <pre class="zenuml" id="dsl-slot" style="margin: 0"></pre>
17
- </div>
18
-
19
- <script type="module">
20
- import demo4 from "/src/demo4.js";
21
- const target = document.getElementById("dsl-slot");
22
- if (target) {
23
- target.textContent = demo4;
24
- }
25
- </script>
26
- <script type="module" src="/src/main-cy.ts"></script>
27
- </body>
28
- </html>