@n42/cli 0.2.79 → 0.2.93
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.
- package/dist/assets/discover.html.template +19 -2
- package/dist/assets/github.svg +33 -0
- package/dist/assets/insomnia.svg +19 -0
- package/dist/assets/validator.html.template +18 -1
- package/dist/assets/wrapper-light.css +54 -0
- package/dist/assets/wrapper.js +54 -0
- package/dist/completion/bash.sh +32 -0
- package/dist/n42 +1 -1
- package/package.json +2 -2
- package/src/assets/discover.html.template +19 -2
- package/src/assets/github.svg +33 -0
- package/src/assets/insomnia.svg +19 -0
- package/src/assets/validator.html.template +18 -1
- package/src/assets/wrapper-light.css +54 -0
- package/src/assets/wrapper.js +54 -0
- package/test/asserts/validate_tests.js +10 -2
- package/dist/assets/assets/discover.html.template +0 -33
- package/dist/assets/assets/discover.js +0 -48
- package/dist/assets/assets/node42-logo.svg +0 -22
- package/dist/assets/assets/validator-light.css +0 -49
- package/dist/assets/assets/validator.html.template +0 -27
- package/dist/assets/assets/wrapper-light.css +0 -203
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@n42/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.93",
|
|
4
4
|
"description": "Node42 CLI – Command-line interface for Peppol eDelivery path discovery, diagnostics, and tooling",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"node42",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"test": "mocha",
|
|
27
27
|
"test:coverage": "c8 --reporter=text-summary --reporter=lcov mocha",
|
|
28
28
|
"test:watch": "mocha --watch",
|
|
29
|
-
"build": "esbuild src/cli.js --bundle --platform=node --target=node20 --outfile=dist/n42 --format=cjs --minify --banner:js='#!/usr/bin/env node' && cp -
|
|
29
|
+
"build": "esbuild src/cli.js --bundle --platform=node --target=node20 --outfile=dist/n42 --format=cjs --minify --banner:js='#!/usr/bin/env node' && mkdir -p dist/assets dist/completion && cp -rf src/assets/* dist/assets && cp -rf src/completion/* dist/completion"
|
|
30
30
|
},
|
|
31
31
|
"prepublishOnly": "npm run build",
|
|
32
32
|
"c8": {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<body>
|
|
9
9
|
<div id="app-header">
|
|
10
10
|
<div class="header-left">
|
|
11
|
-
<img id="appBtn" src="../../assets/node42-logo.svg" alt="Node42"
|
|
11
|
+
<img id="appBtn" src="../../assets/node42-logo.svg" alt="Node42">
|
|
12
12
|
</div>
|
|
13
13
|
<div class="header-right"></div>
|
|
14
14
|
</div>
|
|
@@ -28,6 +28,23 @@
|
|
|
28
28
|
</div>
|
|
29
29
|
</div>
|
|
30
30
|
</div>
|
|
31
|
-
<
|
|
31
|
+
<div id="app-menu" class="app-menu">
|
|
32
|
+
<div class="app-grid">
|
|
33
|
+
<div class="app-tile" title="GitHub" onclick="window.open('https://github.com/node42-dev', '_blank');">
|
|
34
|
+
<div class="icon-box">
|
|
35
|
+
<img src="../../assets/github.svg" class="icon-box-svg" alt="GitHub">
|
|
36
|
+
</div>
|
|
37
|
+
<div class="label">GitHub</div>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="app-tile" title="Insomina Collection" onclick="downloadInsomniaCollection();">
|
|
40
|
+
<div class="icon-box">
|
|
41
|
+
<img src="../../assets/insomnia.svg" class="icon-box-svg" alt="Insomnia">
|
|
42
|
+
</div>
|
|
43
|
+
<div class="label">Insomnia</div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
<script src="../../assets/discover.js" defer></script>
|
|
48
|
+
<script src="../../assets/wrapper.js" defer></script>
|
|
32
49
|
</body>
|
|
33
50
|
</html>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<svg
|
|
3
|
+
width="512"
|
|
4
|
+
height="512"
|
|
5
|
+
viewBox="0 0 512 512"
|
|
6
|
+
fill="none"
|
|
7
|
+
version="1.1"
|
|
8
|
+
id="svg11"
|
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
10
|
+
xmlns:svg="http://www.w3.org/2000/svg">
|
|
11
|
+
<g
|
|
12
|
+
clip-path="url(#clip0_730_27126)"
|
|
13
|
+
id="g4"
|
|
14
|
+
transform="matrix(5.04,0,0,5.04,9.04,16.786544)">
|
|
15
|
+
<path
|
|
16
|
+
d="M 41.4395,69.3848 C 28.8066,67.8535 19.9062,58.7617 19.9062,46.9902 c 0,-4.7851 1.7227,-9.9531 4.5938,-13.3984 -1.2441,-3.1582 -1.0527,-9.8574 0.3828,-12.6328 3.8281,-0.4785 8.9961,1.5312 12.0586,4.3066 3.6367,-1.1484 7.4648,-1.7226 12.1543,-1.7226 4.6895,0 8.5176,0.5742 11.9629,1.6269 2.9668,-2.6797 8.2305,-4.6894 12.0586,-4.2109 1.3398,2.584 1.5312,9.2832 0.2871,12.5371 3.0625,3.6367 4.6894,8.5176 4.6894,13.4941 0,11.7715 -8.9003,20.6719 -21.7246,22.2989 3.2539,2.1054 5.4551,6.6992 5.4551,11.9629 v 9.9531 c 0,2.8711 2.3926,4.498 5.2637,3.3496 C 84.4102,87.9512 98,70.6289 98,49.1914 98,22.1074 75.9883,6.69539e-7 48.9043,4.309e-7 21.8203,1.92261e-7 -1.9479e-7,22.1074 -4.3343e-7,49.1914 -6.20631e-7,70.4375 13.4941,88.0469 31.6777,94.6504 c 2.584,0.957 5.0723,-0.7656 5.0723,-3.3496 v -7.6563 c -1.3398,0.5743 -3.0625,0.9571 -4.5938,0.9571 -6.3164,0 -10.0488,-3.4453 -12.7285,-9.8575 -1.0527,-2.5839 -2.2011,-4.1152 -4.4023,-4.4023 -1.1484,-0.0957 -1.5313,-0.5742 -1.5313,-1.1484 0,-1.1485 1.9141,-2.0098 3.8282,-2.0098 2.7754,0 5.1679,1.7227 7.6562,5.2637 1.9141,2.7754 3.9238,4.0195 6.3164,4.0195 2.3926,0 3.9238,-0.8613 6.125,-3.0625 1.627,-1.627 2.8711,-3.0625 4.0196,-4.0195 z"
|
|
17
|
+
fill="#000000"
|
|
18
|
+
id="path2" />
|
|
19
|
+
</g>
|
|
20
|
+
<defs
|
|
21
|
+
id="defs9">
|
|
22
|
+
<clipPath
|
|
23
|
+
id="clip0_730_27126">
|
|
24
|
+
<rect
|
|
25
|
+
width="98"
|
|
26
|
+
height="96"
|
|
27
|
+
fill="#ffffff"
|
|
28
|
+
id="rect6"
|
|
29
|
+
x="0"
|
|
30
|
+
y="0" />
|
|
31
|
+
</clipPath>
|
|
32
|
+
</defs>
|
|
33
|
+
</svg>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<svg
|
|
3
|
+
fill="#000000"
|
|
4
|
+
width="128"
|
|
5
|
+
height="128"
|
|
6
|
+
viewBox="0 0 24 24"
|
|
7
|
+
role="img"
|
|
8
|
+
version="1.1"
|
|
9
|
+
id="svg6"
|
|
10
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
11
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
|
12
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
13
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
|
14
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
|
15
|
+
<path
|
|
16
|
+
d="M 12,1.17 C 6.0588425,1.17 1.17,6.0588425 1.17,12 1.17,17.941157 6.0588425,22.83 12,22.83 17.941157,22.83 22.83,17.941157 22.83,12 22.83,6.0588425 17.941157,1.17 12,1.17 Z m 0,2.236395 c 4.74354,0 8.593605,3.850065 8.593605,8.593605 0,4.74354 -3.850065,8.593605 -8.593605,8.593605 -4.74354,0 -8.593605,-3.850065 -8.593605,-8.593605 0,-0.798713 0.1083,-1.571253 0.3131675,-2.304985 A 4.2959,4.2959 0 0 0 7.261875,11.55958 4.29951,4.29951 0 0 0 11.55958,7.261875 4.294095,4.294095 0 0 0 9.6941125,3.7195625 8.597215,8.597215 0 0 1 12,3.406395 Z"
|
|
17
|
+
id="path4"
|
|
18
|
+
style="stroke-width:0.9025" />
|
|
19
|
+
</svg>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<body>
|
|
10
10
|
<div id="app-header">
|
|
11
11
|
<div class="header-left">
|
|
12
|
-
<img id="appBtn" src="../../assets/node42-logo.svg" alt="Node42"
|
|
12
|
+
<img id="appBtn" src="../../assets/node42-logo.svg" alt="Node42">
|
|
13
13
|
</div>
|
|
14
14
|
<div class="header-right"></div>
|
|
15
15
|
</div>
|
|
@@ -22,6 +22,23 @@
|
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
|
24
24
|
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div id="app-menu" class="app-menu">
|
|
27
|
+
<div class="app-grid">
|
|
28
|
+
<div class="app-tile" title="GitHub" onclick="window.open('https://github.com/node42-dev', '_blank');">
|
|
29
|
+
<div class="icon-box">
|
|
30
|
+
<img src="../../assets/github.svg" class="icon-box-svg" alt="GitHub">
|
|
31
|
+
</div>
|
|
32
|
+
<div class="label">GitHub</div>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="app-tile" title="Insomina Collection" onclick="downloadInsomniaCollection();">
|
|
35
|
+
<div class="icon-box">
|
|
36
|
+
<img src="../../assets/insomnia.svg" class="icon-box-svg" alt="Insomnia">
|
|
37
|
+
</div>
|
|
38
|
+
<div class="label">Insomnia</div>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
25
41
|
</div>
|
|
42
|
+
<script src="../../assets/wrapper.js" defer></script>
|
|
26
43
|
</body>
|
|
27
44
|
</html>
|
|
@@ -53,6 +53,60 @@ body {
|
|
|
53
53
|
z-index: 100;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
.app-menu {
|
|
57
|
+
position: fixed;
|
|
58
|
+
width: 150px;
|
|
59
|
+
background: #ffffff;
|
|
60
|
+
border-radius: 12px;
|
|
61
|
+
border: 1px solid var(--border);
|
|
62
|
+
padding: 4px 0 0 0;
|
|
63
|
+
box-shadow: 0 2px 8px rgba(0,0,0,.08);
|
|
64
|
+
display: none;
|
|
65
|
+
z-index: 1000;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.app-grid {
|
|
69
|
+
display: grid;
|
|
70
|
+
grid-template-columns: repeat(auto-fit, minmax(48px, 1fr));
|
|
71
|
+
gap: 8px;
|
|
72
|
+
padding: 12px;
|
|
73
|
+
max-width: 260px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.app-tile {
|
|
77
|
+
display: flex;
|
|
78
|
+
flex-direction: column;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: 6px;
|
|
81
|
+
cursor: pointer;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.label {
|
|
85
|
+
font-size: 12px;
|
|
86
|
+
text-align: center;
|
|
87
|
+
color: #222;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.app-tile:hover .icon-box {
|
|
91
|
+
background: var(--brand-soft);
|
|
92
|
+
border: 1px solid var(--brand);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.icon-box {
|
|
96
|
+
width: 48px;
|
|
97
|
+
height: 48px;
|
|
98
|
+
border-radius: 12px;
|
|
99
|
+
border: 1px solid #d0d4d9;
|
|
100
|
+
display: flex;
|
|
101
|
+
align-items: center;
|
|
102
|
+
justify-content: center;
|
|
103
|
+
background: #fff;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.icon-box-svg {
|
|
107
|
+
width: 26px;
|
|
108
|
+
}
|
|
109
|
+
|
|
56
110
|
.header-left {
|
|
57
111
|
gap: 16px;
|
|
58
112
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
let appBtn;
|
|
2
|
+
let appMenu;
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
function placeMenu(menu, btn, offset) {
|
|
6
|
+
menu.style.display = "block";
|
|
7
|
+
|
|
8
|
+
const b = btn.getBoundingClientRect();
|
|
9
|
+
const m = menu.getBoundingClientRect();
|
|
10
|
+
|
|
11
|
+
const openLeft = b.left > window.innerWidth / 2;
|
|
12
|
+
|
|
13
|
+
let left = openLeft
|
|
14
|
+
? b.left - m.width - offset // open LEFT (user menu)
|
|
15
|
+
: b.right + offset; // open RIGHT (settings)
|
|
16
|
+
|
|
17
|
+
left = Math.max(offset, Math.min(left, window.innerWidth - m.width - offset));
|
|
18
|
+
|
|
19
|
+
let top = b.bottom + offset;
|
|
20
|
+
const spaceBelow = window.innerHeight - b.bottom;
|
|
21
|
+
|
|
22
|
+
if (spaceBelow < m.height + (offset + 4) && b.top > m.height + (offset + 4)) {
|
|
23
|
+
top = b.top - m.height - offset;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
top = Math.max(offset, Math.min(top, window.innerHeight - m.height - offset));
|
|
27
|
+
|
|
28
|
+
menu.style.left = `${left}px`;
|
|
29
|
+
menu.style.top = `${top}px`;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function toggleMenu(menu, btn, offset) {
|
|
33
|
+
const isOpen = menu.style.display === "block";
|
|
34
|
+
menu.style.display = isOpen ? "none" : "block";
|
|
35
|
+
if (!isOpen) placeMenu(menu, btn, offset);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function hideMenu(menu) {
|
|
39
|
+
menu.style.display = "none";
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function downloadInsomniaCollection() {
|
|
43
|
+
// Create an invisible link element
|
|
44
|
+
var link = document.createElement('a');
|
|
45
|
+
link.href = 'https://www.node42.dev/insomnia.yaml';
|
|
46
|
+
link.download = 'node42-insomnia.yaml'; // Triggered download filename
|
|
47
|
+
link.click();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
51
|
+
appBtn = document.getElementById("appBtn");
|
|
52
|
+
appMenu = document.getElementById("app-menu");
|
|
53
|
+
appBtn.onclick = () => toggleMenu(appMenu, appBtn, 0);
|
|
54
|
+
});
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
const { execSync } = require("child_process");
|
|
2
2
|
|
|
3
|
+
function hasGlobal(cmd) {
|
|
4
|
+
try {
|
|
5
|
+
execSync(`command -v ${cmd}`, { stdio: "ignore" });
|
|
6
|
+
return true;
|
|
7
|
+
} catch {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
3
12
|
function run(cmd) {
|
|
4
13
|
console.log(`> ${cmd}`);
|
|
5
14
|
return execSync(cmd, { stdio: "pipe" }).toString();
|
|
6
15
|
}
|
|
7
16
|
|
|
8
|
-
|
|
9
|
-
const CLI = process.env.N42_GLOBAL ? "n42" : "npx n42";
|
|
17
|
+
const CLI = hasGlobal("n42") ? "n42" : "npx n42";
|
|
10
18
|
|
|
11
19
|
try {
|
|
12
20
|
// 1. binary exists
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html>
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<title>Node42</title>
|
|
6
|
-
<link rel="stylesheet" href="../../assets/wrapper-light.css">
|
|
7
|
-
</head>
|
|
8
|
-
<body>
|
|
9
|
-
<div id="app-header">
|
|
10
|
-
<div class="header-left">
|
|
11
|
-
<img id="appBtn" src="../../assets/node42-logo.svg" alt="Node42" onclick="window.open('https://www.node42.dev', '_blank');">
|
|
12
|
-
</div>
|
|
13
|
-
<div class="header-right"></div>
|
|
14
|
-
</div>
|
|
15
|
-
<div id="page">
|
|
16
|
-
<div id="app-shell">
|
|
17
|
-
<div id="timeline"></div>
|
|
18
|
-
<div id="bubble" class="bubble" data-uuid="/--UUID--/">
|
|
19
|
-
<!-- SVG -->
|
|
20
|
-
<div class="bubble-time"><!-- TIME --></div>
|
|
21
|
-
<a id="link" class="bubble-link" title="Download discovery PlantUML diagram (SVG)">
|
|
22
|
-
<svg width="24px" height="24px" viewBox="0 0 24 24" fill="none">
|
|
23
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 18V13.5862H6.5V16.5H17.5V13.5862H19V18H5Z" fill="currentColor"/>
|
|
24
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.75 11.1287L14.5253 9.35331L15.586 10.414L12 14L8.41393 10.414L9.47459 9.35331L11.25 11.1287V6H12.75V11.1287Z" fill="currentColor"/>
|
|
25
|
-
</svg>Download
|
|
26
|
-
</a>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
</div>
|
|
31
|
-
<script src="../../assets/discover.js" defer></script>
|
|
32
|
-
</body>
|
|
33
|
-
</html>
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
function formatSvg() {
|
|
2
|
-
const bubble = document.getElementById("bubble");
|
|
3
|
-
const svgEl = bubble.querySelector("svg");
|
|
4
|
-
|
|
5
|
-
if (svgEl) {
|
|
6
|
-
svgEl.removeAttribute("width");
|
|
7
|
-
svgEl.removeAttribute("height");
|
|
8
|
-
svgEl.setAttribute("preserveAspectRatio", "xMidYMid meet");
|
|
9
|
-
svgEl.style.removeProperty('width');
|
|
10
|
-
svgEl.style.removeProperty('height');
|
|
11
|
-
|
|
12
|
-
const svgTitleEl = svgEl.querySelector("title");
|
|
13
|
-
if (svgTitleEl) {
|
|
14
|
-
svgTitleEl.remove();
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function addDownloadLinkListener() {
|
|
20
|
-
const bubble = document.getElementById("bubble");
|
|
21
|
-
const svgEl = bubble.querySelector("svg");
|
|
22
|
-
const svg = new XMLSerializer().serializeToString(svgEl);
|
|
23
|
-
const refId = bubble.dataset.uuid;
|
|
24
|
-
|
|
25
|
-
const linkEl = document.getElementById("link");
|
|
26
|
-
linkEl.addEventListener("click", (e) => {
|
|
27
|
-
e.preventDefault();
|
|
28
|
-
|
|
29
|
-
const blob = new Blob([svg], { type: "image/svg+xml" });
|
|
30
|
-
const url = URL.createObjectURL(blob);
|
|
31
|
-
|
|
32
|
-
const a = document.createElement("a");
|
|
33
|
-
a.href = url;
|
|
34
|
-
a.id = `discovery-${refId}`;
|
|
35
|
-
a.download = `discovery${refId ? "-" + refId : ""}.svg`;
|
|
36
|
-
|
|
37
|
-
document.body.appendChild(a);
|
|
38
|
-
a.click();
|
|
39
|
-
document.body.removeChild(a);
|
|
40
|
-
|
|
41
|
-
URL.revokeObjectURL(url);
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
document.addEventListener("DOMContentLoaded", () => {
|
|
46
|
-
formatSvg();
|
|
47
|
-
addDownloadLinkListener();
|
|
48
|
-
});
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
-
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
3
|
-
|
|
4
|
-
<svg
|
|
5
|
-
version="1.1"
|
|
6
|
-
id="svg2"
|
|
7
|
-
width="512"
|
|
8
|
-
height="512"
|
|
9
|
-
viewBox="0 0 512 512"
|
|
10
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
11
|
-
xmlns:svg="http://www.w3.org/2000/svg">
|
|
12
|
-
<defs
|
|
13
|
-
id="defs6" />
|
|
14
|
-
<g
|
|
15
|
-
id="g8"
|
|
16
|
-
style="fill:#800000">
|
|
17
|
-
<path
|
|
18
|
-
style="fill:#1f2933;stroke-width:0.912989;fill-opacity:1"
|
|
19
|
-
d="m 250.68278,504.43224 c -6.75028,-0.86235 -10.40179,-2.51239 -26.3886,-11.92466 -7.18686,-4.23127 -22.51642,-13.16255 -34.06573,-19.84729 -17.61184,-10.1937 -90.544282,-52.7204 -115.949676,-67.60997 -4.017154,-2.35436 -11.743692,-6.86653 -17.170137,-10.02703 -16.284811,-9.4848 -23.240148,-18.04125 -25.20828,-31.01095 -1.118138,-7.36878 -1.234179,-204.26795 -0.126175,-214.14802 1.591615,-14.19281 8.942732,-23.64927 26.074433,-33.542 5.521577,-3.18841 16.612757,-9.63032 24.647065,-14.31534 8.034307,-4.685016 16.867478,-9.829712 19.62928,-11.432657 17.1769,-9.969498 73.75066,-42.991708 84.45153,-49.294531 47.47308,-27.961746 51.8264,-30.43697 56.37802,-32.055582 2.13356,-0.7587307 7.16605,-1.6087879 11.18321,-1.8890209 8.43903,-0.5887139 15.57532,1.3129793 24.19422,6.4473399 11.55324,6.882426 111.15984,65.007391 126.44904,73.788753 6.52788,3.749301 15.97732,9.214337 20.99877,12.144522 5.02144,2.930186 15.69117,9.125136 23.71051,13.766556 8.52175,4.9322 16.48887,10.2859 19.17278,12.88365 5.33504,5.16375 9.89879,13.28156 11.34032,20.17152 0.70738,3.3811 1.00748,36.23792 0.99634,109.10225 -0.0173,113.56626 0.0429,112.1513 -5.14415,121.02986 -4.93927,8.45458 -10.50629,12.50751 -43.35365,31.56272 -17.25514,10.00989 -39.58978,22.99615 -49.63267,28.85833 -10.04288,5.86218 -22.16282,12.91081 -26.93319,15.66363 -4.77036,2.75282 -24.69636,14.37995 -44.27999,25.83807 -19.58362,11.45813 -37.80671,21.84456 -40.49573,23.08097 -5.83374,2.6824 -13.25232,3.68189 -20.47754,2.75888 z m 14.85899,-29.89157 c 2.26422,-1.42476 15.20959,-9.0542 28.76748,-16.95432 13.5579,-7.90012 28.1429,-16.42086 32.41113,-18.93499 4.26823,-2.51413 10.4309,-6.11089 13.69484,-7.99281 3.26394,-1.88191 11.89169,-6.91401 19.17279,-11.18242 7.28109,-4.26842 21.24982,-12.40258 31.04164,-18.0759 53.01967,-30.71936 58.89622,-34.32123 60.94205,-37.3528 l 2.05422,-3.04409 -0.0155,-104.63052 -0.0146,-104.63054 -2.03926,-3.52865 c -1.67451,-2.89764 -4.56978,-4.99685 -16.1905,-11.73906 -7.78324,-4.51573 -20.31402,-11.7971 -27.84618,-16.1808 -7.53217,-4.38371 -23.14428,-13.44247 -34.6936,-20.13058 C 361.27694,93.475073 335.39369,78.371241 315.30792,66.599109 295.22215,54.826977 274.54248,42.706959 269.35314,39.665745 257.47369,32.703707 254.7286,32.500567 245.65467,37.91202 c -3.36875,2.008997 -17.01228,9.996331 -30.3191,17.749611 -13.30683,7.75329 -30.3569,17.719374 -37.88907,22.146844 -7.53216,4.427469 -19.44667,11.391863 -26.47669,15.476414 -88.881545,51.641631 -89.2094,51.842921 -90.999955,55.875931 -1.619188,3.6468 -1.681179,8.27351 -1.451745,108.35075 0.23966,104.52557 0.240025,104.54166 2.153377,107.11876 1.073676,1.44611 8.888227,6.62152 17.803296,11.7907 8.739318,5.06728 45.675957,26.59849 82.081407,47.84713 73.96101,43.1686 89.06095,51.89982 91.7382,53.04588 2.93773,1.25756 8.78762,0.0329 13.24729,-2.77337 z m -28.29436,-75.06372 c -7.2811,-3.52372 -17.34681,-8.2419 -22.36825,-10.48486 -10.24337,-4.57547 -13.7466,-7.39987 -15.06505,-12.14599 -0.53337,-1.91984 -0.90422,-20.32266 -0.90724,-45.01664 l -0.009,-41.76926 h -55.28124 c -60.895308,0 -59.490583,0.12764 -61.482452,-5.58644 -1.409747,-4.0439 -1.3861,-60.58499 0.02739,-64.80577 1.678074,-5.01204 4.780869,-8.45119 12.83736,-14.22883 37.757152,-27.07736 65.494042,-46.8543 111.203142,-79.28991 5.77465,-4.09776 16.25122,-11.54944 23.28122,-16.55931 31.1481,-22.197349 31.90278,-22.648895 37.6947,-22.554255 4.14971,0.06783 7.6418,1.108571 17.08468,5.091788 6.52787,2.753613 17.10713,7.203213 23.50947,9.887997 6.40234,2.68479 11.64062,5.17413 11.64062,5.53185 0,0.35772 -2.15695,2.08594 -4.7932,3.84051 -5.48095,3.64782 -50.20301,34.30436 -61.85504,42.40107 -4.26823,2.96588 -18.76276,12.96271 -32.2099,22.2152 -13.44724,9.25249 -35.63289,24.59365 -49.30143,34.09147 -13.66865,9.49782 -26.50218,18.39808 -28.51907,19.77836 -6.05585,4.14437 -6.98975,5.6617 -7.51536,12.21021 l -0.47995,5.97854 h 32.07962 32.07971 l 0.0676,-18.48804 c 0.0375,-10.16842 0.34529,-20.28648 0.68474,-22.48456 l 0.61709,-3.99652 25.44192,-17.23049 c 13.9931,-9.47677 25.59949,-17.23048 25.79195,-17.23048 0.19254,0 0.35003,17.8625 0.35003,39.69445 v 39.69444 l 16.35493,0.24884 16.35502,0.24885 -12.92501,10.04288 c -12.04625,9.36017 -13.14256,10.471 -16.12668,16.34057 l -3.20175,6.29768 -0.25848,62.40478 c -0.14214,34.32263 -0.55298,62.37639 -0.91298,62.3417 -0.35999,-0.0347 -6.61177,-2.94611 -13.89286,-6.46983 z m 33.78061,-83.68734 c 0,-27.3488 0.63005,-31.48088 5.67669,-37.22868 3.31416,-3.77461 1.63736,-2.67278 50.92866,-33.46574 20.83898,-13.01842 39.11767,-24.87028 40.61945,-26.33749 2.45247,-2.39614 2.73121,-3.24747 2.73897,-8.36483 l 0.009,-5.6972 -48.63422,-0.23626 -48.63412,-0.23626 0.24568,-20.306 0.24578,-20.30601 h 71.21318 c 80.74068,0 75.84852,-0.4478 80.42525,7.36184 l 2.30237,3.92877 -0.27928,26.76582 c -0.26541,25.42998 -0.37798,26.94809 -2.25618,30.41778 -2.83922,5.24508 -7.70764,9.47403 -18.10888,15.73043 -5.02143,3.02042 -15.29257,9.35994 -22.82473,14.08782 -7.53216,4.7279 -23.8556,14.94877 -36.27426,22.71308 -12.41867,7.7643 -22.58709,14.42505 -22.59649,14.80165 -0.009,0.37661 23.19568,0.68474 51.56683,0.68474 28.37115,0 51.59541,0.30814 51.60956,0.68475 0.0137,0.3766 -1.29535,9.4152 -2.91006,20.08577 l -2.93571,19.40102 h -76.0636 -76.06352 z"
|
|
20
|
-
id="path170" />
|
|
21
|
-
</g>
|
|
22
|
-
</svg>
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
#xmldata {
|
|
2
|
-
background: #fff;
|
|
3
|
-
padding: 6px 12px 6px 10px;
|
|
4
|
-
color: #9ca3af;
|
|
5
|
-
font-family: monospace;
|
|
6
|
-
white-space: pre-wrap;
|
|
7
|
-
overflow-x: auto;
|
|
8
|
-
cursor: default;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
.xml-info0 {
|
|
12
|
-
background: #e5e7eb;
|
|
13
|
-
color: #374151;
|
|
14
|
-
border-left: 4px solid #9ca3af;
|
|
15
|
-
padding-left: 2px;
|
|
16
|
-
cursor: pointer;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.xml-info1 {
|
|
20
|
-
background: #e0f2fe;
|
|
21
|
-
color: #111827;
|
|
22
|
-
border-left: 4px solid #38bdf8;
|
|
23
|
-
padding-left: 2px;
|
|
24
|
-
cursor: pointer;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.xml-info2 {
|
|
28
|
-
background: #f3e8ff;
|
|
29
|
-
color: #111827;
|
|
30
|
-
border-left: 4px solid #a855f7;
|
|
31
|
-
padding-left: 2px;
|
|
32
|
-
cursor: pointer;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.xml-warning {
|
|
36
|
-
background: #fef3c7;
|
|
37
|
-
color: #111827;
|
|
38
|
-
border-left: 4px solid #f59e0b;
|
|
39
|
-
padding-left: 2px;
|
|
40
|
-
cursor: pointer;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.xml-error {
|
|
44
|
-
background: #fee2e2;
|
|
45
|
-
color: #111827;
|
|
46
|
-
border-left: 4px solid #dc2626;
|
|
47
|
-
padding-left: 2px;
|
|
48
|
-
cursor: pointer;
|
|
49
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html>
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<title>Node42</title>
|
|
6
|
-
<link rel="stylesheet" href="../../assets/wrapper-light.css">
|
|
7
|
-
<link rel="stylesheet" href="../../assets/validator-light.css">
|
|
8
|
-
</head>
|
|
9
|
-
<body>
|
|
10
|
-
<div id="app-header">
|
|
11
|
-
<div class="header-left">
|
|
12
|
-
<img id="appBtn" src="../../assets/node42-logo.svg" alt="Node42" onclick="window.open('https://www.node42.dev', '_blank');">
|
|
13
|
-
</div>
|
|
14
|
-
<div class="header-right"></div>
|
|
15
|
-
</div>
|
|
16
|
-
<div id="page">
|
|
17
|
-
<div id="app-shell">
|
|
18
|
-
<div id="timeline"></div>
|
|
19
|
-
<div id="bubble" class="bubble" data-uuid="/--UUID--/">
|
|
20
|
-
<div id="xmldata"><!-- XML --></div>
|
|
21
|
-
<div class="bubble-time"><!-- TIME --></div>
|
|
22
|
-
</div>
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
</body>
|
|
27
|
-
</html>
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--bg: transparent;
|
|
3
|
-
--card: #ffffff;
|
|
4
|
-
--border: #e5e7eb;
|
|
5
|
-
--border-soft: #f1f5f9;
|
|
6
|
-
--border-strong: #d1d5db;
|
|
7
|
-
--text-light: #9ca3af;
|
|
8
|
-
--text: #111827;
|
|
9
|
-
--muted: #6b7280;
|
|
10
|
-
--brand-soft: #eaf3ff; /* Soft, light blue */
|
|
11
|
-
--brand: #3f9cff; /* Main brand color */
|
|
12
|
-
--brand-strong: #0b3a82; /* Strong blue for contrast */
|
|
13
|
-
--brand-hover: #1e6fd0; /* Slightly darker hover state */
|
|
14
|
-
--brand-active: #1666c1; /* Active state */
|
|
15
|
-
--brand-button: #1d72d2; /* Darker shade of the brand color */
|
|
16
|
-
--shadow-soft: 0 2px 4px rgba(0, 0, 0, 0.04);
|
|
17
|
-
--shadow-form: 0 3px 8px rgba(0, 0, 0, 0.05);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
body {
|
|
21
|
-
margin: 0;
|
|
22
|
-
height: 100vh;
|
|
23
|
-
background: #fff;
|
|
24
|
-
font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
|
|
25
|
-
overflow-y: auto;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
#page {
|
|
29
|
-
min-height: calc(100vh - 56px);
|
|
30
|
-
display: flex;
|
|
31
|
-
justify-content: center;
|
|
32
|
-
padding-top: 32px;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
#app-shell {
|
|
36
|
-
width: 100%;
|
|
37
|
-
max-width: 1450px;
|
|
38
|
-
height: 100%;
|
|
39
|
-
display: flex;
|
|
40
|
-
flex-direction: column;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
#app-header {
|
|
44
|
-
height: 62px;
|
|
45
|
-
display: flex;
|
|
46
|
-
justify-content: space-between;
|
|
47
|
-
align-items: center;
|
|
48
|
-
padding: 0 16px;
|
|
49
|
-
position: fixed;
|
|
50
|
-
top: 0;
|
|
51
|
-
left: 0;
|
|
52
|
-
right: 0;
|
|
53
|
-
z-index: 100;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.header-left {
|
|
57
|
-
gap: 16px;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.header-right {
|
|
61
|
-
gap: 16px;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
#appBtn {
|
|
65
|
-
display: flex;
|
|
66
|
-
width: 34px;
|
|
67
|
-
height: 34px;
|
|
68
|
-
cursor: pointer;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
#timeline {
|
|
72
|
-
flex: 1;
|
|
73
|
-
overflow-y: auto;
|
|
74
|
-
padding: 24px 16px 24px 16px;
|
|
75
|
-
background: var(--bg);
|
|
76
|
-
min-height: 0; /* for flex scroll containers */
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.bubble {
|
|
80
|
-
position: relative;
|
|
81
|
-
background: #ffffff;
|
|
82
|
-
border-radius: 12px;
|
|
83
|
-
padding: 16px;
|
|
84
|
-
margin-bottom: 64px;
|
|
85
|
-
border: 1px solid var(--border);
|
|
86
|
-
}
|
|
87
|
-
.bubble.info {
|
|
88
|
-
width: 50%;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.bubble svg {
|
|
92
|
-
width: 100%;
|
|
93
|
-
height: auto;
|
|
94
|
-
max-width: 100%;
|
|
95
|
-
display: block;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
.bubble-title {
|
|
99
|
-
font-size: 17px;
|
|
100
|
-
font-weight: 600;
|
|
101
|
-
margin-bottom: 2px;
|
|
102
|
-
text-align: center;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.bubble-time {
|
|
106
|
-
position: absolute;
|
|
107
|
-
bottom: -24px;
|
|
108
|
-
left: 10px;
|
|
109
|
-
font-size: 0.65rem;
|
|
110
|
-
color: var(--text-light);
|
|
111
|
-
cursor: pointer;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
.bubble-time:hover {
|
|
115
|
-
color: var(--text);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.bubble-link {
|
|
119
|
-
position: absolute;
|
|
120
|
-
bottom: 14px;
|
|
121
|
-
right: 21px;
|
|
122
|
-
display: inline-flex;
|
|
123
|
-
align-items: center;
|
|
124
|
-
gap: 2px;
|
|
125
|
-
font-size: 0.7rem;
|
|
126
|
-
text-decoration: none;
|
|
127
|
-
color: var(--text-light);
|
|
128
|
-
cursor: pointer;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.bubble-link svg {
|
|
132
|
-
width: 24px;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.bubble-link:hover {
|
|
136
|
-
color: var(--text);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
.bubble-close {
|
|
140
|
-
position: absolute;
|
|
141
|
-
top: 10px;
|
|
142
|
-
right: 10px;
|
|
143
|
-
border: none;
|
|
144
|
-
background: #f6f6f6;
|
|
145
|
-
border-radius: 999px;
|
|
146
|
-
padding: 4px;
|
|
147
|
-
cursor: pointer;
|
|
148
|
-
line-height: 1;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
.material-icons.bubble-close {
|
|
152
|
-
font-size: 14px;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
.bubble-close:hover {
|
|
156
|
-
background: #fee2e2;;
|
|
157
|
-
color: #991b1b;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
.bubble-info {
|
|
161
|
-
display: flex;
|
|
162
|
-
gap: 8px;
|
|
163
|
-
align-items: flex-start;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
.bubble-info-icon {
|
|
167
|
-
font-size: 20px;
|
|
168
|
-
line-height: 1;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
.bubble-info-icon.error {
|
|
172
|
-
color: #ef4444;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
.bubble-info-icon.warning {
|
|
176
|
-
color: #f59e0b;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
.bubble-info-icon.info {
|
|
180
|
-
color: #1f7fe5;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
.bubble-info-header {
|
|
184
|
-
font-weight: 600;
|
|
185
|
-
margin-bottom: 2px;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
.bubble-info-body {
|
|
189
|
-
font-size: 0.9rem;
|
|
190
|
-
line-height: 1.3;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
.bubble-info-body a {
|
|
194
|
-
color: var(--text);
|
|
195
|
-
font-weight: 600;
|
|
196
|
-
text-decoration: underline;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
.bubble-info-body a:hover {
|
|
200
|
-
color: var(--brand-active);
|
|
201
|
-
font-weight: 600;
|
|
202
|
-
text-decoration: none;
|
|
203
|
-
}
|