@xxmachina/components 19.43.0 → 19.45.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.
@@ -12,7 +12,7 @@ class WeeklyHeaderMolecule {
12
12
  <span>{{ day }}</span>
13
13
  </div>
14
14
  }
15
- `, isInline: true, styles: [":host{display:block;--primary-color: #404040;--primary-color-SCOPED-IN-X71XuOBu: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-X71XuOBu: var(--secondary-color)}:host{display:grid;width:100%;grid-template-columns:repeat(7,1fr);background-color:var(--primary-color-SCOPED-IN-X71XuOBu)}:host .day-container{display:flex;justify-content:center;align-items:center;color:#fff;font-weight:700;width:calc(hvar(--width) / 7)}\n"] });
15
+ `, isInline: true, styles: [":host{display:block;--primary-color: #404040;--primary-color-SCOPED-IN-1RrZOQkc: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-1RrZOQkc: var(--secondary-color)}:host{display:grid;width:100%;grid-template-columns:repeat(7,1fr);background-color:var(--primary-color-SCOPED-IN-1RrZOQkc)}:host .day-container{display:flex;justify-content:center;align-items:center;color:#fff;font-weight:700;width:calc(hvar(--width) / 7)}\n"] });
16
16
  }
17
17
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: WeeklyHeaderMolecule, decorators: [{
18
18
  type: Component,
@@ -22,7 +22,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
22
22
  <span>{{ day }}</span>
23
23
  </div>
24
24
  }
25
- `, styles: [":host{display:block;--primary-color: #404040;--primary-color-SCOPED-IN-X71XuOBu: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-X71XuOBu: var(--secondary-color)}:host{display:grid;width:100%;grid-template-columns:repeat(7,1fr);background-color:var(--primary-color-SCOPED-IN-X71XuOBu)}:host .day-container{display:flex;justify-content:center;align-items:center;color:#fff;font-weight:700;width:calc(hvar(--width) / 7)}\n"] }]
25
+ `, styles: [":host{display:block;--primary-color: #404040;--primary-color-SCOPED-IN-1RrZOQkc: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-1RrZOQkc: var(--secondary-color)}:host{display:grid;width:100%;grid-template-columns:repeat(7,1fr);background-color:var(--primary-color-SCOPED-IN-1RrZOQkc)}:host .day-container{display:flex;justify-content:center;align-items:center;color:#fff;font-weight:700;width:calc(hvar(--width) / 7)}\n"] }]
26
26
  }], ctorParameters: () => [] });
27
27
 
28
28
  /**
@@ -56,7 +56,7 @@ class CalendarSectionOrganism {
56
56
  }
57
57
  }
58
58
  </div>
59
- `, isInline: true, styles: [":host{display:block;--row: 80px;--row-SCOPED-IN-EfSO1SXS: var(--row);--row-num: 0;--row-num-SCOPED-IN-EfSO1SXS: var(--row-num);--border-color: #9E9E9E;--border-color-SCOPED-IN-EfSO1SXS: var(--border-color);--primary-color: #404040;--primary-color-SCOPED-IN-EfSO1SXS: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-EfSO1SXS: var(--secondary-color)}:host{width:100%;height:auto}:host .calendar.header molecules-weekly-header{--height: 32px}:host .calendar.contents{display:grid;width:var(--width);border:1px solid var(--border-color-SCOPED-IN-EfSO1SXS);grid-gap:1px;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(var(--row-num-SCOPED-IN-EfSO1SXS),var(--row-SCOPED-IN-EfSO1SXS));box-sizing:border-box;background-color:var(--border-color-SCOPED-IN-EfSO1SXS)}:host .calendar.contents molecules-daily-cell{--width: calc((var(--width) - 8px) / 7);--height: var(--row-SCOPED-IN-EfSO1SXS);background-color:#fff}:host .calendar.description{display:flex;justify-content:flex-end;width:var(--width);height:32px;padding-right:16px}:host .calendar.description .description.container{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px}:host .calendar.description .description.container .circle{display:flex;width:20px;height:20px;justify-content:center;align-items:center;border-radius:50%;color:#fff;background:#00f}:host .calendar.description .description.container label{padding-left:4px;padding-right:8px}\n"], dependencies: [{ kind: "component", type: DailyCellMolecule, selector: "molecules-daily-cell", inputs: ["date", "schedules", "displayDate", "noSchedulesText", "toolTipText", "marked", "markingColor"] }, { kind: "component", type: WeeklyHeaderMolecule, selector: "molecules-weekly-header" }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
59
+ `, isInline: true, styles: [":host{display:block;--row: 80px;--row-SCOPED-IN-kLRN0iG5: var(--row);--row-num: 0;--row-num-SCOPED-IN-kLRN0iG5: var(--row-num);--border-color: #9E9E9E;--border-color-SCOPED-IN-kLRN0iG5: var(--border-color);--primary-color: #404040;--primary-color-SCOPED-IN-kLRN0iG5: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-kLRN0iG5: var(--secondary-color)}:host{width:100%;height:auto}:host .calendar.header molecules-weekly-header{--height: 32px}:host .calendar.contents{display:grid;width:var(--width);border:1px solid var(--border-color-SCOPED-IN-kLRN0iG5);grid-gap:1px;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(var(--row-num-SCOPED-IN-kLRN0iG5),var(--row-SCOPED-IN-kLRN0iG5));box-sizing:border-box;background-color:var(--border-color-SCOPED-IN-kLRN0iG5)}:host .calendar.contents molecules-daily-cell{--width: calc((var(--width) - 8px) / 7);--height: var(--row-SCOPED-IN-kLRN0iG5);background-color:#fff}:host .calendar.description{display:flex;justify-content:flex-end;width:var(--width);height:32px;padding-right:16px}:host .calendar.description .description.container{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px}:host .calendar.description .description.container .circle{display:flex;width:20px;height:20px;justify-content:center;align-items:center;border-radius:50%;color:#fff;background:#00f}:host .calendar.description .description.container label{padding-left:4px;padding-right:8px}\n"], dependencies: [{ kind: "component", type: DailyCellMolecule, selector: "molecules-daily-cell", inputs: ["date", "schedules", "displayDate", "noSchedulesText", "toolTipText", "marked", "markingColor"] }, { kind: "component", type: WeeklyHeaderMolecule, selector: "molecules-weekly-header" }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
60
60
  }
61
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CalendarSectionOrganism, decorators: [{
62
62
  type: Component,
@@ -90,7 +90,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
90
90
  }
91
91
  }
92
92
  </div>
93
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;--row: 80px;--row-SCOPED-IN-EfSO1SXS: var(--row);--row-num: 0;--row-num-SCOPED-IN-EfSO1SXS: var(--row-num);--border-color: #9E9E9E;--border-color-SCOPED-IN-EfSO1SXS: var(--border-color);--primary-color: #404040;--primary-color-SCOPED-IN-EfSO1SXS: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-EfSO1SXS: var(--secondary-color)}:host{width:100%;height:auto}:host .calendar.header molecules-weekly-header{--height: 32px}:host .calendar.contents{display:grid;width:var(--width);border:1px solid var(--border-color-SCOPED-IN-EfSO1SXS);grid-gap:1px;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(var(--row-num-SCOPED-IN-EfSO1SXS),var(--row-SCOPED-IN-EfSO1SXS));box-sizing:border-box;background-color:var(--border-color-SCOPED-IN-EfSO1SXS)}:host .calendar.contents molecules-daily-cell{--width: calc((var(--width) - 8px) / 7);--height: var(--row-SCOPED-IN-EfSO1SXS);background-color:#fff}:host .calendar.description{display:flex;justify-content:flex-end;width:var(--width);height:32px;padding-right:16px}:host .calendar.description .description.container{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px}:host .calendar.description .description.container .circle{display:flex;width:20px;height:20px;justify-content:center;align-items:center;border-radius:50%;color:#fff;background:#00f}:host .calendar.description .description.container label{padding-left:4px;padding-right:8px}\n"] }]
93
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;--row: 80px;--row-SCOPED-IN-kLRN0iG5: var(--row);--row-num: 0;--row-num-SCOPED-IN-kLRN0iG5: var(--row-num);--border-color: #9E9E9E;--border-color-SCOPED-IN-kLRN0iG5: var(--border-color);--primary-color: #404040;--primary-color-SCOPED-IN-kLRN0iG5: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-kLRN0iG5: var(--secondary-color)}:host{width:100%;height:auto}:host .calendar.header molecules-weekly-header{--height: 32px}:host .calendar.contents{display:grid;width:var(--width);border:1px solid var(--border-color-SCOPED-IN-kLRN0iG5);grid-gap:1px;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(var(--row-num-SCOPED-IN-kLRN0iG5),var(--row-SCOPED-IN-kLRN0iG5));box-sizing:border-box;background-color:var(--border-color-SCOPED-IN-kLRN0iG5)}:host .calendar.contents molecules-daily-cell{--width: calc((var(--width) - 8px) / 7);--height: var(--row-SCOPED-IN-kLRN0iG5);background-color:#fff}:host .calendar.description{display:flex;justify-content:flex-end;width:var(--width);height:32px;padding-right:16px}:host .calendar.description .description.container{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px}:host .calendar.description .description.container .circle{display:flex;width:20px;height:20px;justify-content:center;align-items:center;border-radius:50%;color:#fff;background:#00f}:host .calendar.description .description.container label{padding-left:4px;padding-right:8px}\n"] }]
94
94
  }], propDecorators: { label: [{
95
95
  type: Input
96
96
  }], displayDays: [{
@@ -395,14 +395,16 @@ class ProxyLinkProvider {
395
395
  _getToken;
396
396
  _handler;
397
397
  _getDeployVersion;
398
+ _getEndpoints;
398
399
  constructor(_terminal, _getServerUUID, _getToken, _handler = (_, url) => {
399
400
  window.open(url, '_blank', 'noopener');
400
- }, _getDeployVersion) {
401
+ }, _getDeployVersion, _getEndpoints) {
401
402
  this._terminal = _terminal;
402
403
  this._getServerUUID = _getServerUUID;
403
404
  this._getToken = _getToken;
404
405
  this._handler = _handler;
405
406
  this._getDeployVersion = _getDeployVersion;
407
+ this._getEndpoints = _getEndpoints;
406
408
  }
407
409
  provideLinks(bufferLineNumber, callback) {
408
410
  const lineIndex = bufferLineNumber - 1;
@@ -447,7 +449,8 @@ class ProxyLinkProvider {
447
449
  // クロスオリジン WindowProxy の === 比較は信頼できないため origin で判定
448
450
  if (e.origin === proxyOrigin && e.data?.type === 'proxy-auth-ready') {
449
451
  console.log('[proxy-link] auth-ready received, sending token');
450
- win.postMessage({ type: 'proxy-auth-token', token }, proxyOrigin);
452
+ const endpoints = this._getEndpoints?.();
453
+ win.postMessage({ type: 'proxy-auth-token', token, endpoints }, proxyOrigin);
451
454
  window.removeEventListener('message', listener);
452
455
  }
453
456
  };
@@ -489,15 +492,17 @@ class ProxyLinksAddon {
489
492
  _getToken;
490
493
  _handler;
491
494
  _getDeployVersion;
495
+ _getEndpoints;
492
496
  _linkProvider;
493
- constructor(_getServerUUID, _getToken, _handler, _getDeployVersion) {
497
+ constructor(_getServerUUID, _getToken, _handler, _getDeployVersion, _getEndpoints) {
494
498
  this._getServerUUID = _getServerUUID;
495
499
  this._getToken = _getToken;
496
500
  this._handler = _handler;
497
501
  this._getDeployVersion = _getDeployVersion;
502
+ this._getEndpoints = _getEndpoints;
498
503
  }
499
504
  activate(terminal) {
500
- this._linkProvider = terminal.registerLinkProvider(new ProxyLinkProvider(terminal, this._getServerUUID, this._getToken, this._handler, this._getDeployVersion));
505
+ this._linkProvider = terminal.registerLinkProvider(new ProxyLinkProvider(terminal, this._getServerUUID, this._getToken, this._handler, this._getDeployVersion, this._getEndpoints));
501
506
  }
502
507
  dispose() {
503
508
  this._linkProvider?.dispose();
@@ -518,6 +523,11 @@ const XTERM_SERVER_UUID = new InjectionToken('XTERM_SERVER_UUID');
518
523
  const XTERM_PROXY_TOKEN = new InjectionToken('XTERM_PROXY_TOKEN');
519
524
  /** DI token for providing deploy version getter to ProxyLinksAddon */
520
525
  const XTERM_DEPLOY_VERSION = new InjectionToken('XTERM_DEPLOY_VERSION');
