@xxmachina/components 19.33.1 → 19.35.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.
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-templates-agent.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/templates/agent/agent-messages.ts","../../../../../packages/@xxmachina/components/src/lib/templates/agent/agent.template.ts","../../../../../packages/@xxmachina/components/src/lib/templates/agent/xxmachina-components-templates-agent.ts"],"sourcesContent":["import chalk from 'chalk';\n\n/**\n * コアメッセージ(共通部分)\n */\nconst CORE_MESSAGE = `${chalk.cyan('● What is Plan X?')}\n Plan X is a modern WebRTC-based session manager, an alternative to SSH and Tmux.\n Connect any machine worldwide with a single command and deploy AI agents anywhere.\n\n${chalk.cyan(`● Vision: ${chalk.bold.yellow('\"The Planet is the Computer\"')}`)}\n Building a planetary-scale operating system\n AI agents autonomously optimize distributed systems\n\n${chalk.cyan('● Agentic Shell')}\n Unified interface to distributed resources\n Express your intent in natural language, AI plans the execution\n\n${chalk.cyan('● Meta-Kernel')}\n Distributed abstraction layer running on top of existing OSes (Linux/Mac/Win)\n Just as kernels abstract hardware, Plan X abstracts the network\n\n${chalk.cyan('● Autopoiesis')}\n Self-improving, self-sustaining, self-replicating living system\n Agents evolve themselves and spawn new agents`;\n\n/**\n * ウェルカムメッセージ(起動時に表示)\n */\nexport const WELCOME_MESSAGE = `${chalk.cyan(`● Welcome to ${chalk.bold.yellow('Plan X')}`)}\n\n${CORE_MESSAGE}\n\n${chalk.gray('powered by Plan X Agent LLC.')}\n`;\n\n/**\n * aboutコマンドのメッセージ\n */\nexport const ABOUT_MESSAGE = `${chalk.bold.cyan('● Plan X - OS for the LLM Era')}\n\n${CORE_MESSAGE}\n\n${chalk.cyan('● QTP/ATC Patterns')}\n Query-Transformer-Presenter: Retrieve information\n Action-Transformer-Command: Execute actions\n New interaction model replacing stdio\n\n${chalk.cyan('● Learn More')}\n Sign in to access more features\n\n${chalk.gray('powered by Plan X Agent LLC.')}`;\n","import { ChangeDetectionStrategy, Component, inject, ChangeDetectorRef, ElementRef, AfterViewInit, Provider, viewChild, computed, HostListener, input } from '@angular/core';\nimport { NgAtomicComponent, provideComponent } from '@ng-atomic/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { AutoLayoutFrame } from '@ng-atomic/components/frames/auto-layout';\nimport { CardFrame } from '@ng-atomic/components/frames/card';\nimport { ScrollFrame } from '@ng-atomic/components/frames/scroll';\nimport { ActionButtonsSectionOrganism } from '@ng-atomic/components/organisms/action-buttons-section';\nimport { HeadingOrganism } from '@ng-atomic/components/organisms/heading';\nimport { NgAtomicFormSectionBuilder } from '@ng-atomic/components/templates/form';\nimport { EntranceTemplateStore } from '@ng-atomic/components/templates/entrance';\nimport { AppService } from '@ng-atomic/common/services/app';\nimport { injectAuthState } from '@ng-atomic/common/services/auth';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Terminal } from '@xterm/xterm';\nimport { XtermOrganism, svgToSixel } from '@xxmachina/components/organisms/xterm';\nimport { NavigatorOrganismStore } from '@ng-atomic/components/organisms/navigator';\nimport chalk from 'chalk';\nimport { WELCOME_MESSAGE, ABOUT_MESSAGE } from './agent-messages';\n\n\nenum ActionId {\n SIGN_IN = '[@ng-atomic/components] Sign In',\n SIGN_IN_WITH_GOOGLE = '[@ng-atomic/components] Sign In With Google',\n SIGN_IN_WITH_TWITTER = '[@ng-atomic/components] Sign In With Twitter',\n SIGN_OUT = '[@ng-atomic/components] Sign Out',\n NAVIGATE = '[@ng-atomic/components] Navigate',\n}\n\n@Component({\n selector: 'templates-agent',\n imports: [\n FormsModule,\n AutoLayoutFrame,\n CardFrame,\n ScrollFrame,\n ActionButtonsSectionOrganism,\n HeadingOrganism,\n NgAtomicFormSectionBuilder,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n XtermOrganism,\n NavigatorOrganismStore\n],\n template: `\n <frames-scroll class=\"terminal-window\">\n <organisms-navigator top injectable class=\"terminal-header\"\n [startActions]=\"navStartActions()\"\n [endActions]=\"endActions()\"\n (action)=\"onNavAction($event)\"\n >Machina Agent</organisms-navigator>\n\n <organisms-xterm\n class=\"terminal-display\"\n (terminalReady)=\"onTerminalReady($event)\"\n (githubLinkClick)=\"onGitHubLinkClick($event)\"\n (click)=\"focusInput()\"\n #xtermComponent\n />\n\n <div bottom class=\"input-area\">\n <div class=\"input-line\">\n <span class=\"input-prefix\">></span>\n <div class=\"textarea-wrapper\">\n <span class=\"arrow-prefix\">></span>\n <div class=\"input-container\">\n <textarea\n #inputField\n class=\"terminal-input\"\n [(ngModel)]=\"currentInput\"\n (keydown.enter)=\"handleEnter($event)\"\n (keydown.arrowUp)=\"navigateHistory($event, -1)\"\n (keydown.arrowDown)=\"navigateHistory($event, 1)\"\n (keydown.control.k)=\"generateCommand($event)\"\n (keydown.meta.k)=\"generateCommand($event)\"\n (keydown)=\"preventPrefixDeletion($event)\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n (keyup)=\"updateCursorPosition()\"\n (click)=\"updateCursorPosition()\"\n (scroll)=\"updateCursorPosition()\"\n [disabled]=\"isProcessing\"\n placeholder=\"Type a command...\"\n rows=\"1\"\n ></textarea>\n <div class=\"block-cursor\"\n [class.visible]=\"showCursor\"\n [style.left.px]=\"cursorLeft\"\n [style.top.px]=\"cursorTop\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </frames-scroll>\n `,\n styleUrls: ['./agent.template.scss'],\n host: {\n class: 'template'\n },\n changeDetection: ChangeDetectionStrategy.Default,\n hostDirectives: [\n {\n directive: EntranceTemplateStore,\n inputs: [\n 'form',\n 'actions',\n 'title',\n 'fieldMap',\n ],\n },\n ]\n})\nexport class AgentTemplate extends NgAtomicComponent implements AfterViewInit {\n static ActionId = ActionId;\n protected ActionId = ActionId;\n protected store = inject(EntranceTemplateStore);\n private cdr = inject(ChangeDetectorRef);\n private app = inject(AppService);\n\n // 認証状態のチェック(非ログイン時は閉じるボタンを非表示)\n private readonly authState = injectAuthState();\n protected readonly isLoggedIn = computed(() => !!this.authState());\n\n readonly endActions = input<any[]>([]);\n\n protected navStartActions = computed(() => {\n if (!this.isLoggedIn()) return [];\n return [{ id: 'close-side-app', icon: 'close', name: '閉じる' }];\n });\n\n readonly xtermComponent = viewChild<XtermOrganism>('xtermComponent');\n readonly inputField = viewChild<ElementRef<HTMLTextAreaElement>>('inputField');\n\n protected statusText = 'Ready';\n protected isProcessing = false;\n protected showCursor = false;\n protected cursorLeft = 60;\n protected cursorTop = 12;\n\n // xterm関連\n private terminal!: Terminal;\n private commandHistory: string[] = [];\n private historyIndex = -1;\n \n // 入力管理\n protected currentInput = '';\n\n ngAfterViewInit() {\n // 入力フィールドにフォーカス\n setTimeout(() => {\n const textarea = this.inputField()?.nativeElement;\n if (textarea) {\n textarea.focus();\n // 初期高さを適切に設定\n this.adjustTextareaHeight();\n }\n }, 100);\n }\n\n @HostListener('window:resize')\n onWindowResize() {\n // ウィンドウリサイズ時にターミナルをフィット\n this.xtermComponent()?.fit();\n }\n\n onTerminalReady(terminal: Terminal) {\n this.terminal = terminal;\n\n // 初期化時にターミナルをコンテナサイズにフィット\n setTimeout(() => {\n this.xtermComponent()?.fit();\n }, 50);\n\n // 初期メッセージの表示\n this.showWelcomeMessage();\n\n // 初回ロード時は最上部にスクロール(アスキーアートから見えるように)\n setTimeout(() => {\n this.terminal.scrollToTop();\n }, 100);\n\n // 入力フィールドにフォーカスと高さ調整\n const textarea = this.inputField()?.nativeElement;\n if (textarea) {\n textarea.focus();\n this.adjustTextareaHeight();\n }\n }\n\n onGitHubLinkClick(issueNumber: number) {\n const url = `https://github.com/nontangent/x_x_machina/issues/${issueNumber}`;\n window.open(url, '_blank');\n }\n\n private async showWelcomeMessage() {\n this.terminal.writeln('');\n\n // assetsからSVGを読み込んでSIXELフォーマットで表示\n try {\n const response = await fetch('/assets/machina-ascii-art.svg');\n const svgString = await response.text();\n const sixelData = await svgToSixel(svgString, { width: 400, height: 130 });\n this.terminal.write(sixelData);\n this.terminal.writeln('');\n } catch (error) {\n console.warn('SIXEL logo display failed, using ASCII fallback:', error);\n // フォールバック: ASCII artでX_Xロゴを表示\n this.terminal.writeln(`${chalk.cyan(' ██╗ ██╗ ██╗ ██╗')}`);\n this.terminal.writeln(`${chalk.cyan(' ╚██╗██╔╝ ╚██╗██╔╝ ')}`);\n this.terminal.writeln(`${chalk.cyan(' ╚███╔╝ ╚███╔╝ ')}`);\n this.terminal.writeln(`${chalk.cyan(' ██╔██╗ ██╔██╗ ')}`);\n this.terminal.writeln(`${chalk.cyan(' ██╔╝ ██╗ ██╔╝ ██╗ ')}`);\n this.terminal.writeln(`${chalk.cyan(' ╚═╝ ╚═╝ ╚═╝ ╚═╝ ')}`);\n }\n this.terminal.writeln('');\n\n // ウェルカムメッセージを表示\n WELCOME_MESSAGE.split('\\n').forEach(line => this.terminal.writeln(line));\n\n this.terminal.writeln('');\n this.terminal.writeln(`${chalk.cyan('● Type \\x1b[1;36mlogin\\x1b[1;33m to sign in with Google\\x1b[0m')}`);\n this.terminal.writeln(`${chalk.cyan('● Type \\x1b[1;36mhelp\\x1b[1;33m for more commands\\x1b[0m')}`);\n this.terminal.writeln('');\n\n // プロンプト表示\n this.showPrompt();\n }\n\n\n private showPrompt() {\n // プロンプトはHTML側の入力フィールドで表示するため不要\n }\n\n private processCommand(command: string) {\n this.isProcessing = true;\n this.statusText = 'Processing...';\n this.cdr.markForCheck();\n\n // ログインコマンド\n if (command === 'login') {\n this.terminal.writeln('\\x1b[1;32m● Initiating Google authentication...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.SIGN_IN_WITH_GOOGLE });\n this.completeProcessing();\n }, 300);\n }\n else if (command.startsWith('auth')) {\n if (command.includes('google')) {\n this.terminal.writeln('\\x1b[1;32m● Initiating Google authentication...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.SIGN_IN_WITH_GOOGLE });\n this.completeProcessing();\n }, 300);\n } else if (command.includes('twitter')) {\n this.terminal.writeln('\\x1b[1;32m● Initiating Twitter authentication...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.SIGN_IN_WITH_TWITTER });\n this.completeProcessing();\n }, 300);\n } else if (command.includes('local')) {\n this.terminal.writeln('\\x1b[1;32m● Initiating local authentication...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.SIGN_IN });\n this.completeProcessing();\n }, 300);\n } else {\n this.terminal.writeln('\\x1b[1;32m● Available authentication methods:\\x1b[0m');\n this.terminal.writeln(' - auth --provider=google');\n this.terminal.writeln(' - auth --provider=twitter');\n this.terminal.writeln(' - auth --provider=local');\n this.completeProcessing();\n }\n }\n // ログアウトコマンド\n else if (command === 'logout' || command === 'signout') {\n this.terminal.writeln('\\x1b[1;32m● Signing out...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.SIGN_OUT });\n setTimeout(() => {\n this.terminal.writeln('\\x1b[1;32m● You have been signed out.\\x1b[0m');\n this.terminal.writeln('\\x1b[1;33m● Type \"login\" to sign in again.\\x1b[0m');\n this.completeProcessing();\n }, 500);\n }, 300);\n }\n // ヘルプコマンド\n else if (command === 'help' || command === '?') {\n this.terminal.writeln('\\x1b[1;32m● Available commands:\\x1b[0m');\n this.terminal.writeln(' \\x1b[36mlogin\\x1b[0m - Sign in with Google (default)');\n this.terminal.writeln(' \\x1b[36mauth\\x1b[0m --provider=\\x1b[33mgoogle\\x1b[0m - Sign in with Google');\n this.terminal.writeln(' \\x1b[36mauth\\x1b[0m --provider=\\x1b[33mtwitter\\x1b[0m - Sign in with Twitter');\n this.terminal.writeln(' \\x1b[36mauth\\x1b[0m --provider=\\x1b[33mlocal\\x1b[0m - Sign in with email/password');\n this.terminal.writeln(' \\x1b[36mlogout\\x1b[0m / \\x1b[36msignout\\x1b[0m - Sign out from the application');\n this.terminal.writeln(' \\x1b[36mterms\\x1b[0m - View Terms of Service');\n this.terminal.writeln(' \\x1b[36mabout\\x1b[0m - Show company information');\n this.terminal.writeln(' \\x1b[36mclear\\x1b[0m - Clear terminal');\n this.terminal.writeln(' \\x1b[36mhelp\\x1b[0m / \\x1b[36m?\\x1b[0m - Show this help');\n this.terminal.writeln('');\n this.terminal.writeln('\\x1b[1;33m● Keyboard shortcuts:\\x1b[0m');\n this.terminal.writeln(' \\x1b[36m⌘K\\x1b[0m / \\x1b[36mCtrl+K\\x1b[0m - Generate command suggestions');\n this.terminal.writeln(' \\x1b[36m↑\\x1b[0m / \\x1b[36m↓\\x1b[0m - Navigate command history');\n this.completeProcessing();\n }\n // machina情報コマンド\n else if (command === 'about') {\n ABOUT_MESSAGE.split('\\n').forEach(line => this.terminal.writeln(line));\n this.completeProcessing();\n }\n // 利用規約コマンド\n else if (command === 'terms') {\n this.terminal.writeln('\\x1b[1;32m● Opening Terms of Service...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.NAVIGATE, payload: 'terms' });\n this.completeProcessing();\n }, 300);\n }\n // クリアコマンド\n else if (command === 'clear' || command === 'cls') {\n this.terminal.clear();\n this.terminal.scrollToBottom();\n this.completeProcessing();\n }\n // 不明なコマンド\n else {\n this.terminal.writeln(`\\x1b[1;31m● Command not found: ${command}\\x1b[0m`);\n this.terminal.writeln(' Type \"help\" for available commands.');\n this.completeProcessing();\n }\n }\n\n private completeProcessing() {\n this.isProcessing = false;\n this.statusText = 'Ready';\n this.cdr.markForCheck();\n this.terminal.writeln('');\n \n // 最新の出力が見えるようにスクロール\n this.terminal.scrollToBottom();\n \n // 入力フィールドにフォーカスを戻す\n setTimeout(() => {\n this.inputField()?.nativeElement?.focus();\n }, 100);\n }\n\n handleEnter(event: KeyboardEvent) {\n // Shift+EnterまたはCtrl+Enterの場合は改行を許可\n if (event.shiftKey || event.ctrlKey) {\n return; // デフォルト動作(改行)を許可\n }\n\n event.preventDefault();\n const actualCommand = this.currentInput.trim();\n\n if (actualCommand) {\n // コマンドをターミナルに表示(改行を含む場合は適切に処理)\n const displayCommand = actualCommand.split('\\n').map(line => '\\x1b[32m> \\x1b[0m' + line).join('\\r\\n');\n this.terminal.write(displayCommand + '\\r\\n');\n\n // 履歴に追加\n this.commandHistory.push(actualCommand);\n this.historyIndex = this.commandHistory.length;\n\n // コマンドを処理\n this.processCommand(actualCommand);\n\n // 入力を初期状態にリセット\n this.currentInput = '';\n\n // textareaの高さをリセット\n const textarea = this.inputField()?.nativeElement;\n if (textarea) {\n textarea.style.height = 'auto';\n }\n }\n }\n \n navigateHistory(event: KeyboardEvent, direction: number) {\n event.preventDefault();\n\n if (direction === -1 && this.historyIndex > 0) {\n // 上矢印\n this.historyIndex--;\n this.currentInput = this.commandHistory[this.historyIndex];\n } else if (direction === 1) {\n // 下矢印\n if (this.historyIndex < this.commandHistory.length - 1) {\n this.historyIndex++;\n this.currentInput = this.commandHistory[this.historyIndex];\n } else {\n this.historyIndex = this.commandHistory.length;\n this.currentInput = '';\n }\n }\n }\n \n generateCommand(event?: KeyboardEvent) {\n if (event) {\n event.preventDefault();\n }\n \n this.terminal.writeln('');\n this.terminal.writeln('\\x1b[1;32m● Generating command suggestions...\\x1b[0m');\n \n setTimeout(() => {\n this.terminal.writeln('\\x1b[1;33m● Suggested commands:\\x1b[0m');\n this.terminal.writeln(' 1. \\x1b[36mauth --provider=google\\x1b[0m');\n this.terminal.writeln(' 2. \\x1b[36mlogin\\x1b[0m');\n this.terminal.writeln(' 3. \\x1b[36mhelp\\x1b[0m');\n this.terminal.writeln('');\n this.cdr.markForCheck();\n }, 500);\n }\n\n onNavAction(action: any) {\n if (action.id === 'close-side-app') {\n this.app.sideApp.collapse();\n return;\n }\n this.dispatch(action);\n }\n\n // 入力フィールドにフォーカスを設定\n focusInput() {\n this.inputField()?.nativeElement?.focus();\n }\n\n // textareaの高さを内容に合わせて調整\n adjustTextareaHeight() {\n const textarea = this.inputField()?.nativeElement;\n if (textarea) {\n // 一旦高さをリセット\n textarea.style.height = '20px';\n // scrollHeightを確認し、実際に必要な高さを設定\n const scrollHeight = textarea.scrollHeight;\n // パディングを考慮した最小高さ\n const minHeight = 44; // padding: 12px * 2 + line-height: 20px\n textarea.style.height = Math.max(minHeight, scrollHeight) + 'px';\n }\n }\n\n // キーダウンイベントのハンドラ(プレフィックス削除防止は不要になったためノーオペレーション)\n preventPrefixDeletion(_event: KeyboardEvent) {\n // No-op: prefix protection no longer needed\n }\n\n // 入力時の処理\n handleInput(event: Event) {\n const textarea = event.target as HTMLTextAreaElement;\n\n // 高さ調整(改行が含まれている場合のみ)\n if (this.currentInput.includes('\\n')) {\n this.adjustTextareaHeight();\n } else {\n // 1行の場合は固定高さ\n textarea.style.height = '44px';\n }\n\n // カーソル位置を更新\n this.updateCursorPosition();\n }\n\n // フォーカス時の処理\n handleFocus() {\n this.showCursor = true;\n this.updateCursorPosition();\n }\n\n // ブラー時の処理\n handleBlur() {\n this.showCursor = false;\n }\n\n // カーソル位置の更新\n updateCursorPosition() {\n const textarea = this.inputField()?.nativeElement;\n if (!textarea) return;\n \n const cursorPos = textarea.selectionStart;\n const textBeforeCursor = this.currentInput.substring(0, cursorPos);\n \n // 改行で分割\n const lines = textBeforeCursor.split('\\n');\n const currentLineIndex = lines.length - 1;\n const currentLineText = lines[currentLineIndex];\n \n // 仮のcanvasを使って現在の行のテキスト幅を計算\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (context) {\n context.font = '14px \"SF Mono\", Monaco, monospace';\n const textWidth = context.measureText(currentLineText).width;\n \n // カーソル位置を設定(パディング分を考慮)\n this.cursorLeft = 8 + textWidth; // 8px は textarea の左パディング\n \n // 垂直位置を調整(行数に基づいて、スクロール位置も考慮)\n const scrollTop = textarea.scrollTop;\n this.cursorTop = 12 + (currentLineIndex * 20) - scrollTop; // スクロール分を引く\n }\n }\n}\n\nexport function provideAgentTemplate(): Provider[] {\n return [\n provideComponent(EntranceTemplateStore, () => AgentTemplate),\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-templates-agent.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/templates/agent/agent-messages.ts","../../../../../packages/@xxmachina/components/src/lib/templates/agent/agent.template.ts","../../../../../packages/@xxmachina/components/src/lib/templates/agent/xxmachina-components-templates-agent.ts"],"sourcesContent":["import chalk from 'chalk';\n\n/**\n * コアメッセージ(共通部分)\n */\nconst CORE_MESSAGE = `${chalk.cyan('● What is Plan X?')}\n Plan X is a modern WebRTC-based session manager, an alternative to SSH and Tmux.\n Connect any machine worldwide with a single command and deploy AI agents anywhere.\n\n${chalk.cyan(`● Vision: ${chalk.bold.yellow('\"The Planet is the Computer\"')}`)}\n Building a planetary-scale operating system\n AI agents autonomously optimize distributed systems\n\n${chalk.cyan('● Agentic Shell')}\n Unified interface to distributed resources\n Express your intent in natural language, AI plans the execution\n\n${chalk.cyan('● Meta-Kernel')}\n Distributed abstraction layer running on top of existing OSes (Linux/Mac/Win)\n Just as kernels abstract hardware, Plan X abstracts the network\n\n${chalk.cyan('● Autopoiesis')}\n Self-improving, self-sustaining, self-replicating living system\n Agents evolve themselves and spawn new agents`;\n\n/**\n * ウェルカムメッセージ(起動時に表示)\n */\nexport const WELCOME_MESSAGE = `${chalk.cyan(`● Welcome to ${chalk.bold.yellow('Plan X')}`)}\n\n${CORE_MESSAGE}\n\n${chalk.gray('powered by Plan X Agent LLC.')}\n`;\n\n/**\n * aboutコマンドのメッセージ\n */\nexport const ABOUT_MESSAGE = `${chalk.bold.cyan('● Plan X - OS for the LLM Era')}\n\n${CORE_MESSAGE}\n\n${chalk.cyan('● QTP/ATC Patterns')}\n Query-Transformer-Presenter: Retrieve information\n Action-Transformer-Command: Execute actions\n New interaction model replacing stdio\n\n${chalk.cyan('● Learn More')}\n Sign in to access more features\n\n${chalk.gray('powered by Plan X Agent LLC.')}`;\n","import { ChangeDetectionStrategy, Component, inject, ChangeDetectorRef, ElementRef, AfterViewInit, Provider, viewChild, computed, HostListener, input } from '@angular/core';\nimport { NgAtomicComponent, provideComponent } from '@ng-atomic/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { AutoLayoutFrame } from '@ng-atomic/components/frames/auto-layout';\nimport { CardFrame } from '@ng-atomic/components/frames/card';\nimport { ScrollFrame } from '@ng-atomic/components/frames/scroll';\nimport { ActionButtonsSectionOrganism } from '@ng-atomic/components/organisms/action-buttons-section';\nimport { HeadingOrganism } from '@ng-atomic/components/organisms/heading';\nimport { NgAtomicFormSectionBuilder } from '@ng-atomic/components/templates/form';\nimport { EntranceTemplateStore } from '@ng-atomic/components/templates/entrance';\nimport { AppService } from '@ng-atomic/common/services/app';\nimport { injectAuthState } from '@ng-atomic/common/services/auth';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Terminal } from '@xterm/xterm';\nimport { XtermOrganism, svgToSixel } from '@xxmachina/components/organisms/xterm';\nimport { NavigatorOrganismStore } from '@ng-atomic/components/organisms/navigator';\nimport chalk from 'chalk';\nimport { WELCOME_MESSAGE, ABOUT_MESSAGE } from './agent-messages';\n\n\nenum ActionId {\n SIGN_IN = '[@ng-atomic/components] Sign In',\n SIGN_IN_WITH_GOOGLE = '[@ng-atomic/components] Sign In With Google',\n SIGN_IN_WITH_TWITTER = '[@ng-atomic/components] Sign In With Twitter',\n SIGN_OUT = '[@ng-atomic/components] Sign Out',\n NAVIGATE = '[@ng-atomic/components] Navigate',\n}\n\n@Component({\n selector: 'templates-agent',\n imports: [\n FormsModule,\n AutoLayoutFrame,\n CardFrame,\n ScrollFrame,\n ActionButtonsSectionOrganism,\n HeadingOrganism,\n NgAtomicFormSectionBuilder,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n XtermOrganism,\n NavigatorOrganismStore\n],\n template: `\n <frames-scroll class=\"terminal-window\">\n <organisms-navigator top injectable class=\"terminal-header\"\n [startActions]=\"navStartActions()\"\n [endActions]=\"endActions()\"\n (action)=\"onNavAction($event)\"\n >MACHINA</organisms-navigator>\n\n <organisms-xterm\n class=\"terminal-display\"\n (terminalReady)=\"onTerminalReady($event)\"\n (githubLinkClick)=\"onGitHubLinkClick($event)\"\n (click)=\"focusInput()\"\n #xtermComponent\n />\n\n <div bottom class=\"input-area\">\n <div class=\"input-line\">\n <span class=\"input-prefix\">></span>\n <div class=\"textarea-wrapper\">\n <span class=\"arrow-prefix\">></span>\n <div class=\"input-container\">\n <textarea\n #inputField\n class=\"terminal-input\"\n [(ngModel)]=\"currentInput\"\n (keydown.enter)=\"handleEnter($event)\"\n (keydown.arrowUp)=\"navigateHistory($event, -1)\"\n (keydown.arrowDown)=\"navigateHistory($event, 1)\"\n (keydown.control.k)=\"generateCommand($event)\"\n (keydown.meta.k)=\"generateCommand($event)\"\n (keydown)=\"preventPrefixDeletion($event)\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n (keyup)=\"updateCursorPosition()\"\n (click)=\"updateCursorPosition()\"\n (scroll)=\"updateCursorPosition()\"\n [disabled]=\"isProcessing\"\n placeholder=\"Type a command...\"\n rows=\"1\"\n ></textarea>\n <div class=\"block-cursor\"\n [class.visible]=\"showCursor\"\n [style.left.px]=\"cursorLeft\"\n [style.top.px]=\"cursorTop\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </frames-scroll>\n `,\n styleUrls: ['./agent.template.scss'],\n host: {\n class: 'template'\n },\n changeDetection: ChangeDetectionStrategy.Default,\n hostDirectives: [\n {\n directive: EntranceTemplateStore,\n inputs: [\n 'form',\n 'actions',\n 'title',\n 'fieldMap',\n ],\n },\n ]\n})\nexport class AgentTemplate extends NgAtomicComponent implements AfterViewInit {\n static ActionId = ActionId;\n protected ActionId = ActionId;\n protected store = inject(EntranceTemplateStore);\n private cdr = inject(ChangeDetectorRef);\n private app = inject(AppService);\n\n // 認証状態のチェック(非ログイン時は閉じるボタンを非表示)\n private readonly authState = injectAuthState();\n protected readonly isLoggedIn = computed(() => !!this.authState());\n\n readonly endActions = input<any[]>([]);\n\n protected navStartActions = computed(() => {\n if (!this.isLoggedIn()) return [];\n return [{ id: 'close-side-app', icon: 'close', name: '閉じる' }];\n });\n\n readonly xtermComponent = viewChild<XtermOrganism>('xtermComponent');\n readonly inputField = viewChild<ElementRef<HTMLTextAreaElement>>('inputField');\n\n protected statusText = 'Ready';\n protected isProcessing = false;\n protected showCursor = false;\n protected cursorLeft = 60;\n protected cursorTop = 12;\n\n // xterm関連\n private terminal!: Terminal;\n private commandHistory: string[] = [];\n private historyIndex = -1;\n \n // 入力管理\n protected currentInput = '';\n\n ngAfterViewInit() {\n // 入力フィールドにフォーカス\n setTimeout(() => {\n const textarea = this.inputField()?.nativeElement;\n if (textarea) {\n textarea.focus();\n // 初期高さを適切に設定\n this.adjustTextareaHeight();\n }\n }, 100);\n }\n\n @HostListener('window:resize')\n onWindowResize() {\n // ウィンドウリサイズ時にターミナルをフィット\n this.xtermComponent()?.fit();\n }\n\n onTerminalReady(terminal: Terminal) {\n this.terminal = terminal;\n\n // 初期化時にターミナルをコンテナサイズにフィット\n setTimeout(() => {\n this.xtermComponent()?.fit();\n }, 50);\n\n // 初期メッセージの表示\n this.showWelcomeMessage();\n\n // 初回ロード時は最上部にスクロール(アスキーアートから見えるように)\n setTimeout(() => {\n this.terminal.scrollToTop();\n }, 100);\n\n // 入力フィールドにフォーカスと高さ調整\n const textarea = this.inputField()?.nativeElement;\n if (textarea) {\n textarea.focus();\n this.adjustTextareaHeight();\n }\n }\n\n onGitHubLinkClick(issueNumber: number) {\n const url = `https://github.com/nontangent/x_x_machina/issues/${issueNumber}`;\n window.open(url, '_blank');\n }\n\n private async showWelcomeMessage() {\n this.terminal.writeln('');\n\n // assetsからSVGを読み込んでSIXELフォーマットで表示\n try {\n const response = await fetch('/assets/machina-ascii-art.svg');\n const svgString = await response.text();\n const sixelData = await svgToSixel(svgString, { width: 400, height: 130 });\n this.terminal.write(sixelData);\n this.terminal.writeln('');\n } catch (error) {\n console.warn('SIXEL logo display failed, using ASCII fallback:', error);\n // フォールバック: ASCII artでX_Xロゴを表示\n this.terminal.writeln(`${chalk.cyan(' ██╗ ██╗ ██╗ ██╗')}`);\n this.terminal.writeln(`${chalk.cyan(' ╚██╗██╔╝ ╚██╗██╔╝ ')}`);\n this.terminal.writeln(`${chalk.cyan(' ╚███╔╝ ╚███╔╝ ')}`);\n this.terminal.writeln(`${chalk.cyan(' ██╔██╗ ██╔██╗ ')}`);\n this.terminal.writeln(`${chalk.cyan(' ██╔╝ ██╗ ██╔╝ ██╗ ')}`);\n this.terminal.writeln(`${chalk.cyan(' ╚═╝ ╚═╝ ╚═╝ ╚═╝ ')}`);\n }\n this.terminal.writeln('');\n\n // ウェルカムメッセージを表示\n WELCOME_MESSAGE.split('\\n').forEach(line => this.terminal.writeln(line));\n\n this.terminal.writeln('');\n this.terminal.writeln(`${chalk.cyan('● Type \\x1b[1;36mlogin\\x1b[1;33m to sign in with Google\\x1b[0m')}`);\n this.terminal.writeln(`${chalk.cyan('● Type \\x1b[1;36mhelp\\x1b[1;33m for more commands\\x1b[0m')}`);\n this.terminal.writeln('');\n\n // プロンプト表示\n this.showPrompt();\n }\n\n\n private showPrompt() {\n // プロンプトはHTML側の入力フィールドで表示するため不要\n }\n\n private processCommand(command: string) {\n this.isProcessing = true;\n this.statusText = 'Processing...';\n this.cdr.markForCheck();\n\n // ログインコマンド\n if (command === 'login') {\n this.terminal.writeln('\\x1b[1;32m● Initiating Google authentication...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.SIGN_IN_WITH_GOOGLE });\n this.completeProcessing();\n }, 300);\n }\n else if (command.startsWith('auth')) {\n if (command.includes('google')) {\n this.terminal.writeln('\\x1b[1;32m● Initiating Google authentication...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.SIGN_IN_WITH_GOOGLE });\n this.completeProcessing();\n }, 300);\n } else if (command.includes('twitter')) {\n this.terminal.writeln('\\x1b[1;32m● Initiating Twitter authentication...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.SIGN_IN_WITH_TWITTER });\n this.completeProcessing();\n }, 300);\n } else if (command.includes('local')) {\n this.terminal.writeln('\\x1b[1;32m● Initiating local authentication...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.SIGN_IN });\n this.completeProcessing();\n }, 300);\n } else {\n this.terminal.writeln('\\x1b[1;32m● Available authentication methods:\\x1b[0m');\n this.terminal.writeln(' - auth --provider=google');\n this.terminal.writeln(' - auth --provider=twitter');\n this.terminal.writeln(' - auth --provider=local');\n this.completeProcessing();\n }\n }\n // ログアウトコマンド\n else if (command === 'logout' || command === 'signout') {\n this.terminal.writeln('\\x1b[1;32m● Signing out...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.SIGN_OUT });\n setTimeout(() => {\n this.terminal.writeln('\\x1b[1;32m● You have been signed out.\\x1b[0m');\n this.terminal.writeln('\\x1b[1;33m● Type \"login\" to sign in again.\\x1b[0m');\n this.completeProcessing();\n }, 500);\n }, 300);\n }\n // ヘルプコマンド\n else if (command === 'help' || command === '?') {\n this.terminal.writeln('\\x1b[1;32m● Available commands:\\x1b[0m');\n this.terminal.writeln(' \\x1b[36mlogin\\x1b[0m - Sign in with Google (default)');\n this.terminal.writeln(' \\x1b[36mauth\\x1b[0m --provider=\\x1b[33mgoogle\\x1b[0m - Sign in with Google');\n this.terminal.writeln(' \\x1b[36mauth\\x1b[0m --provider=\\x1b[33mtwitter\\x1b[0m - Sign in with Twitter');\n this.terminal.writeln(' \\x1b[36mauth\\x1b[0m --provider=\\x1b[33mlocal\\x1b[0m - Sign in with email/password');\n this.terminal.writeln(' \\x1b[36mlogout\\x1b[0m / \\x1b[36msignout\\x1b[0m - Sign out from the application');\n this.terminal.writeln(' \\x1b[36mterms\\x1b[0m - View Terms of Service');\n this.terminal.writeln(' \\x1b[36mabout\\x1b[0m - Show company information');\n this.terminal.writeln(' \\x1b[36mclear\\x1b[0m - Clear terminal');\n this.terminal.writeln(' \\x1b[36mhelp\\x1b[0m / \\x1b[36m?\\x1b[0m - Show this help');\n this.terminal.writeln('');\n this.terminal.writeln('\\x1b[1;33m● Keyboard shortcuts:\\x1b[0m');\n this.terminal.writeln(' \\x1b[36m⌘K\\x1b[0m / \\x1b[36mCtrl+K\\x1b[0m - Generate command suggestions');\n this.terminal.writeln(' \\x1b[36m↑\\x1b[0m / \\x1b[36m↓\\x1b[0m - Navigate command history');\n this.completeProcessing();\n }\n // machina情報コマンド\n else if (command === 'about') {\n ABOUT_MESSAGE.split('\\n').forEach(line => this.terminal.writeln(line));\n this.completeProcessing();\n }\n // 利用規約コマンド\n else if (command === 'terms') {\n this.terminal.writeln('\\x1b[1;32m● Opening Terms of Service...\\x1b[0m');\n setTimeout(() => {\n this.dispatch({ id: ActionId.NAVIGATE, payload: 'terms' });\n this.completeProcessing();\n }, 300);\n }\n // クリアコマンド\n else if (command === 'clear' || command === 'cls') {\n this.terminal.clear();\n this.terminal.scrollToBottom();\n this.completeProcessing();\n }\n // 不明なコマンド\n else {\n this.terminal.writeln(`\\x1b[1;31m● Command not found: ${command}\\x1b[0m`);\n this.terminal.writeln(' Type \"help\" for available commands.');\n this.completeProcessing();\n }\n }\n\n private completeProcessing() {\n this.isProcessing = false;\n this.statusText = 'Ready';\n this.cdr.markForCheck();\n this.terminal.writeln('');\n \n // 最新の出力が見えるようにスクロール\n this.terminal.scrollToBottom();\n \n // 入力フィールドにフォーカスを戻す\n setTimeout(() => {\n this.inputField()?.nativeElement?.focus();\n }, 100);\n }\n\n handleEnter(event: KeyboardEvent) {\n // Shift+EnterまたはCtrl+Enterの場合は改行を許可\n if (event.shiftKey || event.ctrlKey) {\n return; // デフォルト動作(改行)を許可\n }\n\n event.preventDefault();\n const actualCommand = this.currentInput.trim();\n\n if (actualCommand) {\n // コマンドをターミナルに表示(改行を含む場合は適切に処理)\n const displayCommand = actualCommand.split('\\n').map(line => '\\x1b[32m> \\x1b[0m' + line).join('\\r\\n');\n this.terminal.write(displayCommand + '\\r\\n');\n\n // 履歴に追加\n this.commandHistory.push(actualCommand);\n this.historyIndex = this.commandHistory.length;\n\n // コマンドを処理\n this.processCommand(actualCommand);\n\n // 入力を初期状態にリセット\n this.currentInput = '';\n\n // textareaの高さをリセット\n const textarea = this.inputField()?.nativeElement;\n if (textarea) {\n textarea.style.height = 'auto';\n }\n }\n }\n \n navigateHistory(event: KeyboardEvent, direction: number) {\n event.preventDefault();\n\n if (direction === -1 && this.historyIndex > 0) {\n // 上矢印\n this.historyIndex--;\n this.currentInput = this.commandHistory[this.historyIndex];\n } else if (direction === 1) {\n // 下矢印\n if (this.historyIndex < this.commandHistory.length - 1) {\n this.historyIndex++;\n this.currentInput = this.commandHistory[this.historyIndex];\n } else {\n this.historyIndex = this.commandHistory.length;\n this.currentInput = '';\n }\n }\n }\n \n generateCommand(event?: KeyboardEvent) {\n if (event) {\n event.preventDefault();\n }\n \n this.terminal.writeln('');\n this.terminal.writeln('\\x1b[1;32m● Generating command suggestions...\\x1b[0m');\n \n setTimeout(() => {\n this.terminal.writeln('\\x1b[1;33m● Suggested commands:\\x1b[0m');\n this.terminal.writeln(' 1. \\x1b[36mauth --provider=google\\x1b[0m');\n this.terminal.writeln(' 2. \\x1b[36mlogin\\x1b[0m');\n this.terminal.writeln(' 3. \\x1b[36mhelp\\x1b[0m');\n this.terminal.writeln('');\n this.cdr.markForCheck();\n }, 500);\n }\n\n onNavAction(action: any) {\n if (action.id === 'close-side-app') {\n this.app.sideApp.collapse();\n return;\n }\n this.dispatch(action);\n }\n\n // 入力フィールドにフォーカスを設定\n focusInput() {\n this.inputField()?.nativeElement?.focus();\n }\n\n // textareaの高さを内容に合わせて調整\n adjustTextareaHeight() {\n const textarea = this.inputField()?.nativeElement;\n if (textarea) {\n // 一旦高さをリセット\n textarea.style.height = '20px';\n // scrollHeightを確認し、実際に必要な高さを設定\n const scrollHeight = textarea.scrollHeight;\n // パディングを考慮した最小高さ\n const minHeight = 44; // padding: 12px * 2 + line-height: 20px\n textarea.style.height = Math.max(minHeight, scrollHeight) + 'px';\n }\n }\n\n // キーダウンイベントのハンドラ(プレフィックス削除防止は不要になったためノーオペレーション)\n preventPrefixDeletion(_event: KeyboardEvent) {\n // No-op: prefix protection no longer needed\n }\n\n // 入力時の処理\n handleInput(event: Event) {\n const textarea = event.target as HTMLTextAreaElement;\n\n // 高さ調整(改行が含まれている場合のみ)\n if (this.currentInput.includes('\\n')) {\n this.adjustTextareaHeight();\n } else {\n // 1行の場合は固定高さ\n textarea.style.height = '44px';\n }\n\n // カーソル位置を更新\n this.updateCursorPosition();\n }\n\n // フォーカス時の処理\n handleFocus() {\n this.showCursor = true;\n this.updateCursorPosition();\n }\n\n // ブラー時の処理\n handleBlur() {\n this.showCursor = false;\n }\n\n // カーソル位置の更新\n updateCursorPosition() {\n const textarea = this.inputField()?.nativeElement;\n if (!textarea) return;\n \n const cursorPos = textarea.selectionStart;\n const textBeforeCursor = this.currentInput.substring(0, cursorPos);\n \n // 改行で分割\n const lines = textBeforeCursor.split('\\n');\n const currentLineIndex = lines.length - 1;\n const currentLineText = lines[currentLineIndex];\n \n // 仮のcanvasを使って現在の行のテキスト幅を計算\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (context) {\n context.font = '14px \"SF Mono\", Monaco, monospace';\n const textWidth = context.measureText(currentLineText).width;\n \n // カーソル位置を設定(パディング分を考慮)\n this.cursorLeft = 8 + textWidth; // 8px は textarea の左パディング\n \n // 垂直位置を調整(行数に基づいて、スクロール位置も考慮)\n const scrollTop = textarea.scrollTop;\n this.cursorTop = 12 + (currentLineIndex * 20) - scrollTop; // スクロール分を引く\n }\n }\n}\n\nexport function provideAgentTemplate(): Provider[] {\n return [\n provideComponent(EntranceTemplateStore, () => AgentTemplate),\n ];\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -70,6 +70,22 @@ class WebGLParticleSystem {
70
70
  velocities;
71
71
  isRunning = false;
72
72
  frameCount = 0; // 接続線更新頻度制御用
73
+ onResize = () => {
74
+ const { width, height } = this.getSize();
75
+ this.camera.aspect = width / height;
76
+ this.camera.updateProjectionMatrix();
77
+ this.renderer.setSize(width, height);
78
+ const material = this.particles.material;
79
+ material.uniforms['uBounds'].value.set(width / 2, height / 2);
80
+ };
81
+ onVisibilityChange = () => {
82
+ if (document.hidden) {
83
+ this.stop();
84
+ }
85
+ else {
86
+ this.start();
87
+ }
88
+ };
73
89
  constructor(config) {
74
90
  this.config = {
75
91
  container: config.container,
@@ -284,24 +300,10 @@ class WebGLParticleSystem {
284
300
  };
285
301
  }
286
302
  setupResizeHandler() {
287
- window.addEventListener('resize', () => {
288
- const { width, height } = this.getSize();
289
- this.camera.aspect = width / height;
290
- this.camera.updateProjectionMatrix();
291
- this.renderer.setSize(width, height);
292
- const material = this.particles.material;
293
- material.uniforms['uBounds'].value.set(width / 2, height / 2);
294
- });
303
+ window.addEventListener('resize', this.onResize);
295
304
  }
296
305
  setupVisibilityHandler() {
297
- document.addEventListener('visibilitychange', () => {
298
- if (document.hidden) {
299
- this.stop();
300
- }
301
- else {
302
- this.start();
303
- }
304
- });
306
+ document.addEventListener('visibilitychange', this.onVisibilityChange);
305
307
  }
306
308
  start() {
307
309
  if (this.isRunning)
@@ -316,6 +318,8 @@ class WebGLParticleSystem {
316
318
  }
317
319
  dispose() {
318
320
  this.stop();
321
+ window.removeEventListener('resize', this.onResize);
322
+ document.removeEventListener('visibilitychange', this.onVisibilityChange);
319
323
  this.particles.geometry.dispose();
320
324
  this.particles.material.dispose();
321
325
  this.lines.geometry.dispose();
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-templates-background.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/templates/background/shaders/particle.vert.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/shaders/particle.frag.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/utils/webgl-particle-system.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/lain-background.template.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/background.template.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/index.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/xxmachina-components-templates-background.ts"],"sourcesContent":["export const particleVertexShader = /* glsl */ `\nattribute vec3 velocity;\nattribute float size;\n\nuniform float uTime;\nuniform vec2 uBounds;\n\nvarying vec3 vColor;\nvarying float vAlpha;\n\nvoid main() {\n vColor = color;\n vAlpha = 1.0;\n\n // GPU上で位置更新(時間ベース)\n vec3 pos = position;\n pos.x += velocity.x * uTime * 0.01;\n pos.y += velocity.y * uTime * 0.01;\n\n // 境界でラップアラウンド\n pos.x = mod(pos.x + uBounds.x, uBounds.x * 2.0) - uBounds.x;\n pos.y = mod(pos.y + uBounds.y, uBounds.y * 2.0) - uBounds.y;\n\n vec4 mvPosition = modelViewMatrix * vec4(pos, 1.0);\n gl_PointSize = size * (300.0 / -mvPosition.z);\n gl_Position = projectionMatrix * mvPosition;\n}\n`;\n","export const particleFragmentShader = /* glsl */ `\nvarying vec3 vColor;\nvarying float vAlpha;\n\nvoid main() {\n // 中心からの距離\n float dist = length(gl_PointCoord - vec2(0.5));\n\n // 円形にクリップ\n if (dist > 0.5) discard;\n\n // 強いグロー効果(Canvas版のshadowBlur=15を再現)\n float coreBrightness = exp(-dist * 8.0); // コア部分(非常に明るい)\n float glowBrightness = exp(-dist * 2.5) * 0.6; // 外側のソフトグロー\n float outerGlow = exp(-dist * 1.5) * 0.3; // さらに外側の淡いグロー\n float glow = coreBrightness + glowBrightness + outerGlow;\n\n // 色を強くブースト(黒背景で映える明るさに)\n vec3 boostedColor = vColor * 1.5;\n float alpha = min(glow * vAlpha, 1.0);\n\n gl_FragColor = vec4(boostedColor, alpha);\n}\n`;\n","import * as THREE from 'three';\nimport { particleVertexShader, particleFragmentShader } from '../shaders';\n\nexport interface ParticleSystemConfig {\n container: HTMLElement;\n particleCount?: number;\n connectionDistance?: number;\n /** 固定色相を使用する場合に指定(未指定で全色相ランダム) */\n baseHue?: number;\n /** 接続線のhue変化速度(デフォルト: 30) */\n hueSpeed?: number;\n}\n\nexport class WebGLParticleSystem {\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n private renderer: THREE.WebGLRenderer;\n private particles: THREE.Points;\n private lines: THREE.LineSegments;\n private clock: THREE.Clock;\n private config: Required<ParticleSystemConfig>;\n private positions: Float32Array;\n private velocities: Float32Array;\n private isRunning = false;\n private frameCount = 0; // 接続線更新頻度制御用\n\n constructor(config: ParticleSystemConfig) {\n this.config = {\n container: config.container,\n particleCount: config.particleCount ?? this.getOptimalParticleCount(),\n connectionDistance: config.connectionDistance ?? 100, // パフォーマンス優先で短縮\n baseHue: config.baseHue ?? -1, // -1 = 全色相ランダム\n hueSpeed: config.hueSpeed ?? 30,\n };\n\n this.scene = new THREE.Scene();\n this.scene.background = new THREE.Color(0x000000);\n this.clock = new THREE.Clock();\n this.positions = new Float32Array(this.config.particleCount * 3);\n this.velocities = new Float32Array(this.config.particleCount * 3);\n\n this.camera = this.createCamera();\n this.renderer = this.createRenderer();\n this.particles = this.createParticles();\n this.lines = this.createLines();\n\n this.scene.add(this.particles);\n this.scene.add(this.lines);\n\n this.setupResizeHandler();\n this.setupVisibilityHandler();\n }\n\n private getOptimalParticleCount(): number {\n const isMobile = /iPhone|iPad|Android/i.test(navigator.userAgent);\n // パフォーマンス優先:パーティクル数を削減\n return isMobile ? 60 : 100;\n }\n\n private createCamera(): THREE.PerspectiveCamera {\n const { width, height } = this.getSize();\n const camera = new THREE.PerspectiveCamera(75, width / height, 1, 2000);\n camera.position.z = 400;\n return camera;\n }\n\n private createRenderer(): THREE.WebGLRenderer {\n const { width, height } = this.getSize();\n const renderer = new THREE.WebGLRenderer({\n antialias: true,\n alpha: false, // 黒背景を強制(透明にしない)\n });\n renderer.setSize(width, height);\n renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n renderer.setClearColor(0x000000, 1); // 明示的に黒背景を設定\n this.config.container.appendChild(renderer.domElement);\n\n // Canvas styling - コンテナ内に配置(position: absoluteに変更)\n renderer.domElement.style.position = 'absolute';\n renderer.domElement.style.top = '0';\n renderer.domElement.style.left = '0';\n renderer.domElement.style.width = '100%';\n renderer.domElement.style.height = '100%';\n\n return renderer;\n }\n\n private createParticles(): THREE.Points {\n const { particleCount, baseHue } = this.config;\n const { width, height } = this.getSize();\n\n const geometry = new THREE.BufferGeometry();\n const colors = new Float32Array(particleCount * 3);\n const sizes = new Float32Array(particleCount);\n\n for (let i = 0; i < particleCount; i++) {\n const i3 = i * 3;\n\n // ランダム位置\n this.positions[i3] = (Math.random() - 0.5) * width;\n this.positions[i3 + 1] = (Math.random() - 0.5) * height;\n this.positions[i3 + 2] = (Math.random() - 0.5) * 100;\n\n // ランダム速度\n this.velocities[i3] = (Math.random() - 0.5) * 50;\n this.velocities[i3 + 1] = (Math.random() - 0.5) * 50;\n this.velocities[i3 + 2] = 0;\n\n // HSLカラー(baseHue < 0 なら全色相ランダム)\n const hue = baseHue < 0\n ? Math.random() // 0-1 (全色相)\n : (baseHue + Math.random() * 60) / 360;\n // 彩度70%、明度60%で鮮やかに(Canvas版のshadowBlur効果を再現)\n const color = new THREE.Color().setHSL(hue, 0.7, 0.6);\n colors[i3] = color.r;\n colors[i3 + 1] = color.g;\n colors[i3 + 2] = color.b;\n\n sizes[i] = Math.random() * 2 + 2; // サイズ2-4(パフォーマンス優先)\n }\n\n geometry.setAttribute('position', new THREE.BufferAttribute(this.positions, 3));\n geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3));\n geometry.setAttribute('velocity', new THREE.BufferAttribute(this.velocities, 3));\n geometry.setAttribute('size', new THREE.BufferAttribute(sizes, 1));\n\n const material = new THREE.ShaderMaterial({\n vertexShader: particleVertexShader,\n fragmentShader: particleFragmentShader,\n uniforms: {\n uTime: { value: 0 },\n uBounds: { value: new THREE.Vector2(width / 2, height / 2) },\n },\n transparent: true,\n vertexColors: true,\n blending: THREE.AdditiveBlending,\n depthWrite: false,\n });\n\n return new THREE.Points(geometry, material);\n }\n\n private createLines(): THREE.LineSegments {\n const geometry = new THREE.BufferGeometry();\n const material = new THREE.LineBasicMaterial({\n vertexColors: true,\n transparent: true,\n blending: THREE.AdditiveBlending,\n depthWrite: false,\n });\n return new THREE.LineSegments(geometry, material);\n }\n\n private updateConnections() {\n const { particleCount, connectionDistance, baseHue, hueSpeed } = this.config;\n const positions: number[] = [];\n const colors: number[] = [];\n\n // 空間分割グリッド\n const cellSize = connectionDistance;\n const grid = new Map<string, number[]>();\n\n // パーティクルをグリッドに配置\n for (let i = 0; i < particleCount; i++) {\n const x = this.positions[i * 3];\n const y = this.positions[i * 3 + 1];\n const cellX = Math.floor(x / cellSize);\n const cellY = Math.floor(y / cellSize);\n const key = `${cellX},${cellY}`;\n if (!grid.has(key)) grid.set(key, []);\n grid.get(key)!.push(i);\n }\n\n // 接続線のhue(全色相でゆっくり変化)\n const elapsed = this.clock.getElapsedTime();\n const lineHue = baseHue < 0\n ? ((elapsed * hueSpeed) % 360) / 360\n : (baseHue + (elapsed * hueSpeed) % 60) / 360;\n // 色計算をキャッシュ(パフォーマンス向上)\n const lineColor = new THREE.Color().setHSL(lineHue, 0.8, 0.65);\n\n // 近傍セルのみ探索\n for (const [key, indices] of grid.entries()) {\n const [cx, cy] = key.split(',').map(Number);\n\n for (let dx = -1; dx <= 1; dx++) {\n for (let dy = -1; dy <= 1; dy++) {\n const neighborKey = `${cx + dx},${cy + dy}`;\n const neighborIndices = grid.get(neighborKey);\n if (!neighborIndices) continue;\n\n for (const i of indices) {\n for (const j of neighborIndices) {\n if (i >= j) continue;\n\n const i3 = i * 3;\n const j3 = j * 3;\n const pdx = this.positions[i3] - this.positions[j3];\n const pdy = this.positions[i3 + 1] - this.positions[j3 + 1];\n const dist = Math.sqrt(pdx * pdx + pdy * pdy);\n\n if (dist < connectionDistance) {\n const alpha = (1 - dist / connectionDistance) * 0.7;\n\n positions.push(\n this.positions[i3], this.positions[i3 + 1], this.positions[i3 + 2],\n this.positions[j3], this.positions[j3 + 1], this.positions[j3 + 2]\n );\n // キャッシュした色を使用(パフォーマンス向上)\n colors.push(\n lineColor.r * alpha, lineColor.g * alpha, lineColor.b * alpha,\n lineColor.r * alpha, lineColor.g * alpha, lineColor.b * alpha\n );\n }\n }\n }\n }\n }\n }\n\n this.lines.geometry.dispose();\n this.lines.geometry = new THREE.BufferGeometry();\n if (positions.length > 0) {\n this.lines.geometry.setAttribute('position',\n new THREE.Float32BufferAttribute(positions, 3));\n this.lines.geometry.setAttribute('color',\n new THREE.Float32BufferAttribute(colors, 3));\n }\n }\n\n private updateParticlePositions(delta: number) {\n const { width, height } = this.getSize();\n const halfW = width / 2;\n const halfH = height / 2;\n\n for (let i = 0; i < this.config.particleCount; i++) {\n const i3 = i * 3;\n\n // 速度による移動\n this.positions[i3] += this.velocities[i3] * delta;\n this.positions[i3 + 1] += this.velocities[i3 + 1] * delta;\n\n // 境界でラップアラウンド\n if (this.positions[i3] > halfW) this.positions[i3] = -halfW;\n if (this.positions[i3] < -halfW) this.positions[i3] = halfW;\n if (this.positions[i3 + 1] > halfH) this.positions[i3 + 1] = -halfH;\n if (this.positions[i3 + 1] < -halfH) this.positions[i3 + 1] = halfH;\n }\n\n this.particles.geometry.attributes['position'].needsUpdate = true;\n }\n\n private animate = () => {\n if (!this.isRunning) return;\n\n const delta = this.clock.getDelta();\n const elapsed = this.clock.getElapsedTime();\n\n // パーティクル位置更新\n this.updateParticlePositions(delta);\n\n // シェーダーuniform更新\n const material = this.particles.material as THREE.ShaderMaterial;\n material.uniforms['uTime'].value = elapsed;\n\n // 接続線更新(3フレームに1回にしてパフォーマンス向上)\n this.frameCount++;\n if (this.frameCount % 3 === 0) {\n this.updateConnections();\n }\n\n // 描画\n this.renderer.render(this.scene, this.camera);\n requestAnimationFrame(this.animate);\n };\n\n private getSize() {\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n }\n\n private setupResizeHandler() {\n window.addEventListener('resize', () => {\n const { width, height } = this.getSize();\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(width, height);\n\n const material = this.particles.material as THREE.ShaderMaterial;\n material.uniforms['uBounds'].value.set(width / 2, height / 2);\n });\n }\n\n private setupVisibilityHandler() {\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n this.stop();\n } else {\n this.start();\n }\n });\n }\n\n start() {\n if (this.isRunning) return;\n this.isRunning = true;\n this.clock.start();\n requestAnimationFrame(this.animate);\n }\n\n stop() {\n this.isRunning = false;\n this.clock.stop();\n }\n\n dispose() {\n this.stop();\n this.particles.geometry.dispose();\n (this.particles.material as THREE.Material).dispose();\n this.lines.geometry.dispose();\n (this.lines.material as THREE.Material).dispose();\n this.renderer.dispose();\n this.config.container.removeChild(this.renderer.domElement);\n }\n}\n","import { Component, input, ElementRef, afterNextRender, OnDestroy, viewChild } from '@angular/core';\nimport { WebGLParticleSystem } from './utils';\n\n@Component({\n selector: 'app-background-template',\n standalone: true,\n template: `\n <div #container></div>\n <div class=\"overlay\">\n <div class=\"scanlines\"></div>\n <div class=\"glitch-text\" [class.glitch]=\"isGlitching\">\n {{ currentMessage }}\n </div>\n </div>\n <div class=\"content\">\n @if (title()) {\n <h1 class=\"title\">{{ title() }}</h1>\n }\n <ng-content></ng-content>\n </div>\n `,\n styles: `\n :host {\n display: block;\n position: fixed;\n width: 100%;\n height: 100vh;\n color: white;\n z-index: -1;\n }\n\n .overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 0;\n }\n\n .scanlines {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: repeating-linear-gradient(\n 0deg,\n rgba(0, 0, 0, 0.1) 0px,\n rgba(0, 0, 0, 0.1) 1px,\n transparent 1px,\n transparent 2px\n );\n opacity: 0.3;\n }\n\n .glitch-text {\n position: absolute;\n top: 20px;\n left: 20px;\n font-family: \"Courier New\", monospace;\n font-size: 14px;\n color: rgba(0, 255, 255, 0.8);\n text-shadow: 0 0 10px rgba(0, 255, 255, 0.5);\n white-space: pre-line;\n transition: transform 0.1s;\n }\n\n .glitch-text.glitch {\n animation: glitch 0.3s ease-in-out;\n }\n\n @keyframes glitch {\n 0%, 100% { transform: translate(0); }\n 20% { transform: translate(-2px, 2px); }\n 40% { transform: translate(2px, -2px); }\n 60% { transform: translate(-1px, -1px); }\n 80% { transform: translate(1px, 1px); }\n }\n\n .content {\n position: relative;\n z-index: 1;\n padding: 2rem;\n }\n\n .title {\n font-size: 2rem;\n margin-bottom: 1rem;\n font-family: \"Courier New\", monospace;\n text-shadow: 0 0 10px rgba(0, 255, 255, 0.5);\n }\n `\n})\nexport class BackgroundTemplate implements OnDestroy {\n title = input<string>('');\n\n private container = viewChild.required<ElementRef<HTMLDivElement>>('container');\n private particleSystem: WebGLParticleSystem | null = null;\n private glitchInterval: number | null = null;\n\n protected currentMessage = '(x_x) PROTOCOL.7 (x_x)';\n protected isGlitching = false;\n\n private messages = [\n '(x_x) PROTOCOL.7 (x_x)',\n '[MACHINA:01] INITIALIZING...',\n '(>_<) SYSTEM OVERLOAD (>_<)',\n '▓▓▒▒░░W I R E D░░▒▒▓▓',\n '【=◈︿◈=】LAYER:13【=◈︿◈=】',\n '[▀▄▀▄▀▄] NAV¡GATOR [▄▀▄▀▄▀]',\n '(╥﹏╥) ERROR_404 (╥﹏╥)',\n '▌│█║▌║▌║ CONNECTING... ║▌║▌║█│▌'\n ];\n private messageIndex = 0;\n\n constructor() {\n afterNextRender(() => {\n this.particleSystem = new WebGLParticleSystem({\n container: this.container().nativeElement,\n baseHue: 180, // シアン〜グリーン系(Lainテーマ)\n connectionDistance: 80,\n });\n this.particleSystem.start();\n\n // グリッチエフェクト(5秒ごと)\n this.glitchInterval = window.setInterval(() => this.triggerGlitch(), 5000);\n });\n }\n\n private triggerGlitch() {\n this.isGlitching = true;\n this.messageIndex = (this.messageIndex + 1) % this.messages.length;\n this.currentMessage = this.messages[this.messageIndex];\n\n setTimeout(() => {\n this.isGlitching = false;\n }, 300);\n }\n\n ngOnDestroy() {\n this.particleSystem?.dispose();\n if (this.glitchInterval !== null) {\n clearInterval(this.glitchInterval);\n }\n }\n}\n","import { Component, ElementRef, afterNextRender, OnDestroy, viewChild } from '@angular/core';\nimport { WebGLParticleSystem } from './utils';\n\n@Component({\n selector: 'machina-templates-background',\n standalone: true,\n template: `<div #container></div>`,\n styles: `\n :host {\n display: block;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n pointer-events: none;\n }\n `\n})\nexport class MachinaBackgroundTemplate implements OnDestroy {\n private container = viewChild.required<ElementRef<HTMLDivElement>>('container');\n private particleSystem: WebGLParticleSystem | null = null;\n\n constructor() {\n afterNextRender(() => {\n this.particleSystem = new WebGLParticleSystem({\n container: this.container().nativeElement,\n // baseHue未指定 = 全色相ランダム(元の実装と同じ)\n });\n this.particleSystem.start();\n });\n }\n\n ngOnDestroy() {\n this.particleSystem?.dispose();\n }\n}\n","import { provideComponent } from '@ng-atomic/core';\nimport { BackgroundTemplate as LainBapBackgroundTemplate } from './lain-background.template';\nimport { BackgroundTemplateStore } from '@ng-atomic/components/templates/background';\nimport { MachinaBackgroundTemplate } from './background.template';\n\nexport * from './background.template';\n\nexport function provideMachinaBackgroundTemplate() {\n return provideComponent(BackgroundTemplateStore, () => MachinaBackgroundTemplate);\n}\n\nexport function provideLainBackgroundTemplate() {\n return provideComponent(BackgroundTemplateStore, () => LainBapBackgroundTemplate);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["LainBapBackgroundTemplate"],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-components-templates-background.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/templates/background/shaders/particle.vert.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/shaders/particle.frag.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/utils/webgl-particle-system.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/lain-background.template.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/background.template.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/index.ts","../../../../../packages/@xxmachina/components/src/lib/templates/background/xxmachina-components-templates-background.ts"],"sourcesContent":["export const particleVertexShader = /* glsl */ `\nattribute vec3 velocity;\nattribute float size;\n\nuniform float uTime;\nuniform vec2 uBounds;\n\nvarying vec3 vColor;\nvarying float vAlpha;\n\nvoid main() {\n vColor = color;\n vAlpha = 1.0;\n\n // GPU上で位置更新(時間ベース)\n vec3 pos = position;\n pos.x += velocity.x * uTime * 0.01;\n pos.y += velocity.y * uTime * 0.01;\n\n // 境界でラップアラウンド\n pos.x = mod(pos.x + uBounds.x, uBounds.x * 2.0) - uBounds.x;\n pos.y = mod(pos.y + uBounds.y, uBounds.y * 2.0) - uBounds.y;\n\n vec4 mvPosition = modelViewMatrix * vec4(pos, 1.0);\n gl_PointSize = size * (300.0 / -mvPosition.z);\n gl_Position = projectionMatrix * mvPosition;\n}\n`;\n","export const particleFragmentShader = /* glsl */ `\nvarying vec3 vColor;\nvarying float vAlpha;\n\nvoid main() {\n // 中心からの距離\n float dist = length(gl_PointCoord - vec2(0.5));\n\n // 円形にクリップ\n if (dist > 0.5) discard;\n\n // 強いグロー効果(Canvas版のshadowBlur=15を再現)\n float coreBrightness = exp(-dist * 8.0); // コア部分(非常に明るい)\n float glowBrightness = exp(-dist * 2.5) * 0.6; // 外側のソフトグロー\n float outerGlow = exp(-dist * 1.5) * 0.3; // さらに外側の淡いグロー\n float glow = coreBrightness + glowBrightness + outerGlow;\n\n // 色を強くブースト(黒背景で映える明るさに)\n vec3 boostedColor = vColor * 1.5;\n float alpha = min(glow * vAlpha, 1.0);\n\n gl_FragColor = vec4(boostedColor, alpha);\n}\n`;\n","import * as THREE from 'three';\nimport { particleVertexShader, particleFragmentShader } from '../shaders';\n\nexport interface ParticleSystemConfig {\n container: HTMLElement;\n particleCount?: number;\n connectionDistance?: number;\n /** 固定色相を使用する場合に指定(未指定で全色相ランダム) */\n baseHue?: number;\n /** 接続線のhue変化速度(デフォルト: 30) */\n hueSpeed?: number;\n}\n\nexport class WebGLParticleSystem {\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n private renderer: THREE.WebGLRenderer;\n private particles: THREE.Points;\n private lines: THREE.LineSegments;\n private clock: THREE.Clock;\n private config: Required<ParticleSystemConfig>;\n private positions: Float32Array;\n private velocities: Float32Array;\n private isRunning = false;\n private frameCount = 0; // 接続線更新頻度制御用\n private readonly onResize = () => {\n const { width, height } = this.getSize();\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(width, height);\n const material = this.particles.material as THREE.ShaderMaterial;\n material.uniforms['uBounds'].value.set(width / 2, height / 2);\n };\n private readonly onVisibilityChange = () => {\n if (document.hidden) {\n this.stop();\n } else {\n this.start();\n }\n };\n\n constructor(config: ParticleSystemConfig) {\n this.config = {\n container: config.container,\n particleCount: config.particleCount ?? this.getOptimalParticleCount(),\n connectionDistance: config.connectionDistance ?? 100, // パフォーマンス優先で短縮\n baseHue: config.baseHue ?? -1, // -1 = 全色相ランダム\n hueSpeed: config.hueSpeed ?? 30,\n };\n\n this.scene = new THREE.Scene();\n this.scene.background = new THREE.Color(0x000000);\n this.clock = new THREE.Clock();\n this.positions = new Float32Array(this.config.particleCount * 3);\n this.velocities = new Float32Array(this.config.particleCount * 3);\n\n this.camera = this.createCamera();\n this.renderer = this.createRenderer();\n this.particles = this.createParticles();\n this.lines = this.createLines();\n\n this.scene.add(this.particles);\n this.scene.add(this.lines);\n\n this.setupResizeHandler();\n this.setupVisibilityHandler();\n }\n\n private getOptimalParticleCount(): number {\n const isMobile = /iPhone|iPad|Android/i.test(navigator.userAgent);\n // パフォーマンス優先:パーティクル数を削減\n return isMobile ? 60 : 100;\n }\n\n private createCamera(): THREE.PerspectiveCamera {\n const { width, height } = this.getSize();\n const camera = new THREE.PerspectiveCamera(75, width / height, 1, 2000);\n camera.position.z = 400;\n return camera;\n }\n\n private createRenderer(): THREE.WebGLRenderer {\n const { width, height } = this.getSize();\n const renderer = new THREE.WebGLRenderer({\n antialias: true,\n alpha: false, // 黒背景を強制(透明にしない)\n });\n renderer.setSize(width, height);\n renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n renderer.setClearColor(0x000000, 1); // 明示的に黒背景を設定\n this.config.container.appendChild(renderer.domElement);\n\n // Canvas styling - コンテナ内に配置(position: absoluteに変更)\n renderer.domElement.style.position = 'absolute';\n renderer.domElement.style.top = '0';\n renderer.domElement.style.left = '0';\n renderer.domElement.style.width = '100%';\n renderer.domElement.style.height = '100%';\n\n return renderer;\n }\n\n private createParticles(): THREE.Points {\n const { particleCount, baseHue } = this.config;\n const { width, height } = this.getSize();\n\n const geometry = new THREE.BufferGeometry();\n const colors = new Float32Array(particleCount * 3);\n const sizes = new Float32Array(particleCount);\n\n for (let i = 0; i < particleCount; i++) {\n const i3 = i * 3;\n\n // ランダム位置\n this.positions[i3] = (Math.random() - 0.5) * width;\n this.positions[i3 + 1] = (Math.random() - 0.5) * height;\n this.positions[i3 + 2] = (Math.random() - 0.5) * 100;\n\n // ランダム速度\n this.velocities[i3] = (Math.random() - 0.5) * 50;\n this.velocities[i3 + 1] = (Math.random() - 0.5) * 50;\n this.velocities[i3 + 2] = 0;\n\n // HSLカラー(baseHue < 0 なら全色相ランダム)\n const hue = baseHue < 0\n ? Math.random() // 0-1 (全色相)\n : (baseHue + Math.random() * 60) / 360;\n // 彩度70%、明度60%で鮮やかに(Canvas版のshadowBlur効果を再現)\n const color = new THREE.Color().setHSL(hue, 0.7, 0.6);\n colors[i3] = color.r;\n colors[i3 + 1] = color.g;\n colors[i3 + 2] = color.b;\n\n sizes[i] = Math.random() * 2 + 2; // サイズ2-4(パフォーマンス優先)\n }\n\n geometry.setAttribute('position', new THREE.BufferAttribute(this.positions, 3));\n geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3));\n geometry.setAttribute('velocity', new THREE.BufferAttribute(this.velocities, 3));\n geometry.setAttribute('size', new THREE.BufferAttribute(sizes, 1));\n\n const material = new THREE.ShaderMaterial({\n vertexShader: particleVertexShader,\n fragmentShader: particleFragmentShader,\n uniforms: {\n uTime: { value: 0 },\n uBounds: { value: new THREE.Vector2(width / 2, height / 2) },\n },\n transparent: true,\n vertexColors: true,\n blending: THREE.AdditiveBlending,\n depthWrite: false,\n });\n\n return new THREE.Points(geometry, material);\n }\n\n private createLines(): THREE.LineSegments {\n const geometry = new THREE.BufferGeometry();\n const material = new THREE.LineBasicMaterial({\n vertexColors: true,\n transparent: true,\n blending: THREE.AdditiveBlending,\n depthWrite: false,\n });\n return new THREE.LineSegments(geometry, material);\n }\n\n private updateConnections() {\n const { particleCount, connectionDistance, baseHue, hueSpeed } = this.config;\n const positions: number[] = [];\n const colors: number[] = [];\n\n // 空間分割グリッド\n const cellSize = connectionDistance;\n const grid = new Map<string, number[]>();\n\n // パーティクルをグリッドに配置\n for (let i = 0; i < particleCount; i++) {\n const x = this.positions[i * 3];\n const y = this.positions[i * 3 + 1];\n const cellX = Math.floor(x / cellSize);\n const cellY = Math.floor(y / cellSize);\n const key = `${cellX},${cellY}`;\n if (!grid.has(key)) grid.set(key, []);\n grid.get(key)!.push(i);\n }\n\n // 接続線のhue(全色相でゆっくり変化)\n const elapsed = this.clock.getElapsedTime();\n const lineHue = baseHue < 0\n ? ((elapsed * hueSpeed) % 360) / 360\n : (baseHue + (elapsed * hueSpeed) % 60) / 360;\n // 色計算をキャッシュ(パフォーマンス向上)\n const lineColor = new THREE.Color().setHSL(lineHue, 0.8, 0.65);\n\n // 近傍セルのみ探索\n for (const [key, indices] of grid.entries()) {\n const [cx, cy] = key.split(',').map(Number);\n\n for (let dx = -1; dx <= 1; dx++) {\n for (let dy = -1; dy <= 1; dy++) {\n const neighborKey = `${cx + dx},${cy + dy}`;\n const neighborIndices = grid.get(neighborKey);\n if (!neighborIndices) continue;\n\n for (const i of indices) {\n for (const j of neighborIndices) {\n if (i >= j) continue;\n\n const i3 = i * 3;\n const j3 = j * 3;\n const pdx = this.positions[i3] - this.positions[j3];\n const pdy = this.positions[i3 + 1] - this.positions[j3 + 1];\n const dist = Math.sqrt(pdx * pdx + pdy * pdy);\n\n if (dist < connectionDistance) {\n const alpha = (1 - dist / connectionDistance) * 0.7;\n\n positions.push(\n this.positions[i3], this.positions[i3 + 1], this.positions[i3 + 2],\n this.positions[j3], this.positions[j3 + 1], this.positions[j3 + 2]\n );\n // キャッシュした色を使用(パフォーマンス向上)\n colors.push(\n lineColor.r * alpha, lineColor.g * alpha, lineColor.b * alpha,\n lineColor.r * alpha, lineColor.g * alpha, lineColor.b * alpha\n );\n }\n }\n }\n }\n }\n }\n\n this.lines.geometry.dispose();\n this.lines.geometry = new THREE.BufferGeometry();\n if (positions.length > 0) {\n this.lines.geometry.setAttribute('position',\n new THREE.Float32BufferAttribute(positions, 3));\n this.lines.geometry.setAttribute('color',\n new THREE.Float32BufferAttribute(colors, 3));\n }\n }\n\n private updateParticlePositions(delta: number) {\n const { width, height } = this.getSize();\n const halfW = width / 2;\n const halfH = height / 2;\n\n for (let i = 0; i < this.config.particleCount; i++) {\n const i3 = i * 3;\n\n // 速度による移動\n this.positions[i3] += this.velocities[i3] * delta;\n this.positions[i3 + 1] += this.velocities[i3 + 1] * delta;\n\n // 境界でラップアラウンド\n if (this.positions[i3] > halfW) this.positions[i3] = -halfW;\n if (this.positions[i3] < -halfW) this.positions[i3] = halfW;\n if (this.positions[i3 + 1] > halfH) this.positions[i3 + 1] = -halfH;\n if (this.positions[i3 + 1] < -halfH) this.positions[i3 + 1] = halfH;\n }\n\n this.particles.geometry.attributes['position'].needsUpdate = true;\n }\n\n private animate = () => {\n if (!this.isRunning) return;\n\n const delta = this.clock.getDelta();\n const elapsed = this.clock.getElapsedTime();\n\n // パーティクル位置更新\n this.updateParticlePositions(delta);\n\n // シェーダーuniform更新\n const material = this.particles.material as THREE.ShaderMaterial;\n material.uniforms['uTime'].value = elapsed;\n\n // 接続線更新(3フレームに1回にしてパフォーマンス向上)\n this.frameCount++;\n if (this.frameCount % 3 === 0) {\n this.updateConnections();\n }\n\n // 描画\n this.renderer.render(this.scene, this.camera);\n requestAnimationFrame(this.animate);\n };\n\n private getSize() {\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n }\n\n private setupResizeHandler() {\n window.addEventListener('resize', this.onResize);\n }\n\n private setupVisibilityHandler() {\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n }\n\n start() {\n if (this.isRunning) return;\n this.isRunning = true;\n this.clock.start();\n requestAnimationFrame(this.animate);\n }\n\n stop() {\n this.isRunning = false;\n this.clock.stop();\n }\n\n dispose() {\n this.stop();\n window.removeEventListener('resize', this.onResize);\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n this.particles.geometry.dispose();\n (this.particles.material as THREE.Material).dispose();\n this.lines.geometry.dispose();\n (this.lines.material as THREE.Material).dispose();\n this.renderer.dispose();\n this.config.container.removeChild(this.renderer.domElement);\n }\n}\n","import { Component, input, ElementRef, afterNextRender, OnDestroy, viewChild } from '@angular/core';\nimport { WebGLParticleSystem } from './utils';\n\n@Component({\n selector: 'app-background-template',\n standalone: true,\n template: `\n <div #container></div>\n <div class=\"overlay\">\n <div class=\"scanlines\"></div>\n <div class=\"glitch-text\" [class.glitch]=\"isGlitching\">\n {{ currentMessage }}\n </div>\n </div>\n <div class=\"content\">\n @if (title()) {\n <h1 class=\"title\">{{ title() }}</h1>\n }\n <ng-content></ng-content>\n </div>\n `,\n styles: `\n :host {\n display: block;\n position: fixed;\n width: 100%;\n height: 100vh;\n color: white;\n z-index: -1;\n }\n\n .overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 0;\n }\n\n .scanlines {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: repeating-linear-gradient(\n 0deg,\n rgba(0, 0, 0, 0.1) 0px,\n rgba(0, 0, 0, 0.1) 1px,\n transparent 1px,\n transparent 2px\n );\n opacity: 0.3;\n }\n\n .glitch-text {\n position: absolute;\n top: 20px;\n left: 20px;\n font-family: \"Courier New\", monospace;\n font-size: 14px;\n color: rgba(0, 255, 255, 0.8);\n text-shadow: 0 0 10px rgba(0, 255, 255, 0.5);\n white-space: pre-line;\n transition: transform 0.1s;\n }\n\n .glitch-text.glitch {\n animation: glitch 0.3s ease-in-out;\n }\n\n @keyframes glitch {\n 0%, 100% { transform: translate(0); }\n 20% { transform: translate(-2px, 2px); }\n 40% { transform: translate(2px, -2px); }\n 60% { transform: translate(-1px, -1px); }\n 80% { transform: translate(1px, 1px); }\n }\n\n .content {\n position: relative;\n z-index: 1;\n padding: 2rem;\n }\n\n .title {\n font-size: 2rem;\n margin-bottom: 1rem;\n font-family: \"Courier New\", monospace;\n text-shadow: 0 0 10px rgba(0, 255, 255, 0.5);\n }\n `\n})\nexport class BackgroundTemplate implements OnDestroy {\n title = input<string>('');\n\n private container = viewChild.required<ElementRef<HTMLDivElement>>('container');\n private particleSystem: WebGLParticleSystem | null = null;\n private glitchInterval: number | null = null;\n\n protected currentMessage = '(x_x) PROTOCOL.7 (x_x)';\n protected isGlitching = false;\n\n private messages = [\n '(x_x) PROTOCOL.7 (x_x)',\n '[MACHINA:01] INITIALIZING...',\n '(>_<) SYSTEM OVERLOAD (>_<)',\n '▓▓▒▒░░W I R E D░░▒▒▓▓',\n '【=◈︿◈=】LAYER:13【=◈︿◈=】',\n '[▀▄▀▄▀▄] NAV¡GATOR [▄▀▄▀▄▀]',\n '(╥﹏╥) ERROR_404 (╥﹏╥)',\n '▌│█║▌║▌║ CONNECTING... ║▌║▌║█│▌'\n ];\n private messageIndex = 0;\n\n constructor() {\n afterNextRender(() => {\n this.particleSystem = new WebGLParticleSystem({\n container: this.container().nativeElement,\n baseHue: 180, // シアン〜グリーン系(Lainテーマ)\n connectionDistance: 80,\n });\n this.particleSystem.start();\n\n // グリッチエフェクト(5秒ごと)\n this.glitchInterval = window.setInterval(() => this.triggerGlitch(), 5000);\n });\n }\n\n private triggerGlitch() {\n this.isGlitching = true;\n this.messageIndex = (this.messageIndex + 1) % this.messages.length;\n this.currentMessage = this.messages[this.messageIndex];\n\n setTimeout(() => {\n this.isGlitching = false;\n }, 300);\n }\n\n ngOnDestroy() {\n this.particleSystem?.dispose();\n if (this.glitchInterval !== null) {\n clearInterval(this.glitchInterval);\n }\n }\n}\n","import { Component, ElementRef, afterNextRender, OnDestroy, viewChild } from '@angular/core';\nimport { WebGLParticleSystem } from './utils';\n\n@Component({\n selector: 'machina-templates-background',\n standalone: true,\n template: `<div #container></div>`,\n styles: `\n :host {\n display: block;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n pointer-events: none;\n }\n `\n})\nexport class MachinaBackgroundTemplate implements OnDestroy {\n private container = viewChild.required<ElementRef<HTMLDivElement>>('container');\n private particleSystem: WebGLParticleSystem | null = null;\n\n constructor() {\n afterNextRender(() => {\n this.particleSystem = new WebGLParticleSystem({\n container: this.container().nativeElement,\n // baseHue未指定 = 全色相ランダム(元の実装と同じ)\n });\n this.particleSystem.start();\n });\n }\n\n ngOnDestroy() {\n this.particleSystem?.dispose();\n }\n}\n","import { provideComponent } from '@ng-atomic/core';\nimport { BackgroundTemplate as LainBapBackgroundTemplate } from './lain-background.template';\nimport { BackgroundTemplateStore } from '@ng-atomic/components/templates/background';\nimport { MachinaBackgroundTemplate } from './background.template';\n\nexport * from './background.template';\n\nexport function provideMachinaBackgroundTemplate() {\n return provideComponent(BackgroundTemplateStore, () => MachinaBackgroundTemplate);\n}\n\nexport function provideLainBackgroundTemplate() {\n return provideComponent(BackgroundTemplateStore, () => LainBapBackgroundTemplate);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["LainBapBackgroundTemplate"],"mappings":";;;;;;AAAO,MAAM,oBAAoB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B9C;;AC3BM,MAAM,sBAAsB,cAAc;;;;;;;;;;;;;;;;;;;;;;;CAuBhD;;MCVY,mBAAmB,CAAA;AACtB,IAAA,KAAK;AACL,IAAA,MAAM;AACN,IAAA,QAAQ;AACR,IAAA,SAAS;AACT,IAAA,KAAK;AACL,IAAA,KAAK;AACL,IAAA,MAAM;AACN,IAAA,SAAS;AACT,IAAA,UAAU;IACV,SAAS,GAAG,KAAK;AACjB,IAAA,UAAU,GAAG,CAAC,CAAC;IACN,QAAQ,GAAG,MAAK;QAC/B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,MAAM;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;QACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AACpC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAgC;AAChE,QAAA,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;AAC/D,IAAA,CAAC;IACgB,kBAAkB,GAAG,MAAK;AACzC,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,IAAI,CAAC,IAAI,EAAE;QACb;aAAO;YACL,IAAI,CAAC,KAAK,EAAE;QACd;AACF,IAAA,CAAC;AAED,IAAA,WAAA,CAAY,MAA4B,EAAA;QACtC,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,uBAAuB,EAAE;AACrE,YAAA,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,GAAG;YACpD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;AAC7B,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;SAChC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;AAEjE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAE/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QAE1B,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEQ,uBAAuB,GAAA;QAC7B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;QAEjE,OAAO,QAAQ,GAAG,EAAE,GAAG,GAAG;IAC5B;IAEQ,YAAY,GAAA;QAClB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;AACvE,QAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG;AACvB,QAAA,OAAO,MAAM;IACf;IAEQ,cAAc,GAAA;QACpB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;AACxC,QAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC;AACvC,YAAA,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,KAAK;AACb,SAAA,CAAC;AACF,QAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AAC/B,QAAA,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC5D,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;;QAGtD,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;QAC/C,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG;QACnC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG;QACpC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM;QACxC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AAEzC,QAAA,OAAO,QAAQ;IACjB;IAEQ,eAAe,GAAA;QACrB,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM;QAC9C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;AAExC,QAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE;QAC3C,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC;AAE7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;;AAGhB,YAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,KAAK;AAClD,YAAA,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,MAAM;AACvD,YAAA,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,GAAG;;AAGpD,YAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,EAAE;AAChD,YAAA,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,EAAE;YACpD,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;;AAG3B,YAAA,MAAM,GAAG,GAAG,OAAO,GAAG;AACpB,kBAAE,IAAI,CAAC,MAAM,EAAE;AACf,kBAAE,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG;;AAExC,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACrD,YAAA,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACxB,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAExB,YAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC;AAEA,QAAA,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC/E,QAAA,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACpE,QAAA,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAChF,QAAA,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAElE,QAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC;AACxC,YAAA,YAAY,EAAE,oBAAoB;AAClC,YAAA,cAAc,EAAE,sBAAsB;AACtC,YAAA,QAAQ,EAAE;AACR,gBAAA,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;AACnB,gBAAA,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE;AAC7D,aAAA;AACD,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,KAAK,CAAC,gBAAgB;AAChC,YAAA,UAAU,EAAE,KAAK;AAClB,SAAA,CAAC;QAEF,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7C;IAEQ,WAAW,GAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE;AAC3C,QAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC;AAC3C,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,KAAK,CAAC,gBAAgB;AAChC,YAAA,UAAU,EAAE,KAAK;AAClB,SAAA,CAAC;QACF,OAAO,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACnD;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM;QAC5E,MAAM,SAAS,GAAa,EAAE;QAC9B,MAAM,MAAM,GAAa,EAAE;;QAG3B,MAAM,QAAQ,GAAG,kBAAkB;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB;;AAGxC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;AACtC,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAK,EAAE;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACxB;;QAGA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3C,QAAA,MAAM,OAAO,GAAG,OAAO,GAAG;cACtB,CAAC,CAAC,OAAO,GAAG,QAAQ,IAAI,GAAG,IAAI;AACjC,cAAE,CAAC,OAAO,GAAG,CAAC,OAAO,GAAG,QAAQ,IAAI,EAAE,IAAI,GAAG;;AAE/C,QAAA,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;;AAG9D,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAC3C,YAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AAE3C,YAAA,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE;AAC/B,gBAAA,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE;oBAC/B,MAAM,WAAW,GAAG,CAAA,EAAG,EAAE,GAAG,EAAE,CAAA,CAAA,EAAI,EAAE,GAAG,EAAE,CAAA,CAAE;oBAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AAC7C,oBAAA,IAAI,CAAC,eAAe;wBAAE;AAEtB,oBAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;AACvB,wBAAA,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE;4BAC/B,IAAI,CAAC,IAAI,CAAC;gCAAE;AAEZ,4BAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;AAChB,4BAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;AAChB,4BAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AACnD,4BAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3D,4BAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE7C,4BAAA,IAAI,IAAI,GAAG,kBAAkB,EAAE;gCAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,kBAAkB,IAAI,GAAG;gCAEnD,SAAS,CAAC,IAAI,CACZ,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAClE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CACnE;;AAED,gCAAA,MAAM,CAAC,IAAI,CACT,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,KAAK,EAC7D,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,KAAK,CAC9D;4BACH;wBACF;oBACF;gBACF;YACF;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE;QAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE;AAChD,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,EACzC,IAAI,KAAK,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EACtC,IAAI,KAAK,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD;IACF;AAEQ,IAAA,uBAAuB,CAAC,KAAa,EAAA;QAC3C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;AACxC,QAAA,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC;AACvB,QAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC;AAExB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE;AAClD,YAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;;AAGhB,YAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,KAAK;AACjD,YAAA,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK;;AAGzD,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK;gBAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;YAC3D,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK;YAC3D,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK;gBAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK;YACnE,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK;gBAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK;QACrE;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,WAAW,GAAG,IAAI;IACnE;IAEQ,OAAO,GAAG,MAAK;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QAErB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;;AAG3C,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;;AAGnC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAgC;QAChE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,OAAO;;QAG1C,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,EAAE;YAC7B,IAAI,CAAC,iBAAiB,EAAE;QAC1B;;AAGA,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AAC7C,QAAA,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,IAAA,CAAC;IAEO,OAAO,GAAA;QACb,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,UAAU;YACxB,MAAM,EAAE,MAAM,CAAC,WAAW;SAC3B;IACH;IAEQ,kBAAkB,GAAA;QACxB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IAClD;IAEQ,sBAAsB,GAAA;QAC5B,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC;IACxE;IAEA,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,SAAS;YAAE;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;IACrC;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,EAAE;QACX,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;QACnD,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AACzE,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,QAA2B,CAAC,OAAO,EAAE;AACrD,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,QAA2B,CAAC,OAAO,EAAE;AACjD,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC7D;AACD;;MC1OY,kBAAkB,CAAA;AAC7B,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AAEjB,IAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAA6B,WAAW,CAAC;IACvE,cAAc,GAA+B,IAAI;IACjD,cAAc,GAAkB,IAAI;IAElC,cAAc,GAAG,wBAAwB;IACzC,WAAW,GAAG,KAAK;AAErB,IAAA,QAAQ,GAAG;QACjB,wBAAwB;QACxB,8BAA8B;QAC9B,6BAA6B;QAC7B,uBAAuB;QACvB,wBAAwB;QACxB,6BAA6B;QAC7B,uBAAuB;QACvB;KACD;IACO,YAAY,GAAG,CAAC;AAExB,IAAA,WAAA,GAAA;QACE,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAAC;AAC5C,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa;gBACzC,OAAO,EAAE,GAAG;AACZ,gBAAA,kBAAkB,EAAE,EAAE;AACvB,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;;AAG3B,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC;AAC5E,QAAA,CAAC,CAAC;IACJ;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;QAClE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;QAEtD,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC1B,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE;AAChC,YAAA,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;QACpC;IACF;uGAnDW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzFnB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,m8BAAA,CAAA,EAAA,CAAA;;2FA2EU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA5F9B,SAAS;+BACE,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,QAAA,EACN;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,m8BAAA,CAAA,EAAA;2LA8EkE,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MC9EnE,yBAAyB,CAAA;AAC5B,IAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAA6B,WAAW,CAAC;IACvE,cAAc,GAA+B,IAAI;AAEzD,IAAA,WAAA,GAAA;QACE,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAAC;AAC5C,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa;;AAE1C,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC7B,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE;IAChC;uGAhBW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,gNAd1B,CAAA,sBAAA,CAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0GAAA,CAAA,EAAA,CAAA;;2FAcvB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAjBrC,SAAS;+BACE,8BAA8B,EAAA,UAAA,EAC5B,IAAI,EAAA,QAAA,EACN,CAAA,sBAAA,CAAwB,EAAA,MAAA,EAAA,CAAA,0GAAA,CAAA,EAAA;iGAeiC,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;SCdhE,gCAAgC,GAAA;IAC9C,OAAO,gBAAgB,CAAC,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACnF;SAEgB,6BAA6B,GAAA;IAC3C,OAAO,gBAAgB,CAAC,uBAAuB,EAAE,MAAMA,kBAAyB,CAAC;AACnF;;ACbA;;AAEG;;;;"}
@@ -234,7 +234,7 @@ class SessionNavigatorOrganism extends NgAtomicComponent {
234
234
  }
235
235
  </div>
236
236
  </mat-toolbar>
237
- `, isInline: true, styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-Bcyk: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-Bcyk: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-Bcyk: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-Bcyk: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-Bcyk: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-Bcyk: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-Bcyk: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-Bcyk: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-Bcyk: 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-Bcyk);color:var(--on-primary-color-SCOPED-IN-session-navigator-Bcyk);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-Bcyk)!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-Bcyk)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-Bcyk)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-Bcyk)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-Bcyk)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-Bcyk)!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-Bcyk: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-Bcyk: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-Bcyk: 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 });
237
+ `, isInline: true, styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-gZrX: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-gZrX: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-gZrX: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-gZrX: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-gZrX: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-gZrX: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-gZrX: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-gZrX: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-gZrX: 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-gZrX);color:var(--on-primary-color-SCOPED-IN-session-navigator-gZrX);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-gZrX)!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-gZrX)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-gZrX)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-gZrX)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-gZrX)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-gZrX)!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-gZrX: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-gZrX: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-gZrX: 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
238
  }
