@nac3/forge-cli 1.0.51 → 1.0.52
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/README.md +466 -390
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +315 -94
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +77 -5
- package/dist/chat/server.js.map +1 -1
- package/dist/commands/chat.d.ts +4 -4
- package/dist/commands/chat.js +1 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/pilot.d.ts.map +1 -1
- package/dist/commands/pilot.js +3 -1
- package/dist/commands/pilot.js.map +1 -1
- package/dist/core/file_tree.d.ts +27 -0
- package/dist/core/file_tree.d.ts.map +1 -0
- package/dist/core/file_tree.js +87 -0
- package/dist/core/file_tree.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/i18n/catalogs/ar.json +13 -3
- package/src/i18n/catalogs/de.json +13 -3
- package/src/i18n/catalogs/en.json +13 -3
- package/src/i18n/catalogs/es.json +13 -3
- package/src/i18n/catalogs/fr.json +13 -3
- package/src/i18n/catalogs/hi.json +13 -3
- package/src/i18n/catalogs/it.json +13 -3
- package/src/i18n/catalogs/ja.json +13 -3
- package/src/i18n/catalogs/pt.json +13 -3
- package/src/i18n/catalogs/zh.json +13 -3
package/dist/chat/panel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;2BAKuB;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;2BAKuB;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CA0gXxD"}
|
package/dist/chat/panel.js
CHANGED
|
@@ -46,6 +46,16 @@ export function renderPanelHtml(cfg) {
|
|
|
46
46
|
projectTitle: tForLang(lang, 'panel.project.title'),
|
|
47
47
|
projectAdd: tForLang(lang, 'panel.project.add'),
|
|
48
48
|
projectAddPrompt: tForLang(lang, 'panel.project.addPrompt'),
|
|
49
|
+
projectRemove: tForLang(lang, 'panel.project.remove'),
|
|
50
|
+
projectRemoveConfirm: tForLang(lang, 'panel.project.removeConfirm'),
|
|
51
|
+
projectRemoved: tForLang(lang, 'panel.project.removed'),
|
|
52
|
+
filesRefresh: tForLang(lang, 'panel.files.refresh'),
|
|
53
|
+
filesLoading: tForLang(lang, 'panel.files.loading'),
|
|
54
|
+
filesError: tForLang(lang, 'panel.files.error'),
|
|
55
|
+
filesEmpty: tForLang(lang, 'panel.files.empty'),
|
|
56
|
+
filesTruncated: tForLang(lang, 'panel.files.truncated'),
|
|
57
|
+
filesOpened: tForLang(lang, 'panel.files.opened'),
|
|
58
|
+
filesOpenFailed: tForLang(lang, 'panel.files.openFailed'),
|
|
49
59
|
projectSwitching: tForLang(lang, 'panel.project.switching'),
|
|
50
60
|
micButton: tForLang(lang, 'panel.button.mic'),
|
|
51
61
|
micButtonRec: tForLang(lang, 'panel.button.mic.recording'),
|
|
@@ -474,6 +484,26 @@ body {
|
|
|
474
484
|
font-family: ui-monospace, monospace;
|
|
475
485
|
line-height: 1.45;
|
|
476
486
|
}
|
|
487
|
+
/* File explorer tab (kind 'files'). */
|
|
488
|
+
.pz-files-wrap { display: flex; flex-direction: column; height: 100%; overflow: hidden; }
|
|
489
|
+
.pz-files-bar { display: flex; align-items: center; gap: 10px; padding: 6px 10px;
|
|
490
|
+
border-bottom: 1px solid var(--border-subtle, #e3ddcf); flex: 0 0 auto; }
|
|
491
|
+
.pz-files-bar .pz-files-refresh { font: inherit; font-size: 11px; cursor: pointer;
|
|
492
|
+
border: 1px solid var(--border-subtle, #d9d2c4); background: #fff; color: #3a3a3a;
|
|
493
|
+
border-radius: 6px; padding: 3px 10px; }
|
|
494
|
+
.pz-files-bar .pz-files-refresh:hover { background: var(--bg2, #f1efe7); }
|
|
495
|
+
.pz-files-bar .pz-files-status { font-size: 11px; color: var(--ink-muted, #8a8275); }
|
|
496
|
+
.pz-files-tree { flex: 1; overflow: auto; padding: 8px 10px; font-size: 12.5px; line-height: 1.5; }
|
|
497
|
+
.pz-files-tree ul.pz-files-ul { list-style: none; margin: 0; padding: 0 0 0 16px; }
|
|
498
|
+
.pz-files-tree ul.pz-files-root { padding-left: 0; }
|
|
499
|
+
.pz-files-tree .pz-file-li { margin: 0; }
|
|
500
|
+
.pz-files-tree .pz-file-row { display: flex; align-items: center; gap: 6px;
|
|
501
|
+
padding: 2px 6px; border-radius: 5px; cursor: pointer; white-space: nowrap; }
|
|
502
|
+
.pz-files-tree .pz-file-row:hover { background: var(--bg2, #f1efe7); }
|
|
503
|
+
.pz-files-tree .pz-file-caret { width: 12px; flex: 0 0 auto; color: var(--ink-muted, #8a8275); font-size: 10px; }
|
|
504
|
+
.pz-files-tree .pz-file-ic { flex: 0 0 auto; }
|
|
505
|
+
.pz-files-tree .pz-file-name { overflow: hidden; text-overflow: ellipsis; }
|
|
506
|
+
.pz-files-tree .pz-file-dir > .pz-file-name { font-weight: 600; }
|
|
477
507
|
/* PIZ-3 (PND-073) -- grafo de nodos dinamico, estetica sumi-e. */
|
|
478
508
|
#yf-full .pz-graph-wrap {
|
|
479
509
|
display: flex; gap: 0; height: 100%; min-height: 360px; padding: 0;
|
|
@@ -516,6 +546,13 @@ body {
|
|
|
516
546
|
background-repeat: no-repeat; background-position: 0 100%; background-size: 100% 1.5px;
|
|
517
547
|
padding-bottom: 6px; margin-bottom: 8px; word-break: break-word;
|
|
518
548
|
}
|
|
549
|
+
#yf-full .pz-graph-detail-path { margin: 4px 0 8px; }
|
|
550
|
+
#yf-full .pz-graph-detail-path a {
|
|
551
|
+
font-family: ui-monospace, monospace; font-size: 11px; color: var(--indigo, #4f5b87);
|
|
552
|
+
cursor: pointer; text-decoration: none; border-bottom: 1px dotted var(--indigo, #4f5b87);
|
|
553
|
+
word-break: break-all;
|
|
554
|
+
}
|
|
555
|
+
#yf-full .pz-graph-detail-path a:hover { color: var(--shu, #b7410e); border-bottom-color: var(--shu, #b7410e); }
|
|
519
556
|
#yf-full .pz-graph-detail-kind {
|
|
520
557
|
display: inline-block; font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px;
|
|
521
558
|
color: var(--indigo, #4f5b87); border: 1px solid var(--indigo, #4f5b87);
|
|
@@ -885,13 +922,19 @@ body {
|
|
|
885
922
|
box-shadow: 0 6px 24px rgba(0,0,0,0.18); padding: 4px; }
|
|
886
923
|
.proj-menu .proj-menu-title { font-size: 10px; text-transform: uppercase; letter-spacing: .06em;
|
|
887
924
|
color: var(--ink-muted); padding: 6px 8px 2px; }
|
|
888
|
-
.proj-menu .proj-row { display: flex; flex-direction:
|
|
925
|
+
.proj-menu .proj-row { display: flex; flex-direction: row; align-items: center; gap: 6px;
|
|
889
926
|
padding: 6px 8px; border-radius: 6px; cursor: pointer; }
|
|
927
|
+
.proj-menu .proj-row .proj-row-main { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
|
|
890
928
|
.proj-menu .proj-row:hover { background: var(--bg2, #f1efe7); }
|
|
891
929
|
.proj-menu .proj-row.on { background: rgba(80,90,160,0.08); }
|
|
892
930
|
.proj-menu .proj-row .proj-row-name { font-size: 13px; font-weight: 600; }
|
|
893
931
|
.proj-menu .proj-row .proj-row-path { font-size: 10px; color: var(--ink-muted);
|
|
894
932
|
white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
933
|
+
.proj-menu .proj-row .proj-row-x { flex: 0 0 auto; width: 22px; height: 22px; line-height: 1;
|
|
934
|
+
border: none; background: transparent; color: var(--ink-muted); font-size: 17px; cursor: pointer;
|
|
935
|
+
border-radius: 5px; opacity: 0; transition: opacity .12s, background .12s, color .12s; }
|
|
936
|
+
.proj-menu .proj-row:hover .proj-row-x, .proj-menu .proj-row:focus-within .proj-row-x { opacity: 1; }
|
|
937
|
+
.proj-menu .proj-row .proj-row-x:hover { background: rgba(183,65,14,0.12); color: #b7410e; }
|
|
895
938
|
.proj-menu .proj-add { color: var(--indigo); font-weight: 600; border-top: 1px solid var(--border-subtle); margin-top: 2px; }
|
|
896
939
|
.header .actions { display: flex; gap: 4px; }
|
|
897
940
|
.header .actions button {
|
|
@@ -2893,9 +2936,13 @@ async function openProjectMenu(anchor) {
|
|
|
2893
2936
|
return String(b.last_active_at || '').localeCompare(String(a.last_active_at || ''));
|
|
2894
2937
|
}).map(function (p) {
|
|
2895
2938
|
const active = p.slug === reg.active_slug;
|
|
2939
|
+
const rmLabel = escapeHtml((CONFIG.i18n && CONFIG.i18n.projectRemove) || 'Quitar de la lista');
|
|
2896
2940
|
return '<div class="proj-row' + (active ? ' on' : '') + '" data-proj-slug="' + escapeHtml(p.slug) + '" role="button" tabindex="0">'
|
|
2941
|
+
+ '<span class="proj-row-main">'
|
|
2897
2942
|
+ '<span class="proj-row-name">' + (active ? '● ' : '') + escapeHtml(p.slug) + '</span>'
|
|
2898
2943
|
+ '<span class="proj-row-path">' + escapeHtml(String(p.path || '')) + '</span>'
|
|
2944
|
+
+ '</span>'
|
|
2945
|
+
+ '<button type="button" class="proj-row-x" data-proj-remove="' + escapeHtml(p.slug) + '" title="' + rmLabel + '" aria-label="' + rmLabel + '">×</button>'
|
|
2899
2946
|
+ '</div>';
|
|
2900
2947
|
}).join('');
|
|
2901
2948
|
menu.innerHTML = '<div class="proj-menu-title">' + escapeHtml(CONFIG.i18n.projectTitle) + '</div>'
|
|
@@ -2911,6 +2958,14 @@ async function openProjectMenu(anchor) {
|
|
|
2911
2958
|
menu.querySelectorAll('[data-proj-slug]').forEach(function (row) {
|
|
2912
2959
|
row.addEventListener('click', function () { switchProject(row.getAttribute('data-proj-slug')); });
|
|
2913
2960
|
});
|
|
2961
|
+
/* The "X" removes the project from the list (never from disk). stopPropagation
|
|
2962
|
+
* so the click does NOT also trigger the row's switch handler. */
|
|
2963
|
+
menu.querySelectorAll('[data-proj-remove]').forEach(function (x) {
|
|
2964
|
+
x.addEventListener('click', function (e) {
|
|
2965
|
+
e.stopPropagation();
|
|
2966
|
+
removeProjectViaClick(x.getAttribute('data-proj-remove'), x.closest('.proj-row'));
|
|
2967
|
+
});
|
|
2968
|
+
});
|
|
2914
2969
|
const addRow = menu.querySelector('[data-proj-add]');
|
|
2915
2970
|
if (addRow) addRow.addEventListener('click', addProjectViaPrompt);
|
|
2916
2971
|
setTimeout(function () { document.addEventListener('click', onProjMenuOutside, true); }, 0);
|
|
@@ -2938,6 +2993,30 @@ async function switchProject(slug) {
|
|
|
2938
2993
|
setStatus('No se pudo cambiar de proyecto.', true);
|
|
2939
2994
|
}
|
|
2940
2995
|
}
|
|
2996
|
+
/* Remove a project from the list (the "X"). Confirms first; on success drops
|
|
2997
|
+
* the row from the open menu. Server-side this only edits projects.json --
|
|
2998
|
+
* the repo on disk is never touched. */
|
|
2999
|
+
async function removeProjectViaClick(slug, rowEl) {
|
|
3000
|
+
if (!slug) return;
|
|
3001
|
+
const msg = ((CONFIG.i18n && CONFIG.i18n.projectRemoveConfirm) || 'Quitar este proyecto de la lista? (no borra los archivos del disco)') + '\\n\\n' + slug;
|
|
3002
|
+
if (!window.confirm(msg)) return;
|
|
3003
|
+
try {
|
|
3004
|
+
const r = await fetch('/api/forge/projects/remove', {
|
|
3005
|
+
method: 'POST', headers: { 'content-type': 'application/json' },
|
|
3006
|
+
body: JSON.stringify({ slug: slug }),
|
|
3007
|
+
});
|
|
3008
|
+
const j = await r.json();
|
|
3009
|
+
if (j && j.ok) {
|
|
3010
|
+
if (rowEl && rowEl.parentNode) rowEl.parentNode.removeChild(rowEl);
|
|
3011
|
+
setStatus(((CONFIG.i18n && CONFIG.i18n.projectRemoved) || 'Proyecto quitado de la lista') + ': ' + slug);
|
|
3012
|
+
setTimeout(function () { setStatus(''); }, 2500);
|
|
3013
|
+
} else {
|
|
3014
|
+
setStatus((j && j.error) || 'No se pudo quitar el proyecto.', true);
|
|
3015
|
+
}
|
|
3016
|
+
} catch (e) {
|
|
3017
|
+
setStatus('No se pudo quitar el proyecto.', true);
|
|
3018
|
+
}
|
|
3019
|
+
}
|
|
2941
3020
|
async function addProjectViaPrompt() {
|
|
2942
3021
|
closeProjectMenu();
|
|
2943
3022
|
const path = prompt(CONFIG.i18n.projectAddPrompt, '');
|
|
@@ -5209,6 +5288,18 @@ function renderPizarronCardBody(it) {
|
|
|
5209
5288
|
if (it.kind === 'tree') {
|
|
5210
5289
|
return bodyOpen + '<pre class="pz-tree">' + escapeHtml(it.content) + '</pre></div>';
|
|
5211
5290
|
}
|
|
5291
|
+
if (it.kind === 'files') {
|
|
5292
|
+
/* File explorer of the local repo. The tree is fetched live by
|
|
5293
|
+
* initFilesTab from /api/forge/files-tree; clicking a file opens it
|
|
5294
|
+
* with the OS-associated app via /api/forge/open-native. */
|
|
5295
|
+
return '<div class="pz-body pz-files-wrap" data-nac-id="yujin.pizarron.item.' + it.id + '.body" data-nac-role="region">'
|
|
5296
|
+
+ '<div class="pz-files-bar">'
|
|
5297
|
+
+ '<button type="button" class="pz-files-refresh" data-pz-files-refresh>' + escapeHtml((CONFIG.i18n && CONFIG.i18n.filesRefresh) || 'Actualizar') + '</button>'
|
|
5298
|
+
+ '<span class="pz-files-status" data-pz-files-status></span>'
|
|
5299
|
+
+ '</div>'
|
|
5300
|
+
+ '<div class="pz-files-tree" data-pz-files-tree>' + escapeHtml((CONFIG.i18n && CONFIG.i18n.filesLoading) || 'Cargando...') + '</div>'
|
|
5301
|
+
+ '</div>';
|
|
5302
|
+
}
|
|
5212
5303
|
if (it.kind === 'bpmn' || it.kind === 'flow') {
|
|
5213
5304
|
const trimmed = it.content.trim();
|
|
5214
5305
|
/* SVG crudo -> passthrough (compat). */
|
|
@@ -5318,6 +5409,9 @@ function renderPizarron() {
|
|
|
5318
5409
|
if (it.kind === 'workflow') {
|
|
5319
5410
|
try { initWorkflowTab(it); } catch (e) { /* render best-effort */ }
|
|
5320
5411
|
}
|
|
5412
|
+
if (it.kind === 'files') {
|
|
5413
|
+
try { initFilesTab(it); } catch (e) { /* render best-effort */ }
|
|
5414
|
+
}
|
|
5321
5415
|
}
|
|
5322
5416
|
|
|
5323
5417
|
/* Selector multi-workflow: persiste el indice elegido por tab id (igual
|
|
@@ -6170,12 +6264,11 @@ function unmarkStartupTabClosed(key) {
|
|
|
6170
6264
|
* titulo real lo recordamos del ultimo fetch; el fallback cubre las que
|
|
6171
6265
|
* nunca se vieron. */
|
|
6172
6266
|
var yfStartupTitles = {};
|
|
6173
|
-
var NATIVE_TAB_KEYS = ['startup_graph', '
|
|
6267
|
+
var NATIVE_TAB_KEYS = ['startup_graph', 'startup_graph_sem', 'startup_pendings', 'startup_workflow', 'startup_tasks', 'startup_files', 'coding_canvas'];
|
|
6174
6268
|
var NATIVE_TAB_FALLBACK = {
|
|
6175
|
-
startup_graph: 'Grafo',
|
|
6176
|
-
startup_graph_sem: 'Grafo semantico',
|
|
6269
|
+
startup_graph: 'Grafo', startup_graph_sem: 'Grafo semantico',
|
|
6177
6270
|
startup_pendings: 'Pendientes', startup_workflow: 'Workflow',
|
|
6178
|
-
startup_tasks: 'Tareas', coding_canvas: 'Coding',
|
|
6271
|
+
startup_tasks: 'Tareas', startup_files: 'Archivos', coding_canvas: 'Coding',
|
|
6179
6272
|
};
|
|
6180
6273
|
function nativeTabLabel(key) { return yfStartupTitles[key] || NATIVE_TAB_FALLBACK[key] || key; }
|
|
6181
6274
|
|
|
@@ -6307,11 +6400,6 @@ const PZ_GROUP_COLORS = {
|
|
|
6307
6400
|
* entre re-renders para que un refresh con datos nuevos NO reinicie la
|
|
6308
6401
|
* seleccion del usuario. */
|
|
6309
6402
|
const _graphFilterByTab = {};
|
|
6310
|
-
/* Vista funcional (startup_graph_func): funcionalidad de front-end
|
|
6311
|
-
* seleccionada por tab (id de tab -> id de nodo ancla, o null=todas).
|
|
6312
|
-
* Se conserva entre re-renders por la misma razon que el filtro de
|
|
6313
|
-
* grupos: un refresh con datos nuevos NO debe perder la seleccion. */
|
|
6314
|
-
const _graphFuncByTab = {};
|
|
6315
6403
|
function graphNodeGroup(n) {
|
|
6316
6404
|
const id = String((n && n.id) || '');
|
|
6317
6405
|
const s = (id + ' ' + String((n && (n.label || n.name)) || '')).toLowerCase();
|
|
@@ -6328,6 +6416,165 @@ function graphNodeGroup(n) {
|
|
|
6328
6416
|
return 'backend';
|
|
6329
6417
|
}
|
|
6330
6418
|
|
|
6419
|
+
/* Best-effort project-relative path of a graph node, recovered from its
|
|
6420
|
+
* detail/purpose: derive.ts writes loose files as "Archivo X (src/foo.py)."
|
|
6421
|
+
* and directory modules as "... (src/foo).". We pick the last parenthetical
|
|
6422
|
+
* that looks like a path (has a separator or a file extension). Returns ''
|
|
6423
|
+
* when none -- libraries/protocols have no file. Used to make the node's
|
|
6424
|
+
* path clickable so it opens with the OS-associated app. */
|
|
6425
|
+
function graphNodePath(n) {
|
|
6426
|
+
if (n && n.path) return String(n.path);
|
|
6427
|
+
const d = String((n && n.detail) || '');
|
|
6428
|
+
/* No literal backslashes here: the panel lives inside a template literal,
|
|
6429
|
+
* which eats them. We extract parentheticals with indexOf and detect a
|
|
6430
|
+
* backslash via char code 92. */
|
|
6431
|
+
const BSLASH = String.fromCharCode(92);
|
|
6432
|
+
const candidates = [];
|
|
6433
|
+
let i = 0;
|
|
6434
|
+
while (i < d.length) {
|
|
6435
|
+
const open = d.indexOf('(', i);
|
|
6436
|
+
if (open < 0) break;
|
|
6437
|
+
const close = d.indexOf(')', open + 1);
|
|
6438
|
+
if (close < 0) break;
|
|
6439
|
+
candidates.push(d.slice(open + 1, close).trim());
|
|
6440
|
+
i = close + 1;
|
|
6441
|
+
}
|
|
6442
|
+
for (let k = candidates.length - 1; k >= 0; k--) {
|
|
6443
|
+
let inner = candidates[k];
|
|
6444
|
+
if (!inner || inner.length > 240) continue;
|
|
6445
|
+
while (inner.length && '.,;'.indexOf(inner[inner.length - 1]) >= 0) inner = inner.slice(0, -1);
|
|
6446
|
+
const hasSep = inner.indexOf('/') >= 0 || inner.indexOf(BSLASH) >= 0;
|
|
6447
|
+
let hasExt = false;
|
|
6448
|
+
const dot = inner.lastIndexOf('.');
|
|
6449
|
+
if (dot > 0 && dot < inner.length - 1) {
|
|
6450
|
+
const ext = inner.slice(dot + 1);
|
|
6451
|
+
hasExt = ext.length <= 8 && /^[a-z0-9]+$/i.test(ext);
|
|
6452
|
+
}
|
|
6453
|
+
if (!hasSep && !hasExt) continue;
|
|
6454
|
+
/* skip prose: spaces are only OK when it clearly has a path separator */
|
|
6455
|
+
if (inner.indexOf(' ') >= 0 && !hasSep) continue;
|
|
6456
|
+
return inner;
|
|
6457
|
+
}
|
|
6458
|
+
return '';
|
|
6459
|
+
}
|
|
6460
|
+
|
|
6461
|
+
/* ====================================================================
|
|
6462
|
+
* File explorer tab (startup_files / kind 'files', Pablo 2026-06-29).
|
|
6463
|
+
* Fetches the repo tree from /api/forge/files-tree, renders a collapsible
|
|
6464
|
+
* tree, and on a file click opens it with the OS-associated app via
|
|
6465
|
+
* /api/forge/open-native. Expand state is preserved per tab across the
|
|
6466
|
+
* 12s startup-tabs refresh.
|
|
6467
|
+
* ================================================================== */
|
|
6468
|
+
const _filesExpandByTab = {};
|
|
6469
|
+
|
|
6470
|
+
function fmtFileSize(n) {
|
|
6471
|
+
if (typeof n !== 'number' || !isFinite(n)) return '';
|
|
6472
|
+
if (n < 1024) return n + ' B';
|
|
6473
|
+
if (n < 1024 * 1024) return (n / 1024).toFixed(1) + ' KB';
|
|
6474
|
+
return (n / (1024 * 1024)).toFixed(1) + ' MB';
|
|
6475
|
+
}
|
|
6476
|
+
|
|
6477
|
+
function initFilesTab(it) {
|
|
6478
|
+
const wrap = document.querySelector('[data-pz-files-tree]');
|
|
6479
|
+
if (!wrap) return;
|
|
6480
|
+
const statusEl = document.querySelector('[data-pz-files-status]');
|
|
6481
|
+
const refreshBtn = document.querySelector('[data-pz-files-refresh]');
|
|
6482
|
+
const expanded = _filesExpandByTab[it.id] || (_filesExpandByTab[it.id] = new Set());
|
|
6483
|
+
|
|
6484
|
+
function setFilesStatus(msg) { if (statusEl) statusEl.textContent = msg || ''; }
|
|
6485
|
+
|
|
6486
|
+
function renderNode(node) {
|
|
6487
|
+
const li = document.createElement('li');
|
|
6488
|
+
li.className = 'pz-file-li';
|
|
6489
|
+
const row = document.createElement('div');
|
|
6490
|
+
row.className = 'pz-file-row pz-file-' + (node.kind === 'dir' ? 'dir' : 'file');
|
|
6491
|
+
row.setAttribute('role', 'button');
|
|
6492
|
+
row.setAttribute('tabindex', '0');
|
|
6493
|
+
if (node.kind === 'dir') {
|
|
6494
|
+
const isOpen = expanded.has(node.path);
|
|
6495
|
+
row.innerHTML = '<span class="pz-file-caret">' + (isOpen ? '▾' : '▸') + '</span>'
|
|
6496
|
+
+ '<span class="pz-file-ic">📁</span>'
|
|
6497
|
+
+ '<span class="pz-file-name">' + escapeHtml(node.name) + '</span>';
|
|
6498
|
+
li.appendChild(row);
|
|
6499
|
+
const childUl = document.createElement('ul');
|
|
6500
|
+
childUl.className = 'pz-files-ul';
|
|
6501
|
+
childUl.style.display = isOpen ? '' : 'none';
|
|
6502
|
+
(node.children || []).forEach(function (c) { childUl.appendChild(renderNode(c)); });
|
|
6503
|
+
li.appendChild(childUl);
|
|
6504
|
+
row.addEventListener('click', function () {
|
|
6505
|
+
const nowOpen = childUl.style.display === 'none';
|
|
6506
|
+
childUl.style.display = nowOpen ? '' : 'none';
|
|
6507
|
+
const caret = row.querySelector('.pz-file-caret');
|
|
6508
|
+
if (caret) caret.innerHTML = nowOpen ? '▾' : '▸';
|
|
6509
|
+
if (nowOpen) expanded.add(node.path); else expanded.delete(node.path);
|
|
6510
|
+
});
|
|
6511
|
+
} else {
|
|
6512
|
+
row.setAttribute('data-pz-file-path', node.path);
|
|
6513
|
+
const sz = fmtFileSize(node.size);
|
|
6514
|
+
row.title = node.path + (sz ? ' (' + sz + ')' : '');
|
|
6515
|
+
row.innerHTML = '<span class="pz-file-caret"></span>'
|
|
6516
|
+
+ '<span class="pz-file-ic">📄</span>'
|
|
6517
|
+
+ '<span class="pz-file-name">' + escapeHtml(node.name) + '</span>';
|
|
6518
|
+
li.appendChild(row);
|
|
6519
|
+
row.addEventListener('click', function () { openFileWithOS(node.path, setFilesStatus); });
|
|
6520
|
+
}
|
|
6521
|
+
return li;
|
|
6522
|
+
}
|
|
6523
|
+
|
|
6524
|
+
async function load() {
|
|
6525
|
+
wrap.textContent = (CONFIG.i18n && CONFIG.i18n.filesLoading) || 'Cargando...';
|
|
6526
|
+
setFilesStatus('');
|
|
6527
|
+
try {
|
|
6528
|
+
const r = await fetch('/api/forge/files-tree');
|
|
6529
|
+
const j = await r.json();
|
|
6530
|
+
if (!j || !j.ok || !j.tree) {
|
|
6531
|
+
wrap.textContent = (j && j.error) || ((CONFIG.i18n && CONFIG.i18n.filesError) || 'No pude leer los archivos.');
|
|
6532
|
+
return;
|
|
6533
|
+
}
|
|
6534
|
+
wrap.innerHTML = '';
|
|
6535
|
+
const rootUl = document.createElement('ul');
|
|
6536
|
+
rootUl.className = 'pz-files-ul pz-files-root';
|
|
6537
|
+
(j.tree.children || []).forEach(function (c) { rootUl.appendChild(renderNode(c)); });
|
|
6538
|
+
if (!j.tree.children || j.tree.children.length === 0) {
|
|
6539
|
+
wrap.textContent = (CONFIG.i18n && CONFIG.i18n.filesEmpty) || '(sin archivos)';
|
|
6540
|
+
return;
|
|
6541
|
+
}
|
|
6542
|
+
wrap.appendChild(rootUl);
|
|
6543
|
+
if (j.truncated) setFilesStatus((CONFIG.i18n && CONFIG.i18n.filesTruncated) || '(lista truncada)');
|
|
6544
|
+
} catch (e) {
|
|
6545
|
+
wrap.textContent = (CONFIG.i18n && CONFIG.i18n.filesError) || 'No pude leer los archivos.';
|
|
6546
|
+
}
|
|
6547
|
+
}
|
|
6548
|
+
|
|
6549
|
+
if (refreshBtn && !refreshBtn._wired) {
|
|
6550
|
+
refreshBtn._wired = true;
|
|
6551
|
+
refreshBtn.addEventListener('click', load);
|
|
6552
|
+
}
|
|
6553
|
+
load();
|
|
6554
|
+
}
|
|
6555
|
+
|
|
6556
|
+
async function openFileWithOS(relPath, setFilesStatus) {
|
|
6557
|
+
try {
|
|
6558
|
+
const r = await fetch('/api/forge/open-native', {
|
|
6559
|
+
method: 'POST', headers: { 'content-type': 'application/json' },
|
|
6560
|
+
body: JSON.stringify({ path: relPath }),
|
|
6561
|
+
});
|
|
6562
|
+
const j = await r.json();
|
|
6563
|
+
if (j && j.ok) {
|
|
6564
|
+
const msg = ((CONFIG.i18n && CONFIG.i18n.filesOpened) || 'Abierto') + ': ' + (j.opened || relPath)
|
|
6565
|
+
+ (j.app_hint ? ' (' + j.app_hint + ')' : '');
|
|
6566
|
+
if (setFilesStatus) setFilesStatus(msg);
|
|
6567
|
+
setStatus(msg);
|
|
6568
|
+
} else {
|
|
6569
|
+
const m = (j && j.error) || ((CONFIG.i18n && CONFIG.i18n.filesOpenFailed) || 'No se pudo abrir el archivo.');
|
|
6570
|
+
if (setFilesStatus) setFilesStatus(m);
|
|
6571
|
+
setStatus(m, true);
|
|
6572
|
+
}
|
|
6573
|
+
} catch (e) {
|
|
6574
|
+
setStatus((CONFIG.i18n && CONFIG.i18n.filesOpenFailed) || 'No se pudo abrir el archivo.', true);
|
|
6575
|
+
}
|
|
6576
|
+
}
|
|
6577
|
+
|
|
6331
6578
|
function initGraphTab(it) {
|
|
6332
6579
|
const canvas = document.querySelector('[data-pz-graph-canvas]');
|
|
6333
6580
|
const detail = document.querySelector('[data-pz-graph-detail]');
|
|
@@ -6365,6 +6612,12 @@ function initGraphTab(it) {
|
|
|
6365
6612
|
* abajo, izq y der). Se topa para no colapsar en canvases pequenos. */
|
|
6366
6613
|
const _maxR = nodes.reduce((m, n) => Math.max(m, 9 + (n.weight || 0) * 11), 9);
|
|
6367
6614
|
const MARGIN = Math.max(28, Math.min(2 * _maxR, Math.min(W, H) * 0.42 - 8));
|
|
6615
|
+
/* Circular containment (Pablo 2026-06-29): keep the cluster inside a
|
|
6616
|
+
* CIRCLE (not the rectangle), so the graph reads round instead of
|
|
6617
|
+
* filling the corners. BOUND_R is the disc radius the node CENTERS live
|
|
6618
|
+
* in; each node is further pulled in by its own radius so it fits whole. */
|
|
6619
|
+
const CX = W / 2, CY = H / 2;
|
|
6620
|
+
const BOUND_R = Math.max(_maxR + 4, Math.min(W, H) / 2 - MARGIN);
|
|
6368
6621
|
|
|
6369
6622
|
const idIndex = {};
|
|
6370
6623
|
nodes.forEach((n, i) => { idIndex[n.id] = i; });
|
|
@@ -6436,36 +6689,6 @@ function initGraphTab(it) {
|
|
|
6436
6689
|
return g;
|
|
6437
6690
|
});
|
|
6438
6691
|
|
|
6439
|
-
/* ---- Vista funcional (startup_graph_func) ----
|
|
6440
|
-
* Centrada en las funcionalidades de front-end (nodos del grupo
|
|
6441
|
-
* 'frontend') y como conectan con TODO lo demas. Permite elegir una
|
|
6442
|
-
* funcionalidad y ver solo su subgrafo alcanzable (lo que esa
|
|
6443
|
-
* funcionalidad toca, directa o transitivamente). El filtro de grupos
|
|
6444
|
-
* de abajo sigue aplicando ENCIMA de la funcionalidad elegida. */
|
|
6445
|
-
const functional = data.mode === 'functional';
|
|
6446
|
-
/* Adyacencia DIRIGIDA (from->to) para el alcance. Convencion del grafo
|
|
6447
|
-
* (semantic_graph/derive.ts): la arista va del consumidor a lo que usa
|
|
6448
|
-
* (owner --uses--> target, owner --depends_on--> lib). Asi, partir de
|
|
6449
|
-
* una funcionalidad de front-end y seguir las salientes da su CONO de
|
|
6450
|
-
* dependencias: exactamente los componentes con los que conecta. (No
|
|
6451
|
-
* dirigido daria todo el grafo cuando es un unico componente conexo.) */
|
|
6452
|
-
const adj = nodes.map(() => []);
|
|
6453
|
-
edges.forEach((e) => { adj[e.from].push(e.to); });
|
|
6454
|
-
function computeReach(startIdx) {
|
|
6455
|
-
const seen = new Set([startIdx]);
|
|
6456
|
-
const stack = [startIdx];
|
|
6457
|
-
while (stack.length) {
|
|
6458
|
-
const u = stack.pop();
|
|
6459
|
-
const ns = adj[u];
|
|
6460
|
-
for (let i = 0; i < ns.length; i++) { if (!seen.has(ns[i])) { seen.add(ns[i]); stack.push(ns[i]); } }
|
|
6461
|
-
}
|
|
6462
|
-
return seen;
|
|
6463
|
-
}
|
|
6464
|
-
/* Funcionalidad seleccionada (id de nodo) restaurada de un render
|
|
6465
|
-
* previo; null = todas. funcReach = set de indices visibles, o null. */
|
|
6466
|
-
const savedFunc = functional ? (_graphFuncByTab[it.id] || null) : null;
|
|
6467
|
-
let funcReach = (savedFunc != null && idIndex[savedFunc] != null) ? computeReach(idIndex[savedFunc]) : null;
|
|
6468
|
-
|
|
6469
6692
|
/* ---- Filtro por grupo (legend toggleable) -- desktop a la par del
|
|
6470
6693
|
* mobile. Colorea por backend/frontend/mobile/tests/tools/scripts/
|
|
6471
6694
|
* libs/protocol y permite mostrar/ocultar cada grupo. ---- */
|
|
@@ -6479,9 +6702,7 @@ function initGraphTab(it) {
|
|
|
6479
6702
|
counts[n.group] = (counts[n.group] || 0) + 1;
|
|
6480
6703
|
});
|
|
6481
6704
|
_graphFilterByTab[it.id] = vis; /* el toggle muta este mismo objeto */
|
|
6482
|
-
|
|
6483
|
-
* arriba; la leyenda de grupos baja una fila para no solaparse. */
|
|
6484
|
-
const legendTop = functional ? 36 : 6;
|
|
6705
|
+
const legendTop = 6;
|
|
6485
6706
|
const legend = document.createElement('div');
|
|
6486
6707
|
legend.setAttribute('style', 'position:absolute;top:' + legendTop + 'px;left:6px;right:6px;display:flex;flex-wrap:wrap;gap:5px;z-index:6;pointer-events:auto;');
|
|
6487
6708
|
Object.keys(counts).sort().forEach((k) => {
|
|
@@ -6503,56 +6724,8 @@ function initGraphTab(it) {
|
|
|
6503
6724
|
canvas.style.position = canvas.style.position || 'relative';
|
|
6504
6725
|
canvas.appendChild(legend);
|
|
6505
6726
|
|
|
6506
|
-
/* ---- Barra de funcionalidades de front-end (solo modo funcional) ---- */
|
|
6507
|
-
if (functional) {
|
|
6508
|
-
const en = !!(CONFIG && CONFIG.lang === 'en');
|
|
6509
|
-
const anchors = nodes
|
|
6510
|
-
.map((n, i) => ({ n, i }))
|
|
6511
|
-
.filter((x) => x.n.group === 'frontend')
|
|
6512
|
-
.sort((a, b) => String(a.n.label).localeCompare(String(b.n.label)));
|
|
6513
|
-
const bar = document.createElement('div');
|
|
6514
|
-
bar.setAttribute('style', 'position:absolute;top:6px;left:6px;right:6px;display:flex;align-items:center;gap:6px;z-index:7;pointer-events:auto;');
|
|
6515
|
-
const lab = document.createElement('span');
|
|
6516
|
-
lab.setAttribute('style', 'font:inherit;font-size:11px;color:#3a3a3a;white-space:nowrap;');
|
|
6517
|
-
lab.textContent = en ? 'Front-end feature:' : 'Funcionalidad front-end:';
|
|
6518
|
-
const sel = document.createElement('select');
|
|
6519
|
-
sel.setAttribute('style', 'font:inherit;font-size:11px;color:#3a3a3a;border:1px solid #d9d2c4;'
|
|
6520
|
-
+ 'border-radius:14px;padding:3px 9px;background:#fff;cursor:pointer;max-width:60%;');
|
|
6521
|
-
const optAll = document.createElement('option');
|
|
6522
|
-
optAll.value = '';
|
|
6523
|
-
optAll.textContent = (en ? 'All features' : 'Todas las funcionalidades') + ' (' + anchors.length + ')';
|
|
6524
|
-
sel.appendChild(optAll);
|
|
6525
|
-
anchors.forEach((x) => {
|
|
6526
|
-
const o = document.createElement('option');
|
|
6527
|
-
o.value = x.n.id;
|
|
6528
|
-
o.textContent = x.n.label.length > 40 ? x.n.label.slice(0, 39) + '…' : x.n.label;
|
|
6529
|
-
if (savedFunc != null && x.n.id === savedFunc) o.selected = true;
|
|
6530
|
-
sel.appendChild(o);
|
|
6531
|
-
});
|
|
6532
|
-
sel.addEventListener('change', () => {
|
|
6533
|
-
const v = sel.value;
|
|
6534
|
-
funcReach = (v && idIndex[v] != null) ? computeReach(idIndex[v]) : null;
|
|
6535
|
-
_graphFuncByTab[it.id] = v || null;
|
|
6536
|
-
if (v && idIndex[v] != null) { try { showDetail(nodes[idIndex[v]]); } catch (e) { /* */ } }
|
|
6537
|
-
applyGraphFilter();
|
|
6538
|
-
});
|
|
6539
|
-
bar.appendChild(lab);
|
|
6540
|
-
bar.appendChild(sel);
|
|
6541
|
-
if (anchors.length === 0) {
|
|
6542
|
-
const hint = document.createElement('span');
|
|
6543
|
-
hint.setAttribute('style', 'font:inherit;font-size:11px;color:#9a8f7a;');
|
|
6544
|
-
hint.textContent = en ? '(no front-end nodes detected)' : '(sin nodos de front-end detectados)';
|
|
6545
|
-
bar.appendChild(hint);
|
|
6546
|
-
}
|
|
6547
|
-
canvas.appendChild(bar);
|
|
6548
|
-
/* Si habia una funcionalidad recordada, reflejarla en el detalle. */
|
|
6549
|
-
if (savedFunc != null && idIndex[savedFunc] != null) { try { showDetail(nodes[idIndex[savedFunc]]); } catch (e) { /* */ } }
|
|
6550
|
-
}
|
|
6551
|
-
|
|
6552
6727
|
function nodeVisible(i) {
|
|
6553
|
-
|
|
6554
|
-
if (funcReach && !funcReach.has(i)) return false;
|
|
6555
|
-
return true;
|
|
6728
|
+
return !!vis[nodes[i].group];
|
|
6556
6729
|
}
|
|
6557
6730
|
function applyGraphFilter() {
|
|
6558
6731
|
for (let i = 0; i < nodeEls.length; i++) nodeEls[i].style.display = nodeVisible(i) ? '' : 'none';
|
|
@@ -6566,13 +6739,25 @@ function initGraphTab(it) {
|
|
|
6566
6739
|
function showDetail(n) {
|
|
6567
6740
|
if (!detail) return;
|
|
6568
6741
|
nodeEls.forEach((g) => g.classList.toggle('selected', g._node === n));
|
|
6742
|
+
const npath = graphNodePath(n);
|
|
6569
6743
|
detail.innerHTML =
|
|
6570
6744
|
'<div class="pz-graph-detail-title">' + escapeHtml(n.label) + '</div>'
|
|
6571
6745
|
+ (n.kind ? '<div class="pz-graph-detail-kind">' + escapeHtml(String(n.kind)) + '</div>' : '')
|
|
6572
6746
|
+ '<div class="pz-graph-detail-meta">' + escapeHtml(CONFIG.i18n.pzGraphWeight) + ' ' + (Math.round(n.weight * 100) / 100)
|
|
6573
6747
|
+ ' · id ' + escapeHtml(n.id) + '</div>'
|
|
6748
|
+
+ (npath ? '<div class="pz-graph-detail-path"><a href="#" data-graph-open-path role="button" title="'
|
|
6749
|
+
+ escapeHtml(((CONFIG.i18n && CONFIG.i18n.filesOpened) || 'Abrir') + ': ' + npath) + '">'
|
|
6750
|
+
+ escapeHtml(npath) + '</a></div>' : '')
|
|
6574
6751
|
+ (n.detail ? '<div class="pz-graph-detail-body">' + renderMdRich(String(n.detail)) + '</div>'
|
|
6575
6752
|
: '<div class="pz-graph-detail-hint">' + escapeHtml(CONFIG.i18n.pzGraphEmpty) + '</div>');
|
|
6753
|
+
if (npath) {
|
|
6754
|
+
const link = detail.querySelector('[data-graph-open-path]');
|
|
6755
|
+
if (link) link.addEventListener('click', (ev) => {
|
|
6756
|
+
ev.preventDefault();
|
|
6757
|
+
/* relative path -> the open-native endpoint prepends the project root */
|
|
6758
|
+
openFileWithOS(npath);
|
|
6759
|
+
});
|
|
6760
|
+
}
|
|
6576
6761
|
}
|
|
6577
6762
|
|
|
6578
6763
|
/* ---- Simulacion force-directed ---- */
|
|
@@ -6603,13 +6788,49 @@ function initGraphTab(it) {
|
|
|
6603
6788
|
if (!a.fixed) { a._fx += ox; a._fy += oy; }
|
|
6604
6789
|
if (!b.fixed) { b._fx -= ox; b._fy -= oy; }
|
|
6605
6790
|
}
|
|
6791
|
+
/* integrate velocities -- containment + collision handled below. */
|
|
6606
6792
|
for (const n of nodes) {
|
|
6607
6793
|
if (n.fixed) continue;
|
|
6608
6794
|
n.vx = (n.vx + n._fx * alpha) * DAMP;
|
|
6609
6795
|
n.vy = (n.vy + n._fy * alpha) * DAMP;
|
|
6610
6796
|
n.x += n.vx; n.y += n.vy;
|
|
6611
|
-
|
|
6612
|
-
|
|
6797
|
+
}
|
|
6798
|
+
/* Anti-overlap: separate node circles by their radii (a couple of
|
|
6799
|
+
* position passes; O(n^2) but the graph is small). The plain 1/d^2
|
|
6800
|
+
* repulse ignores radii, so big nodes overlapped without this. */
|
|
6801
|
+
const COL_PAD = 4;
|
|
6802
|
+
for (let pass = 0; pass < 2; pass++) {
|
|
6803
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
6804
|
+
const a = nodes[i]; const ra = 9 + a.weight * 11;
|
|
6805
|
+
for (let j = i + 1; j < nodes.length; j++) {
|
|
6806
|
+
const b = nodes[j]; const rb = 9 + b.weight * 11;
|
|
6807
|
+
let dx = b.x - a.x, dy = b.y - a.y;
|
|
6808
|
+
const minD = ra + rb + COL_PAD;
|
|
6809
|
+
const d2 = dx * dx + dy * dy;
|
|
6810
|
+
if (d2 >= minD * minD) continue;
|
|
6811
|
+
let d = Math.sqrt(d2);
|
|
6812
|
+
if (d < 0.01) { dx = 1; dy = 0; d = 1; } /* coincident -> split on x */
|
|
6813
|
+
const push = (minD - d) / 2;
|
|
6814
|
+
const ox = (dx / d) * push, oy = (dy / d) * push;
|
|
6815
|
+
if (!a.fixed) { a.x -= ox; a.y -= oy; }
|
|
6816
|
+
if (!b.fixed) { b.x += ox; b.y += oy; }
|
|
6817
|
+
}
|
|
6818
|
+
}
|
|
6819
|
+
}
|
|
6820
|
+
/* Circular containment: clamp each node CENTER inside the disc, leaving
|
|
6821
|
+
* room for its own radius so the whole node stays in -- the cluster
|
|
6822
|
+
* reads round, not a rectangle filling the corners. */
|
|
6823
|
+
for (const n of nodes) {
|
|
6824
|
+
if (n.fixed) continue;
|
|
6825
|
+
const r = 9 + n.weight * 11;
|
|
6826
|
+
const dxc = n.x - CX, dyc = n.y - CY;
|
|
6827
|
+
const dist = Math.sqrt(dxc * dxc + dyc * dyc);
|
|
6828
|
+
const limit = Math.max(0, BOUND_R - r);
|
|
6829
|
+
if (dist > limit && dist > 0.001) {
|
|
6830
|
+
n.x = CX + (dxc / dist) * limit;
|
|
6831
|
+
n.y = CY + (dyc / dist) * limit;
|
|
6832
|
+
n.vx *= 0.5; n.vy *= 0.5;
|
|
6833
|
+
}
|
|
6613
6834
|
}
|
|
6614
6835
|
alpha *= 0.985; if (alpha < 0.02) alpha = 0.02;
|
|
6615
6836
|
}
|
package/dist/chat/panel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAolRpB,kBAAkB;;QAEpB,CAAC;AACT,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAswRpB,kBAAkB;;QAEpB,CAAC;AACT,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
|