526
+ /**
527
+ * DI token for providing API endpoints (apiNext / hasura) to ProxyLinksAddon.
528
+ * web-proxy が opener postMessage 経由でこの値を受信して使用する (環境追従)。
529
+ */
530
+ const XTERM_PROXY_ENDPOINTS = new InjectionToken('XTERM_PROXY_ENDPOINTS');
521
531
  class XtermOrganismStore extends InjectableComponent {
522
532
  static DI = makeDI(XtermOrganismStore, () => () => ({
523
533
  data: '',
@@ -537,6 +547,8 @@ class XtermOrganismStore extends InjectableComponent {
537
547
  getProxyToken = inject(XTERM_PROXY_TOKEN, { optional: true });
538
548
  /** Injected deploy version getter for proxy URL host suffix (optional) */
539
549
  getDeployVersion = inject(XTERM_DEPLOY_VERSION, { optional: true });
550
+ /** Injected endpoints getter for opener-driven environment switching (optional) */
551
+ getProxyEndpoints = inject(XTERM_PROXY_ENDPOINTS, { optional: true });
540
552
  constructor() {
541
553
  super();
542
554
  XtermOrganismStore.DI.initialize(this);
@@ -768,7 +780,7 @@ class XtermOrganism extends NgAtomicComponent {
768
780
  });
769
781
  this.terminal.loadAddon(this.fileLinksAddon);
770
782
  // ProxyLinksAddon: localhost → proxy.machina.at redirect (always loaded)
771
- this.terminal.loadAddon(new ProxyLinksAddon(this.store.getServerUUID ?? (() => undefined), this.store.getProxyToken ?? undefined, undefined, this.store.getDeployVersion ?? undefined));
783
+ this.terminal.loadAddon(new ProxyLinksAddon(this.store.getServerUUID ?? (() => undefined), this.store.getProxyToken ?? undefined, undefined, this.store.getDeployVersion ?? undefined, this.store.getProxyEndpoints ?? undefined));
772
784
  this.terminal.open(containerElement);
773
785
  // Setup event handlers for interactive mode
774
786
  if (isInteractive) {
@@ -1176,5 +1188,5 @@ async function getMachinaAsciiArtSixel(options = {}) {
1176
1188
  * Generated bundle index. Do not edit.
1177
1189
  */
1178
1190
 
1179
- export { GitHubLinkProvider, GitHubLinksAddon, ProxyLinkProvider, ProxyLinksAddon, WebLinksAddon, XTERM_DEPLOY_VERSION, XTERM_PROXY_TOKEN, XTERM_SERVER_UUID, XtermActionId, XtermOrganism, XtermOrganismStore, asciiArtToSvg, deployVersionToHostSuffix, generateAsciiArt, getMachinaAsciiArtSixel, svgToSixel, toProxyUrl };
1191
+ export { GitHubLinkProvider, GitHubLinksAddon, ProxyLinkProvider, ProxyLinksAddon, WebLinksAddon, XTERM_DEPLOY_VERSION, XTERM_PROXY_ENDPOINTS, XTERM_PROXY_TOKEN, XTERM_SERVER_UUID, XtermActionId, XtermOrganism, XtermOrganismStore, asciiArtToSvg, deployVersionToHostSuffix, generateAsciiArt, getMachinaAsciiArtSixel, svgToSixel, toProxyUrl };
1180
1192
  //# sourceMappingURL=xxmachina-components-organisms-xterm.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-organisms-xterm.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/file-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/file-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.store.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/image.utils.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xxmachina-components-organisms-xterm.ts"],"sourcesContent":["import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nconst URL_REGEX = /https?:\\/\\/[^\\s<>'\")\\[\\]]+/g;\nconst LOCALHOST_REGEX = /^https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::\\d+)?(?:\\/|$)/;\nconst MAX_SCAN_LINES = 30;\n\n/**\n * Link provider that detects URLs spanning multiple terminal lines.\n * localhost/127.0.0.1 URLs are skipped (handled by ProxyLinksAddon).\n */\nexport class WebLinkProvider implements ILinkProvider {\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: (event: MouseEvent, uri: string) => void = (_, uri) => {\n window.open(uri, '_blank', 'noopener');\n },\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const buffer = this._terminal.buffer.active;\n\n let startY = bufferLineNumber - 1;\n while (startY > 0\n && (bufferLineNumber - 1 - startY) < MAX_SCAN_LINES\n && this._isLineContinuation(startY)\n ) {\n startY--;\n }\n\n const lineTexts: string[] = [];\n let y = startY;\n do {\n const line = buffer.getLine(y);\n if (!line) break;\n lineTexts.push(line.translateToString(true));\n y++;\n } while (\n y < buffer.length\n && (y - startY) < MAX_SCAN_LINES\n && this._isLineContinuation(y)\n );\n\n const fullText = lineTexts.join('');\n\n URL_REGEX.lastIndex = 0;\n let match: RegExpExecArray | null;\n const links: ILink[] = [];\n\n while ((match = URL_REGEX.exec(fullText)) !== null) {\n if (LOCALHOST_REGEX.test(match[0])) continue;\n\n const startPos = this._offsetToPos(match.index, startY, lineTexts);\n const endPos = this._offsetToPos(match.index + match[0].length - 1, startY, lineTexts);\n if (!startPos || !endPos) continue;\n\n links.push({\n text: match[0],\n range: {\n start: { x: startPos.x + 1, y: startPos.y + 1 },\n end: { x: endPos.x + 1, y: endPos.y + 1 },\n },\n activate: (event, text) => this._handler(event, text),\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n private _isLineContinuation(lineIdx: number): boolean {\n const buffer = this._terminal.buffer.active;\n const line = buffer.getLine(lineIdx);\n if (!line) return false;\n if (line.isWrapped) return true;\n\n if (lineIdx === 0) return false;\n const prevLine = buffer.getLine(lineIdx - 1);\n if (!prevLine) return false;\n\n const prevText = prevLine.translateToString(true);\n const currentText = line.translateToString(true);\n return (\n prevText.length > 0\n && !/\\s$/.test(prevText)\n && currentText.length > 0\n && !/^\\s/.test(currentText)\n );\n }\n\n private _offsetToPos(\n offset: number, startY: number, lineTexts: string[],\n ): { x: number; y: number } | null {\n let remaining = offset;\n for (let i = 0; i < lineTexts.length; i++) {\n if (remaining < lineTexts[i].length) {\n return { x: remaining, y: startY + i };\n }\n remaining -= lineTexts[i].length;\n }\n const lastIdx = lineTexts.length - 1;\n return { x: lineTexts[lastIdx].length, y: startY + lastIdx };\n }\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { WebLinkProvider } from './web-link.provider';\n\n/**\n * Drop-in replacement for @xterm/addon-web-links that supports\n * URLs spanning wrapped terminal lines.\n * localhost/127.0.0.1 URLs are skipped (handled by ProxyLinksAddon).\n */\nexport class WebLinksAddon implements ITerminalAddon {\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler?: (event: MouseEvent, uri: string) => void\n ) {}\n\n activate(terminal: Terminal): void {\n this._linkProvider = terminal.registerLinkProvider(\n new WebLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nexport interface GitHubLinkActivateHandler {\n (event: MouseEvent, issueNumber: number): void;\n}\n\nexport class GitHubLinkProvider implements ILinkProvider {\n // #番号 形式を検出(負の先読みで数字以外が続く場合にマッチ)\n private readonly GITHUB_ISSUE_REGEX = /(?:^|[\\s(])#(\\d+)(?!\\d)/g;\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: GitHubLinkActivateHandler\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n this.GITHUB_ISSUE_REGEX.lastIndex = 0;\n\n let match: RegExpExecArray | null;\n while ((match = this.GITHUB_ISSUE_REGEX.exec(text)) !== null) {\n const issueNumber = parseInt(match[1], 10);\n const fullMatch = match[0];\n const issueRef = `#${match[1]}`;\n\n // マッチ開始位置を計算(プレフィックス文字を除く)\n const stringStartIndex = match.index + (fullMatch.length - issueRef.length);\n\n const [, startX] = this._mapStrIdx(lineIndex, 0, stringStartIndex);\n const [, endX] = this._mapStrIdx(lineIndex, startX, issueRef.length);\n\n if (startX === -1 || endX === -1) continue;\n\n links.push({\n text: issueRef,\n range: {\n start: { x: startX + 1, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber }\n },\n activate: (event) => {\n this._handler(event, issueNumber);\n }\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n private _mapStrIdx(lineIndex: number, rowIndex: number, stringIndex: number): [number, number] {\n const buf = this._terminal.buffer.active;\n const cell = buf.getNullCell();\n let start = rowIndex;\n\n while (stringIndex) {\n const line = buf.getLine(lineIndex);\n if (!line) return [-1, -1];\n\n for (let i = start; i < line.length; ++i) {\n line.getCell(i, cell);\n const chars = cell.getChars();\n const width = cell.getWidth();\n if (width) {\n stringIndex -= chars.length || 1;\n }\n if (stringIndex < 0) {\n return [lineIndex, i];\n }\n }\n lineIndex++;\n start = 0;\n }\n return [lineIndex, start];\n }\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { GitHubLinkProvider, GitHubLinkActivateHandler } from './github-link.provider';\n\nexport class GitHubLinksAddon implements ITerminalAddon {\n private _terminal?: Terminal;\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler: GitHubLinkActivateHandler\n ) {}\n\n activate(terminal: Terminal): void {\n this._terminal = terminal;\n this._linkProvider = terminal.registerLinkProvider(\n new GitHubLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nexport interface FileLinkActivateHandler {\n (event: MouseEvent, filePath: string, line?: number, column?: number): void;\n}\n\nexport class FileLinkProvider implements ILinkProvider {\n // ファイルパスを検出する正規表現\n // - 絶対パス: /path/to/file.ts, /path/to/file.ts:10:5\n // - 相対パス: ./src/file.ts, ../lib/utils.ts:20\n // - 拡張子を持つファイル名\n private readonly FILE_PATH_REGEX = /(?:^|[\\s'\"`(])((\\.\\.?\\/|\\/)?[\\w.@-]+(?:\\/[\\w.@-]+)*\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?)/g;\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: FileLinkActivateHandler\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n // bufferLineNumber は 1-indexed、buffer.getLine() は 0-indexed を期待\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n // Reset regex lastIndex\n this.FILE_PATH_REGEX.lastIndex = 0;\n\n let match: RegExpExecArray | null;\n while ((match = this.FILE_PATH_REGEX.exec(text)) !== null) {\n const filePath = match[1];\n if (this._isLikelyFilePath(filePath) && !this._isUrl(filePath)) {\n // 文字列インデックスから表示位置(セル位置)を計算\n const stringStartIndex = match.index + (match[0].length - match[1].length);\n\n // WebLinksAddon と同じ方式で位置をマッピング(0-indexed lineIndexを渡す)\n const [, startX] = this._mapStrIdx(lineIndex, 0, stringStartIndex);\n const [, endX] = this._mapStrIdx(lineIndex, startX, filePath.length);\n\n if (startX === -1 || endX === -1) {\n continue;\n }\n\n links.push({\n text: filePath,\n range: {\n // IBufferCellPosition は 1-indexed\n start: { x: startX + 1, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber }\n },\n activate: (event, linkText) => {\n const parsed = this._parseFilePath(linkText);\n this._handler(event, parsed.path, parsed.line, parsed.column);\n }\n });\n }\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n /**\n * Map a string index back to buffer positions.\n * Returns buffer position as [lineIndex, columnIndex] 0-based,\n * or [-1, -1] in case the lookup ran into a non-existing line.\n * (Based on xterm.js WebLinkProvider implementation)\n */\n private _mapStrIdx(lineIndex: number, rowIndex: number, stringIndex: number): [number, number] {\n const buf = this._terminal.buffer.active;\n const cell = buf.getNullCell();\n let start = rowIndex;\n\n while (stringIndex) {\n const line = buf.getLine(lineIndex);\n if (!line) {\n return [-1, -1];\n }\n for (let i = start; i < line.length; ++i) {\n line.getCell(i, cell);\n const chars = cell.getChars();\n const width = cell.getWidth();\n if (width) {\n stringIndex -= chars.length || 1;\n }\n if (stringIndex < 0) {\n return [lineIndex, i];\n }\n }\n lineIndex++;\n start = 0;\n }\n return [lineIndex, start];\n }\n\n private _isLikelyFilePath(text: string): boolean {\n // 拡張子を持つか確認\n return /\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?$/.test(text);\n }\n\n private _isUrl(text: string): boolean {\n // URL形式を除外\n return /^https?:\\/\\//.test(text) || /^file:\\/\\//.test(text);\n }\n\n private _parseFilePath(text: string): { path: string; line?: number; column?: number } {\n const match = text.match(/^(.+?)(?::(\\d+)(?::(\\d+))?)?$/);\n if (match) {\n return {\n path: match[1],\n line: match[2] ? parseInt(match[2], 10) : undefined,\n column: match[3] ? parseInt(match[3], 10) : undefined\n };\n }\n return { path: text };\n }\n}\n\n// Export helper functions for testing\nexport const isLikelyFilePath = (text: string): boolean => {\n return /\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?$/.test(text) && !/^https?:\\/\\//.test(text);\n};\n\nexport const parseFilePath = (text: string): { path: string; line?: number; column?: number } => {\n const match = text.match(/^(.+?)(?::(\\d+)(?::(\\d+))?)?$/);\n if (match) {\n return {\n path: match[1],\n line: match[2] ? parseInt(match[2], 10) : undefined,\n column: match[3] ? parseInt(match[3], 10) : undefined\n };\n }\n return { path: text };\n};\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { FileLinkProvider, FileLinkActivateHandler } from './file-link.provider';\n\n/**\n * xterm.js addon for detecting and handling file path links in terminal output.\n * Similar to WebLinksAddon but for local file paths.\n *\n * Usage:\n * ```typescript\n * const fileLinksAddon = new FileLinksAddon((event, filePath, line, column) => {\n * if (event.metaKey || event.ctrlKey) {\n * // Open file in editor\n * }\n * });\n * terminal.loadAddon(fileLinksAddon);\n * ```\n */\nexport class FileLinksAddon implements ITerminalAddon {\n private _terminal?: Terminal;\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler: FileLinkActivateHandler\n ) {}\n\n activate(terminal: Terminal): void {\n this._terminal = terminal;\n this._linkProvider = terminal.registerLinkProvider(\n new FileLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\n/**\n * localhost/127.0.0.1 URLをmachina web proxy URLに変換するリンクプロバイダ。\n *\n * 変換ルール:\n * http://localhost:4200/path → https://{serverUUID}--4200.proxy.machina.at/__content__/path\n * http://127.0.0.1:3000/api → https://{serverUUID}--3000.proxy.machina.at/__content__/api\n *\n * deployVersion に応じて suffix を付与:\n * - 'pr-2464' → https://{uuid}--{port}--pr-2464.proxy.machina.at/...\n * - 'v19.10.0-dev.5' 等 → https://{uuid}--{port}--dev.proxy.machina.at/...\n * - null / 'stable' → suffix なし\n */\n\nconst LOCALHOST_URL_REGEX = /https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::(\\d+))?(\\/[^\\s<>'\")\\]]*)?/g;\n\nexport type ServerUUIDGetter = () => string | undefined;\nexport type TokenGetter = () => string | undefined;\nexport type DeployVersionGetter = () => string | null | undefined;\n\n/**\n * deployVersion を proxy.machina.at のサブドメイン suffix に変換。\n *\n * 変換ルール:\n * - null / 'stable' → '' (suffix なし)\n * - 'pr-{N}' → '--pr-{N}'\n * - 'dev' / 'develop' → '--dev'\n * - 'v{X.Y.Z}' / 'v{X.Y.Z-pre.N}' → '--v{X-Y-Z}[--pre-N]' (dot → dash)\n * - 'X.Y.Z' (v prefix なし) → 同上\n * - その他 → '' (fallback)\n */\nexport function deployVersionToHostSuffix(version: string | null | undefined): string {\n if (!version || version === 'stable') return '';\n if (version.startsWith('pr-')) return `--${version}`;\n if (version === 'dev' || version === 'develop') return '--dev';\n\n // semver format: (v)?{MAJOR}.{MINOR}.{PATCH}[-{pre}.{num}]\n const match = version.match(/^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([a-z]+)\\.(\\d+))?$/);\n if (match) {\n const [, major, minor, patch, pre, num] = match;\n let encoded = `v${major}-${minor}-${patch}`;\n if (pre) encoded += `-${pre}-${num}`;\n return `--${encoded}`;\n }\n\n return '';\n}\n\nexport class ProxyLinkProvider implements ILinkProvider {\n constructor(\n private readonly _terminal: Terminal,\n private readonly _getServerUUID: ServerUUIDGetter,\n private readonly _getToken?: TokenGetter,\n private readonly _handler: (event: MouseEvent, proxyUrl: string) => void = (_, url) => {\n window.open(url, '_blank', 'noopener');\n },\n private readonly _getDeployVersion?: DeployVersionGetter,\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n console.log('[proxy-link] provideLinks line', bufferLineNumber, 'text:', text.substring(0, 80));\n LOCALHOST_URL_REGEX.lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = LOCALHOST_URL_REGEX.exec(text)) !== null) {\n const matchedUrl = match[0];\n const port = match[1] || '80';\n const path = match[2] || '/';\n\n const startX = match.index + 1;\n const endX = match.index + matchedUrl.length;\n\n links.push({\n text: matchedUrl,\n range: {\n start: { x: startX, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber },\n },\n // serverUUIDはクリック時にlazy評価(セッション接続後に値が入る)\n activate: (event) => {\n const uuid = this._getServerUUID();\n const token = this._getToken?.();\n const hostSuffix = deployVersionToHostSuffix(this._getDeployVersion?.());\n const proxyUrl = uuid\n ? `https://${uuid}--${port}${hostSuffix}.proxy.machina.at/__content__${path}`\n : null;\n const targetUrl = proxyUrl || matchedUrl;\n console.log('[proxy-link] activate:', { matchedUrl, uuid, proxyUrl, targetUrl, hasToken: !!token });\n\n if (token && proxyUrl) {\n // postMessage方式: openerとしてwindow参照を保持\n const proxyOrigin = new URL(proxyUrl).origin;\n const win = window.open(targetUrl, '_blank');\n if (win) {\n const listener = (e: MessageEvent) => {\n // クロスオリジン WindowProxy の === 比較は信頼できないため origin で判定\n if (e.origin === proxyOrigin && e.data?.type === 'proxy-auth-ready') {\n console.log('[proxy-link] auth-ready received, sending token');\n win.postMessage({ type: 'proxy-auth-token', token }, proxyOrigin);\n window.removeEventListener('message', listener);\n }\n };\n window.addEventListener('message', listener);\n // 10秒後にリスナーをクリーンアップ\n setTimeout(() => window.removeEventListener('message', listener), 10000);\n }\n } else {\n this._handler(event, targetUrl);\n }\n },\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n}\n\nexport function toProxyUrl(\n serverUUID: string,\n localhostUrl: string,\n deployVersion?: string | null,\n): string | null {\n const match = localhostUrl.match(/^https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::(\\d+))?(\\/.*)?$/);\n if (!match) return null;\n const port = match[1] || '80';\n const path = match[2] || '/';\n const hostSuffix = deployVersionToHostSuffix(deployVersion);\n return `https://${serverUUID}--${port}${hostSuffix}.proxy.machina.at/__content__${path}`;\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { ProxyLinkProvider, ServerUUIDGetter, TokenGetter, DeployVersionGetter } from './proxy-link.provider';\n\n/**\n * xterm.js addon: localhost URLをmachina web proxyにリダイレクトするリンクを表示。\n *\n * Usage:\n * ```typescript\n * const addon = new ProxyLinksAddon(() => currentServerUUID);\n * terminal.loadAddon(addon);\n * ```\n */\nexport class ProxyLinksAddon implements ITerminalAddon {\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _getServerUUID: ServerUUIDGetter,\n private readonly _getToken?: TokenGetter,\n private readonly _handler?: (event: MouseEvent, proxyUrl: string) => void,\n private readonly _getDeployVersion?: DeployVersionGetter,\n ) {}\n\n activate(terminal: Terminal): void {\n this._linkProvider = terminal.registerLinkProvider(\n new ProxyLinkProvider(\n terminal,\n this._getServerUUID,\n this._getToken,\n this._handler,\n this._getDeployVersion,\n ),\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { Directive, InjectionToken, input, inject } from '@angular/core';\nimport { _computed, InjectableComponent } from '@ng-atomic/core';\nimport { makeDI } from '@ng-atomic/common/services/ui';\n\nexport enum XtermActionId {\n DATA_INPUT = 'xterm:data-input',\n RESIZED = 'xterm:resized',\n GITHUB_LINK_CLICK = 'xterm:github-link-click',\n FILE_LINK_CLICK = 'xterm:file-link-click',\n FOCUS_INPUT_REQUEST = 'xterm:focus-input-request',\n}\n\n/** DI token for providing serverUUID getter to ProxyLinksAddon */\nexport const XTERM_SERVER_UUID = new InjectionToken<() => string | undefined>('XTERM_SERVER_UUID');\n\n/** DI token for providing CLI token getter to ProxyLinksAddon */\nexport const XTERM_PROXY_TOKEN = new InjectionToken<() => string | undefined>('XTERM_PROXY_TOKEN');\n\n/** DI token for providing deploy version getter to ProxyLinksAddon */\nexport const XTERM_DEPLOY_VERSION = new InjectionToken<() => string | null | undefined>('XTERM_DEPLOY_VERSION');\n\n@Directive({ standalone: true, selector: 'organisms-xterm' })\nexport class XtermOrganismStore extends InjectableComponent {\n static readonly DI = makeDI(XtermOrganismStore, () => () => ({\n data: '',\n interactive: false,\n queryResult: '',\n useInteractiveTheme: false,\n }), ['components', 'organisms', 'xterm']);\n\n readonly config = XtermOrganismStore.DI.injectConfig();\n readonly data = input<string | undefined>(undefined);\n readonly interactive = input<boolean>(false);\n readonly queryResult = input<string>('');\n readonly useInteractiveTheme = input<boolean>(false);\n readonly totalWritten = input<number>(0);\n\n /** Injected serverUUID getter for proxy links (optional) */\n readonly getServerUUID = inject(XTERM_SERVER_UUID, { optional: true });\n\n /** Injected CLI token getter for proxy link auto-auth (optional) */\n readonly getProxyToken = inject(XTERM_PROXY_TOKEN, { optional: true });\n\n /** Injected deploy version getter for proxy URL host suffix (optional) */\n readonly getDeployVersion = inject(XTERM_DEPLOY_VERSION, { optional: true });\n\n constructor() {\n super();\n XtermOrganismStore.DI.initialize(this);\n }\n}\n","import { Component, ElementRef, AfterViewInit, OnDestroy, ChangeDetectionStrategy, viewChild, output, effect, inject, signal } from '@angular/core';\nimport { Terminal, IDisposable } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport { WebLinksAddon } from './web-links.addon';\nimport { NgAtomicComponent } from '@ng-atomic/core';\nimport { GitHubLinksAddon } from './github-links.addon';\nimport { FileLinksAddon } from './file-links.addon';\nimport { ProxyLinksAddon } from './proxy-links.addon';\nimport { XtermOrganismStore, XtermActionId } from './xterm.organism.store';\n\n// ImageAddon types (loaded dynamically to avoid browser compatibility issues)\ntype ImageAddon = any;\ntype IImageAddonOptions = any;\n\n/**\n * Minimum container size required for terminal initialization.\n * Prevents issues with SR-only hidden containers (1x1 pixel) causing FitAddon problems.\n */\nconst MIN_CONTAINER_SIZE = 10;\n\n\n/** Default display-only theme (for catalog/storybook) */\nconst DISPLAY_THEME = {\n background: '#0a0a0a',\n foreground: '#66d9ef',\n cursor: '#ff79c6',\n cyan: '#8be9fd',\n brightCyan: '#50fa7b',\n green: '#50fa7b',\n brightGreen: '#50fa7b',\n magenta: '#ff79c6',\n brightMagenta: '#ff79c6',\n yellow: '#f1fa8c',\n brightYellow: '#ffb86c',\n red: '#ff5555',\n brightRed: '#ff5555'\n};\n\n/** Interactive session theme (matches original TerminalManager) */\nconst INTERACTIVE_THEME = {\n background: '#0a0a0a',\n foreground: '#e0e0e0',\n cursor: '#e0e0e0',\n black: '#000000',\n red: '#cd3131',\n green: '#0dbc79',\n yellow: '#e5e510',\n blue: '#2472c8',\n magenta: '#bc3fbc',\n cyan: '#11a8cd',\n white: '#e5e5e5',\n brightBlack: '#666666',\n brightRed: '#f14c4c',\n brightGreen: '#23d18b',\n brightYellow: '#f5f543',\n brightBlue: '#3b8eea',\n brightMagenta: '#d670d6',\n brightCyan: '#29b8db',\n brightWhite: '#e5e5e5',\n};\n\n@Component({\n selector: 'organisms-xterm',\n standalone: true,\n imports: [],\n template: `<div #container class=\"xterm-wrapper\"></div>`,\n styleUrls: ['./xterm.organism.css', './xterm.organism.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [{\n directive: XtermOrganismStore,\n inputs: ['data', 'interactive', 'useInteractiveTheme', 'totalWritten'],\n }],\n})\nexport class XtermOrganism extends NgAtomicComponent implements AfterViewInit, OnDestroy {\n readonly container = viewChild.required<ElementRef<HTMLDivElement>>('container');\n protected readonly store = inject(XtermOrganismStore);\n private readonly hostElement = inject(ElementRef<HTMLElement>);\n\n readonly terminalReady = output<Terminal>();\n readonly githubLinkClick = output<number>();\n\n private terminal!: Terminal;\n private fitAddon!: FitAddon;\n private imageAddon!: ImageAddon;\n private githubLinksAddon!: GitHubLinksAddon;\n private fileLinksAddon!: FileLinksAddon;\n private resizeObserver?: ResizeObserver;\n private lastDataLength = 0;\n /** Tracks how many bytes have been processed (for totalWritten-based diff detection) */\n private lastProcessedLength = 0;\n private readonly terminalInitialized = signal(false);\n /** Tracks if initialization was skipped due to container being too small */\n private initSkippedDueToSize = false;\n /** IDisposable refs for explicit cleanup (prevents memory leaks on mobile) */\n private readonly disposables: IDisposable[] = [];\n /** Timer refs for cleanup in ngOnDestroy */\n private stableTimer: ReturnType<typeof setTimeout> | null = null;\n private resizeTimer: ReturnType<typeof setTimeout> | null = null;\n private fallbackTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n super();\n\n // Watch for data input changes (with totalWritten support for buffer overflow handling)\n effect(() => {\n const isInitialized = this.terminalInitialized();\n const rawData = this.store.data();\n const totalWritten = this.store.totalWritten();\n const dataIsFunction = typeof rawData === 'function';\n const data = dataIsFunction ? (rawData as any)() : rawData;\n if (!isInitialized) return;\n\n // Use totalWritten-based logic when available (handles buffer overflow correctly)\n if (totalWritten > 0) {\n this.writeDataWithTotalWritten(data ?? '', totalWritten);\n } else {\n // Legacy fallback for backward compatibility\n this.writeDataToTerminal(data);\n }\n });\n\n // Watch for interactive mode changes and update host class\n // Note: Using effect with classList because @HostBinding doesn't work with OnPush + signals\n effect(() => {\n const isInteractive = this.store.interactive();\n if (isInteractive) {\n this.hostElement.nativeElement.classList.add('interactive');\n } else {\n this.hostElement.nativeElement.classList.remove('interactive');\n }\n });\n\n // Watch for interactive mode changes and update cursor blink\n effect(() => {\n const isInitialized = this.terminalInitialized();\n const isInteractive = this.store.interactive();\n if (!isInitialized || !this.terminal) return;\n\n // Update cursor blink setting\n this.terminal.options.cursorBlink = isInteractive;\n });\n }\n\n private writeDataToTerminal(data: string | undefined): void {\n // Guard against undefined/null/empty data\n // Empty string is treated as \"no data yet\" (from startWith('') in streams)\n // Explicit reset should use the public clear() or reset() methods\n if (data === undefined || data === null || data === '') {\n return;\n }\n // O(1) length comparison instead of O(n) startsWith\n if (data.length >= this.lastDataLength) {\n const newPart = data.slice(this.lastDataLength);\n if (newPart) {\n this.terminal.write(newPart);\n }\n this.lastDataLength = data.length;\n } else {\n // Data got shorter = reset occurred\n this.terminal.reset();\n this.terminal.write(data);\n this.lastDataLength = data.length;\n }\n }\n\n /**\n * Write data using totalWritten for accurate diff detection.\n * This method handles buffer overflow scenarios correctly.\n * When newBytesCount >= data.length, performs a full redraw with terminal.reset()\n * to prevent stale output from previous sessions remaining on screen.\n * @param data The current buffer content\n * @param totalWritten Total bytes written to the buffer (cumulative)\n */\n private writeDataWithTotalWritten(data: string, totalWritten: number): void {\n if (!data) return;\n\n const newBytesCount = totalWritten - this.lastProcessedLength;\n\n if (newBytesCount <= 0) {\n if (totalWritten < this.lastProcessedLength) {\n // Reset detected (totalWritten decreased)\n this.terminal.reset();\n this.terminal.write(data);\n this.lastProcessedLength = totalWritten;\n }\n return;\n }\n\n // Full redraw needed: first render, session switch, or buffer overflow\n // (newBytesCount >= data.length means the diff covers the entire buffer or more)\n if (newBytesCount >= data.length) {\n this.terminal.reset();\n this.terminal.write(data);\n } else {\n // Normal incremental write - extract only new content\n const newContent = data.slice(-newBytesCount);\n if (newContent) {\n this.terminal.write(newContent);\n }\n }\n this.lastProcessedLength = totalWritten;\n }\n\n ngAfterViewInit() {\n const containerElement = this.container().nativeElement;\n\n // Guard against initialization in very small containers (e.g., SR-only 1x1 pixel hidden elements)\n // This prevents FitAddon issues and excessive processing in hidden query sections\n if (containerElement.offsetWidth < MIN_CONTAINER_SIZE || containerElement.offsetHeight < MIN_CONTAINER_SIZE) {\n this.initSkippedDueToSize = true;\n // Retry initialization when container reaches minimum size (e.g., after CSS/layout settles)\n this.resizeObserver = new ResizeObserver(() => {\n if (containerElement.offsetWidth >= MIN_CONTAINER_SIZE && containerElement.offsetHeight >= MIN_CONTAINER_SIZE) {\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.initSkippedDueToSize = false;\n this.initializeTerminal(containerElement);\n }\n });\n this.resizeObserver.observe(containerElement);\n return;\n }\n\n this.initializeTerminal(containerElement);\n }\n\n private initializeTerminal(containerElement: HTMLDivElement): void {\n const isInteractive = this.store.interactive();\n const useInteractiveTheme = this.store.useInteractiveTheme() || isInteractive;\n\n this.terminal = new Terminal({\n theme: useInteractiveTheme ? INTERACTIVE_THEME : DISPLAY_THEME,\n scrollback: isInteractive ? 10000 : 1000,\n fontSize: useInteractiveTheme ? 14 : 12,\n fontFamily: '\"FiraCode Nerd Font\", \"Fira Code\", \"SF Mono\", \"Cascadia Code\", \"Consolas\", \"Courier New\", monospace',\n lineHeight: 1.2,\n allowTransparency: false,\n disableStdin: !isInteractive,\n cursorBlink: isInteractive,\n cursorStyle: 'block',\n convertEol: true,\n rows: 24\n });\n\n this.fitAddon = new FitAddon();\n this.terminal.loadAddon(this.fitAddon);\n this.terminal.loadAddon(new WebLinksAddon());\n\n // ImageAddon for displaying inline images (SIXEL and iTerm2 IIP support)\n // Loaded dynamically to avoid browser compatibility issues\n this.loadImageAddon();\n\n this.githubLinksAddon = new GitHubLinksAddon((event, issueNumber) => {\n this.dispatch({ id: XtermActionId.GITHUB_LINK_CLICK, payload: issueNumber });\n });\n this.terminal.loadAddon(this.githubLinksAddon);\n\n this.fileLinksAddon = new FileLinksAddon((event, filePath, line, column) => {\n if (event.metaKey || event.ctrlKey) {\n this.dispatch({ id: XtermActionId.FILE_LINK_CLICK, payload: { filePath, line, column } });\n }\n });\n this.terminal.loadAddon(this.fileLinksAddon);\n\n // ProxyLinksAddon: localhost → proxy.machina.at redirect (always loaded)\n this.terminal.loadAddon(new ProxyLinksAddon(\n this.store.getServerUUID ?? (() => undefined),\n this.store.getProxyToken ?? undefined,\n undefined,\n this.store.getDeployVersion ?? undefined,\n ));\n\n this.terminal.open(containerElement);\n\n // Setup event handlers for interactive mode\n if (isInteractive) {\n this.disposables.push(\n this.terminal.onData((data) => {\n this.dispatch({ id: XtermActionId.DATA_INPUT, payload: data });\n }),\n this.terminal.onResize(({ cols, rows }) => this.dispatch({ id: XtermActionId.RESIZED, payload: { cols, rows } })),\n );\n }\n\n // Use ResizeObserver with debounce to wait for container size to stabilize\n // (CSS transitions take 300-500ms, so fixed setTimeout(100ms) is too early)\n this.resizeObserver = new ResizeObserver(() => {\n try {\n if (!this.terminalInitialized()) {\n this.fitAddon.fit();\n // Debounce: wait for container to stop changing before initializing\n if (this.stableTimer) clearTimeout(this.stableTimer);\n this.stableTimer = setTimeout(() => {\n this.stableTimer = null;\n this.fitAddon.fit();\n this.markInitialized(isInteractive);\n }, 150);\n } else if (isInteractive) {\n // Debounce resize to wait for CSS transitions to complete (300ms)\n if (this.resizeTimer) clearTimeout(this.resizeTimer);\n this.resizeTimer = setTimeout(() => {\n this.resizeTimer = null;\n this.fitAddon.fit();\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }, 300);\n }\n } catch (e) {\n console.warn('Failed to fit terminal:', e);\n }\n });\n this.resizeObserver.observe(containerElement);\n\n // Fallback: initialize after 500ms if ResizeObserver hasn't triggered stable state\n this.fallbackTimer = setTimeout(() => {\n this.fallbackTimer = null;\n if (!this.terminalInitialized()) {\n this.fitAddon.fit();\n this.markInitialized(isInteractive);\n }\n }, 500);\n }\n\n ngOnDestroy() {\n // Clear pending timers to prevent post-destroy callbacks\n if (this.stableTimer) clearTimeout(this.stableTimer);\n if (this.resizeTimer) clearTimeout(this.resizeTimer);\n if (this.fallbackTimer) clearTimeout(this.fallbackTimer);\n\n this.resizeObserver?.disconnect();\n\n // Dispose xterm event handlers (onData, onResize) to prevent memory leaks\n for (const d of this.disposables) d.dispose();\n this.disposables.length = 0;\n\n // Remove terminal instance from window for E2E testing cleanup\n if (typeof window !== 'undefined' && (window as any).__XTERM_INSTANCES__) {\n const instances = (window as any).__XTERM_INSTANCES__ as Terminal[];\n const index = instances.indexOf(this.terminal);\n if (index !== -1) {\n instances.splice(index, 1);\n }\n }\n\n this.terminal?.dispose();\n }\n\n private markInitialized(isInteractive: boolean): void {\n if (this.terminalInitialized()) return;\n this.terminalInitialized.set(true);\n this.terminalReady.emit(this.terminal);\n\n // Expose terminal instance for E2E testing (only in development/test environments)\n if (typeof window !== 'undefined') {\n (window as any).__XTERM_INSTANCES__ = (window as any).__XTERM_INSTANCES__ || [];\n (window as any).__XTERM_INSTANCES__.push(this.terminal);\n }\n\n // Dispatch initial RESIZED for interactive mode\n if (isInteractive) {\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }\n }\n\n private async loadImageAddon(): Promise<void> {\n try {\n const { ImageAddon } = await import('@xterm/addon-image');\n const imageAddonOptions = {\n enableSizeReports: true,\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 256,\n };\n this.imageAddon = new ImageAddon(imageAddonOptions);\n this.terminal.loadAddon(this.imageAddon);\n } catch (e) {\n // ImageAddon not available in browser environment - this is expected\n console.debug('ImageAddon not available:', e);\n }\n }\n\n // Public API\n public write(text: string): void {\n this.terminal?.write(text);\n }\n\n public writeln(text: string): void {\n this.terminal?.writeln(text);\n }\n\n public clear(): void {\n this.terminal?.clear();\n }\n\n public scrollToBottom(): void {\n this.terminal?.scrollToBottom();\n }\n\n public scrollToTop(): void {\n this.terminal?.scrollToTop();\n }\n\n public scrollLines(lines: number): void {\n this.terminal?.scrollLines(lines);\n }\n\n public fit(): void {\n this.fitAddon?.fit();\n // Only dispatch RESIZED after initialization to prevent sending wrong cols/rows\n // during CSS transitions (SessionTemplateV2.ngAfterViewInit calls fit() before layout stabilizes)\n if (this.terminalInitialized() && this.terminal) {\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }\n }\n\n public get cols(): number {\n return this.terminal?.cols ?? 80;\n }\n\n public get rows(): number {\n return this.terminal?.rows ?? 24;\n }\n\n public getTerminal(): Terminal | undefined {\n // Only expose terminal after fitAddon.fit() has run (terminalInitialized === true)\n return this.terminalInitialized() ? this.terminal : undefined;\n }\n\n /**\n * Display an inline image using iTerm2's Inline Image Protocol\n * @param base64Data Base64 encoded image data (PNG, JPEG, etc.)\n * @param options Image display options\n */\n public displayImage(base64Data: string, options?: {\n width?: string | number; // e.g., '50%', 'auto', or cell count\n height?: string | number; // e.g., '10', 'auto', or cell count\n preserveAspectRatio?: boolean;\n name?: string;\n }): void {\n if (!this.terminal) return;\n\n const args: string[] = ['inline=1'];\n\n if (options?.width) {\n args.push(`width=${options.width}`);\n }\n if (options?.height) {\n args.push(`height=${options.height}`);\n }\n if (options?.preserveAspectRatio !== undefined) {\n args.push(`preserveAspectRatio=${options.preserveAspectRatio ? 1 : 0}`);\n }\n if (options?.name) {\n args.push(`name=${btoa(options.name)}`);\n }\n\n // iTerm2 Inline Image Protocol escape sequence\n const escapeSequence = `\\x1b]1337;File=${args.join(';')}:${base64Data}\\x07`;\n this.terminal.write(escapeSequence);\n }\n\n /**\n * Get the ImageAddon instance for advanced image operations\n */\n public getImageAddon(): ImageAddon | undefined {\n return this.imageAddon;\n }\n}\n","/**\n * Utility functions for displaying images in xterm using SIXEL format\n */\n\nexport interface SvgToSixelOptions {\n width?: number;\n height?: number;\n backgroundColor?: string;\n textColor?: string;\n}\n\n/**\n * Generate ASCII art text using figlet\n * Note: figlet is loaded dynamically as it's not available in browser environments\n */\nexport async function generateAsciiArt(text: string, font = 'ANSI Shadow'): Promise<string> {\n try {\n const figlet = await import('figlet');\n return new Promise((resolve, reject) => {\n figlet.default.text(text, { font: font as any }, (err, result) => {\n if (err) {\n reject(err);\n return;\n }\n resolve(result || '');\n });\n });\n } catch (e) {\n // figlet not available in browser - return simple text\n console.debug('figlet not available:', e);\n return text;\n }\n}\n\n/**\n * Convert ASCII art text to SVG with transparent background\n */\nexport function asciiArtToSvg(\n asciiArt: string,\n options: { textColor?: string; fontSize?: number } = {}\n): string {\n const { textColor = '#00FFFF', fontSize = 14 } = options;\n\n const lines = asciiArt.split('\\n');\n const maxLineLength = Math.max(...lines.map(l => l.length));\n\n // Calculate dimensions based on monospace font metrics (block chars need more width)\n const charWidth = fontSize * 0.65;\n const lineHeight = fontSize * 1.4;\n const padding = 40;\n const width = Math.ceil(maxLineLength * charWidth) + padding;\n const height = Math.ceil(lines.length * lineHeight) + padding;\n\n // Build SVG with text elements for each line\n const textElements = lines.map((line, i) => {\n // Escape special XML characters\n const escapedLine = line\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n\n return `<text x=\"20\" y=\"${20 + (i + 1) * lineHeight}\" fill=\"${textColor}\" xml:space=\"preserve\">${escapedLine}</text>`;\n }).join('\\n ');\n\n return `<svg width=\"${width}\" height=\"${height}\" xmlns=\"http://www.w3.org/2000/svg\">\n <style>text { font-family: 'Courier New', Consolas, monospace; font-size: ${fontSize}px; white-space: pre; }</style>\n ${textElements}\n</svg>`;\n}\n\n/**\n * Convert SVG to SIXEL format for xterm display\n */\nexport async function svgToSixel(\n svgString: string,\n options: SvgToSixelOptions = {}\n): Promise<string> {\n const { width = 400, height = 200, backgroundColor } = options;\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Failed to get canvas context'));\n return;\n }\n\n // Fill background (transparent if not specified)\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width, height);\n }\n\n const img = new Image();\n const blob = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n\n img.onload = () => {\n ctx.drawImage(img, 0, 0, width, height);\n URL.revokeObjectURL(url);\n\n const imageData = ctx.getImageData(0, 0, width, height);\n const sixelData = imageDataToSixel(imageData);\n resolve(sixelData);\n };\n\n img.onerror = (error) => {\n URL.revokeObjectURL(url);\n reject(error);\n };\n\n img.src = url;\n });\n}\n\n/**\n * Convert ImageData to SIXEL escape sequence\n */\nfunction imageDataToSixel(imageData: ImageData): string {\n const { width, height, data } = imageData;\n\n // Build color palette (quantize to 16 colors)\n const palette = buildColorPalette(data, 16);\n const colorMap = new Map<string, number>();\n palette.forEach((color, index) => {\n colorMap.set(color, index);\n });\n\n // SIXEL header\n let sixel = '\\x1bPq';\n\n // Define colors in palette\n palette.forEach((color, index) => {\n const [r, g, b] = hexToRgb(color);\n const rPct = Math.round((r / 255) * 100);\n const gPct = Math.round((g / 255) * 100);\n const bPct = Math.round((b / 255) * 100);\n sixel += `#${index};2;${rPct};${gPct};${bPct}`;\n });\n\n // Process image in bands of 6 rows\n for (let bandY = 0; bandY < height; bandY += 6) {\n for (let colorIdx = 0; colorIdx < palette.length; colorIdx++) {\n const color = palette[colorIdx];\n let rowData = '';\n let hasPixels = false;\n\n rowData += `#${colorIdx}`;\n\n for (let x = 0; x < width; x++) {\n let sixelValue = 0;\n\n for (let dy = 0; dy < 6; dy++) {\n const y = bandY + dy;\n if (y >= height) continue;\n\n const pixelIndex = (y * width + x) * 4;\n const r = data[pixelIndex];\n const g = data[pixelIndex + 1];\n const b = data[pixelIndex + 2];\n const a = data[pixelIndex + 3];\n\n if (a < 128) continue;\n\n const pixelColor = rgbToHex(r, g, b);\n const nearestColor = findNearestColor(pixelColor, palette);\n\n if (nearestColor === color) {\n sixelValue |= (1 << dy);\n hasPixels = true;\n }\n }\n\n rowData += String.fromCharCode(63 + sixelValue);\n }\n\n if (hasPixels) {\n sixel += rowData;\n sixel += '$';\n }\n }\n\n if (bandY + 6 < height) {\n sixel += '-';\n }\n }\n\n sixel += '\\x1b\\\\';\n return sixel;\n}\n\nfunction buildColorPalette(data: Uint8ClampedArray, maxColors: number): string[] {\n const colorCounts = new Map<string, number>();\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n const a = data[i + 3];\n\n if (a < 128) continue;\n\n const qr = Math.floor(r / 16) * 16;\n const qg = Math.floor(g / 16) * 16;\n const qb = Math.floor(b / 16) * 16;\n const color = rgbToHex(qr, qg, qb);\n\n colorCounts.set(color, (colorCounts.get(color) || 0) + 1);\n }\n\n return Array.from(colorCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, maxColors)\n .map(([color]) => color);\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\nfunction hexToRgb(hex: string): [number, number, number] {\n const match = hex.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);\n if (!match) return [0, 0, 0];\n return [parseInt(match[1], 16), parseInt(match[2], 16), parseInt(match[3], 16)];\n}\n\nfunction findNearestColor(targetHex: string, palette: string[]): string {\n const [tr, tg, tb] = hexToRgb(targetHex);\n let nearest = palette[0];\n let minDist = Infinity;\n\n for (const color of palette) {\n const [r, g, b] = hexToRgb(color);\n const dist = (tr - r) ** 2 + (tg - g) ** 2 + (tb - b) ** 2;\n if (dist < minDist) {\n minDist = dist;\n nearest = color;\n }\n }\n\n return nearest;\n}\n\n/**\n * Generate MACHINA ASCII art banner as SIXEL\n */\nexport async function getMachinaAsciiArtSixel(\n options: SvgToSixelOptions = {}\n): Promise<string> {\n // Generate ASCII art for \"MACHINA\"\n const machinaArt = await generateAsciiArt('MACHINA', 'ANSI Shadow');\n\n // Convert to SVG with cyan color (terminal style)\n const fontSize = 14;\n const svg = asciiArtToSvg(machinaArt, {\n textColor: options.textColor || '#00FFFF',\n fontSize\n });\n\n // Calculate appropriate dimensions matching asciiArtToSvg calculation\n const lines = machinaArt.split('\\n');\n const maxLineLength = Math.max(...lines.map(l => l.length));\n const charWidth = fontSize * 0.65;\n const lineHeight = fontSize * 1.4;\n const padding = 40;\n const defaultWidth = Math.ceil(maxLineLength * charWidth) + padding;\n const defaultHeight = Math.ceil(lines.length * lineHeight) + padding;\n\n return svgToSixel(svg, {\n width: options.width || defaultWidth,\n height: options.height || defaultHeight,\n backgroundColor: options.backgroundColor || '#0a0a0a',\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-components-organisms-xterm.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/file-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/file-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.store.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/image.utils.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xxmachina-components-organisms-xterm.ts"],"sourcesContent":["import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nconst URL_REGEX = /https?:\\/\\/[^\\s<>'\")\\[\\]]+/g;\nconst LOCALHOST_REGEX = /^https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::\\d+)?(?:\\/|$)/;\nconst MAX_SCAN_LINES = 30;\n\n/**\n * Link provider that detects URLs spanning multiple terminal lines.\n * localhost/127.0.0.1 URLs are skipped (handled by ProxyLinksAddon).\n */\nexport class WebLinkProvider implements ILinkProvider {\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: (event: MouseEvent, uri: string) => void = (_, uri) => {\n window.open(uri, '_blank', 'noopener');\n },\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const buffer = this._terminal.buffer.active;\n\n let startY = bufferLineNumber - 1;\n while (startY > 0\n && (bufferLineNumber - 1 - startY) < MAX_SCAN_LINES\n && this._isLineContinuation(startY)\n ) {\n startY--;\n }\n\n const lineTexts: string[] = [];\n let y = startY;\n do {\n const line = buffer.getLine(y);\n if (!line) break;\n lineTexts.push(line.translateToString(true));\n y++;\n } while (\n y < buffer.length\n && (y - startY) < MAX_SCAN_LINES\n && this._isLineContinuation(y)\n );\n\n const fullText = lineTexts.join('');\n\n URL_REGEX.lastIndex = 0;\n let match: RegExpExecArray | null;\n const links: ILink[] = [];\n\n while ((match = URL_REGEX.exec(fullText)) !== null) {\n if (LOCALHOST_REGEX.test(match[0])) continue;\n\n const startPos = this._offsetToPos(match.index, startY, lineTexts);\n const endPos = this._offsetToPos(match.index + match[0].length - 1, startY, lineTexts);\n if (!startPos || !endPos) continue;\n\n links.push({\n text: match[0],\n range: {\n start: { x: startPos.x + 1, y: startPos.y + 1 },\n end: { x: endPos.x + 1, y: endPos.y + 1 },\n },\n activate: (event, text) => this._handler(event, text),\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n private _isLineContinuation(lineIdx: number): boolean {\n const buffer = this._terminal.buffer.active;\n const line = buffer.getLine(lineIdx);\n if (!line) return false;\n if (line.isWrapped) return true;\n\n if (lineIdx === 0) return false;\n const prevLine = buffer.getLine(lineIdx - 1);\n if (!prevLine) return false;\n\n const prevText = prevLine.translateToString(true);\n const currentText = line.translateToString(true);\n return (\n prevText.length > 0\n && !/\\s$/.test(prevText)\n && currentText.length > 0\n && !/^\\s/.test(currentText)\n );\n }\n\n private _offsetToPos(\n offset: number, startY: number, lineTexts: string[],\n ): { x: number; y: number } | null {\n let remaining = offset;\n for (let i = 0; i < lineTexts.length; i++) {\n if (remaining < lineTexts[i].length) {\n return { x: remaining, y: startY + i };\n }\n remaining -= lineTexts[i].length;\n }\n const lastIdx = lineTexts.length - 1;\n return { x: lineTexts[lastIdx].length, y: startY + lastIdx };\n }\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { WebLinkProvider } from './web-link.provider';\n\n/**\n * Drop-in replacement for @xterm/addon-web-links that supports\n * URLs spanning wrapped terminal lines.\n * localhost/127.0.0.1 URLs are skipped (handled by ProxyLinksAddon).\n */\nexport class WebLinksAddon implements ITerminalAddon {\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler?: (event: MouseEvent, uri: string) => void\n ) {}\n\n activate(terminal: Terminal): void {\n this._linkProvider = terminal.registerLinkProvider(\n new WebLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nexport interface GitHubLinkActivateHandler {\n (event: MouseEvent, issueNumber: number): void;\n}\n\nexport class GitHubLinkProvider implements ILinkProvider {\n // #番号 形式を検出(負の先読みで数字以外が続く場合にマッチ)\n private readonly GITHUB_ISSUE_REGEX = /(?:^|[\\s(])#(\\d+)(?!\\d)/g;\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: GitHubLinkActivateHandler\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n this.GITHUB_ISSUE_REGEX.lastIndex = 0;\n\n let match: RegExpExecArray | null;\n while ((match = this.GITHUB_ISSUE_REGEX.exec(text)) !== null) {\n const issueNumber = parseInt(match[1], 10);\n const fullMatch = match[0];\n const issueRef = `#${match[1]}`;\n\n // マッチ開始位置を計算(プレフィックス文字を除く)\n const stringStartIndex = match.index + (fullMatch.length - issueRef.length);\n\n const [, startX] = this._mapStrIdx(lineIndex, 0, stringStartIndex);\n const [, endX] = this._mapStrIdx(lineIndex, startX, issueRef.length);\n\n if (startX === -1 || endX === -1) continue;\n\n links.push({\n text: issueRef,\n range: {\n start: { x: startX + 1, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber }\n },\n activate: (event) => {\n this._handler(event, issueNumber);\n }\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n private _mapStrIdx(lineIndex: number, rowIndex: number, stringIndex: number): [number, number] {\n const buf = this._terminal.buffer.active;\n const cell = buf.getNullCell();\n let start = rowIndex;\n\n while (stringIndex) {\n const line = buf.getLine(lineIndex);\n if (!line) return [-1, -1];\n\n for (let i = start; i < line.length; ++i) {\n line.getCell(i, cell);\n const chars = cell.getChars();\n const width = cell.getWidth();\n if (width) {\n stringIndex -= chars.length || 1;\n }\n if (stringIndex < 0) {\n return [lineIndex, i];\n }\n }\n lineIndex++;\n start = 0;\n }\n return [lineIndex, start];\n }\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { GitHubLinkProvider, GitHubLinkActivateHandler } from './github-link.provider';\n\nexport class GitHubLinksAddon implements ITerminalAddon {\n private _terminal?: Terminal;\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler: GitHubLinkActivateHandler\n ) {}\n\n activate(terminal: Terminal): void {\n this._terminal = terminal;\n this._linkProvider = terminal.registerLinkProvider(\n new GitHubLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nexport interface FileLinkActivateHandler {\n (event: MouseEvent, filePath: string, line?: number, column?: number): void;\n}\n\nexport class FileLinkProvider implements ILinkProvider {\n // ファイルパスを検出する正規表現\n // - 絶対パス: /path/to/file.ts, /path/to/file.ts:10:5\n // - 相対パス: ./src/file.ts, ../lib/utils.ts:20\n // - 拡張子を持つファイル名\n private readonly FILE_PATH_REGEX = /(?:^|[\\s'\"`(])((\\.\\.?\\/|\\/)?[\\w.@-]+(?:\\/[\\w.@-]+)*\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?)/g;\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: FileLinkActivateHandler\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n // bufferLineNumber は 1-indexed、buffer.getLine() は 0-indexed を期待\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n // Reset regex lastIndex\n this.FILE_PATH_REGEX.lastIndex = 0;\n\n let match: RegExpExecArray | null;\n while ((match = this.FILE_PATH_REGEX.exec(text)) !== null) {\n const filePath = match[1];\n if (this._isLikelyFilePath(filePath) && !this._isUrl(filePath)) {\n // 文字列インデックスから表示位置(セル位置)を計算\n const stringStartIndex = match.index + (match[0].length - match[1].length);\n\n // WebLinksAddon と同じ方式で位置をマッピング(0-indexed lineIndexを渡す)\n const [, startX] = this._mapStrIdx(lineIndex, 0, stringStartIndex);\n const [, endX] = this._mapStrIdx(lineIndex, startX, filePath.length);\n\n if (startX === -1 || endX === -1) {\n continue;\n }\n\n links.push({\n text: filePath,\n range: {\n // IBufferCellPosition は 1-indexed\n start: { x: startX + 1, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber }\n },\n activate: (event, linkText) => {\n const parsed = this._parseFilePath(linkText);\n this._handler(event, parsed.path, parsed.line, parsed.column);\n }\n });\n }\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n /**\n * Map a string index back to buffer positions.\n * Returns buffer position as [lineIndex, columnIndex] 0-based,\n * or [-1, -1] in case the lookup ran into a non-existing line.\n * (Based on xterm.js WebLinkProvider implementation)\n */\n private _mapStrIdx(lineIndex: number, rowIndex: number, stringIndex: number): [number, number] {\n const buf = this._terminal.buffer.active;\n const cell = buf.getNullCell();\n let start = rowIndex;\n\n while (stringIndex) {\n const line = buf.getLine(lineIndex);\n if (!line) {\n return [-1, -1];\n }\n for (let i = start; i < line.length; ++i) {\n line.getCell(i, cell);\n const chars = cell.getChars();\n const width = cell.getWidth();\n if (width) {\n stringIndex -= chars.length || 1;\n }\n if (stringIndex < 0) {\n return [lineIndex, i];\n }\n }\n lineIndex++;\n start = 0;\n }\n return [lineIndex, start];\n }\n\n private _isLikelyFilePath(text: string): boolean {\n // 拡張子を持つか確認\n return /\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?$/.test(text);\n }\n\n private _isUrl(text: string): boolean {\n // URL形式を除外\n return /^https?:\\/\\//.test(text) || /^file:\\/\\//.test(text);\n }\n\n private _parseFilePath(text: string): { path: string; line?: number; column?: number } {\n const match = text.match(/^(.+?)(?::(\\d+)(?::(\\d+))?)?$/);\n if (match) {\n return {\n path: match[1],\n line: match[2] ? parseInt(match[2], 10) : undefined,\n column: match[3] ? parseInt(match[3], 10) : undefined\n };\n }\n return { path: text };\n }\n}\n\n// Export helper functions for testing\nexport const isLikelyFilePath = (text: string): boolean => {\n return /\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?$/.test(text) && !/^https?:\\/\\//.test(text);\n};\n\nexport const parseFilePath = (text: string): { path: string; line?: number; column?: number } => {\n const match = text.match(/^(.+?)(?::(\\d+)(?::(\\d+))?)?$/);\n if (match) {\n return {\n path: match[1],\n line: match[2] ? parseInt(match[2], 10) : undefined,\n column: match[3] ? parseInt(match[3], 10) : undefined\n };\n }\n return { path: text };\n};\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { FileLinkProvider, FileLinkActivateHandler } from './file-link.provider';\n\n/**\n * xterm.js addon for detecting and handling file path links in terminal output.\n * Similar to WebLinksAddon but for local file paths.\n *\n * Usage:\n * ```typescript\n * const fileLinksAddon = new FileLinksAddon((event, filePath, line, column) => {\n * if (event.metaKey || event.ctrlKey) {\n * // Open file in editor\n * }\n * });\n * terminal.loadAddon(fileLinksAddon);\n * ```\n */\nexport class FileLinksAddon implements ITerminalAddon {\n private _terminal?: Terminal;\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler: FileLinkActivateHandler\n ) {}\n\n activate(terminal: Terminal): void {\n this._terminal = terminal;\n this._linkProvider = terminal.registerLinkProvider(\n new FileLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\n/**\n * localhost/127.0.0.1 URLをmachina web proxy URLに変換するリンクプロバイダ。\n *\n * 変換ルール:\n * http://localhost:4200/path → https://{serverUUID}--4200.proxy.machina.at/__content__/path\n * http://127.0.0.1:3000/api → https://{serverUUID}--3000.proxy.machina.at/__content__/api\n *\n * deployVersion に応じて suffix を付与:\n * - 'pr-2464' → https://{uuid}--{port}--pr-2464.proxy.machina.at/...\n * - 'v19.10.0-dev.5' 等 → https://{uuid}--{port}--dev.proxy.machina.at/...\n * - null / 'stable' → suffix なし\n */\n\nconst LOCALHOST_URL_REGEX = /https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::(\\d+))?(\\/[^\\s<>'\")\\]]*)?/g;\n\nexport type ServerUUIDGetter = () => string | undefined;\nexport type TokenGetter = () => string | undefined;\nexport type DeployVersionGetter = () => string | null | undefined;\n\nexport interface ProxyEndpoints {\n apiNext: string;\n hasura: string;\n}\nexport type EndpointsGetter = () => ProxyEndpoints | undefined;\n\n/**\n * deployVersion を proxy.machina.at のサブドメイン suffix に変換。\n *\n * 変換ルール:\n * - null / 'stable' → '' (suffix なし)\n * - 'pr-{N}' → '--pr-{N}'\n * - 'dev' / 'develop' → '--dev'\n * - 'v{X.Y.Z}' / 'v{X.Y.Z-pre.N}' → '--v{X-Y-Z}[--pre-N]' (dot → dash)\n * - 'X.Y.Z' (v prefix なし) → 同上\n * - その他 → '' (fallback)\n */\nexport function deployVersionToHostSuffix(version: string | null | undefined): string {\n if (!version || version === 'stable') return '';\n if (version.startsWith('pr-')) return `--${version}`;\n if (version === 'dev' || version === 'develop') return '--dev';\n\n // semver format: (v)?{MAJOR}.{MINOR}.{PATCH}[-{pre}.{num}]\n const match = version.match(/^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([a-z]+)\\.(\\d+))?$/);\n if (match) {\n const [, major, minor, patch, pre, num] = match;\n let encoded = `v${major}-${minor}-${patch}`;\n if (pre) encoded += `-${pre}-${num}`;\n return `--${encoded}`;\n }\n\n return '';\n}\n\nexport class ProxyLinkProvider implements ILinkProvider {\n constructor(\n private readonly _terminal: Terminal,\n private readonly _getServerUUID: ServerUUIDGetter,\n private readonly _getToken?: TokenGetter,\n private readonly _handler: (event: MouseEvent, proxyUrl: string) => void = (_, url) => {\n window.open(url, '_blank', 'noopener');\n },\n private readonly _getDeployVersion?: DeployVersionGetter,\n private readonly _getEndpoints?: EndpointsGetter,\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n console.log('[proxy-link] provideLinks line', bufferLineNumber, 'text:', text.substring(0, 80));\n LOCALHOST_URL_REGEX.lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = LOCALHOST_URL_REGEX.exec(text)) !== null) {\n const matchedUrl = match[0];\n const port = match[1] || '80';\n const path = match[2] || '/';\n\n const startX = match.index + 1;\n const endX = match.index + matchedUrl.length;\n\n links.push({\n text: matchedUrl,\n range: {\n start: { x: startX, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber },\n },\n // serverUUIDはクリック時にlazy評価(セッション接続後に値が入る)\n activate: (event) => {\n const uuid = this._getServerUUID();\n const token = this._getToken?.();\n const hostSuffix = deployVersionToHostSuffix(this._getDeployVersion?.());\n const proxyUrl = uuid\n ? `https://${uuid}--${port}${hostSuffix}.proxy.machina.at/__content__${path}`\n : null;\n const targetUrl = proxyUrl || matchedUrl;\n console.log('[proxy-link] activate:', { matchedUrl, uuid, proxyUrl, targetUrl, hasToken: !!token });\n\n if (token && proxyUrl) {\n // postMessage方式: openerとしてwindow参照を保持\n const proxyOrigin = new URL(proxyUrl).origin;\n const win = window.open(targetUrl, '_blank');\n if (win) {\n const listener = (e: MessageEvent) => {\n // クロスオリジン WindowProxy の === 比較は信頼できないため origin で判定\n if (e.origin === proxyOrigin && e.data?.type === 'proxy-auth-ready') {\n console.log('[proxy-link] auth-ready received, sending token');\n const endpoints = this._getEndpoints?.();\n win.postMessage({ type: 'proxy-auth-token', token, endpoints }, proxyOrigin);\n window.removeEventListener('message', listener);\n }\n };\n window.addEventListener('message', listener);\n // 10秒後にリスナーをクリーンアップ\n setTimeout(() => window.removeEventListener('message', listener), 10000);\n }\n } else {\n this._handler(event, targetUrl);\n }\n },\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n}\n\nexport function toProxyUrl(\n serverUUID: string,\n localhostUrl: string,\n deployVersion?: string | null,\n): string | null {\n const match = localhostUrl.match(/^https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::(\\d+))?(\\/.*)?$/);\n if (!match) return null;\n const port = match[1] || '80';\n const path = match[2] || '/';\n const hostSuffix = deployVersionToHostSuffix(deployVersion);\n return `https://${serverUUID}--${port}${hostSuffix}.proxy.machina.at/__content__${path}`;\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { ProxyLinkProvider, ServerUUIDGetter, TokenGetter, DeployVersionGetter, EndpointsGetter } from './proxy-link.provider';\n\n/**\n * xterm.js addon: localhost URLをmachina web proxyにリダイレクトするリンクを表示。\n *\n * Usage:\n * ```typescript\n * const addon = new ProxyLinksAddon(() => currentServerUUID);\n * terminal.loadAddon(addon);\n * ```\n */\nexport class ProxyLinksAddon implements ITerminalAddon {\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _getServerUUID: ServerUUIDGetter,\n private readonly _getToken?: TokenGetter,\n private readonly _handler?: (event: MouseEvent, proxyUrl: string) => void,\n private readonly _getDeployVersion?: DeployVersionGetter,\n private readonly _getEndpoints?: EndpointsGetter,\n ) {}\n\n activate(terminal: Terminal): void {\n this._linkProvider = terminal.registerLinkProvider(\n new ProxyLinkProvider(\n terminal,\n this._getServerUUID,\n this._getToken,\n this._handler,\n this._getDeployVersion,\n this._getEndpoints,\n ),\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { Directive, InjectionToken, input, inject } from '@angular/core';\nimport { _computed, InjectableComponent } from '@ng-atomic/core';\nimport { makeDI } from '@ng-atomic/common/services/ui';\n\nexport enum XtermActionId {\n DATA_INPUT = 'xterm:data-input',\n RESIZED = 'xterm:resized',\n GITHUB_LINK_CLICK = 'xterm:github-link-click',\n FILE_LINK_CLICK = 'xterm:file-link-click',\n FOCUS_INPUT_REQUEST = 'xterm:focus-input-request',\n}\n\n/** DI token for providing serverUUID getter to ProxyLinksAddon */\nexport const XTERM_SERVER_UUID = new InjectionToken<() => string | undefined>('XTERM_SERVER_UUID');\n\n/** DI token for providing CLI token getter to ProxyLinksAddon */\nexport const XTERM_PROXY_TOKEN = new InjectionToken<() => string | undefined>('XTERM_PROXY_TOKEN');\n\n/** DI token for providing deploy version getter to ProxyLinksAddon */\nexport const XTERM_DEPLOY_VERSION = new InjectionToken<() => string | null | undefined>('XTERM_DEPLOY_VERSION');\n\n/**\n * DI token for providing API endpoints (apiNext / hasura) to ProxyLinksAddon.\n * web-proxy が opener postMessage 経由でこの値を受信して使用する (環境追従)。\n */\nexport const XTERM_PROXY_ENDPOINTS = new InjectionToken<() => { apiNext: string; hasura: string } | undefined>(\n 'XTERM_PROXY_ENDPOINTS',\n);\n\n@Directive({ standalone: true, selector: 'organisms-xterm' })\nexport class XtermOrganismStore extends InjectableComponent {\n static readonly DI = makeDI(XtermOrganismStore, () => () => ({\n data: '',\n interactive: false,\n queryResult: '',\n useInteractiveTheme: false,\n }), ['components', 'organisms', 'xterm']);\n\n readonly config = XtermOrganismStore.DI.injectConfig();\n readonly data = input<string | undefined>(undefined);\n readonly interactive = input<boolean>(false);\n readonly queryResult = input<string>('');\n readonly useInteractiveTheme = input<boolean>(false);\n readonly totalWritten = input<number>(0);\n\n /** Injected serverUUID getter for proxy links (optional) */\n readonly getServerUUID = inject(XTERM_SERVER_UUID, { optional: true });\n\n /** Injected CLI token getter for proxy link auto-auth (optional) */\n readonly getProxyToken = inject(XTERM_PROXY_TOKEN, { optional: true });\n\n /** Injected deploy version getter for proxy URL host suffix (optional) */\n readonly getDeployVersion = inject(XTERM_DEPLOY_VERSION, { optional: true });\n\n /** Injected endpoints getter for opener-driven environment switching (optional) */\n readonly getProxyEndpoints = inject(XTERM_PROXY_ENDPOINTS, { optional: true });\n\n constructor() {\n super();\n XtermOrganismStore.DI.initialize(this);\n }\n}\n","import { Component, ElementRef, AfterViewInit, OnDestroy, ChangeDetectionStrategy, viewChild, output, effect, inject, signal } from '@angular/core';\nimport { Terminal, IDisposable } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport { WebLinksAddon } from './web-links.addon';\nimport { NgAtomicComponent } from '@ng-atomic/core';\nimport { GitHubLinksAddon } from './github-links.addon';\nimport { FileLinksAddon } from './file-links.addon';\nimport { ProxyLinksAddon } from './proxy-links.addon';\nimport { XtermOrganismStore, XtermActionId } from './xterm.organism.store';\n\n// ImageAddon types (loaded dynamically to avoid browser compatibility issues)\ntype ImageAddon = any;\ntype IImageAddonOptions = any;\n\n/**\n * Minimum container size required for terminal initialization.\n * Prevents issues with SR-only hidden containers (1x1 pixel) causing FitAddon problems.\n */\nconst MIN_CONTAINER_SIZE = 10;\n\n\n/** Default display-only theme (for catalog/storybook) */\nconst DISPLAY_THEME = {\n background: '#0a0a0a',\n foreground: '#66d9ef',\n cursor: '#ff79c6',\n cyan: '#8be9fd',\n brightCyan: '#50fa7b',\n green: '#50fa7b',\n brightGreen: '#50fa7b',\n magenta: '#ff79c6',\n brightMagenta: '#ff79c6',\n yellow: '#f1fa8c',\n brightYellow: '#ffb86c',\n red: '#ff5555',\n brightRed: '#ff5555'\n};\n\n/** Interactive session theme (matches original TerminalManager) */\nconst INTERACTIVE_THEME = {\n background: '#0a0a0a',\n foreground: '#e0e0e0',\n cursor: '#e0e0e0',\n black: '#000000',\n red: '#cd3131',\n green: '#0dbc79',\n yellow: '#e5e510',\n blue: '#2472c8',\n magenta: '#bc3fbc',\n cyan: '#11a8cd',\n white: '#e5e5e5',\n brightBlack: '#666666',\n brightRed: '#f14c4c',\n brightGreen: '#23d18b',\n brightYellow: '#f5f543',\n brightBlue: '#3b8eea',\n brightMagenta: '#d670d6',\n brightCyan: '#29b8db',\n brightWhite: '#e5e5e5',\n};\n\n@Component({\n selector: 'organisms-xterm',\n standalone: true,\n imports: [],\n template: `<div #container class=\"xterm-wrapper\"></div>`,\n styleUrls: ['./xterm.organism.css', './xterm.organism.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [{\n directive: XtermOrganismStore,\n inputs: ['data', 'interactive', 'useInteractiveTheme', 'totalWritten'],\n }],\n})\nexport class XtermOrganism extends NgAtomicComponent implements AfterViewInit, OnDestroy {\n readonly container = viewChild.required<ElementRef<HTMLDivElement>>('container');\n protected readonly store = inject(XtermOrganismStore);\n private readonly hostElement = inject(ElementRef<HTMLElement>);\n\n readonly terminalReady = output<Terminal>();\n readonly githubLinkClick = output<number>();\n\n private terminal!: Terminal;\n private fitAddon!: FitAddon;\n private imageAddon!: ImageAddon;\n private githubLinksAddon!: GitHubLinksAddon;\n private fileLinksAddon!: FileLinksAddon;\n private resizeObserver?: ResizeObserver;\n private lastDataLength = 0;\n /** Tracks how many bytes have been processed (for totalWritten-based diff detection) */\n private lastProcessedLength = 0;\n private readonly terminalInitialized = signal(false);\n /** Tracks if initialization was skipped due to container being too small */\n private initSkippedDueToSize = false;\n /** IDisposable refs for explicit cleanup (prevents memory leaks on mobile) */\n private readonly disposables: IDisposable[] = [];\n /** Timer refs for cleanup in ngOnDestroy */\n private stableTimer: ReturnType<typeof setTimeout> | null = null;\n private resizeTimer: ReturnType<typeof setTimeout> | null = null;\n private fallbackTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n super();\n\n // Watch for data input changes (with totalWritten support for buffer overflow handling)\n effect(() => {\n const isInitialized = this.terminalInitialized();\n const rawData = this.store.data();\n const totalWritten = this.store.totalWritten();\n const dataIsFunction = typeof rawData === 'function';\n const data = dataIsFunction ? (rawData as any)() : rawData;\n if (!isInitialized) return;\n\n // Use totalWritten-based logic when available (handles buffer overflow correctly)\n if (totalWritten > 0) {\n this.writeDataWithTotalWritten(data ?? '', totalWritten);\n } else {\n // Legacy fallback for backward compatibility\n this.writeDataToTerminal(data);\n }\n });\n\n // Watch for interactive mode changes and update host class\n // Note: Using effect with classList because @HostBinding doesn't work with OnPush + signals\n effect(() => {\n const isInteractive = this.store.interactive();\n if (isInteractive) {\n this.hostElement.nativeElement.classList.add('interactive');\n } else {\n this.hostElement.nativeElement.classList.remove('interactive');\n }\n });\n\n // Watch for interactive mode changes and update cursor blink\n effect(() => {\n const isInitialized = this.terminalInitialized();\n const isInteractive = this.store.interactive();\n if (!isInitialized || !this.terminal) return;\n\n // Update cursor blink setting\n this.terminal.options.cursorBlink = isInteractive;\n });\n }\n\n private writeDataToTerminal(data: string | undefined): void {\n // Guard against undefined/null/empty data\n // Empty string is treated as \"no data yet\" (from startWith('') in streams)\n // Explicit reset should use the public clear() or reset() methods\n if (data === undefined || data === null || data === '') {\n return;\n }\n // O(1) length comparison instead of O(n) startsWith\n if (data.length >= this.lastDataLength) {\n const newPart = data.slice(this.lastDataLength);\n if (newPart) {\n this.terminal.write(newPart);\n }\n this.lastDataLength = data.length;\n } else {\n // Data got shorter = reset occurred\n this.terminal.reset();\n this.terminal.write(data);\n this.lastDataLength = data.length;\n }\n }\n\n /**\n * Write data using totalWritten for accurate diff detection.\n * This method handles buffer overflow scenarios correctly.\n * When newBytesCount >= data.length, performs a full redraw with terminal.reset()\n * to prevent stale output from previous sessions remaining on screen.\n * @param data The current buffer content\n * @param totalWritten Total bytes written to the buffer (cumulative)\n */\n private writeDataWithTotalWritten(data: string, totalWritten: number): void {\n if (!data) return;\n\n const newBytesCount = totalWritten - this.lastProcessedLength;\n\n if (newBytesCount <= 0) {\n if (totalWritten < this.lastProcessedLength) {\n // Reset detected (totalWritten decreased)\n this.terminal.reset();\n this.terminal.write(data);\n this.lastProcessedLength = totalWritten;\n }\n return;\n }\n\n // Full redraw needed: first render, session switch, or buffer overflow\n // (newBytesCount >= data.length means the diff covers the entire buffer or more)\n if (newBytesCount >= data.length) {\n this.terminal.reset();\n this.terminal.write(data);\n } else {\n // Normal incremental write - extract only new content\n const newContent = data.slice(-newBytesCount);\n if (newContent) {\n this.terminal.write(newContent);\n }\n }\n this.lastProcessedLength = totalWritten;\n }\n\n ngAfterViewInit() {\n const containerElement = this.container().nativeElement;\n\n // Guard against initialization in very small containers (e.g., SR-only 1x1 pixel hidden elements)\n // This prevents FitAddon issues and excessive processing in hidden query sections\n if (containerElement.offsetWidth < MIN_CONTAINER_SIZE || containerElement.offsetHeight < MIN_CONTAINER_SIZE) {\n this.initSkippedDueToSize = true;\n // Retry initialization when container reaches minimum size (e.g., after CSS/layout settles)\n this.resizeObserver = new ResizeObserver(() => {\n if (containerElement.offsetWidth >= MIN_CONTAINER_SIZE && containerElement.offsetHeight >= MIN_CONTAINER_SIZE) {\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.initSkippedDueToSize = false;\n this.initializeTerminal(containerElement);\n }\n });\n this.resizeObserver.observe(containerElement);\n return;\n }\n\n this.initializeTerminal(containerElement);\n }\n\n private initializeTerminal(containerElement: HTMLDivElement): void {\n const isInteractive = this.store.interactive();\n const useInteractiveTheme = this.store.useInteractiveTheme() || isInteractive;\n\n this.terminal = new Terminal({\n theme: useInteractiveTheme ? INTERACTIVE_THEME : DISPLAY_THEME,\n scrollback: isInteractive ? 10000 : 1000,\n fontSize: useInteractiveTheme ? 14 : 12,\n fontFamily: '\"FiraCode Nerd Font\", \"Fira Code\", \"SF Mono\", \"Cascadia Code\", \"Consolas\", \"Courier New\", monospace',\n lineHeight: 1.2,\n allowTransparency: false,\n disableStdin: !isInteractive,\n cursorBlink: isInteractive,\n cursorStyle: 'block',\n convertEol: true,\n rows: 24\n });\n\n this.fitAddon = new FitAddon();\n this.terminal.loadAddon(this.fitAddon);\n this.terminal.loadAddon(new WebLinksAddon());\n\n // ImageAddon for displaying inline images (SIXEL and iTerm2 IIP support)\n // Loaded dynamically to avoid browser compatibility issues\n this.loadImageAddon();\n\n this.githubLinksAddon = new GitHubLinksAddon((event, issueNumber) => {\n this.dispatch({ id: XtermActionId.GITHUB_LINK_CLICK, payload: issueNumber });\n });\n this.terminal.loadAddon(this.githubLinksAddon);\n\n this.fileLinksAddon = new FileLinksAddon((event, filePath, line, column) => {\n if (event.metaKey || event.ctrlKey) {\n this.dispatch({ id: XtermActionId.FILE_LINK_CLICK, payload: { filePath, line, column } });\n }\n });\n this.terminal.loadAddon(this.fileLinksAddon);\n\n // ProxyLinksAddon: localhost → proxy.machina.at redirect (always loaded)\n this.terminal.loadAddon(new ProxyLinksAddon(\n this.store.getServerUUID ?? (() => undefined),\n this.store.getProxyToken ?? undefined,\n undefined,\n this.store.getDeployVersion ?? undefined,\n this.store.getProxyEndpoints ?? undefined,\n ));\n\n this.terminal.open(containerElement);\n\n // Setup event handlers for interactive mode\n if (isInteractive) {\n this.disposables.push(\n this.terminal.onData((data) => {\n this.dispatch({ id: XtermActionId.DATA_INPUT, payload: data });\n }),\n this.terminal.onResize(({ cols, rows }) => this.dispatch({ id: XtermActionId.RESIZED, payload: { cols, rows } })),\n );\n }\n\n // Use ResizeObserver with debounce to wait for container size to stabilize\n // (CSS transitions take 300-500ms, so fixed setTimeout(100ms) is too early)\n this.resizeObserver = new ResizeObserver(() => {\n try {\n if (!this.terminalInitialized()) {\n this.fitAddon.fit();\n // Debounce: wait for container to stop changing before initializing\n if (this.stableTimer) clearTimeout(this.stableTimer);\n this.stableTimer = setTimeout(() => {\n this.stableTimer = null;\n this.fitAddon.fit();\n this.markInitialized(isInteractive);\n }, 150);\n } else if (isInteractive) {\n // Debounce resize to wait for CSS transitions to complete (300ms)\n if (this.resizeTimer) clearTimeout(this.resizeTimer);\n this.resizeTimer = setTimeout(() => {\n this.resizeTimer = null;\n this.fitAddon.fit();\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }, 300);\n }\n } catch (e) {\n console.warn('Failed to fit terminal:', e);\n }\n });\n this.resizeObserver.observe(containerElement);\n\n // Fallback: initialize after 500ms if ResizeObserver hasn't triggered stable state\n this.fallbackTimer = setTimeout(() => {\n this.fallbackTimer = null;\n if (!this.terminalInitialized()) {\n this.fitAddon.fit();\n this.markInitialized(isInteractive);\n }\n }, 500);\n }\n\n ngOnDestroy() {\n // Clear pending timers to prevent post-destroy callbacks\n if (this.stableTimer) clearTimeout(this.stableTimer);\n if (this.resizeTimer) clearTimeout(this.resizeTimer);\n if (this.fallbackTimer) clearTimeout(this.fallbackTimer);\n\n this.resizeObserver?.disconnect();\n\n // Dispose xterm event handlers (onData, onResize) to prevent memory leaks\n for (const d of this.disposables) d.dispose();\n this.disposables.length = 0;\n\n // Remove terminal instance from window for E2E testing cleanup\n if (typeof window !== 'undefined' && (window as any).__XTERM_INSTANCES__) {\n const instances = (window as any).__XTERM_INSTANCES__ as Terminal[];\n const index = instances.indexOf(this.terminal);\n if (index !== -1) {\n instances.splice(index, 1);\n }\n }\n\n this.terminal?.dispose();\n }\n\n private markInitialized(isInteractive: boolean): void {\n if (this.terminalInitialized()) return;\n this.terminalInitialized.set(true);\n this.terminalReady.emit(this.terminal);\n\n // Expose terminal instance for E2E testing (only in development/test environments)\n if (typeof window !== 'undefined') {\n (window as any).__XTERM_INSTANCES__ = (window as any).__XTERM_INSTANCES__ || [];\n (window as any).__XTERM_INSTANCES__.push(this.terminal);\n }\n\n // Dispatch initial RESIZED for interactive mode\n if (isInteractive) {\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }\n }\n\n private async loadImageAddon(): Promise<void> {\n try {\n const { ImageAddon } = await import('@xterm/addon-image');\n const imageAddonOptions = {\n enableSizeReports: true,\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 256,\n };\n this.imageAddon = new ImageAddon(imageAddonOptions);\n this.terminal.loadAddon(this.imageAddon);\n } catch (e) {\n // ImageAddon not available in browser environment - this is expected\n console.debug('ImageAddon not available:', e);\n }\n }\n\n // Public API\n public write(text: string): void {\n this.terminal?.write(text);\n }\n\n public writeln(text: string): void {\n this.terminal?.writeln(text);\n }\n\n public clear(): void {\n this.terminal?.clear();\n }\n\n public scrollToBottom(): void {\n this.terminal?.scrollToBottom();\n }\n\n public scrollToTop(): void {\n this.terminal?.scrollToTop();\n }\n\n public scrollLines(lines: number): void {\n this.terminal?.scrollLines(lines);\n }\n\n public fit(): void {\n this.fitAddon?.fit();\n // Only dispatch RESIZED after initialization to prevent sending wrong cols/rows\n // during CSS transitions (SessionTemplateV2.ngAfterViewInit calls fit() before layout stabilizes)\n if (this.terminalInitialized() && this.terminal) {\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }\n }\n\n public get cols(): number {\n return this.terminal?.cols ?? 80;\n }\n\n public get rows(): number {\n return this.terminal?.rows ?? 24;\n }\n\n public getTerminal(): Terminal | undefined {\n // Only expose terminal after fitAddon.fit() has run (terminalInitialized === true)\n return this.terminalInitialized() ? this.terminal : undefined;\n }\n\n /**\n * Display an inline image using iTerm2's Inline Image Protocol\n * @param base64Data Base64 encoded image data (PNG, JPEG, etc.)\n * @param options Image display options\n */\n public displayImage(base64Data: string, options?: {\n width?: string | number; // e.g., '50%', 'auto', or cell count\n height?: string | number; // e.g., '10', 'auto', or cell count\n preserveAspectRatio?: boolean;\n name?: string;\n }): void {\n if (!this.terminal) return;\n\n const args: string[] = ['inline=1'];\n\n if (options?.width) {\n args.push(`width=${options.width}`);\n }\n if (options?.height) {\n args.push(`height=${options.height}`);\n }\n if (options?.preserveAspectRatio !== undefined) {\n args.push(`preserveAspectRatio=${options.preserveAspectRatio ? 1 : 0}`);\n }\n if (options?.name) {\n args.push(`name=${btoa(options.name)}`);\n }\n\n // iTerm2 Inline Image Protocol escape sequence\n const escapeSequence = `\\x1b]1337;File=${args.join(';')}:${base64Data}\\x07`;\n this.terminal.write(escapeSequence);\n }\n\n /**\n * Get the ImageAddon instance for advanced image operations\n */\n public getImageAddon(): ImageAddon | undefined {\n return this.imageAddon;\n }\n}\n","/**\n * Utility functions for displaying images in xterm using SIXEL format\n */\n\nexport interface SvgToSixelOptions {\n width?: number;\n height?: number;\n backgroundColor?: string;\n textColor?: string;\n}\n\n/**\n * Generate ASCII art text using figlet\n * Note: figlet is loaded dynamically as it's not available in browser environments\n */\nexport async function generateAsciiArt(text: string, font = 'ANSI Shadow'): Promise<string> {\n try {\n const figlet = await import('figlet');\n return new Promise((resolve, reject) => {\n figlet.default.text(text, { font: font as any }, (err, result) => {\n if (err) {\n reject(err);\n return;\n }\n resolve(result || '');\n });\n });\n } catch (e) {\n // figlet not available in browser - return simple text\n console.debug('figlet not available:', e);\n return text;\n }\n}\n\n/**\n * Convert ASCII art text to SVG with transparent background\n */\nexport function asciiArtToSvg(\n asciiArt: string,\n options: { textColor?: string; fontSize?: number } = {}\n): string {\n const { textColor = '#00FFFF', fontSize = 14 } = options;\n\n const lines = asciiArt.split('\\n');\n const maxLineLength = Math.max(...lines.map(l => l.length));\n\n // Calculate dimensions based on monospace font metrics (block chars need more width)\n const charWidth = fontSize * 0.65;\n const lineHeight = fontSize * 1.4;\n const padding = 40;\n const width = Math.ceil(maxLineLength * charWidth) + padding;\n const height = Math.ceil(lines.length * lineHeight) + padding;\n\n // Build SVG with text elements for each line\n const textElements = lines.map((line, i) => {\n // Escape special XML characters\n const escapedLine = line\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n\n return `<text x=\"20\" y=\"${20 + (i + 1) * lineHeight}\" fill=\"${textColor}\" xml:space=\"preserve\">${escapedLine}</text>`;\n }).join('\\n ');\n\n return `<svg width=\"${width}\" height=\"${height}\" xmlns=\"http://www.w3.org/2000/svg\">\n <style>text { font-family: 'Courier New', Consolas, monospace; font-size: ${fontSize}px; white-space: pre; }</style>\n ${textElements}\n</svg>`;\n}\n\n/**\n * Convert SVG to SIXEL format for xterm display\n */\nexport async function svgToSixel(\n svgString: string,\n options: SvgToSixelOptions = {}\n): Promise<string> {\n const { width = 400, height = 200, backgroundColor } = options;\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Failed to get canvas context'));\n return;\n }\n\n // Fill background (transparent if not specified)\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width, height);\n }\n\n const img = new Image();\n const blob = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n\n img.onload = () => {\n ctx.drawImage(img, 0, 0, width, height);\n URL.revokeObjectURL(url);\n\n const imageData = ctx.getImageData(0, 0, width, height);\n const sixelData = imageDataToSixel(imageData);\n resolve(sixelData);\n };\n\n img.onerror = (error) => {\n URL.revokeObjectURL(url);\n reject(error);\n };\n\n img.src = url;\n });\n}\n\n/**\n * Convert ImageData to SIXEL escape sequence\n */\nfunction imageDataToSixel(imageData: ImageData): string {\n const { width, height, data } = imageData;\n\n // Build color palette (quantize to 16 colors)\n const palette = buildColorPalette(data, 16);\n const colorMap = new Map<string, number>();\n palette.forEach((color, index) => {\n colorMap.set(color, index);\n });\n\n // SIXEL header\n let sixel = '\\x1bPq';\n\n // Define colors in palette\n palette.forEach((color, index) => {\n const [r, g, b] = hexToRgb(color);\n const rPct = Math.round((r / 255) * 100);\n const gPct = Math.round((g / 255) * 100);\n const bPct = Math.round((b / 255) * 100);\n sixel += `#${index};2;${rPct};${gPct};${bPct}`;\n });\n\n // Process image in bands of 6 rows\n for (let bandY = 0; bandY < height; bandY += 6) {\n for (let colorIdx = 0; colorIdx < palette.length; colorIdx++) {\n const color = palette[colorIdx];\n let rowData = '';\n let hasPixels = false;\n\n rowData += `#${colorIdx}`;\n\n for (let x = 0; x < width; x++) {\n let sixelValue = 0;\n\n for (let dy = 0; dy < 6; dy++) {\n const y = bandY + dy;\n if (y >= height) continue;\n\n const pixelIndex = (y * width + x) * 4;\n const r = data[pixelIndex];\n const g = data[pixelIndex + 1];\n const b = data[pixelIndex + 2];\n const a = data[pixelIndex + 3];\n\n if (a < 128) continue;\n\n const pixelColor = rgbToHex(r, g, b);\n const nearestColor = findNearestColor(pixelColor, palette);\n\n if (nearestColor === color) {\n sixelValue |= (1 << dy);\n hasPixels = true;\n }\n }\n\n rowData += String.fromCharCode(63 + sixelValue);\n }\n\n if (hasPixels) {\n sixel += rowData;\n sixel += '$';\n }\n }\n\n if (bandY + 6 < height) {\n sixel += '-';\n }\n }\n\n sixel += '\\x1b\\\\';\n return sixel;\n}\n\nfunction buildColorPalette(data: Uint8ClampedArray, maxColors: number): string[] {\n const colorCounts = new Map<string, number>();\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n const a = data[i + 3];\n\n if (a < 128) continue;\n\n const qr = Math.floor(r / 16) * 16;\n const qg = Math.floor(g / 16) * 16;\n const qb = Math.floor(b / 16) * 16;\n const color = rgbToHex(qr, qg, qb);\n\n colorCounts.set(color, (colorCounts.get(color) || 0) + 1);\n }\n\n return Array.from(colorCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, maxColors)\n .map(([color]) => color);\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\nfunction hexToRgb(hex: string): [number, number, number] {\n const match = hex.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);\n if (!match) return [0, 0, 0];\n return [parseInt(match[1], 16), parseInt(match[2], 16), parseInt(match[3], 16)];\n}\n\nfunction findNearestColor(targetHex: string, palette: string[]): string {\n const [tr, tg, tb] = hexToRgb(targetHex);\n let nearest = palette[0];\n let minDist = Infinity;\n\n for (const color of palette) {\n const [r, g, b] = hexToRgb(color);\n const dist = (tr - r) ** 2 + (tg - g) ** 2 + (tb - b) ** 2;\n if (dist < minDist) {\n minDist = dist;\n nearest = color;\n }\n }\n\n return nearest;\n}\n\n/**\n * Generate MACHINA ASCII art banner as SIXEL\n */\nexport async function getMachinaAsciiArtSixel(\n options: SvgToSixelOptions = {}\n): Promise<string> {\n // Generate ASCII art for \"MACHINA\"\n const machinaArt = await generateAsciiArt('MACHINA', 'ANSI Shadow');\n\n // Convert to SVG with cyan color (terminal style)\n const fontSize = 14;\n const svg = asciiArtToSvg(machinaArt, {\n textColor: options.textColor || '#00FFFF',\n fontSize\n });\n\n // Calculate appropriate dimensions matching asciiArtToSvg calculation\n const lines = machinaArt.split('\\n');\n const maxLineLength = Math.max(...lines.map(l => l.length));\n const charWidth = fontSize * 0.65;\n const lineHeight = fontSize * 1.4;\n const padding = 40;\n const defaultWidth = Math.ceil(maxLineLength * charWidth) + padding;\n const defaultHeight = Math.ceil(lines.length * lineHeight) + padding;\n\n return svgToSixel(svg, {\n width: options.width || defaultWidth,\n height: options.height || defaultHeight,\n backgroundColor: options.backgroundColor || '#0a0a0a',\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAEA,MAAM,SAAS,GAAG,6BAA6B;AAC/C,MAAM,eAAe,GAAG,yDAAyD;AACjF,MAAM,cAAc,GAAG,EAAE;AAEzB;;;AAGG;MACU,eAAe,CAAA;AAEP,IAAA,SAAA;AACA,IAAA,QAAA;IAFnB,WAAA,CACmB,SAAmB,EACnB,QAAA,GAAqD,CAAC,CAAC,EAAE,GAAG,KAAI;QAC/E,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC;IACxC,CAAC,EAAA;QAHgB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAGxB;IAEH,YAAY,CAAC,gBAAwB,EAAE,QAA8C,EAAA;QACnF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;AAE3C,QAAA,IAAI,MAAM,GAAG,gBAAgB,GAAG,CAAC;QACjC,OAAO,MAAM,GAAG;AACX,eAAA,CAAC,gBAAgB,GAAG,CAAC,GAAG,MAAM,IAAI;AAClC,eAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EACnC;AACA,YAAA,MAAM,EAAE;QACV;QAEA,MAAM,SAAS,GAAa,EAAE;QAC9B,IAAI,CAAC,GAAG,MAAM;AACd,QAAA,GAAG;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,IAAI;gBAAE;YACX,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC5C,YAAA,CAAC,EAAE;AACL,QAAA,CAAC,QACC,CAAC,GAAG,MAAM,CAAC;AACR,eAAA,CAAC,CAAC,GAAG,MAAM,IAAI;AACf,eAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAGhC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAEnC,QAAA,SAAS,CAAC,SAAS,GAAG,CAAC;AACvB,QAAA,IAAI,KAA6B;QACjC,MAAM,KAAK,GAAY,EAAE;AAEzB,QAAA,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;YAClD,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAE;AAEpC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC;AACtF,YAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;gBAAE;YAE1B,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACd,gBAAA,KAAK,EAAE;AACL,oBAAA,KAAK,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE;AAC/C,oBAAA,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE;AAC1C,iBAAA;AACD,gBAAA,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;AACtD,aAAA,CAAC;QACJ;AAEA,QAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC;IAChD;AAEQ,IAAA,mBAAmB,CAAC,OAAe,EAAA;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;QACvB,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI;QAE/B,IAAI,OAAO,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;QAE3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAChD,QAAA,QACE,QAAQ,CAAC,MAAM,GAAG;AACf,eAAA,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ;eACpB,WAAW,CAAC,MAAM,GAAG;AACrB,eAAA,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;IAE/B;AAEQ,IAAA,YAAY,CAClB,MAAc,EAAE,MAAc,EAAE,SAAmB,EAAA;QAEnD,IAAI,SAAS,GAAG,MAAM;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;gBACnC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE;YACxC;AACA,YAAA,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM;QAClC;AACA,QAAA,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;AACpC,QAAA,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE;IAC9D;AACD;;AClGD;;;;AAIG;MACU,aAAa,CAAA;AAIL,IAAA,QAAA;AAHX,IAAA,aAAa;AAErB,IAAA,WAAA,CACmB,QAAmD,EAAA;QAAnD,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACxB;AAEH,IAAA,QAAQ,CAAC,QAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,oBAAoB,CAChD,IAAI,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAC7C;IACH;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE;IAC/B;AACD;;MClBY,kBAAkB,CAAA;AAKV,IAAA,SAAA;AACA,IAAA,QAAA;;IAJF,kBAAkB,GAAG,0BAA0B;IAEhE,WAAA,CACmB,SAAmB,EACnB,QAAmC,EAAA;QADnC,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACxB;IAEH,YAAY,CAAC,gBAAwB,EAAE,QAA8C,EAAA;AACnF,QAAA,MAAM,SAAS,GAAG,gBAAgB,GAAG,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5D,IAAI,CAAC,IAAI,EAAE;YACT,QAAQ,CAAC,SAAS,CAAC;YACnB;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QACzC,MAAM,KAAK,GAAY,EAAE;AAEzB,QAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,CAAC;AAErC,QAAA,IAAI,KAA6B;AACjC,QAAA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;YAC5D,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1C,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,EAAE;;AAG/B,YAAA,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAE3E,YAAA,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,gBAAgB,CAAC;AAClE,YAAA,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;YAEpE,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;gBAAE;YAElC,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE;oBACL,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE;oBAC7C,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,gBAAgB;AACpC,iBAAA;AACD,gBAAA,QAAQ,EAAE,CAAC,KAAK,KAAI;AAClB,oBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;gBACnC;AACD,aAAA,CAAC;QACJ;AAEA,QAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC;IAChD;AAEQ,IAAA,UAAU,CAAC,SAAiB,EAAE,QAAgB,EAAE,WAAmB,EAAA;QACzE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;AACxC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE;QAC9B,IAAI,KAAK,GAAG,QAAQ;QAEpB,OAAO,WAAW,EAAE;YAClB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;AACnC,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1B,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC;AACrB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC7B,IAAI,KAAK,EAAE;AACT,oBAAA,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;gBAClC;AACA,gBAAA,IAAI,WAAW,GAAG,CAAC,EAAE;AACnB,oBAAA,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;gBACvB;YACF;AACA,YAAA,SAAS,EAAE;YACX,KAAK,GAAG,CAAC;QACX;AACA,QAAA,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;IAC3B;AACD;;MC/EY,gBAAgB,CAAA;AAKR,IAAA,QAAA;AAJX,IAAA,SAAS;AACT,IAAA,aAAa;AAErB,IAAA,WAAA,CACmB,QAAmC,EAAA;QAAnC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACxB;AAEH,IAAA,QAAQ,CAAC,QAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,oBAAoB,CAChD,IAAI,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAChD;IACH;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE;IAC/B;AACD;;MCfY,gBAAgB,CAAA;AAQR,IAAA,SAAA;AACA,IAAA,QAAA;;;;;IAJF,eAAe,GAAG,uFAAuF;IAE1H,WAAA,CACmB,SAAmB,EACnB,QAAiC,EAAA;QADjC,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACxB;IAEH,YAAY,CAAC,gBAAwB,EAAE,QAA8C,EAAA;;AAEnF,QAAA,MAAM,SAAS,GAAG,gBAAgB,GAAG,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5D,IAAI,CAAC,IAAI,EAAE;YACT,QAAQ,CAAC,SAAS,CAAC;YACnB;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QACzC,MAAM,KAAK,GAAY,EAAE;;AAGzB,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,CAAC;AAElC,QAAA,IAAI,KAA6B;AACjC,QAAA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;AACzD,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;AACzB,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;;gBAE9D,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;;AAG1E,gBAAA,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,gBAAgB,CAAC;AAClE,gBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;gBAEpE,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;oBAChC;gBACF;gBAEA,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE;;wBAEL,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE;wBAC7C,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,gBAAgB;AACpC,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAI;wBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC5C,wBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;oBAC/D;AACD,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC;IAChD;AAEA;;;;;AAKG;AACK,IAAA,UAAU,CAAC,SAAiB,EAAE,QAAgB,EAAE,WAAmB,EAAA;QACzE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;AACxC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE;QAC9B,IAAI,KAAK,GAAG,QAAQ;QAEpB,OAAO,WAAW,EAAE;YAClB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjB;AACA,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC;AACrB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC7B,IAAI,KAAK,EAAE;AACT,oBAAA,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;gBAClC;AACA,gBAAA,IAAI,WAAW,GAAG,CAAC,EAAE;AACnB,oBAAA,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;gBACvB;YACF;AACA,YAAA,SAAS,EAAE;YACX,KAAK,GAAG,CAAC;QACX;AACA,QAAA,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;IAC3B;AAEQ,IAAA,iBAAiB,CAAC,IAAY,EAAA;;AAEpC,QAAA,OAAO,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC;IACvD;AAEQ,IAAA,MAAM,CAAC,IAAY,EAAA;;AAEzB,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7D;AAEQ,IAAA,cAAc,CAAC,IAAY,EAAA;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC;QACzD,IAAI,KAAK,EAAE;YACT,OAAO;AACL,gBAAA,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS;gBACnD,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;aAC7C;QACH;AACA,QAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;IACvB;AACD;AAED;AACO,MAAM,gBAAgB,GAAG,CAAC,IAAY,KAAa;AACxD,IAAA,OAAO,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AACrF,CAAC;AAEM,MAAM,aAAa,GAAG,CAAC,IAAY,KAAsD;IAC9F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC;IACzD,IAAI,KAAK,EAAE;QACT,OAAO;AACL,YAAA,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACd,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS;YACnD,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;SAC7C;IACH;AACA,IAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;AACvB,CAAC;;ACtID;;;;;;;;;;;;;AAaG;MACU,cAAc,CAAA;AAKN,IAAA,QAAA;AAJX,IAAA,SAAS;AACT,IAAA,aAAa;AAErB,IAAA,WAAA,CACmB,QAAiC,EAAA;QAAjC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACxB;AAEH,IAAA,QAAQ,CAAC,QAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,oBAAoB,CAChD,IAAI,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAC9C;IACH;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE;IAC/B;AACD;;ACjCD;;;;;;;;;;;AAWG;AAEH,MAAM,mBAAmB,GAAG,qEAAqE;AAYjG;;;;;;;;;;AAUG;AACG,SAAU,yBAAyB,CAAC,OAAkC,EAAA;AAC1E,IAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ;AAAE,QAAA,OAAO,EAAE;AAC/C,IAAA,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE;AACpD,IAAA,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,SAAS;AAAE,QAAA,OAAO,OAAO;;IAG9D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC;IAC3E,IAAI,KAAK,EAAE;AACT,QAAA,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK;QAC/C,IAAI,OAAO,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE;AAC3C,QAAA,IAAI,GAAG;AAAE,YAAA,OAAO,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,GAAG,EAAE;QACpC,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE;IACvB;AAEA,IAAA,OAAO,EAAE;AACX;MAEa,iBAAiB,CAAA;AAET,IAAA,SAAA;AACA,IAAA,cAAA;AACA,IAAA,SAAA;AACA,IAAA,QAAA;AAGA,IAAA,iBAAA;AACA,IAAA,aAAA;AARnB,IAAA,WAAA,CACmB,SAAmB,EACnB,cAAgC,EAChC,SAAuB,EACvB,QAAA,GAA0D,CAAC,CAAC,EAAE,GAAG,KAAI;QACpF,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC;IACxC,CAAC,EACgB,iBAAuC,EACvC,aAA+B,EAAA;QAP/B,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAGR,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,aAAa,GAAb,aAAa;IAC7B;IAEH,YAAY,CAAC,gBAAwB,EAAE,QAA8C,EAAA;AACnF,QAAA,MAAM,SAAS,GAAG,gBAAgB,GAAG,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5D,IAAI,CAAC,IAAI,EAAE;YACT,QAAQ,CAAC,SAAS,CAAC;YACnB;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QACzC,MAAM,KAAK,GAAY,EAAE;AAEzB,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/F,QAAA,mBAAmB,CAAC,SAAS,GAAG,CAAC;AACjC,QAAA,IAAI,KAA6B;AAEjC,QAAA,OAAO,CAAC,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;AACxD,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG;AAE5B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;YAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM;YAE5C,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,KAAK,EAAE;oBACL,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB,EAAE;oBACzC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,gBAAgB,EAAE;AACtC,iBAAA;;AAED,gBAAA,QAAQ,EAAE,CAAC,KAAK,KAAI;AAClB,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE;AAClC,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI;oBAChC,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC;oBACxE,MAAM,QAAQ,GAAG;0BACb,WAAW,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,EAAG,UAAU,CAAA,6BAAA,EAAgC,IAAI,CAAA;0BACzE,IAAI;AACR,oBAAA,MAAM,SAAS,GAAG,QAAQ,IAAI,UAAU;oBACxC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAEnG,oBAAA,IAAI,KAAK,IAAI,QAAQ,EAAE;;wBAErB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM;wBAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;wBAC5C,IAAI,GAAG,EAAE;AACP,4BAAA,MAAM,QAAQ,GAAG,CAAC,CAAe,KAAI;;AAEnC,gCAAA,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,kBAAkB,EAAE;AACnE,oCAAA,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC;AAC9D,oCAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,IAAI;AACxC,oCAAA,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,WAAW,CAAC;AAC5E,oCAAA,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC;gCACjD;AACF,4BAAA,CAAC;AACD,4BAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC;;AAE5C,4BAAA,UAAU,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC;wBAC1E;oBACF;yBAAO;AACL,wBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;oBACjC;gBACF,CAAC;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC;IAChD;AACD;SAEe,UAAU,CACxB,UAAkB,EAClB,YAAoB,EACpB,aAA6B,EAAA;IAE7B,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,2DAA2D,CAAC;AAC7F,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;IACvB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG;AAC5B,IAAA,MAAM,UAAU,GAAG,yBAAyB,CAAC,aAAa,CAAC;IAC3D,OAAO,CAAA,QAAA,EAAW,UAAU,CAAA,EAAA,EAAK,IAAI,GAAG,UAAU,CAAA,6BAAA,EAAgC,IAAI,CAAA,CAAE;AAC1F;;AChJA;;;;;;;;AAQG;MACU,eAAe,CAAA;AAIP,IAAA,cAAA;AACA,IAAA,SAAA;AACA,IAAA,QAAA;AACA,IAAA,iBAAA;AACA,IAAA,aAAA;AAPX,IAAA,aAAa;IAErB,WAAA,CACmB,cAAgC,EAChC,SAAuB,EACvB,QAAwD,EACxD,iBAAuC,EACvC,aAA+B,EAAA;QAJ/B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,aAAa,GAAb,aAAa;IAC7B;AAEH,IAAA,QAAQ,CAAC,QAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,oBAAoB,CAChD,IAAI,iBAAiB,CACnB,QAAQ,EACR,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,aAAa,CACnB,CACF;IACH;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE;IAC/B;AACD;;ICnCW;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,kBAA+B;AAC/B,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,eAAyB;AACzB,IAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,yBAA6C;AAC7C,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,uBAAyC;AACzC,IAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,2BAAiD;AACnD,CAAC,EANW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AAQzB;MACa,iBAAiB,GAAG,IAAI,cAAc,CAA2B,mBAAmB;AAEjG;MACa,iBAAiB,GAAG,IAAI,cAAc,CAA2B,mBAAmB;AAEjG;MACa,oBAAoB,GAAG,IAAI,cAAc,CAAkC,sBAAsB;AAE9G;;;AAGG;MACU,qBAAqB,GAAG,IAAI,cAAc,CACrD,uBAAuB;AAInB,MAAO,kBAAmB,SAAQ,mBAAmB,CAAA;AACzD,IAAA,OAAgB,EAAE,GAAG,MAAM,CAAC,kBAAkB,EAAE,MAAM,OAAO;AAC3D,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,mBAAmB,EAAE,KAAK;KAC3B,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAEhC,IAAA,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE;AAC7C,IAAA,IAAI,GAAG,KAAK,CAAqB,SAAS,gDAAC;AAC3C,IAAA,WAAW,GAAG,KAAK,CAAU,KAAK,uDAAC;AACnC,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,uDAAC;AAC/B,IAAA,mBAAmB,GAAG,KAAK,CAAU,KAAK,+DAAC;AAC3C,IAAA,YAAY,GAAG,KAAK,CAAS,CAAC,wDAAC;;IAG/B,aAAa,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAG7D,aAAa,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAG7D,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAGnE,iBAAiB,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE9E,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,kBAAkB,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;IACxC;uGA9BW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE;;;ACf5D;;;AAGG;AACH,MAAM,kBAAkB,GAAG,EAAE;AAG7B;AACA,MAAM,aAAa,GAAG;AACpB,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,WAAW,EAAE,SAAS;AACtB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,aAAa,EAAE,SAAS;AACxB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,SAAS,EAAE;CACZ;AAED;AACA,MAAM,iBAAiB,GAAG;AACxB,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,WAAW,EAAE,SAAS;AACtB,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,WAAW,EAAE,SAAS;AACtB,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,aAAa,EAAE,SAAS;AACxB,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,WAAW,EAAE,SAAS;CACvB;AAcK,MAAO,aAAc,SAAQ,iBAAiB,CAAA;AACzC,IAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAA6B,WAAW,CAAC;AAC7D,IAAA,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACpC,IAAA,WAAW,GAAG,MAAM,EAAC,UAAuB,EAAC;IAErD,aAAa,GAAG,MAAM,EAAY;IAClC,eAAe,GAAG,MAAM,EAAU;AAEnC,IAAA,QAAQ;AACR,IAAA,QAAQ;AACR,IAAA,UAAU;AACV,IAAA,gBAAgB;AAChB,IAAA,cAAc;AACd,IAAA,cAAc;IACd,cAAc,GAAG,CAAC;;IAElB,mBAAmB,GAAG,CAAC;AACd,IAAA,mBAAmB,GAAG,MAAM,CAAC,KAAK,+DAAC;;IAE5C,oBAAoB,GAAG,KAAK;;IAEnB,WAAW,GAAkB,EAAE;;IAExC,WAAW,GAAyC,IAAI;IACxD,WAAW,GAAyC,IAAI;IACxD,aAAa,GAAyC,IAAI;AAElE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;QAGP,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACjC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;AAC9C,YAAA,MAAM,cAAc,GAAG,OAAO,OAAO,KAAK,UAAU;AACpD,YAAA,MAAM,IAAI,GAAG,cAAc,GAAI,OAAe,EAAE,GAAG,OAAO;AAC1D,YAAA,IAAI,CAAC,aAAa;gBAAE;;AAGpB,YAAA,IAAI,YAAY,GAAG,CAAC,EAAE;gBACpB,IAAI,CAAC,yBAAyB,CAAC,IAAI,IAAI,EAAE,EAAE,YAAY,CAAC;YAC1D;iBAAO;;AAEL,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;;;QAIF,MAAM,CAAC,MAAK;YACV,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAC9C,IAAI,aAAa,EAAE;gBACjB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;YAC7D;iBAAO;gBACL,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;YAChE;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE;YAChD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AAC9C,YAAA,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE;;YAGtC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,GAAG,aAAa;AACnD,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,mBAAmB,CAAC,IAAwB,EAAA;;;;AAIlD,QAAA,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;YACtD;QACF;;QAEA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;YAC/C,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;YAC9B;AACA,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM;QACnC;aAAO;;AAEL,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM;QACnC;IACF;AAEA;;;;;;;AAOG;IACK,yBAAyB,CAAC,IAAY,EAAE,YAAoB,EAAA;AAClE,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,aAAa,GAAG,YAAY,GAAG,IAAI,CAAC,mBAAmB;AAE7D,QAAA,IAAI,aAAa,IAAI,CAAC,EAAE;AACtB,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE;;AAE3C,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,YAAY;YACzC;YACA;QACF;;;AAIA,QAAA,IAAI,aAAa,IAAI,IAAI,CAAC,MAAM,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3B;aAAO;;YAEL,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC;YAC7C,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;YACjC;QACF;AACA,QAAA,IAAI,CAAC,mBAAmB,GAAG,YAAY;IACzC;IAEA,eAAe,GAAA;QACb,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa;;;AAIvD,QAAA,IAAI,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,IAAI,gBAAgB,CAAC,YAAY,GAAG,kBAAkB,EAAE;AAC3G,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;AAEhC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;AAC5C,gBAAA,IAAI,gBAAgB,CAAC,WAAW,IAAI,kBAAkB,IAAI,gBAAgB,CAAC,YAAY,IAAI,kBAAkB,EAAE;AAC7G,oBAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,oBAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,oBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;gBAC3C;AACF,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC7C;QACF;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;IAC3C;AAEQ,IAAA,kBAAkB,CAAC,gBAAgC,EAAA;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QAC9C,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,aAAa;AAE7E,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC3B,KAAK,EAAE,mBAAmB,GAAG,iBAAiB,GAAG,aAAa;YAC9D,UAAU,EAAE,aAAa,GAAG,KAAK,GAAG,IAAI;YACxC,QAAQ,EAAE,mBAAmB,GAAG,EAAE,GAAG,EAAE;AACvC,YAAA,UAAU,EAAE,qGAAqG;AACjH,YAAA,UAAU,EAAE,GAAG;AACf,YAAA,iBAAiB,EAAE,KAAK;YACxB,YAAY,EAAE,CAAC,aAAa;AAC5B,YAAA,WAAW,EAAE,aAAa;AAC1B,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,EAAE;QAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,aAAa,EAAE,CAAC;;;QAI5C,IAAI,CAAC,cAAc,EAAE;QAErB,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,CAAC,KAAK,EAAE,WAAW,KAAI;AAClE,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,iBAAiB,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC9E,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAE9C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,KAAI;YACzE,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;gBAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,eAAe,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;YAC3F;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;;QAG5C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,eAAe,CACzC,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,MAAM,SAAS,CAAC,EAC7C,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS,EACrC,SAAS,EACT,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,SAAS,EACxC,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,SAAS,CAC1C,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;;QAGpC,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC5B,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAChE,YAAA,CAAC,CAAC,EACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAClH;QACH;;;AAIA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;AAC5C,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC/B,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;;oBAEnB,IAAI,IAAI,CAAC,WAAW;AAAE,wBAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AACpD,oBAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAK;AACjC,wBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,wBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;AACnB,wBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;oBACrC,CAAC,EAAE,GAAG,CAAC;gBACT;qBAAO,IAAI,aAAa,EAAE;;oBAExB,IAAI,IAAI,CAAC,WAAW;AAAE,wBAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AACpD,oBAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAK;AACjC,wBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,wBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;wBACnB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC7F,CAAC,EAAE,GAAG,CAAC;gBACT;YACF;YAAE,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;YAC5C;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC;;AAG7C,QAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AACnC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC/B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;YACrC;QACF,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,WAAW,GAAA;;QAET,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;QACpD,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;QACpD,IAAI,IAAI,CAAC,aAAa;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AAExD,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;;AAGjC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW;YAAE,CAAC,CAAC,OAAO,EAAE;AAC7C,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;;QAG3B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAK,MAAc,CAAC,mBAAmB,EAAE;AACxE,YAAA,MAAM,SAAS,GAAI,MAAc,CAAC,mBAAiC;YACnE,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9C,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5B;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC1B;AAEQ,IAAA,eAAe,CAAC,aAAsB,EAAA;QAC5C,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAAE;AAChC,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAGtC,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAChC,MAAc,CAAC,mBAAmB,GAAI,MAAc,CAAC,mBAAmB,IAAI,EAAE;YAC9E,MAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzD;;QAGA,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7F;IACF;AAEQ,IAAA,MAAM,cAAc,GAAA;AAC1B,QAAA,IAAI;YACF,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,OAAO,oBAAoB,CAAC;AACzD,YAAA,MAAM,iBAAiB,GAAG;AACxB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,iBAAiB,EAAE,GAAG;aACvB;YACD,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,iBAAiB,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1C;QAAE,OAAO,CAAC,EAAE;;AAEV,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC;QAC/C;IACF;;AAGO,IAAA,KAAK,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;IAC5B;AAEO,IAAA,OAAO,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC;IAC9B;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE;IACxB;IAEO,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE;IACjC;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE;IAC9B;AAEO,IAAA,WAAW,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC;IACnC;IAEO,GAAG,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;;;QAGpB,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7F;IACF;AAEA,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;IAClC;AAEA,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;IAClC;IAEO,WAAW,GAAA;;AAEhB,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,SAAS;IAC/D;AAEA;;;;AAIG;IACI,YAAY,CAAC,UAAkB,EAAE,OAKvC,EAAA;QACC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,MAAM,IAAI,GAAa,CAAC,UAAU,CAAC;AAEnC,QAAA,IAAI,OAAO,EAAE,KAAK,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,OAAO,CAAC,KAAK,CAAA,CAAE,CAAC;QACrC;AACA,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,CAAA,OAAA,EAAU,OAAO,CAAC,MAAM,CAAA,CAAE,CAAC;QACvC;AACA,QAAA,IAAI,OAAO,EAAE,mBAAmB,KAAK,SAAS,EAAE;AAC9C,YAAA,IAAI,CAAC,IAAI,CAAC,CAAA,oBAAA,EAAuB,OAAO,CAAC,mBAAmB,GAAG,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;QACzE;AACA,QAAA,IAAI,OAAO,EAAE,IAAI,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QACzC;;AAGA,QAAA,MAAM,cAAc,GAAG,CAAA,eAAA,EAAkB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,UAAU,CAAA,IAAA,CAAM;AAC3E,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC;IACrC;AAEA;;AAEG;IACI,aAAa,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU;IACxB;uGAzYW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,seARd,CAAA,4CAAA,CAA8C,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,EAAA,ocAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAQ7C,aAAa,EAAA,UAAA,EAAA,CAAA;kBAZzB,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EACD,CAAA,4CAAA,CAA8C,EAAA,eAAA,EAEvC,uBAAuB,CAAC,MAAM,EAAA,cAAA,EAC/B,CAAC;AACf,4BAAA,SAAS,EAAE,kBAAkB;4BAC7B,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE,cAAc,CAAC;yBACvE,CAAC,EAAA,MAAA,EAAA,CAAA,ocAAA,CAAA,EAAA;iGAGkE,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC1EjF;;AAEG;AASH;;;AAGG;AACI,eAAe,gBAAgB,CAAC,IAAY,EAAE,IAAI,GAAG,aAAa,EAAA;AACvE,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,OAAO,QAAQ,CAAC;QACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAW,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,KAAI;gBAC/D,IAAI,GAAG,EAAE;oBACP,MAAM,CAAC,GAAG,CAAC;oBACX;gBACF;AACA,gBAAA,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;AACvB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAAE,OAAO,CAAC,EAAE;;AAEV,QAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC;AACzC,QAAA,OAAO,IAAI;IACb;AACF;AAEA;;AAEG;SACa,aAAa,CAC3B,QAAgB,EAChB,UAAqD,EAAE,EAAA;IAEvD,MAAM,EAAE,SAAS,GAAG,SAAS,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,OAAO;IAExD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAClC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;;AAG3D,IAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI;AACjC,IAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,GAAG;IACjC,MAAM,OAAO,GAAG,EAAE;AAClB,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,OAAO;AAC5D,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,OAAO;;IAG7D,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;;QAEzC,MAAM,WAAW,GAAG;AACjB,aAAA,OAAO,CAAC,IAAI,EAAE,OAAO;AACrB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,aAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;AAE1B,QAAA,OAAO,CAAA,gBAAA,EAAmB,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAA,QAAA,EAAW,SAAS,CAAA,uBAAA,EAA0B,WAAW,SAAS;AACvH,IAAA,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAEf,OAAO,CAAA,YAAA,EAAe,KAAK,CAAA,UAAA,EAAa,MAAM,CAAA;8EAC8B,QAAQ,CAAA;IAClF,YAAY;OACT;AACP;AAEA;;AAEG;AACI,eAAe,UAAU,CAC9B,SAAiB,EACjB,UAA6B,EAAE,EAAA;AAE/B,IAAA,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,eAAe,EAAE,GAAG,OAAO;IAE9D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK;AACpB,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM;QACtB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QAEnC,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACjD;QACF;;QAGA,IAAI,eAAe,EAAE;AACnB,YAAA,GAAG,CAAC,SAAS,GAAG,eAAe;YAC/B,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;QACnC;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC;QAC3E,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AAErC,QAAA,GAAG,CAAC,MAAM,GAAG,MAAK;AAChB,YAAA,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;AACvC,YAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAExB,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;AACvD,YAAA,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC;YAC7C,OAAO,CAAC,SAAS,CAAC;AACpB,QAAA,CAAC;AAED,QAAA,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AACtB,YAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC;AACf,QAAA,CAAC;AAED,QAAA,GAAG,CAAC,GAAG,GAAG,GAAG;AACf,IAAA,CAAC,CAAC;AACJ;AAEA;;AAEG;AACH,SAAS,gBAAgB,CAAC,SAAoB,EAAA;IAC5C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS;;IAGzC,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC;AAC3C,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB;IAC1C,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC/B,QAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;AAC5B,IAAA,CAAC,CAAC;;IAGF,IAAI,KAAK,GAAG,QAAQ;;IAGpB,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC/B,QAAA,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;QACxC,KAAK,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,GAAA,EAAM,IAAI,IAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;AAChD,IAAA,CAAC,CAAC;;AAGF,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE;AAC9C,QAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;AAC5D,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;YAC/B,IAAI,OAAO,GAAG,EAAE;YAChB,IAAI,SAAS,GAAG,KAAK;AAErB,YAAA,OAAO,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE;AAEzB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,IAAI,UAAU,GAAG,CAAC;AAElB,gBAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE;AAC7B,oBAAA,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE;oBACpB,IAAI,CAAC,IAAI,MAAM;wBAAE;oBAEjB,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC;AACtC,oBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;oBAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;oBAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;oBAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;oBAE9B,IAAI,CAAC,GAAG,GAAG;wBAAE;oBAEb,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACpC,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;AAE1D,oBAAA,IAAI,YAAY,KAAK,KAAK,EAAE;AAC1B,wBAAA,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC;wBACvB,SAAS,GAAG,IAAI;oBAClB;gBACF;gBAEA,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,UAAU,CAAC;YACjD;YAEA,IAAI,SAAS,EAAE;gBACb,KAAK,IAAI,OAAO;gBAChB,KAAK,IAAI,GAAG;YACd;QACF;AAEA,QAAA,IAAI,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE;YACtB,KAAK,IAAI,GAAG;QACd;IACF;IAEA,KAAK,IAAI,QAAQ;AACjB,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,iBAAiB,CAAC,IAAuB,EAAE,SAAiB,EAAA;AACnE,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;AAE7C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACvC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAErB,IAAI,CAAC,GAAG,GAAG;YAAE;AAEb,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;AAClC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;AAClC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAElC,QAAA,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D;IAEA,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACpC,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA,KAAK,CAAC,CAAC,EAAE,SAAS;SAClB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;AAC5B;AAEA,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;AAC/C,IAAA,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,EAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,EAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAClH;AAEA,SAAS,QAAQ,CAAC,GAAW,EAAA;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,6CAA6C,CAAC;AACtE,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5B,IAAA,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjF;AAEA,SAAS,gBAAgB,CAAC,SAAiB,EAAE,OAAiB,EAAA;AAC5D,IAAA,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;AACxC,IAAA,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IACxB,IAAI,OAAO,GAAG,QAAQ;AAEtB,IAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AAC3B,QAAA,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;QACjC,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC;AAC1D,QAAA,IAAI,IAAI,GAAG,OAAO,EAAE;YAClB,OAAO,GAAG,IAAI;YACd,OAAO,GAAG,KAAK;QACjB;IACF;AAEA,IAAA,OAAO,OAAO;AAChB;AAEA;;AAEG;AACI,eAAe,uBAAuB,CAC3C,UAA6B,EAAE,EAAA;;IAG/B,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC;;IAGnE,MAAM,QAAQ,GAAG,EAAE;AACnB,IAAA,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,EAAE;AACpC,QAAA,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;QACzC;AACD,KAAA,CAAC;;IAGF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;IACpC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,IAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI;AACjC,IAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,GAAG;IACjC,MAAM,OAAO,GAAG,EAAE;AAClB,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,OAAO;AACnE,IAAA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,OAAO;IAEpE,OAAO,UAAU,CAAC,GAAG,EAAE;AACrB,QAAA,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,YAAY;AACpC,QAAA,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,aAAa;AACvC,QAAA,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,SAAS;AACtD,KAAA,CAAC;AACJ;;ACrRA;;AAEG;;;;"}
@@ -428,7 +428,7 @@ class CommandPage extends NgAtomicComponent {
428
428
  </frames-tabs>
429
429
  </templates-form>
430
430
  </frames-router-outlet>
431
- `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-command-vUNU: var(--page-width-lv1);--primary-color-SCOPED-IN-command-vUNU: var(--primary-color);--on-primary-color-SCOPED-IN-command-vUNU: var(--on-primary-color);--background-color-SCOPED-IN-command-vUNU: var(--background-color);--on-background-color-SCOPED-IN-command-vUNU: var(--on-background-color)}:host templates-form{padding-left:0;box-sizing:border-box;transition:padding-left .3s}:host .template{--first-content-height: 0px;width:var(--page-width-lv1-SCOPED-IN-command-vUNU)}:host .template div[dashboard]{padding:0;box-sizing:border-box}:host *{--primary-color: var(--primary-color-SCOPED-IN-command-vUNU);--on-primary-color: var(--on-primary-color-SCOPED-IN-command-vUNU);--background-color: var(--background-color-SCOPED-IN-command-vUNU);--on-background-color: var(--on-background-color-SCOPED-IN-command-vUNU)}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: FormTemplate, selector: "templates-form" }, { kind: "component", type: TabsFrame, selector: "frames-tabs", inputs: ["labels"], outputs: ["selectedTabIndexChange"] }, { kind: "component", type: CommandFormGroup, selector: "groups-command-form", inputs: ["apiJsonUrls"] }, { kind: "component", type: QueryFormGroup, selector: "groups-query-form", inputs: ["form", "keyActions"] }] });
431
+ `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-command-bIyy: var(--page-width-lv1);--primary-color-SCOPED-IN-command-bIyy: var(--primary-color);--on-primary-color-SCOPED-IN-command-bIyy: var(--on-primary-color);--background-color-SCOPED-IN-command-bIyy: var(--background-color);--on-background-color-SCOPED-IN-command-bIyy: var(--on-background-color)}:host templates-form{padding-left:0;box-sizing:border-box;transition:padding-left .3s}:host .template{--first-content-height: 0px;width:var(--page-width-lv1-SCOPED-IN-command-bIyy)}:host .template div[dashboard]{padding:0;box-sizing:border-box}:host *{--primary-color: var(--primary-color-SCOPED-IN-command-bIyy);--on-primary-color: var(--on-primary-color-SCOPED-IN-command-bIyy);--background-color: var(--background-color-SCOPED-IN-command-bIyy);--on-background-color: var(--on-background-color-SCOPED-IN-command-bIyy)}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: FormTemplate, selector: "templates-form" }, { kind: "component", type: TabsFrame, selector: "frames-tabs", inputs: ["labels"], outputs: ["selectedTabIndexChange"] }, { kind: "component", type: CommandFormGroup, selector: "groups-command-form", inputs: ["apiJsonUrls"] }, { kind: "component", type: QueryFormGroup, selector: "groups-query-form", inputs: ["form", "keyActions"] }] });
432
432
  }
433
433
  __decorate([
434
434
  Effect(FormTemplateStore.ActionId.FILE_SELECTED),
@@ -491,7 +491,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
491
491
  'actions',
492
492
  ]
493
493
  },
494
- ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-command-vUNU: var(--page-width-lv1);--primary-color-SCOPED-IN-command-vUNU: var(--primary-color);--on-primary-color-SCOPED-IN-command-vUNU: var(--on-primary-color);--background-color-SCOPED-IN-command-vUNU: var(--background-color);--on-background-color-SCOPED-IN-command-vUNU: var(--on-background-color)}:host templates-form{padding-left:0;box-sizing:border-box;transition:padding-left .3s}:host .template{--first-content-height: 0px;width:var(--page-width-lv1-SCOPED-IN-command-vUNU)}:host .template div[dashboard]{padding:0;box-sizing:border-box}:host *{--primary-color: var(--primary-color-SCOPED-IN-command-vUNU);--on-primary-color: var(--on-primary-color-SCOPED-IN-command-vUNU);--background-color: var(--background-color-SCOPED-IN-command-vUNU);--on-background-color: var(--on-background-color-SCOPED-IN-command-vUNU)}\n"] }]
494
+ ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-command-bIyy: var(--page-width-lv1);--primary-color-SCOPED-IN-command-bIyy: var(--primary-color);--on-primary-color-SCOPED-IN-command-bIyy: var(--on-primary-color);--background-color-SCOPED-IN-command-bIyy: var(--background-color);--on-background-color-SCOPED-IN-command-bIyy: var(--on-background-color)}:host templates-form{padding-left:0;box-sizing:border-box;transition:padding-left .3s}:host .template{--first-content-height: 0px;width:var(--page-width-lv1-SCOPED-IN-command-bIyy)}:host .template div[dashboard]{padding:0;box-sizing:border-box}:host *{--primary-color: var(--primary-color-SCOPED-IN-command-bIyy);--on-primary-color: var(--on-primary-color-SCOPED-IN-command-bIyy);--background-color: var(--background-color-SCOPED-IN-command-bIyy);--on-background-color: var(--on-background-color-SCOPED-IN-command-bIyy)}\n"] }]
495
495
  }], propDecorators: { onFileSelected: [] } });