239
239
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SessionNavigatorOrganism, decorators: [{
240
240
  type: Component,
@@ -268,7 +268,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
268
268
  directive: SessionNavigatorOrganismStore,
269
269
  inputs: ['startActions', 'endActions', 'title'],
270
270
  }
271
- ], styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-Bcyk: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-Bcyk: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-Bcyk: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-Bcyk: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-Bcyk: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-Bcyk: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-Bcyk: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-Bcyk: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-Bcyk: 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-Bcyk);color:var(--on-primary-color-SCOPED-IN-session-navigator-Bcyk);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-Bcyk)!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-Bcyk)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-Bcyk)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-Bcyk)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-Bcyk)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-Bcyk)!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-Bcyk: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-Bcyk: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-Bcyk: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"] }]
271
+ ], styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-gZrX: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-gZrX: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-gZrX: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-gZrX: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-gZrX: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-gZrX: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-gZrX: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-gZrX: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-gZrX: 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-gZrX);color:var(--on-primary-color-SCOPED-IN-session-navigator-gZrX);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-gZrX)!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-gZrX)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-gZrX)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-gZrX)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-gZrX)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-gZrX)!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-gZrX: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-gZrX: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-gZrX: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"] }]
272
272
  }] });
273
273
 
274
274
  var InvoiceAppActionId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xxmachina/components",
