@galaxy-tool-util/gxwf-web 0.0.0 → 1.0.0
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/app.d.ts +4 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +3 -2
- package/dist/app.js.map +1 -1
- package/dist/bin/gxwf-web.js +13 -3
- package/dist/bin/gxwf-web.js.map +1 -1
- package/dist/router.d.ts +4 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +46 -2
- package/dist/router.js.map +1 -1
- package/package.json +4 -4
- package/public/assets/codicon-B9QaMa0V.ttf +0 -0
- package/public/assets/iconv-lite-umd-B_p9IM1r.js +6 -0
- package/public/assets/index-BuA7-9w3.js +4768 -0
- package/public/assets/index-CWluWhm0.css +1 -0
- package/public/assets/jschardet-CGqe33Rd.js +11 -0
- package/public/assets/webWorkerExtensionHostIframe-HMCkMutH.html +156 -0
- package/public/index.html +2 -2
- package/public/monaco/webWorkerExtensionHostIframe.html +156 -0
- package/public/assets/index-DgcQmTAM.css +0 -1
- package/public/assets/index-DsYOTNI9.js +0 -3595
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Security-Policy" content="
|
|
5
|
+
default-src 'none';
|
|
6
|
+
child-src 'self' data: blob:;
|
|
7
|
+
script-src 'self' 'unsafe-eval' 'sha256-YenIR0w2uOJMq12UhbL15PlQWd7gf4v3ThVTe/nvZZE=' data: extension-file: https: http://localhost:* blob:;
|
|
8
|
+
connect-src 'self' data: extension-file: https: wss: http://localhost:* http://127.0.0.1:* ws://localhost:* ws://127.0.0.1:*;"/>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<script>
|
|
12
|
+
(function () {
|
|
13
|
+
const searchParams = new URL(document.location.href).searchParams;
|
|
14
|
+
const vscodeWebWorkerExtHostId = searchParams.get('vscodeWebWorkerExtHostId') || '';
|
|
15
|
+
const name = searchParams.get('debugged') ? 'DebugExtensionHostWorker' : 'ExtensionHostWorker';
|
|
16
|
+
const parentOrigin = searchParams.get('parentOrigin') || window.origin;
|
|
17
|
+
const salt = searchParams.get('salt');
|
|
18
|
+
|
|
19
|
+
(async function () {
|
|
20
|
+
const hostnameValidationMarker = 'v--';
|
|
21
|
+
const hostname = location.hostname;
|
|
22
|
+
if (!hostname.startsWith(hostnameValidationMarker)) {
|
|
23
|
+
// validation not requested
|
|
24
|
+
return start();
|
|
25
|
+
}
|
|
26
|
+
if (!crypto.subtle) {
|
|
27
|
+
// cannot validate, not running in a secure context
|
|
28
|
+
return sendError(new Error(`Cannot validate in current context!`));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Here the `parentOriginHash()` function from `src/vs/base/browser/iframe.ts` is inlined
|
|
32
|
+
// compute a sha-256 composed of `parentOrigin` and `salt` converted to base 32
|
|
33
|
+
/** @type {string} */
|
|
34
|
+
let parentOriginHash;
|
|
35
|
+
try {
|
|
36
|
+
const strData = JSON.stringify({ parentOrigin, salt });
|
|
37
|
+
const encoder = new TextEncoder();
|
|
38
|
+
const arrData = encoder.encode(strData);
|
|
39
|
+
const hash = await crypto.subtle.digest('sha-256', arrData);
|
|
40
|
+
const hashArray = Array.from(new Uint8Array(hash));
|
|
41
|
+
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
|
42
|
+
// sha256 has 256 bits, so we need at most ceil(lg(2^256-1)/lg(32)) = 52 chars to represent it in base 32
|
|
43
|
+
parentOriginHash = BigInt(`0x${hashHex}`).toString(32).padStart(52, '0');
|
|
44
|
+
} catch (err) {
|
|
45
|
+
return sendError(err instanceof Error ? err : new Error(String(err)));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const requiredSubdomain = `${hostnameValidationMarker}${parentOriginHash}.`;
|
|
49
|
+
if (hostname.substring(0, requiredSubdomain.length) === requiredSubdomain) {
|
|
50
|
+
// validation succeeded!
|
|
51
|
+
return start();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return sendError(new Error(`Expected '${requiredSubdomain}' as subdomain!`));
|
|
55
|
+
})();
|
|
56
|
+
|
|
57
|
+
function sendError(error) {
|
|
58
|
+
window.parent.postMessage({
|
|
59
|
+
vscodeWebWorkerExtHostId,
|
|
60
|
+
error: {
|
|
61
|
+
name: error ? error.name : '',
|
|
62
|
+
message: error ? error.message : '',
|
|
63
|
+
stack: error ? error.stack : []
|
|
64
|
+
}
|
|
65
|
+
}, '*');
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function start() {
|
|
69
|
+
|
|
70
|
+
// Before we can load the worker, we need to get the current set of NLS
|
|
71
|
+
// configuration into this iframe. We ask the parent window to send it
|
|
72
|
+
// together with the necessary information to load the worker via Blob.
|
|
73
|
+
|
|
74
|
+
const bootstrapNlsType = 'vscode.bootstrap.nls';
|
|
75
|
+
|
|
76
|
+
self.onmessage = (event) => {
|
|
77
|
+
if (event.origin !== parentOrigin || event.data.type !== bootstrapNlsType) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const { data } = event.data;
|
|
81
|
+
createWorker(data.workerUrl, data.workerOptions, data.fileRoot, data.nls.messages, data.nls.language);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
window.parent.postMessage({
|
|
85
|
+
vscodeWebWorkerExtHostId,
|
|
86
|
+
type: bootstrapNlsType
|
|
87
|
+
}, '*');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function createWorker(workerUrl, workerOptions, fileRoot, nlsMessages, nlsLanguage) {
|
|
91
|
+
try {
|
|
92
|
+
if (globalThis.crossOriginIsolated) {
|
|
93
|
+
workerUrl += '?vscode-coi=2'; // COEP
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// In below blob code, we are using JSON.stringify to ensure the passed
|
|
97
|
+
// in values are not breaking our script. The values may contain string
|
|
98
|
+
// terminating characters (such as ' or ").
|
|
99
|
+
|
|
100
|
+
const blob = new Blob([[
|
|
101
|
+
`/*extensionHostWorker*/`,
|
|
102
|
+
`globalThis._VSCODE_NLS_MESSAGES = ${JSON.stringify(nlsMessages)};`,
|
|
103
|
+
`globalThis._VSCODE_NLS_LANGUAGE = ${JSON.stringify(nlsLanguage)};`,
|
|
104
|
+
`globalThis._VSCODE_FILE_ROOT = ${JSON.stringify(fileRoot)};`,
|
|
105
|
+
(workerOptions?.type === 'module') ? `await import('${workerUrl}');` : `importScripts('${workerUrl}');`,
|
|
106
|
+
`/*extensionHostWorker*/`
|
|
107
|
+
].join('')], { type: 'application/javascript' });
|
|
108
|
+
|
|
109
|
+
const worker = new Worker(URL.createObjectURL(blob), { name, ...workerOptions });
|
|
110
|
+
const nestedWorkers = new Map();
|
|
111
|
+
|
|
112
|
+
worker.onmessage = (event) => {
|
|
113
|
+
const { data } = event;
|
|
114
|
+
|
|
115
|
+
if (data?.type === '_newWorker') {
|
|
116
|
+
const { id, port, url, options } = data;
|
|
117
|
+
const newWorker = new Worker(url, options);
|
|
118
|
+
newWorker.postMessage(port, [port]);
|
|
119
|
+
newWorker.onerror = console.error.bind(console);
|
|
120
|
+
nestedWorkers.set(id, newWorker);
|
|
121
|
+
|
|
122
|
+
} else if (data?.type === '_terminateWorker') {
|
|
123
|
+
const { id } = data;
|
|
124
|
+
if (nestedWorkers.has(id)) {
|
|
125
|
+
nestedWorkers.get(id).terminate();
|
|
126
|
+
nestedWorkers.delete(id);
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
worker.onerror = console.error.bind(console);
|
|
130
|
+
window.parent.postMessage({
|
|
131
|
+
vscodeWebWorkerExtHostId,
|
|
132
|
+
data
|
|
133
|
+
}, parentOrigin, [data]);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
worker.onerror = (event) => {
|
|
138
|
+
console.error(event.message, event.error);
|
|
139
|
+
sendError(event.error);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
self.onmessage = (event) => {
|
|
143
|
+
if (event.origin !== parentOrigin) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
worker.postMessage(event.data, event.ports);
|
|
147
|
+
};
|
|
148
|
+
} catch (err) {
|
|
149
|
+
console.error(err);
|
|
150
|
+
sendError(err);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
})();
|
|
154
|
+
</script>
|
|
155
|
+
</body>
|
|
156
|
+
</html>
|
package/public/index.html
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>GXWF — Galaxy Workflow Development</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-BuA7-9w3.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CWluWhm0.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="app"></div>
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Security-Policy" content="
|
|
5
|
+
default-src 'none';
|
|
6
|
+
child-src 'self' data: blob:;
|
|
7
|
+
script-src 'self' 'unsafe-eval' 'sha256-YenIR0w2uOJMq12UhbL15PlQWd7gf4v3ThVTe/nvZZE=' data: extension-file: https: http://localhost:* blob:;
|
|
8
|
+
connect-src 'self' blob: data: extension-file: https: wss: http://localhost:* http://127.0.0.1:* ws://localhost:* ws://127.0.0.1:*;"/>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<script>
|
|
12
|
+
(function () {
|
|
13
|
+
const searchParams = new URL(document.location.href).searchParams;
|
|
14
|
+
const vscodeWebWorkerExtHostId = searchParams.get('vscodeWebWorkerExtHostId') || '';
|
|
15
|
+
const name = searchParams.get('debugged') ? 'DebugExtensionHostWorker' : 'ExtensionHostWorker';
|
|
16
|
+
const parentOrigin = searchParams.get('parentOrigin') || window.origin;
|
|
17
|
+
const salt = searchParams.get('salt');
|
|
18
|
+
|
|
19
|
+
(async function () {
|
|
20
|
+
const hostnameValidationMarker = 'v--';
|
|
21
|
+
const hostname = location.hostname;
|
|
22
|
+
if (!hostname.startsWith(hostnameValidationMarker)) {
|
|
23
|
+
// validation not requested
|
|
24
|
+
return start();
|
|
25
|
+
}
|
|
26
|
+
if (!crypto.subtle) {
|
|
27
|
+
// cannot validate, not running in a secure context
|
|
28
|
+
return sendError(new Error(`Cannot validate in current context!`));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Here the `parentOriginHash()` function from `src/vs/base/browser/iframe.ts` is inlined
|
|
32
|
+
// compute a sha-256 composed of `parentOrigin` and `salt` converted to base 32
|
|
33
|
+
/** @type {string} */
|
|
34
|
+
let parentOriginHash;
|
|
35
|
+
try {
|
|
36
|
+
const strData = JSON.stringify({ parentOrigin, salt });
|
|
37
|
+
const encoder = new TextEncoder();
|
|
38
|
+
const arrData = encoder.encode(strData);
|
|
39
|
+
const hash = await crypto.subtle.digest('sha-256', arrData);
|
|
40
|
+
const hashArray = Array.from(new Uint8Array(hash));
|
|
41
|
+
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
|
42
|
+
// sha256 has 256 bits, so we need at most ceil(lg(2^256-1)/lg(32)) = 52 chars to represent it in base 32
|
|
43
|
+
parentOriginHash = BigInt(`0x${hashHex}`).toString(32).padStart(52, '0');
|
|
44
|
+
} catch (err) {
|
|
45
|
+
return sendError(err instanceof Error ? err : new Error(String(err)));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const requiredSubdomain = `${hostnameValidationMarker}${parentOriginHash}.`;
|
|
49
|
+
if (hostname.substring(0, requiredSubdomain.length) === requiredSubdomain) {
|
|
50
|
+
// validation succeeded!
|
|
51
|
+
return start();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return sendError(new Error(`Expected '${requiredSubdomain}' as subdomain!`));
|
|
55
|
+
})();
|
|
56
|
+
|
|
57
|
+
function sendError(error) {
|
|
58
|
+
window.parent.postMessage({
|
|
59
|
+
vscodeWebWorkerExtHostId,
|
|
60
|
+
error: {
|
|
61
|
+
name: error ? error.name : '',
|
|
62
|
+
message: error ? error.message : '',
|
|
63
|
+
stack: error ? error.stack : []
|
|
64
|
+
}
|
|
65
|
+
}, '*');
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function start() {
|
|
69
|
+
|
|
70
|
+
// Before we can load the worker, we need to get the current set of NLS
|
|
71
|
+
// configuration into this iframe. We ask the parent window to send it
|
|
72
|
+
// together with the necessary information to load the worker via Blob.
|
|
73
|
+
|
|
74
|
+
const bootstrapNlsType = 'vscode.bootstrap.nls';
|
|
75
|
+
|
|
76
|
+
self.onmessage = (event) => {
|
|
77
|
+
if (event.origin !== parentOrigin || event.data.type !== bootstrapNlsType) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const { data } = event.data;
|
|
81
|
+
createWorker(data.workerUrl, data.workerOptions, data.fileRoot, data.nls.messages, data.nls.language);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
window.parent.postMessage({
|
|
85
|
+
vscodeWebWorkerExtHostId,
|
|
86
|
+
type: bootstrapNlsType
|
|
87
|
+
}, '*');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function createWorker(workerUrl, workerOptions, fileRoot, nlsMessages, nlsLanguage) {
|
|
91
|
+
try {
|
|
92
|
+
if (globalThis.crossOriginIsolated) {
|
|
93
|
+
workerUrl += '?vscode-coi=2'; // COEP
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// In below blob code, we are using JSON.stringify to ensure the passed
|
|
97
|
+
// in values are not breaking our script. The values may contain string
|
|
98
|
+
// terminating characters (such as ' or ").
|
|
99
|
+
|
|
100
|
+
const blob = new Blob([[
|
|
101
|
+
`/*extensionHostWorker*/`,
|
|
102
|
+
`globalThis._VSCODE_NLS_MESSAGES = ${JSON.stringify(nlsMessages)};`,
|
|
103
|
+
`globalThis._VSCODE_NLS_LANGUAGE = ${JSON.stringify(nlsLanguage)};`,
|
|
104
|
+
`globalThis._VSCODE_FILE_ROOT = ${JSON.stringify(fileRoot)};`,
|
|
105
|
+
(workerOptions?.type === 'module') ? `await import('${workerUrl}');` : `importScripts('${workerUrl}');`,
|
|
106
|
+
`/*extensionHostWorker*/`
|
|
107
|
+
].join('')], { type: 'application/javascript' });
|
|
108
|
+
|
|
109
|
+
const worker = new Worker(URL.createObjectURL(blob), { name, ...workerOptions });
|
|
110
|
+
const nestedWorkers = new Map();
|
|
111
|
+
|
|
112
|
+
worker.onmessage = (event) => {
|
|
113
|
+
const { data } = event;
|
|
114
|
+
|
|
115
|
+
if (data?.type === '_newWorker') {
|
|
116
|
+
const { id, port, url, options } = data;
|
|
117
|
+
const newWorker = new Worker(url, options);
|
|
118
|
+
newWorker.postMessage(port, [port]);
|
|
119
|
+
newWorker.onerror = console.error.bind(console);
|
|
120
|
+
nestedWorkers.set(id, newWorker);
|
|
121
|
+
|
|
122
|
+
} else if (data?.type === '_terminateWorker') {
|
|
123
|
+
const { id } = data;
|
|
124
|
+
if (nestedWorkers.has(id)) {
|
|
125
|
+
nestedWorkers.get(id).terminate();
|
|
126
|
+
nestedWorkers.delete(id);
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
worker.onerror = console.error.bind(console);
|
|
130
|
+
window.parent.postMessage({
|
|
131
|
+
vscodeWebWorkerExtHostId,
|
|
132
|
+
data
|
|
133
|
+
}, parentOrigin, [data]);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
worker.onerror = (event) => {
|
|
138
|
+
console.error(event.message, event.error);
|
|
139
|
+
sendError(event.error);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
self.onmessage = (event) => {
|
|
143
|
+
if (event.origin !== parentOrigin) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
worker.postMessage(event.data, event.ports);
|
|
147
|
+
};
|
|
148
|
+
} catch (err) {
|
|
149
|
+
console.error(err);
|
|
150
|
+
sendError(err);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
})();
|
|
154
|
+
</script>
|
|
155
|
+
</body>
|
|
156
|
+
</html>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@font-face{font-family:primeicons;font-display:block;src:url(/assets/primeicons-DMOk5skT.eot);src:url(/assets/primeicons-DMOk5skT.eot?#iefix) format("embedded-opentype"),url(/assets/primeicons-C6QP2o4f.woff2) format("woff2"),url(/assets/primeicons-WjwUDZjB.woff) format("woff"),url(/assets/primeicons-MpK4pl85.ttf) format("truetype"),url(/assets/primeicons-Dr5RGzOO.svg?#primeicons) format("svg");font-weight:400;font-style:normal}.pi{font-family:primeicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.pi:before{--webkit-backface-visibility:hidden;backface-visibility:hidden}.pi-fw{width:1.28571429em;text-align:center}.pi-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@media(prefers-reduced-motion:reduce){.pi-spin{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.pi-folder-plus:before{content:""}.pi-receipt:before{content:""}.pi-asterisk:before{content:""}.pi-face-smile:before{content:""}.pi-pinterest:before{content:""}.pi-expand:before{content:""}.pi-pen-to-square:before{content:""}.pi-wave-pulse:before{content:""}.pi-turkish-lira:before{content:""}.pi-spinner-dotted:before{content:""}.pi-crown:before{content:""}.pi-pause-circle:before{content:""}.pi-warehouse:before{content:""}.pi-objects-column:before{content:""}.pi-clipboard:before{content:""}.pi-play-circle:before{content:""}.pi-venus:before{content:""}.pi-cart-minus:before{content:""}.pi-file-plus:before{content:""}.pi-microchip:before{content:""}.pi-twitch:before{content:""}.pi-building-columns:before{content:""}.pi-file-check:before{content:""}.pi-microchip-ai:before{content:""}.pi-trophy:before{content:""}.pi-barcode:before{content:""}.pi-file-arrow-up:before{content:""}.pi-mars:before{content:""}.pi-tiktok:before{content:""}.pi-arrow-up-right-and-arrow-down-left-from-center:before{content:""}.pi-ethereum:before{content:""}.pi-list-check:before{content:""}.pi-thumbtack:before{content:""}.pi-arrow-down-left-and-arrow-up-right-to-center:before{content:""}.pi-equals:before{content:""}.pi-lightbulb:before{content:""}.pi-star-half:before{content:""}.pi-address-book:before{content:""}.pi-chart-scatter:before{content:""}.pi-indian-rupee:before{content:""}.pi-star-half-fill:before{content:""}.pi-cart-arrow-down:before{content:""}.pi-calendar-clock:before{content:""}.pi-sort-up-fill:before{content:""}.pi-sparkles:before{content:""}.pi-bullseye:before{content:""}.pi-sort-down-fill:before{content:""}.pi-graduation-cap:before{content:""}.pi-hammer:before{content:""}.pi-bell-slash:before{content:""}.pi-gauge:before{content:""}.pi-shop:before{content:""}.pi-headphones:before{content:""}.pi-eraser:before{content:""}.pi-stopwatch:before{content:""}.pi-verified:before{content:""}.pi-delete-left:before{content:""}.pi-hourglass:before{content:""}.pi-truck:before{content:""}.pi-wrench:before{content:""}.pi-microphone:before{content:""}.pi-megaphone:before{content:""}.pi-arrow-right-arrow-left:before{content:""}.pi-bitcoin:before{content:""}.pi-file-edit:before{content:""}.pi-language:before{content:""}.pi-file-export:before{content:""}.pi-file-import:before{content:""}.pi-file-word:before{content:""}.pi-gift:before{content:""}.pi-cart-plus:before{content:""}.pi-thumbs-down-fill:before{content:""}.pi-thumbs-up-fill:before{content:""}.pi-arrows-alt:before{content:""}.pi-calculator:before{content:""}.pi-sort-alt-slash:before{content:""}.pi-arrows-h:before{content:""}.pi-arrows-v:before{content:""}.pi-pound:before{content:""}.pi-prime:before{content:""}.pi-chart-pie:before{content:""}.pi-reddit:before{content:""}.pi-code:before{content:""}.pi-sync:before{content:""}.pi-shopping-bag:before{content:""}.pi-server:before{content:""}.pi-database:before{content:""}.pi-hashtag:before{content:""}.pi-bookmark-fill:before{content:""}.pi-filter-fill:before{content:""}.pi-heart-fill:before{content:""}.pi-flag-fill:before{content:""}.pi-circle:before{content:""}.pi-circle-fill:before{content:""}.pi-bolt:before{content:""}.pi-history:before{content:""}.pi-box:before{content:""}.pi-at:before{content:""}.pi-arrow-up-right:before{content:""}.pi-arrow-up-left:before{content:""}.pi-arrow-down-left:before{content:""}.pi-arrow-down-right:before{content:""}.pi-telegram:before{content:""}.pi-stop-circle:before{content:""}.pi-stop:before{content:""}.pi-whatsapp:before{content:""}.pi-building:before{content:""}.pi-qrcode:before{content:""}.pi-car:before{content:""}.pi-instagram:before{content:""}.pi-linkedin:before{content:""}.pi-send:before{content:""}.pi-slack:before{content:""}.pi-sun:before{content:""}.pi-moon:before{content:""}.pi-vimeo:before{content:""}.pi-youtube:before{content:""}.pi-flag:before{content:""}.pi-wallet:before{content:""}.pi-map:before{content:""}.pi-link:before{content:""}.pi-credit-card:before{content:""}.pi-discord:before{content:""}.pi-percentage:before{content:""}.pi-euro:before{content:""}.pi-book:before{content:""}.pi-shield:before{content:""}.pi-paypal:before{content:""}.pi-amazon:before{content:""}.pi-phone:before{content:""}.pi-filter-slash:before{content:""}.pi-facebook:before{content:""}.pi-github:before{content:""}.pi-twitter:before{content:""}.pi-step-backward-alt:before{content:""}.pi-step-forward-alt:before{content:""}.pi-forward:before{content:""}.pi-backward:before{content:""}.pi-fast-backward:before{content:""}.pi-fast-forward:before{content:""}.pi-pause:before{content:""}.pi-play:before{content:""}.pi-compass:before{content:""}.pi-id-card:before{content:""}.pi-ticket:before{content:""}.pi-file-o:before{content:""}.pi-reply:before{content:""}.pi-directions-alt:before{content:""}.pi-directions:before{content:""}.pi-thumbs-up:before{content:""}.pi-thumbs-down:before{content:""}.pi-sort-numeric-down-alt:before{content:""}.pi-sort-numeric-up-alt:before{content:""}.pi-sort-alpha-down-alt:before{content:""}.pi-sort-alpha-up-alt:before{content:""}.pi-sort-numeric-down:before{content:""}.pi-sort-numeric-up:before{content:""}.pi-sort-alpha-down:before{content:""}.pi-sort-alpha-up:before{content:""}.pi-sort-alt:before{content:""}.pi-sort-amount-up:before{content:""}.pi-sort-amount-down:before{content:""}.pi-sort-amount-down-alt:before{content:""}.pi-sort-amount-up-alt:before{content:""}.pi-palette:before{content:""}.pi-undo:before{content:""}.pi-desktop:before{content:""}.pi-sliders-v:before{content:""}.pi-sliders-h:before{content:""}.pi-search-plus:before{content:""}.pi-search-minus:before{content:""}.pi-file-excel:before{content:""}.pi-file-pdf:before{content:""}.pi-check-square:before{content:""}.pi-chart-line:before{content:""}.pi-user-edit:before{content:""}.pi-exclamation-circle:before{content:""}.pi-android:before{content:""}.pi-google:before{content:""}.pi-apple:before{content:""}.pi-microsoft:before{content:""}.pi-heart:before{content:""}.pi-mobile:before{content:""}.pi-tablet:before{content:""}.pi-key:before{content:""}.pi-shopping-cart:before{content:""}.pi-comments:before{content:""}.pi-comment:before{content:""}.pi-briefcase:before{content:""}.pi-bell:before{content:""}.pi-paperclip:before{content:""}.pi-share-alt:before{content:""}.pi-envelope:before{content:""}.pi-volume-down:before{content:""}.pi-volume-up:before{content:""}.pi-volume-off:before{content:""}.pi-eject:before{content:""}.pi-money-bill:before{content:""}.pi-images:before{content:""}.pi-image:before{content:""}.pi-sign-in:before{content:""}.pi-sign-out:before{content:""}.pi-wifi:before{content:""}.pi-sitemap:before{content:""}.pi-chart-bar:before{content:""}.pi-camera:before{content:""}.pi-dollar:before{content:""}.pi-lock-open:before{content:""}.pi-table:before{content:""}.pi-map-marker:before{content:""}.pi-list:before{content:""}.pi-eye-slash:before{content:""}.pi-eye:before{content:""}.pi-folder-open:before{content:""}.pi-folder:before{content:""}.pi-video:before{content:""}.pi-inbox:before{content:""}.pi-lock:before{content:""}.pi-unlock:before{content:""}.pi-tags:before{content:""}.pi-tag:before{content:""}.pi-power-off:before{content:""}.pi-save:before{content:""}.pi-question-circle:before{content:""}.pi-question:before{content:""}.pi-copy:before{content:""}.pi-file:before{content:""}.pi-clone:before{content:""}.pi-calendar-times:before{content:""}.pi-calendar-minus:before{content:""}.pi-calendar-plus:before{content:""}.pi-ellipsis-v:before{content:""}.pi-ellipsis-h:before{content:""}.pi-bookmark:before{content:""}.pi-globe:before{content:""}.pi-replay:before{content:""}.pi-filter:before{content:""}.pi-print:before{content:""}.pi-align-right:before{content:""}.pi-align-left:before{content:""}.pi-align-center:before{content:""}.pi-align-justify:before{content:""}.pi-cog:before{content:""}.pi-cloud-download:before{content:""}.pi-cloud-upload:before{content:""}.pi-cloud:before{content:""}.pi-pencil:before{content:""}.pi-users:before{content:""}.pi-clock:before{content:""}.pi-user-minus:before{content:""}.pi-user-plus:before{content:""}.pi-trash:before{content:""}.pi-external-link:before{content:""}.pi-window-maximize:before{content:""}.pi-window-minimize:before{content:""}.pi-refresh:before{content:""}.pi-user:before{content:""}.pi-exclamation-triangle:before{content:""}.pi-calendar:before{content:""}.pi-chevron-circle-left:before{content:""}.pi-chevron-circle-down:before{content:""}.pi-chevron-circle-right:before{content:""}.pi-chevron-circle-up:before{content:""}.pi-angle-double-down:before{content:""}.pi-angle-double-left:before{content:""}.pi-angle-double-right:before{content:""}.pi-angle-double-up:before{content:""}.pi-angle-down:before{content:""}.pi-angle-left:before{content:""}.pi-angle-right:before{content:""}.pi-angle-up:before{content:""}.pi-upload:before{content:""}.pi-download:before{content:""}.pi-ban:before{content:""}.pi-star-fill:before{content:""}.pi-star:before{content:""}.pi-chevron-left:before{content:""}.pi-chevron-right:before{content:""}.pi-chevron-down:before{content:""}.pi-chevron-up:before{content:""}.pi-caret-left:before{content:""}.pi-caret-right:before{content:""}.pi-caret-down:before{content:""}.pi-caret-up:before{content:""}.pi-search:before{content:""}.pi-check:before{content:""}.pi-check-circle:before{content:""}.pi-times:before{content:""}.pi-times-circle:before{content:""}.pi-plus:before{content:""}.pi-plus-circle:before{content:""}.pi-minus:before{content:""}.pi-minus-circle:before{content:""}.pi-circle-on:before{content:""}.pi-circle-off:before{content:""}.pi-sort-down:before{content:""}.pi-sort-up:before{content:""}.pi-sort:before{content:""}.pi-step-backward:before{content:""}.pi-step-forward:before{content:""}.pi-th-large:before{content:""}.pi-arrow-down:before{content:""}.pi-arrow-left:before{content:""}.pi-arrow-right:before{content:""}.pi-arrow-up:before{content:""}.pi-bars:before{content:""}.pi-arrow-circle-down:before{content:""}.pi-arrow-circle-left:before{content:""}.pi-arrow-circle-right:before{content:""}.pi-arrow-circle-up:before{content:""}.pi-info:before{content:""}.pi-info-circle:before{content:""}.pi-home:before{content:""}.pi-spinner:before{content:""}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-latin-ext-400-normal-DRk46D-x.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-ext-400-normal-Bbz-b3yf.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-latin-400-normal-BrHNak5F.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-400-normal-BbWidj28.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/atkinson-hyperlegible-latin-ext-700-normal-BoVPHkS0.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-ext-700-normal-CKkU2Dpt.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/atkinson-hyperlegible-latin-700-normal-GZI4o3u0.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-700-normal-BK6Glc0m.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-latin-ext-400-italic-3fJ3SmOv.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-ext-400-italic-B-Yabllp.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-latin-400-italic-D-qjh7ci.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-400-italic-OoEIrRJc.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--gx-blue-200: #cde0f0;--gx-blue-700: #387dba;--gx-blue-800: #2e689a;--gx-blue-900: #25537b;--gx-navy: #2c3143;--gx-navy-dark: #1a1f2e;--gx-navy-700: #4c5574;--gx-navy-800: #3c435c;--gx-gold: #d0bd2a;--gx-gold-300: #e1d36b;--gx-gold-600: #a19321;--gx-gold-700: #736817;--gx-grey-50: #f5f5f6;--gx-grey-100: #e6e6e7;--gx-grey-200: #d0d0d1;--gx-grey-300: #afafb1;--gx-grey-400: #878789;--gx-grey-500: #6c6c6e;--gx-grey-600: #58585a;--gx-grey-700: #4f4e50;--gx-mono: "Monaco", "Menlo", "Consolas", "Courier New", monospace}*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:Atkinson Hyperlegible,system-ui,sans-serif;background:var(--gx-grey-50, #f5f5f6);color:var(--gx-grey-700, #4f4e50)}.dark body{background:#2c3143;color:#e6e6e7}.app-shell{min-height:100vh;display:flex;flex-direction:column}.app-header{position:relative;height:52px;padding:0 1.5rem;display:flex;align-items:center;gap:2rem;background:linear-gradient(to bottom,var(--gx-navy, #2c3143) 0%,var(--gx-navy-dark, #1a1f2e) 100%);border-bottom:3px solid var(--gx-gold, #d0bd2a);z-index:100}.app-header:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background-image:linear-gradient(to right,rgba(255,255,255,.04) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.04) 1px,transparent 1px);background-size:24px 24px}.header-brand{display:flex;align-items:baseline;gap:.6rem;flex-shrink:0;position:relative;z-index:1}.brand-logo{font-weight:700;font-size:1.1rem;letter-spacing:.08em;color:var(--gx-gold, #d0bd2a)}.brand-sub{font-size:.8rem;color:#ffffff73;letter-spacing:.01em}.header-nav{display:flex;gap:.25rem;position:relative;z-index:1}.nav-link{text-decoration:none;color:#ffffffa6;font-size:.875rem;font-weight:500;padding:.3rem .75rem;border-radius:4px;transition:color .15s ease,background .15s ease}.nav-link:hover{color:#fff;background:#ffffff14}.nav-link.router-link-active{color:#fff;background:#d0bd2a2e;border-bottom:2px solid var(--gx-gold, #d0bd2a)}.dark-toggle{margin-left:auto;background:none;border:none;cursor:pointer;color:#ffffffa6;font-size:1rem;padding:.3rem .5rem;border-radius:4px;position:relative;z-index:1;transition:color .15s ease,background .15s ease}.dark-toggle:hover{color:#fff;background:#ffffff14}.app-main{flex:1;padding:1.5rem}.view-header[data-v-54582f09]{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:1rem}.view-header h1[data-v-54582f09]{margin:0 0 .25rem;font-size:1.5rem}.list-frame[data-v-54582f09]{border:1px solid var(--gx-gold, #d0bd2a);border-radius:6px;overflow:hidden}.directory-path[data-v-54582f09]{margin:0;font-size:.875rem;font-family:monospace;color:var(--p-text-color-secondary, #6c757d)}.tool-id[data-v-43f5196c]{font-family:ui-monospace,Cascadia Code,Source Code Pro,Menlo,Consolas,monospace;font-size:.85em}.operation-report[data-v-901110c0]{display:flex;flex-direction:column;gap:.75rem}.summary-row[data-v-901110c0]{display:flex;gap:.5rem;flex-wrap:wrap}.key-list[data-v-901110c0]{margin:0;padding-left:1.25rem}.skip-reason[data-v-901110c0],.no-changes[data-v-901110c0]{color:var(--p-text-color-secondary, #6c757d);font-style:italic}.content-pre[data-v-901110c0]{margin:0;padding:.5rem;font-size:.75rem;background:var(--p-content-background);border:1px solid var(--p-content-border-color);border-radius:4px;color:var(--p-text-color);overflow:auto;max-height:500px;white-space:pre}.operation-report[data-v-c952e1d0]{display:flex;flex-direction:column;gap:.75rem}.summary-row[data-v-c952e1d0]{display:flex;gap:.5rem;flex-wrap:wrap}.results-table[data-v-c952e1d0]{margin-top:.5rem}.error-list[data-v-c952e1d0]{margin:0;padding-left:1.25rem}.operation-report[data-v-440a1a8d]{display:flex;flex-direction:column;gap:.75rem}.summary-row[data-v-440a1a8d]{display:flex;gap:.5rem;flex-wrap:wrap}.results-table[data-v-440a1a8d]{margin-top:.5rem}.error-list[data-v-440a1a8d]{margin:0;padding-left:1.25rem}.operation-report[data-v-1ee63bb8]{display:flex;flex-direction:column;gap:.75rem}.summary-row[data-v-1ee63bb8]{display:flex;align-items:center;gap:.75rem}.summary-line[data-v-1ee63bb8]{font-size:.9rem;color:var(--p-text-color-secondary, #6c757d)}.section-heading[data-v-1ee63bb8]{margin:.25rem 0 0;font-size:.95rem;display:flex;align-items:center;gap:.4rem}.failure-list[data-v-1ee63bb8]{margin:0;padding-left:1.25rem;font-size:.85rem}.content-pre[data-v-1ee63bb8]{margin:0;padding:.5rem;font-size:.75rem;background:var(--p-content-background);border:1px solid var(--p-content-border-color);border-radius:4px;color:var(--p-text-color);overflow:auto;max-height:500px;white-space:pre}.operation-report[data-v-12ba9dcd]{display:flex;flex-direction:column;gap:.75rem}.summary-row[data-v-12ba9dcd]{display:flex;gap:.5rem;flex-wrap:wrap}.path-row[data-v-12ba9dcd]{display:flex;flex-direction:column;gap:.25rem;font-size:.9rem}.path-label[data-v-12ba9dcd]{color:var(--p-text-color-secondary, #6c757d);margin-right:.25rem}.muted[data-v-12ba9dcd]{color:var(--p-text-color-secondary, #6c757d);font-style:italic}.content-pre[data-v-12ba9dcd]{margin:0;padding:.5rem;font-size:.75rem;background:var(--p-content-background);border:1px solid var(--p-content-border-color);border-radius:4px;color:var(--p-text-color);overflow:auto;max-height:500px;white-space:pre}.raw-json[data-v-f865b670]{margin:0;padding:1rem;overflow:auto;background:var(--p-content-background);border:1px solid var(--p-content-border-color);border-radius:6px;font-family:ui-monospace,Cascadia Code,Source Code Pro,Menlo,Consolas,monospace;font-size:.85rem;line-height:1.5;color:var(--p-text-color);white-space:pre;max-height:70vh}.tabs-frame[data-v-ffd5c11f]{border:1px solid var(--gx-gold, #d0bd2a);border-radius:6px;overflow:hidden}.panel-content[data-v-ffd5c11f]{padding:1rem 0;display:flex;flex-direction:column;gap:.75rem}.panel-toolbar[data-v-ffd5c11f]{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.mode-select[data-v-ffd5c11f]{width:9rem}.opt-label[data-v-ffd5c11f]{display:flex;align-items:center;gap:.4rem;font-size:.875rem;cursor:pointer;white-space:nowrap}.convert-warning[data-v-ffd5c11f]{align-self:flex-start}.no-results[data-v-ffd5c11f]{margin:0;color:var(--p-text-color-secondary, #6c757d);font-style:italic}.view-header[data-v-90b4f86d]{display:flex;align-items:flex-start;gap:.5rem;margin-bottom:1.5rem}.view-header h1[data-v-90b4f86d]{margin:0 0 .35rem;font-size:1.25rem;font-family:monospace}.workflow-meta[data-v-90b4f86d]{display:flex;gap:.4rem}.editor-shell[data-v-8e3615c4]{display:flex;flex-direction:column;gap:.5rem;flex:1;min-height:0}.editor-textarea[data-v-8e3615c4]{flex:1;min-height:400px;width:100%;font-family:monospace;font-size:.875rem;line-height:1.5;padding:.75rem;box-sizing:border-box;resize:vertical;border:1px solid var(--p-content-border-color, #dee2e6);border-radius:var(--p-border-radius, 4px);background:var(--p-content-background, #fff);color:var(--p-text-color, #212529);outline:none}.editor-textarea[data-v-8e3615c4]:focus{border-color:var(--gx-gold, #d0bd2a);box-shadow:0 0 0 2px #d0bd2a33}.diagnostics-list[data-v-8e3615c4]{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:.25rem;font-size:.8rem}.diagnostic[data-v-8e3615c4]{display:flex;gap:.5rem;padding:.2rem .5rem;border-radius:3px}.diagnostic--error[data-v-8e3615c4]{background:var(--p-red-100, #fee2e2);color:var(--p-red-800, #991b1b)}.diagnostic--warning[data-v-8e3615c4]{background:var(--p-yellow-100, #fef9c3);color:var(--p-yellow-800, #854d0e)}.diagnostic--info[data-v-8e3615c4]{background:var(--p-blue-100, #dbeafe);color:var(--p-blue-800, #1e40af)}.diag-loc[data-v-8e3615c4]{font-weight:600;flex-shrink:0}.diag-msg[data-v-8e3615c4]{flex:1}h1[data-v-402d66d0]{margin:0 0 1rem;font-size:1.5rem}.file-view[data-v-402d66d0]{display:flex;gap:1.5rem;height:100%;min-height:0}.browser-panel[data-v-402d66d0]{width:280px;flex-shrink:0;overflow-y:auto}.editor-panel[data-v-402d66d0]{flex:1;display:flex;flex-direction:column;gap:.75rem;min-width:0}.editor-placeholder[data-v-402d66d0]{flex:1;display:flex;align-items:center;justify-content:center;color:var(--p-text-color-secondary, #6c757d);font-style:italic}.editor-toolbar[data-v-402d66d0]{display:flex;align-items:center;gap:.75rem}.editor-path[data-v-402d66d0]{flex:1;font-family:monospace;font-size:.9rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|