496
496
 
497
497
  /**
@@ -738,7 +738,7 @@ class QueryPage extends NgAtomicComponent {
738
738
  <groups-query-form dashboard (action)="dispatch($event)" />
739
739
  </templates-index>
740
740
  </frames-router-outlet>
741
- `, isInline: true, styles: ["@charset \"UTF-8\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-Uc2X: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-Uc2X: var(--page-width-lv3);--primary-color-SCOPED-IN-query-Uc2X: var(--primary-color);--on-primary-color-SCOPED-IN-query-Uc2X: var(--on-primary-color);--surface-color-SCOPED-IN-query-Uc2X: var(--surface-color);--on-surface-color-SCOPED-IN-query-Uc2X: var(--on-surface-color);--on-background-color-SCOPED-IN-query-Uc2X: var(--on-background-color);--background-color-SCOPED-IN-query-Uc2X: var(--background-color);--navigator-background-color-SCOPED-IN-query-Uc2X: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-Uc2X: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-Uc2X: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-Uc2X: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-Uc2X: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-Uc2X);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-Uc2X);--surface-color: var(--surface-color-SCOPED-IN-query-Uc2X);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-Uc2X);--background-color: var(--background-color-SCOPED-IN-query-Uc2X);--on-background-color: var(--on-background-color-SCOPED-IN-query-Uc2X);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-Uc2X);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-Uc2X);--table-background-color: var(--table-background-color-SCOPED-IN-query-Uc2X);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-Uc2X);--is-debug: var(--is-debug-SCOPED-IN-query-Uc2X)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-Uc2X) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\n"], dependencies: [{ kind: "component", type: IndexTemplate, selector: "templates-index" }, { kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: NgAtomicFormSectionBuilder, selector: "ng-atomic-form-section-builder", inputs: ["form", "formFlatExcludes", "fieldMap", "fieldKeys"] }, { kind: "component", type: QueryFormGroup, selector: "groups-query-form", inputs: ["form", "keyActions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
741
+ `, isInline: true, styles: ["@charset \"UTF-8\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-YbSu: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-YbSu: var(--page-width-lv3);--primary-color-SCOPED-IN-query-YbSu: var(--primary-color);--on-primary-color-SCOPED-IN-query-YbSu: var(--on-primary-color);--surface-color-SCOPED-IN-query-YbSu: var(--surface-color);--on-surface-color-SCOPED-IN-query-YbSu: var(--on-surface-color);--on-background-color-SCOPED-IN-query-YbSu: var(--on-background-color);--background-color-SCOPED-IN-query-YbSu: var(--background-color);--navigator-background-color-SCOPED-IN-query-YbSu: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-YbSu: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-YbSu: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-YbSu: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-YbSu: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-YbSu);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-YbSu);--surface-color: var(--surface-color-SCOPED-IN-query-YbSu);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-YbSu);--background-color: var(--background-color-SCOPED-IN-query-YbSu);--on-background-color: var(--on-background-color-SCOPED-IN-query-YbSu);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-YbSu);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-YbSu);--table-background-color: var(--table-background-color-SCOPED-IN-query-YbSu);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-YbSu);--is-debug: var(--is-debug-SCOPED-IN-query-YbSu)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-YbSu) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\n"], dependencies: [{ kind: "component", type: IndexTemplate, selector: "templates-index" }, { kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: NgAtomicFormSectionBuilder, selector: "ng-atomic-form-section-builder", inputs: ["form", "formFlatExcludes", "fieldMap", "fieldKeys"] }, { kind: "component", type: QueryFormGroup, selector: "groups-query-form", inputs: ["form", "keyActions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
742
742
  }
743
743
  __decorate([
744
744
  Effect(IndexTemplateStore.ActionId.BACK),
@@ -819,7 +819,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
819
819
  'pageSizeOptions'
820
820
  ]
821
821
  },
822
- ], styles: ["@charset \"UTF-8\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-Uc2X: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-Uc2X: var(--page-width-lv3);--primary-color-SCOPED-IN-query-Uc2X: var(--primary-color);--on-primary-color-SCOPED-IN-query-Uc2X: var(--on-primary-color);--surface-color-SCOPED-IN-query-Uc2X: var(--surface-color);--on-surface-color-SCOPED-IN-query-Uc2X: var(--on-surface-color);--on-background-color-SCOPED-IN-query-Uc2X: var(--on-background-color);--background-color-SCOPED-IN-query-Uc2X: var(--background-color);--navigator-background-color-SCOPED-IN-query-Uc2X: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-Uc2X: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-Uc2X: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-Uc2X: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-Uc2X: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-Uc2X);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-Uc2X);--surface-color: var(--surface-color-SCOPED-IN-query-Uc2X);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-Uc2X);--background-color: var(--background-color-SCOPED-IN-query-Uc2X);--on-background-color: var(--on-background-color-SCOPED-IN-query-Uc2X);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-Uc2X);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-Uc2X);--table-background-color: var(--table-background-color-SCOPED-IN-query-Uc2X);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-Uc2X);--is-debug: var(--is-debug-SCOPED-IN-query-Uc2X)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-Uc2X) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\n"] }]
822
+ ], styles: ["@charset \"UTF-8\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-YbSu: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-YbSu: var(--page-width-lv3);--primary-color-SCOPED-IN-query-YbSu: var(--primary-color);--on-primary-color-SCOPED-IN-query-YbSu: var(--on-primary-color);--surface-color-SCOPED-IN-query-YbSu: var(--surface-color);--on-surface-color-SCOPED-IN-query-YbSu: var(--on-surface-color);--on-background-color-SCOPED-IN-query-YbSu: var(--on-background-color);--background-color-SCOPED-IN-query-YbSu: var(--background-color);--navigator-background-color-SCOPED-IN-query-YbSu: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-YbSu: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-YbSu: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-YbSu: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-YbSu: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-YbSu);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-YbSu);--surface-color: var(--surface-color-SCOPED-IN-query-YbSu);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-YbSu);--background-color: var(--background-color-SCOPED-IN-query-YbSu);--on-background-color: var(--on-background-color-SCOPED-IN-query-YbSu);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-YbSu);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-YbSu);--table-background-color: var(--table-background-color-SCOPED-IN-query-YbSu);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-YbSu);--is-debug: var(--is-debug-SCOPED-IN-query-YbSu)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-YbSu) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\n"] }]
823
823
  }], ctorParameters: () => [], propDecorators: { template: [{ type: i0.ViewChild, args: [i0.forwardRef(() => IndexTemplate), { isSignal: true }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], back: [], navigateToIframe: [], expandPage: [], itemClick: [] } });
824
824
 
825
825
  /**
@@ -120,7 +120,7 @@ class ThreadPage extends NgAtomicComponent {
120
120
  (action)="dispatch($event)"
121
121
  />
122
122
  </frames-router-outlet>
123
- `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-thread-7x63: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-thread-7x63: var(--page-width-lv3);--primary-color-SCOPED-IN-thread-7x63: var(--primary-color);--on-primary-color-SCOPED-IN-thread-7x63: var(--on-primary-color);--surface-color-SCOPED-IN-thread-7x63: var(--surface-color);--on-surface-color-SCOPED-IN-thread-7x63: var(--on-surface-color);--on-background-color-SCOPED-IN-thread-7x63: var(--on-background-color);--background-color-SCOPED-IN-thread-7x63: var(--background-color);--navigator-background-color-SCOPED-IN-thread-7x63: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-thread-7x63: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-thread-7x63: var(--table-background-color);--table-on-background-color-SCOPED-IN-thread-7x63: var(--table-on-background-color)}:host .template{width:var(--page-width-lv1-SCOPED-IN-thread-7x63)}:host .chat-container{display:flex;flex-direction:column;height:100%}:host .message{padding:10px;border-bottom:1px solid #ccc}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: ThreadTemplate, selector: "templates-messages" }] });
123
+ `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-thread-aWVH: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-thread-aWVH: var(--page-width-lv3);--primary-color-SCOPED-IN-thread-aWVH: var(--primary-color);--on-primary-color-SCOPED-IN-thread-aWVH: var(--on-primary-color);--surface-color-SCOPED-IN-thread-aWVH: var(--surface-color);--on-surface-color-SCOPED-IN-thread-aWVH: var(--on-surface-color);--on-background-color-SCOPED-IN-thread-aWVH: var(--on-background-color);--background-color-SCOPED-IN-thread-aWVH: var(--background-color);--navigator-background-color-SCOPED-IN-thread-aWVH: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-thread-aWVH: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-thread-aWVH: var(--table-background-color);--table-on-background-color-SCOPED-IN-thread-aWVH: var(--table-on-background-color)}:host .template{width:var(--page-width-lv1-SCOPED-IN-thread-aWVH)}:host .chat-container{display:flex;flex-direction:column;height:100%}:host .message{padding:10px;border-bottom:1px solid #ccc}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: ThreadTemplate, selector: "templates-messages" }] });
124
124
  }
125
125
  __decorate([
126
126
  Effect(ActionId.SEND_MESSAGE),
@@ -153,7 +153,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
153
153
  'messages',
154
154
  ]
155
155
  },
156
- ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-thread-7x63: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-thread-7x63: var(--page-width-lv3);--primary-color-SCOPED-IN-thread-7x63: var(--primary-color);--on-primary-color-SCOPED-IN-thread-7x63: var(--on-primary-color);--surface-color-SCOPED-IN-thread-7x63: var(--surface-color);--on-surface-color-SCOPED-IN-thread-7x63: var(--on-surface-color);--on-background-color-SCOPED-IN-thread-7x63: var(--on-background-color);--background-color-SCOPED-IN-thread-7x63: var(--background-color);--navigator-background-color-SCOPED-IN-thread-7x63: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-thread-7x63: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-thread-7x63: var(--table-background-color);--table-on-background-color-SCOPED-IN-thread-7x63: var(--table-on-background-color)}:host .template{width:var(--page-width-lv1-SCOPED-IN-thread-7x63)}:host .chat-container{display:flex;flex-direction:column;height:100%}:host .message{padding:10px;border-bottom:1px solid #ccc}\n"] }]
156
+ ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-thread-aWVH: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-thread-aWVH: var(--page-width-lv3);--primary-color-SCOPED-IN-thread-aWVH: var(--primary-color);--on-primary-color-SCOPED-IN-thread-aWVH: var(--on-primary-color);--surface-color-SCOPED-IN-thread-aWVH: var(--surface-color);--on-surface-color-SCOPED-IN-thread-aWVH: var(--on-surface-color);--on-background-color-SCOPED-IN-thread-aWVH: var(--on-background-color);--background-color-SCOPED-IN-thread-aWVH: var(--background-color);--navigator-background-color-SCOPED-IN-thread-aWVH: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-thread-aWVH: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-thread-aWVH: var(--table-background-color);--table-on-background-color-SCOPED-IN-thread-aWVH: var(--table-on-background-color)}:host .template{width:var(--page-width-lv1-SCOPED-IN-thread-aWVH)}:host .chat-container{display:flex;flex-direction:column;height:100%}:host .message{padding:10px;border-bottom:1px solid #ccc}\n"] }]
157
157
  }], propDecorators: { onCompositionStart: [{
158
158
  type: HostListener,
159
159
  args: ['compositionstart', ['$event']]
@@ -472,7 +472,7 @@ class AgentTemplate extends NgAtomicComponent {
472
472
  </div>
473
473
  </div>
474
474
  </frames-scroll>
475
- `, isInline: true, styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-QqcS: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-QqcS: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-QqcS: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-QqcS: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-QqcS: var(--border)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}:host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:transparent;font-family:SF Mono,Monaco,monospace;container-type:inline-size;container-name:agent-container;transition:all .3s ease}.terminal-window{--height: 100%;--contents-gap: 0;width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-QqcS);border-radius:8px;box-shadow:0 20px 40px #0000004d;animation:fadeIn .3s;transition:all .3s ease}.terminal-header{display:flex;justify-content:space-between;align-items:center;height:56px;min-height:56px;flex-shrink:0;padding:0;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-QqcS);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-QqcS);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-QqcS);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-QqcS);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-QqcS);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-QqcS);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .3s ease;padding:16px 20px}.input-line{display:block;position:relative}.input-line .input-prefix{display:none}.input-line .textarea-wrapper{display:flex;align-items:flex-start;position:relative;border:1px solid rgba(255,255,255,.2);border-radius:4px;transition:border-color .2s ease}.input-line .textarea-wrapper:focus-within{border-color:#fff6}.input-line .textarea-wrapper .arrow-prefix{color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;padding:12px 0 12px 16px;flex-shrink:0;pointer-events:none}.input-line .textarea-wrapper .input-container{flex:1;position:relative;overflow:hidden}.input-line .textarea-wrapper .terminal-input{width:100%;background:transparent;border:none;outline:none;color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;caret-color:transparent;padding:12px 16px 12px 8px;transition:none;resize:none;height:44px;min-height:44px;max-height:200px;overflow-y:auto;overflow-x:hidden;line-height:20px;box-sizing:border-box;white-space:pre-wrap;word-wrap:break-word}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.input-line .textarea-wrapper .terminal-input{caret-shape:block}.input-line .textarea-wrapper .terminal-input:disabled{opacity:.5;cursor:not-allowed}.input-line .textarea-wrapper .terminal-input:-webkit-autofill{-webkit-text-fill-color:#e0e0e0;-webkit-box-shadow:0 0 0 1000px rgba(0,0,0,.9) inset}.input-line .textarea-wrapper .terminal-input::placeholder{color:#ffffff4d;opacity:1}.input-line .textarea-wrapper .block-cursor{position:absolute;width:10px;height:20px;background:#e0e0e0;opacity:0;pointer-events:none}.input-line .textarea-wrapper .block-cursor.visible{animation:blink 1s infinite}@keyframes blink{0%,50%{opacity:.8}51%,to{opacity:0}}:host:has(.terminal-window){height:100vh;height:100dvh;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0;padding-top:env(safe-area-inset-top)}.terminal-window{height:100%;max-height:100vh;max-height:100dvh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0}.terminal-header .terminal-title{font-size:12px}.terminal-header .terminal-status{font-size:11px}.terminal-header .close-button{margin-right:.25rem}}@container agent-container (min-width: 601px) and (max-width: 900px){.terminal-window{max-width:100%;height:100%;border-radius:0}}@container agent-container (max-width: 400px){.terminal-header{height:56px;padding:0}.terminal-header .close-button{margin-right:.2rem}.input-area{padding:12px 16px}.textarea-wrapper .arrow-prefix{font-size:13px;padding:10px 0 10px 12px}.textarea-wrapper .terminal-input{font-size:12px;padding:10px 12px 10px 6px;height:40px;min-height:40px;line-height:20px}}.ascii-art{font-family:Consolas,Monaco,Liberation Mono,Menlo,Courier New,monospace!important;font-size:10px!important;line-height:1.1!important;letter-spacing:0!important;font-weight:400!important;margin:1em 0!important;padding:1em!important;white-space:pre!important;overflow-x:auto!important;overflow-y:hidden!important;display:block!important;width:fit-content!important;background:#ffffff08;border:1px solid var(--border-SCOPED-IN-entrance-QqcS);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-QqcS)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-QqcS),0 0 20px var(--accent-SCOPED-IN-entrance-QqcS);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ScrollFrame, selector: "frames-scroll" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "component", type: XtermOrganism, selector: "organisms-xterm", outputs: ["terminalReady", "githubLinkClick"] }, { kind: "directive", type: NavigatorOrganismStore, selector: "organisms-navigator", inputs: ["startActions", "endActions", "title"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
475
+ `, isInline: true, styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-apQy: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-apQy: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-apQy: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-apQy: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-apQy: var(--border)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}:host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:transparent;font-family:SF Mono,Monaco,monospace;container-type:inline-size;container-name:agent-container;transition:all .3s ease}.terminal-window{--height: 100%;--contents-gap: 0;width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-apQy);border-radius:8px;box-shadow:0 20px 40px #0000004d;animation:fadeIn .3s;transition:all .3s ease}.terminal-header{display:flex;justify-content:space-between;align-items:center;height:56px;min-height:56px;flex-shrink:0;padding:0;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-apQy);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-apQy);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-apQy);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-apQy);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-apQy);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-apQy);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .3s ease;padding:16px 20px}.input-line{display:block;position:relative}.input-line .input-prefix{display:none}.input-line .textarea-wrapper{display:flex;align-items:flex-start;position:relative;border:1px solid rgba(255,255,255,.2);border-radius:4px;transition:border-color .2s ease}.input-line .textarea-wrapper:focus-within{border-color:#fff6}.input-line .textarea-wrapper .arrow-prefix{color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;padding:12px 0 12px 16px;flex-shrink:0;pointer-events:none}.input-line .textarea-wrapper .input-container{flex:1;position:relative;overflow:hidden}.input-line .textarea-wrapper .terminal-input{width:100%;background:transparent;border:none;outline:none;color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;caret-color:transparent;padding:12px 16px 12px 8px;transition:none;resize:none;height:44px;min-height:44px;max-height:200px;overflow-y:auto;overflow-x:hidden;line-height:20px;box-sizing:border-box;white-space:pre-wrap;word-wrap:break-word}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.input-line .textarea-wrapper .terminal-input{caret-shape:block}.input-line .textarea-wrapper .terminal-input:disabled{opacity:.5;cursor:not-allowed}.input-line .textarea-wrapper .terminal-input:-webkit-autofill{-webkit-text-fill-color:#e0e0e0;-webkit-box-shadow:0 0 0 1000px rgba(0,0,0,.9) inset}.input-line .textarea-wrapper .terminal-input::placeholder{color:#ffffff4d;opacity:1}.input-line .textarea-wrapper .block-cursor{position:absolute;width:10px;height:20px;background:#e0e0e0;opacity:0;pointer-events:none}.input-line .textarea-wrapper .block-cursor.visible{animation:blink 1s infinite}@keyframes blink{0%,50%{opacity:.8}51%,to{opacity:0}}:host:has(.terminal-window){height:100vh;height:100dvh;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0;padding-top:env(safe-area-inset-top)}.terminal-window{height:100%;max-height:100vh;max-height:100dvh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0}.terminal-header .terminal-title{font-size:12px}.terminal-header .terminal-status{font-size:11px}.terminal-header .close-button{margin-right:.25rem}}@container agent-container (min-width: 601px) and (max-width: 900px){.terminal-window{max-width:100%;height:100%;border-radius:0}}@container agent-container (max-width: 400px){.terminal-header{height:56px;padding:0}.terminal-header .close-button{margin-right:.2rem}.input-area{padding:12px 16px}.textarea-wrapper .arrow-prefix{font-size:13px;padding:10px 0 10px 12px}.textarea-wrapper .terminal-input{font-size:12px;padding:10px 12px 10px 6px;height:40px;min-height:40px;line-height:20px}}.ascii-art{font-family:Consolas,Monaco,Liberation Mono,Menlo,Courier New,monospace!important;font-size:10px!important;line-height:1.1!important;letter-spacing:0!important;font-weight:400!important;margin:1em 0!important;padding:1em!important;white-space:pre!important;overflow-x:auto!important;overflow-y:hidden!important;display:block!important;width:fit-content!important;background:#ffffff08;border:1px solid var(--border-SCOPED-IN-entrance-apQy);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-apQy)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-apQy),0 0 20px var(--accent-SCOPED-IN-entrance-apQy);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ScrollFrame, selector: "frames-scroll" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "component", type: XtermOrganism, selector: "organisms-xterm", outputs: ["terminalReady", "githubLinkClick"] }, { kind: "directive", type: NavigatorOrganismStore, selector: "organisms-navigator", inputs: ["startActions", "endActions", "title"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
476
476
  }
477
477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AgentTemplate, decorators: [{
478
478
  type: Component,
@@ -553,7 +553,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
553
553
  'fieldMap',
554
554
  ],
555
555
  },
556
- ], styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-QqcS: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-QqcS: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-QqcS: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-QqcS: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-QqcS: var(--border)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}:host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:transparent;font-family:SF Mono,Monaco,monospace;container-type:inline-size;container-name:agent-container;transition:all .3s ease}.terminal-window{--height: 100%;--contents-gap: 0;width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-QqcS);border-radius:8px;box-shadow:0 20px 40px #0000004d;animation:fadeIn .3s;transition:all .3s ease}.terminal-header{display:flex;justify-content:space-between;align-items:center;height:56px;min-height:56px;flex-shrink:0;padding:0;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-QqcS);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-QqcS);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-QqcS);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-QqcS);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-QqcS);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-QqcS);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .3s ease;padding:16px 20px}.input-line{display:block;position:relative}.input-line .input-prefix{display:none}.input-line .textarea-wrapper{display:flex;align-items:flex-start;position:relative;border:1px solid rgba(255,255,255,.2);border-radius:4px;transition:border-color .2s ease}.input-line .textarea-wrapper:focus-within{border-color:#fff6}.input-line .textarea-wrapper .arrow-prefix{color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;padding:12px 0 12px 16px;flex-shrink:0;pointer-events:none}.input-line .textarea-wrapper .input-container{flex:1;position:relative;overflow:hidden}.input-line .textarea-wrapper .terminal-input{width:100%;background:transparent;border:none;outline:none;color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;caret-color:transparent;padding:12px 16px 12px 8px;transition:none;resize:none;height:44px;min-height:44px;max-height:200px;overflow-y:auto;overflow-x:hidden;line-height:20px;box-sizing:border-box;white-space:pre-wrap;word-wrap:break-word}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.input-line .textarea-wrapper .terminal-input{caret-shape:block}.input-line .textarea-wrapper .terminal-input:disabled{opacity:.5;cursor:not-allowed}.input-line .textarea-wrapper .terminal-input:-webkit-autofill{-webkit-text-fill-color:#e0e0e0;-webkit-box-shadow:0 0 0 1000px rgba(0,0,0,.9) inset}.input-line .textarea-wrapper .terminal-input::placeholder{color:#ffffff4d;opacity:1}.input-line .textarea-wrapper .block-cursor{position:absolute;width:10px;height:20px;background:#e0e0e0;opacity:0;pointer-events:none}.input-line .textarea-wrapper .block-cursor.visible{animation:blink 1s infinite}@keyframes blink{0%,50%{opacity:.8}51%,to{opacity:0}}:host:has(.terminal-window){height:100vh;height:100dvh;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0;padding-top:env(safe-area-inset-top)}.terminal-window{height:100%;max-height:100vh;max-height:100dvh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0}.terminal-header .terminal-title{font-size:12px}.terminal-header .terminal-status{font-size:11px}.terminal-header .close-button{margin-right:.25rem}}@container agent-container (min-width: 601px) and (max-width: 900px){.terminal-window{max-width:100%;height:100%;border-radius:0}}@container agent-container (max-width: 400px){.terminal-header{height:56px;padding:0}.terminal-header .close-button{margin-right:.2rem}.input-area{padding:12px 16px}.textarea-wrapper .arrow-prefix{font-size:13px;padding:10px 0 10px 12px}.textarea-wrapper .terminal-input{font-size:12px;padding:10px 12px 10px 6px;height:40px;min-height:40px;line-height:20px}}.ascii-art{font-family:Consolas,Monaco,Liberation Mono,Menlo,Courier New,monospace!important;font-size:10px!important;line-height:1.1!important;letter-spacing:0!important;font-weight:400!important;margin:1em 0!important;padding:1em!important;white-space:pre!important;overflow-x:auto!important;overflow-y:hidden!important;display:block!important;width:fit-content!important;background:#ffffff08;border:1px solid var(--border-SCOPED-IN-entrance-QqcS);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-QqcS)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-QqcS),0 0 20px var(--accent-SCOPED-IN-entrance-QqcS);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}\n"] }]
556
+ ], styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-apQy: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-apQy: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-apQy: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-apQy: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-apQy: var(--border)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}:host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:transparent;font-family:SF Mono,Monaco,monospace;container-type:inline-size;container-name:agent-container;transition:all .3s ease}.terminal-window{--height: 100%;--contents-gap: 0;width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-apQy);border-radius:8px;box-shadow:0 20px 40px #0000004d;animation:fadeIn .3s;transition:all .3s ease}.terminal-header{display:flex;justify-content:space-between;align-items:center;height:56px;min-height:56px;flex-shrink:0;padding:0;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-apQy);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-apQy);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-apQy);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-apQy);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-apQy);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-apQy);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .3s ease;padding:16px 20px}.input-line{display:block;position:relative}.input-line .input-prefix{display:none}.input-line .textarea-wrapper{display:flex;align-items:flex-start;position:relative;border:1px solid rgba(255,255,255,.2);border-radius:4px;transition:border-color .2s ease}.input-line .textarea-wrapper:focus-within{border-color:#fff6}.input-line .textarea-wrapper .arrow-prefix{color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;padding:12px 0 12px 16px;flex-shrink:0;pointer-events:none}.input-line .textarea-wrapper .input-container{flex:1;position:relative;overflow:hidden}.input-line .textarea-wrapper .terminal-input{width:100%;background:transparent;border:none;outline:none;color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;caret-color:transparent;padding:12px 16px 12px 8px;transition:none;resize:none;height:44px;min-height:44px;max-height:200px;overflow-y:auto;overflow-x:hidden;line-height:20px;box-sizing:border-box;white-space:pre-wrap;word-wrap:break-word}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.input-line .textarea-wrapper .terminal-input{caret-shape:block}.input-line .textarea-wrapper .terminal-input:disabled{opacity:.5;cursor:not-allowed}.input-line .textarea-wrapper .terminal-input:-webkit-autofill{-webkit-text-fill-color:#e0e0e0;-webkit-box-shadow:0 0 0 1000px rgba(0,0,0,.9) inset}.input-line .textarea-wrapper .terminal-input::placeholder{color:#ffffff4d;opacity:1}.input-line .textarea-wrapper .block-cursor{position:absolute;width:10px;height:20px;background:#e0e0e0;opacity:0;pointer-events:none}.input-line .textarea-wrapper .block-cursor.visible{animation:blink 1s infinite}@keyframes blink{0%,50%{opacity:.8}51%,to{opacity:0}}:host:has(.terminal-window){height:100vh;height:100dvh;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0;padding-top:env(safe-area-inset-top)}.terminal-window{height:100%;max-height:100vh;max-height:100dvh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0}.terminal-header .terminal-title{font-size:12px}.terminal-header .terminal-status{font-size:11px}.terminal-header .close-button{margin-right:.25rem}}@container agent-container (min-width: 601px) and (max-width: 900px){.terminal-window{max-width:100%;height:100%;border-radius:0}}@container agent-container (max-width: 400px){.terminal-header{height:56px;padding:0}.terminal-header .close-button{margin-right:.2rem}.input-area{padding:12px 16px}.textarea-wrapper .arrow-prefix{font-size:13px;padding:10px 0 10px 12px}.textarea-wrapper .terminal-input{font-size:12px;padding:10px 12px 10px 6px;height:40px;min-height:40px;line-height:20px}}.ascii-art{font-family:Consolas,Monaco,Liberation Mono,Menlo,Courier New,monospace!important;font-size:10px!important;line-height:1.1!important;letter-spacing:0!important;font-weight:400!important;margin:1em 0!important;padding:1em!important;white-space:pre!important;overflow-x:auto!important;overflow-y:hidden!important;display:block!important;width:fit-content!important;background:#ffffff08;border:1px solid var(--border-SCOPED-IN-entrance-apQy);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-apQy)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-apQy),0 0 20px var(--accent-SCOPED-IN-entrance-apQy);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}\n"] }]
557
557
  }], propDecorators: { endActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "endActions", required: false }] }], xtermComponent: [{ type: i0.ViewChild, args: ['xtermComponent', { isSignal: true }] }], inputField: [{ type: i0.ViewChild, args: ['inputField', { isSignal: true }] }], onWindowResize: [{
558
558
  type: HostListener,
559
559
  args: ['window:resize']
@@ -235,7 +235,7 @@ class SessionNavigatorOrganism extends NgAtomicComponent {
235
235
  }
236
236
  </div>
237
237
  </mat-toolbar>
238
- `, isInline: true, styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-gzub: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-gzub: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-gzub: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-gzub: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-gzub: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-gzub: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-gzub: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-gzub: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-gzub: var(--on-background-color)}:host{display:block;width:100%;height:56px}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-gzub);color:var(--on-primary-color-SCOPED-IN-session-navigator-gzub);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-gzub)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-gzub)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-gzub)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-gzub)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-gzub)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-gzub)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-gzub: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-gzub: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-gzub: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: MenuButtonAtomStore, selector: "atoms-menu-button, atoms-smart-menu-button", inputs: ["actions", "type", "action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
238
+ `, isInline: true, styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-Iw0O: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-Iw0O: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-Iw0O: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-Iw0O: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-Iw0O: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-Iw0O: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-Iw0O: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-Iw0O: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-Iw0O: var(--on-background-color)}:host{display:block;width:100%;height:56px}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-Iw0O);color:var(--on-primary-color-SCOPED-IN-session-navigator-Iw0O);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-Iw0O)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-Iw0O)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-Iw0O)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-Iw0O)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-Iw0O)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-Iw0O)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-Iw0O: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-Iw0O: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-Iw0O: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: MenuButtonAtomStore, selector: "atoms-menu-button, atoms-smart-menu-button", inputs: ["actions", "type", "action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
239
239
  }
240
240
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SessionNavigatorOrganism, decorators: [{
241
241
  type: Component,
@@ -269,7 +269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
269
269
  directive: SessionNavigatorOrganismStore,
270
270
  inputs: ['startActions', 'endActions', 'title'],
271
271
  }
272
- ], styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-gzub: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-gzub: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-gzub: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-gzub: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-gzub: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-gzub: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-gzub: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-gzub: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-gzub: var(--on-background-color)}:host{display:block;width:100%;height:56px}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-gzub);color:var(--on-primary-color-SCOPED-IN-session-navigator-gzub);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-gzub)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-gzub)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-gzub)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-gzub)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-gzub)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-gzub)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-gzub: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-gzub: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-gzub: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"] }]
272
+ ], styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-Iw0O: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-Iw0O: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-Iw0O: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-Iw0O: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-Iw0O: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-Iw0O: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-Iw0O: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-Iw0O: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-Iw0O: var(--on-background-color)}:host{display:block;width:100%;height:56px}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-Iw0O);color:var(--on-primary-color-SCOPED-IN-session-navigator-Iw0O);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-Iw0O)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-Iw0O)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-Iw0O)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-Iw0O)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-Iw0O)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-Iw0O)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-Iw0O: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-Iw0O: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-Iw0O: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"] }]
273
273
  }] });
274
274
 
275
275
  var InvoiceAppActionId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xxmachina/components",
3
- "version": "19.43.0",
3
+ "version": "19.45.0",
4
4
  "license": "MIT",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -18,6 +18,14 @@ declare const XTERM_SERVER_UUID: InjectionToken<() => string | undefined>;
18
18
  declare const XTERM_PROXY_TOKEN: InjectionToken<() => string | undefined>;
19
19
  /** DI token for providing deploy version getter to ProxyLinksAddon */