3
- "version": "19.33.1",
3
+ "version": "19.35.0",
4
4
  "license": "MIT",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -142,12 +142,21 @@ declare class ReactFlowComponent extends NgAtomicComponent {
142
142
  private _prevNodePositions;
143
143
  private contentNodeTemplates;
144
144
  private _touchCleanup;
145
+ private _ancestorScrollCleanup;
145
146
  readonly enableTouchPassthrough: _angular_core.InputSignal<boolean>;
146
147
  constructor();
147
148
  ngOnInit(): void;
148
149
  ngOnDestroy(): void;
149
150
  private setupTouchPassthrough;
150
151
  private emitTapAsNodeClick;
152
+ /**
153
+ * 祖先要素のスクロールをロックする。
154
+ * overflow:clip は .react-flow 自体のスクロールを防ぐが、
155
+ * 祖先のスクロールコンテナ(例: ScrollFrame の .contents)には効かない。
156
+ * ノード内 input 入力時のブラウザ自動スクロールを防ぐため、
157
+ * 全祖先の scroll イベントを監視して即座にリセットする。
158
+ */
159
+ private lockAncestorScroll;
151
160
  private cleanupTouchPassthrough;
152
161
  readonly nodeTypes: _angular_core.Signal<any>;
153
162
  private applyTransitionClass;
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-extras-flow.d.ts","sources":["../../../../../packages/@xxmachina/components/src/lib/extras/flow/react-flow/react-flow.store.ts","../../../../../packages/@xxmachina/components/src/lib/extras/flow/react-flow/react-flow.component.ts","../../../../../packages/@xxmachina/components/src/lib/extras/flow/nodes/group-node.tsx","../../../../../packages/@xxmachina/components/src/lib/extras/flow/nodes/node.component.ts","../../../../../packages/@xxmachina/components/src/lib/extras/flow/nodes/node.tsx","../../../../../packages/@xxmachina/components/src/lib/extras/flow/nodes/template-node.tsx","../../../../../packages/@xxmachina/components/src/lib/extras/flow/nodes/index.ts","../../../../../packages/@xxmachina/components/src/lib/extras/flow/flow-node.directive.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+HE;;;;AAA8F;;;AAC/F;;AC7HD;AA8CE;AACA;AACA;;;;;;;;;;;AAgCA;AAkCA;AAYA;;AA6BA;AAwBA;;;AAwBD;;;;;;;AC5MA;;;;;;ACDA;;ACCD;;ACHA;AACE;AACD;AAED;;;;;;ACNA;;;;;;;;;;ACDA;AAOqB;;AAAA;;;AACpB;;"}
1
+ {"version":3,"file":"xxmachina-components-extras-flow.d.ts","sources":["../../../../../packages/@xxmachina/components/src/lib/extras/flow/react-flow/react-flow.store.ts","../../../../../packages/@xxmachina/components/src/lib/extras/flow/react-flow/react-flow.component.ts","../../../../../packages/@xxmachina/components/src/lib/extras/flow/nodes/group-node.tsx","../../../../../packages/@xxmachina/components/src/lib/extras/flow/nodes/node.component.ts","../../../../../packages/@xxmachina/components/src/lib/extras/flow/nodes/node.tsx","../../../../../packages/@xxmachina/components/src/lib/extras/flow/nodes/template-node.tsx","../../../../../packages/@xxmachina/components/src/lib/extras/flow/nodes/index.ts","../../../../../packages/@xxmachina/components/src/lib/extras/flow/flow-node.directive.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+HE;;;;AAA8F;;;AAC/F;;AC7HD;AA8CE;AACA;AACA;;;;;;;;;;;;AAmCA;AAkCA;AAYA;;;;;;AAMG;AACH;AAaA;;AA6BA;AAwBA;;;AAwBD;;;;;;;ACnOA;;;;;;ACDA;;ACCD;;ACHA;AACE;AACD;AAED;;;;;;ACNA;;;;;;;;;;ACDA;AAOqB;;AAAA;;;AACpB;;"}