20
20
  declare const XTERM_DEPLOY_VERSION: InjectionToken<() => string | null | undefined>;
21
+ /**
22
+ * DI token for providing API endpoints (apiNext / hasura) to ProxyLinksAddon.
23
+ * web-proxy が opener postMessage 経由でこの値を受信して使用する (環境追従)。
24
+ */
25
+ declare const XTERM_PROXY_ENDPOINTS: InjectionToken<() => {
26
+ apiNext: string;
27
+ hasura: string;
28
+ } | undefined>;
21
29
  declare class XtermOrganismStore extends InjectableComponent {
22
30
  static readonly DI: {
23
31
  provide: (typeOrComponent: Parameters<(typeOrFactory: _ng_atomic_core.TypeOrTypeFactory<any>) => {
@@ -96,6 +104,11 @@ declare class XtermOrganismStore extends InjectableComponent {
96
104
  readonly getProxyToken: (() => string | undefined) | null;
97
105
  /** Injected deploy version getter for proxy URL host suffix (optional) */
98
106
  readonly getDeployVersion: (() => string | null | undefined) | null;
107
+ /** Injected endpoints getter for opener-driven environment switching (optional) */
108
+ readonly getProxyEndpoints: (() => {
109
+ apiNext: string;
110
+ hasura: string;
111
+ } | undefined) | null;
99
112
  constructor();
100
113
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<XtermOrganismStore, never>;
101
114
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XtermOrganismStore, "organisms-xterm", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "queryResult": { "alias": "queryResult"; "required": false; "isSignal": true; }; "useInteractiveTheme": { "alias": "useInteractiveTheme"; "required": false; "isSignal": true; }; "totalWritten": { "alias": "totalWritten"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -208,6 +221,11 @@ declare class WebLinksAddon implements ITerminalAddon {
208
221
  type ServerUUIDGetter = () => string | undefined;
209
222
  type TokenGetter = () => string | undefined;
210
223
  type DeployVersionGetter = () => string | null | undefined;
224
+ interface ProxyEndpoints {
225
+ apiNext: string;
226
+ hasura: string;
227
+ }
228
+ type EndpointsGetter = () => ProxyEndpoints | undefined;
211
229
  /**
212
230
  * deployVersion を proxy.machina.at のサブドメイン suffix に変換。
213
231
  *
@@ -226,7 +244,8 @@ declare class ProxyLinkProvider implements ILinkProvider {
226
244
  private readonly _getToken?;
227
245
  private readonly _handler;
228
246
  private readonly _getDeployVersion?;
229
- constructor(_terminal: Terminal, _getServerUUID: ServerUUIDGetter, _getToken?: TokenGetter | undefined, _handler?: (event: MouseEvent, proxyUrl: string) => void, _getDeployVersion?: DeployVersionGetter | undefined);
247
+ private readonly _getEndpoints?;
248
+ constructor(_terminal: Terminal, _getServerUUID: ServerUUIDGetter, _getToken?: TokenGetter | undefined, _handler?: (event: MouseEvent, proxyUrl: string) => void, _getDeployVersion?: DeployVersionGetter | undefined, _getEndpoints?: EndpointsGetter | undefined);
230
249
  provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void;
231
250
  }
232
251
  declare function toProxyUrl(serverUUID: string, localhostUrl: string, deployVersion?: string | null): string | null;
@@ -245,8 +264,9 @@ declare class ProxyLinksAddon implements ITerminalAddon {
245
264
  private readonly _getToken?;
246
265
  private readonly _handler?;
247
266
  private readonly _getDeployVersion?;
267
+ private readonly _getEndpoints?;
248
268
  private _linkProvider?;
249
- constructor(_getServerUUID: ServerUUIDGetter, _getToken?: TokenGetter | undefined, _handler?: ((event: MouseEvent, proxyUrl: string) => void) | undefined, _getDeployVersion?: DeployVersionGetter | undefined);
269
+ constructor(_getServerUUID: ServerUUIDGetter, _getToken?: TokenGetter | undefined, _handler?: ((event: MouseEvent, proxyUrl: string) => void) | undefined, _getDeployVersion?: DeployVersionGetter | undefined, _getEndpoints?: EndpointsGetter | undefined);
250
270
  activate(terminal: Terminal): void;
251
271
  dispose(): void;
252
272
  }
@@ -281,6 +301,6 @@ declare function svgToSixel(svgString: string, options?: SvgToSixelOptions): Pro
281
301
  */
282
302
  declare function getMachinaAsciiArtSixel(options?: SvgToSixelOptions): Promise<string>;
283
303
 
284
- export { GitHubLinkProvider, GitHubLinksAddon, ProxyLinkProvider, ProxyLinksAddon, WebLinksAddon, XTERM_DEPLOY_VERSION, XTERM_PROXY_TOKEN, XTERM_SERVER_UUID, XtermActionId, XtermOrganism, XtermOrganismStore, asciiArtToSvg, deployVersionToHostSuffix, generateAsciiArt, getMachinaAsciiArtSixel, svgToSixel, toProxyUrl };
285
- export type { DeployVersionGetter, GitHubLinkActivateHandler, ServerUUIDGetter, SvgToSixelOptions, TokenGetter };
304
+ export { GitHubLinkProvider, GitHubLinksAddon, ProxyLinkProvider, ProxyLinksAddon, WebLinksAddon, XTERM_DEPLOY_VERSION, XTERM_PROXY_ENDPOINTS, XTERM_PROXY_TOKEN, XTERM_SERVER_UUID, XtermActionId, XtermOrganism, XtermOrganismStore, asciiArtToSvg, deployVersionToHostSuffix, generateAsciiArt, getMachinaAsciiArtSixel, svgToSixel, toProxyUrl };
305
+ export type { DeployVersionGetter, EndpointsGetter, GitHubLinkActivateHandler, ProxyEndpoints, ServerUUIDGetter, SvgToSixelOptions, TokenGetter };
286
306
  //# sourceMappingURL=xxmachina-components-organisms-xterm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-organisms-xterm.d.ts","sources":["../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.store.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/image.utils.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;AAIA;AACE;AACA;AACA;AACA;AACA;AACD;AAED;AACA;AAEA;AACA;AAEA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAO4C;AAE1C;;;;;AAAuD;;;;;;;AAQvD;;AAGA;;;;;;AASD;;ACvCD;AAkDA;;AAcE;AACA;;;;;;;;;;;;AAcA;;;;AAIA;;;;;;AAiDA;AAsBA;;;;;;;AAOG;AACH;;AAqDA;;AAwHA;;AAmCO;AAIA;AAIA;AAIA;AAIA;AAIA;AAIA;;;;AAsBP;;;;AAIG;AACI;AACL;AACA;;;AAGD;AAuBD;;AAEG;;;;AAIJ;;;;AC9cA;AAED;;;AAEE;AAGmB;AAInB;AA0CA;AAyBD;;AC/ED;;;;AAKqB;AAGnB;AAOA;AAGD;;AClBD;;;;AAIG;AACH;AAII;;AAAiB;AAGnB;AAMA;AAGD;;;;ACLK;AAEN;;;;;;;;;;AAUG;AACH;AAiBA;;;AAII;;AAIA;AANiB;AASnB;AAkED;AAED;;AC7HA;;;;;;;;AAQG;AACH;;AAKI;AACA;AACA;;AAHiB;AAMnB;AAYA;AAGD;;ACrCD;;AAEG;;;;;;AAOF;AAED;;;AAGG;AACH;AAmBA;;AAEG;AACH;;;AAEyD;AAgCzD;;AAEG;AACH;AA6KA;;AAEG;AACH;;;"}
1
+ {"version":3,"file":"xxmachina-components-organisms-xterm.d.ts","sources":["../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.store.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/image.utils.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;AAIA;AACE;AACA;AACA;AACA;AACA;AACD;AAED;AACA;AAEA;AACA;AAEA;AACA;AAEA;;;AAGG;AACH;;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAO4C;AAE1C;;;;;AAAuD;;;;;;;AAQvD;;AAGA;;;;;;;AAxB+F;;;;AAoChG;;AClDD;AAkDA;;AAcE;AACA;;;;;;;;;;;;AAcA;;;;AAIA;;;;;;AAiDA;AAsBA;;;;;;;AAOG;AACH;;AAqDA;;AAyHA;;AAmCO;AAIA;AAIA;AAIA;AAIA;AAIA;AAIA;;;;AAsBP;;;;AAIG;AACI;AACL;AACA;;;AAGD;AAuBD;;AAEG;;;;AAIJ;;;;AC/cA;AAED;;;AAEE;AAGmB;AAInB;AA0CA;AAyBD;;AC/ED;;;;AAKqB;AAGnB;AAOA;AAGD;;AClBD;;;;AAIG;AACH;AAII;;AAAiB;AAGnB;AAMA;AAGD;;;;ACLK;;;;AAKL;;AAGD;;;;;;;;;;AAUG;AACH;AAiBA;;;AAII;;AAIA;AACA;AAPiB;AAUnB;AAmED;AAED;;ACrIA;;;;;;;;AAQG;AACH;;AAKI;AACA;AACA;AACA;;AAJiB;AAOnB;AAaA;AAGD;;ACvCD;;AAEG;;;;;;AAOF;AAED;;;AAGG;AACH;AAmBA;;AAEG;AACH;;;AAEyD;AAgCzD;;AAEG;AACH;AA6KA;;AAEG;AACH;;;"}