@xxmachina/components 19.51.0 → 19.81.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.
Files changed (118) hide show
  1. package/fesm2022/xxmachina-components-extras-flow.mjs +73 -140
  2. package/fesm2022/xxmachina-components-extras-flow.mjs.map +1 -1
  3. package/fesm2022/xxmachina-components-features-query.mjs +3 -29
  4. package/fesm2022/xxmachina-components-features-query.mjs.map +1 -1
  5. package/fesm2022/xxmachina-components-groups-query-form.mjs +0 -54
  6. package/fesm2022/xxmachina-components-groups-query-form.mjs.map +1 -1
  7. package/fesm2022/xxmachina-components-molecules-inline-edit-field.mjs +0 -1
  8. package/fesm2022/xxmachina-components-molecules-inline-edit-field.mjs.map +1 -1
  9. package/fesm2022/xxmachina-components-molecules-user-avatar-menu.mjs +96 -0
  10. package/fesm2022/xxmachina-components-molecules-user-avatar-menu.mjs.map +1 -0
  11. package/fesm2022/xxmachina-components-molecules-weekly-header.mjs +2 -2
  12. package/fesm2022/xxmachina-components-molecules-workspace-selector.mjs +123 -0
  13. package/fesm2022/xxmachina-components-molecules-workspace-selector.mjs.map +1 -0
  14. package/fesm2022/xxmachina-components-organisms-calendar-section.mjs +2 -2
  15. package/fesm2022/xxmachina-components-organisms-calendar-section.mjs.map +1 -1
  16. package/fesm2022/xxmachina-components-organisms-event-input-section.mjs +0 -1
  17. package/fesm2022/xxmachina-components-organisms-event-input-section.mjs.map +1 -1
  18. package/fesm2022/xxmachina-components-organisms-terminal-input-section.mjs +2 -18
  19. package/fesm2022/xxmachina-components-organisms-terminal-input-section.mjs.map +1 -1
  20. package/fesm2022/xxmachina-components-organisms-video-trimmer-section.mjs +0 -3
  21. package/fesm2022/xxmachina-components-organisms-video-trimmer-section.mjs.map +1 -1
  22. package/fesm2022/xxmachina-components-organisms-xterm.mjs +283 -261
  23. package/fesm2022/xxmachina-components-organisms-xterm.mjs.map +1 -1
  24. package/fesm2022/xxmachina-components-pages-command.mjs +3 -9
  25. package/fesm2022/xxmachina-components-pages-command.mjs.map +1 -1
  26. package/fesm2022/xxmachina-components-pages-query-v2.mjs +0 -13
  27. package/fesm2022/xxmachina-components-pages-query-v2.mjs.map +1 -1
  28. package/fesm2022/xxmachina-components-pages-query.mjs +3 -67
  29. package/fesm2022/xxmachina-components-pages-query.mjs.map +1 -1
  30. package/fesm2022/xxmachina-components-pages-thread.mjs +2 -18
  31. package/fesm2022/xxmachina-components-pages-thread.mjs.map +1 -1
  32. package/fesm2022/{xxmachina-components-routes-commands-command.routes-CSwIdXZg.mjs → xxmachina-components-routes-commands-command.routes-Ca2yVrwL.mjs} +1 -2
  33. package/fesm2022/xxmachina-components-routes-commands-command.routes-Ca2yVrwL.mjs.map +1 -0
  34. package/fesm2022/{xxmachina-components-routes-commands-pages.routes-j2xVop4W.mjs → xxmachina-components-routes-commands-pages.routes-COpFeEsz.mjs} +2 -2
  35. package/fesm2022/{xxmachina-components-routes-commands-pages.routes-j2xVop4W.mjs.map → xxmachina-components-routes-commands-pages.routes-COpFeEsz.mjs.map} +1 -1
  36. package/fesm2022/xxmachina-components-routes-commands.mjs +1 -2
  37. package/fesm2022/xxmachina-components-routes-commands.mjs.map +1 -1
  38. package/fesm2022/xxmachina-components-routes-pages.mjs +0 -1
  39. package/fesm2022/xxmachina-components-routes-pages.mjs.map +1 -1
  40. package/fesm2022/xxmachina-components-routes-queries.mjs +0 -2
  41. package/fesm2022/xxmachina-components-routes-queries.mjs.map +1 -1
  42. package/fesm2022/{xxmachina-components-routes-query-pages.routes-CxTbOJDQ.mjs → xxmachina-components-routes-query-pages.routes-BNuONo3g.mjs} +1 -5
  43. package/fesm2022/xxmachina-components-routes-query-pages.routes-BNuONo3g.mjs.map +1 -0
  44. package/fesm2022/xxmachina-components-routes-query.mjs +1 -1
  45. package/fesm2022/{xxmachina-components-routes-resources-pages.routes-CRXxavHb.mjs → xxmachina-components-routes-resources-pages.routes-DEu2qpeu.mjs} +2 -2
  46. package/fesm2022/{xxmachina-components-routes-resources-pages.routes-CRXxavHb.mjs.map → xxmachina-components-routes-resources-pages.routes-DEu2qpeu.mjs.map} +1 -1
  47. package/fesm2022/{xxmachina-components-routes-resources-resource.routes-CkkmqB2_.mjs → xxmachina-components-routes-resources-resource.routes-CWxi2agj.mjs} +1 -2
  48. package/fesm2022/xxmachina-components-routes-resources-resource.routes-CWxi2agj.mjs.map +1 -0
  49. package/fesm2022/xxmachina-components-routes-resources.mjs +1 -1
  50. package/fesm2022/xxmachina-components-routes-transformer.mjs +0 -1
  51. package/fesm2022/xxmachina-components-routes-transformer.mjs.map +1 -1
  52. package/fesm2022/xxmachina-components-services-forms-query.mjs +1 -1
  53. package/fesm2022/xxmachina-components-services-forms-query.mjs.map +1 -1
  54. package/fesm2022/xxmachina-components-services-graphql.mjs +0 -4
  55. package/fesm2022/xxmachina-components-services-graphql.mjs.map +1 -1
  56. package/fesm2022/xxmachina-components-services-json-schema.mjs +6 -12
  57. package/fesm2022/xxmachina-components-services-json-schema.mjs.map +1 -1
  58. package/fesm2022/xxmachina-components-services-query.mjs +0 -7
  59. package/fesm2022/xxmachina-components-services-query.mjs.map +1 -1
  60. package/fesm2022/xxmachina-components-services-recording.mjs +0 -13
  61. package/fesm2022/xxmachina-components-services-recording.mjs.map +1 -1
  62. package/fesm2022/xxmachina-components-services-thread.mjs +0 -2
  63. package/fesm2022/xxmachina-components-services-thread.mjs.map +1 -1
  64. package/fesm2022/xxmachina-components-services-version.mjs +171 -0
  65. package/fesm2022/xxmachina-components-services-version.mjs.map +1 -0
  66. package/fesm2022/xxmachina-components-services-workspace-switcher.mjs +9 -0
  67. package/fesm2022/xxmachina-components-services-workspace-switcher.mjs.map +1 -0
  68. package/fesm2022/xxmachina-components-templates-agent.mjs +98 -146
  69. package/fesm2022/xxmachina-components-templates-agent.mjs.map +1 -1
  70. package/fesm2022/xxmachina-components-templates-background.mjs +10 -30
  71. package/fesm2022/xxmachina-components-templates-background.mjs.map +1 -1
  72. package/fesm2022/xxmachina-components-templates-env.mjs +295 -0
  73. package/fesm2022/xxmachina-components-templates-env.mjs.map +1 -0
  74. package/fesm2022/xxmachina-components-templates-flow-nodes-issue.mjs.map +1 -1
  75. package/fesm2022/xxmachina-components-templates-flow.mjs +1 -1
  76. package/fesm2022/xxmachina-components-templates-flow.mjs.map +1 -1
  77. package/fesm2022/xxmachina-components-templates-machina-icon-button-menu.mjs +78 -0
  78. package/fesm2022/xxmachina-components-templates-machina-icon-button-menu.mjs.map +1 -0
  79. package/fesm2022/xxmachina-components.mjs +9 -10
  80. package/fesm2022/xxmachina-components.mjs.map +1 -1
  81. package/package.json +25 -1
  82. package/types/xxmachina-components-extras-flow.d.ts +8 -43
  83. package/types/xxmachina-components-extras-flow.d.ts.map +1 -1
  84. package/types/xxmachina-components-features-query.d.ts +3 -24
  85. package/types/xxmachina-components-features-query.d.ts.map +1 -1
  86. package/types/xxmachina-components-groups-query-form.d.ts +2 -2
  87. package/types/xxmachina-components-molecules-user-avatar-menu.d.ts +19 -0
  88. package/types/xxmachina-components-molecules-user-avatar-menu.d.ts.map +1 -0
  89. package/types/xxmachina-components-molecules-workspace-selector.d.ts +25 -0
  90. package/types/xxmachina-components-molecules-workspace-selector.d.ts.map +1 -0
  91. package/types/xxmachina-components-organisms-xterm.d.ts +130 -111
  92. package/types/xxmachina-components-organisms-xterm.d.ts.map +1 -1
  93. package/types/xxmachina-components-pages-query-v2.d.ts +0 -3
  94. package/types/xxmachina-components-pages-query-v2.d.ts.map +1 -1
  95. package/types/xxmachina-components-pages-query.d.ts +0 -19
  96. package/types/xxmachina-components-pages-query.d.ts.map +1 -1
  97. package/types/xxmachina-components-services-forms-query.d.ts +1 -1
  98. package/types/xxmachina-components-services-graphql.d.ts +0 -3
  99. package/types/xxmachina-components-services-graphql.d.ts.map +1 -1
  100. package/types/xxmachina-components-services-query.d.ts +0 -7
  101. package/types/xxmachina-components-services-query.d.ts.map +1 -1
  102. package/types/xxmachina-components-services-version.d.ts +32 -0
  103. package/types/xxmachina-components-services-version.d.ts.map +1 -0
  104. package/types/xxmachina-components-services-workspace-switcher.d.ts +17 -0
  105. package/types/xxmachina-components-services-workspace-switcher.d.ts.map +1 -0
  106. package/types/xxmachina-components-templates-agent.d.ts +2 -1
  107. package/types/xxmachina-components-templates-agent.d.ts.map +1 -1
  108. package/types/xxmachina-components-templates-env.d.ts +43 -0
  109. package/types/xxmachina-components-templates-env.d.ts.map +1 -0
  110. package/types/xxmachina-components-templates-flow-nodes-issue.d.ts +0 -2
  111. package/types/xxmachina-components-templates-flow-nodes-issue.d.ts.map +1 -1
  112. package/types/xxmachina-components-templates-machina-icon-button-menu.d.ts +18 -0
  113. package/types/xxmachina-components-templates-machina-icon-button-menu.d.ts.map +1 -0
  114. package/types/xxmachina-components.d.ts +2 -0
  115. package/types/xxmachina-components.d.ts.map +1 -1
  116. package/fesm2022/xxmachina-components-routes-commands-command.routes-CSwIdXZg.mjs.map +0 -1
  117. package/fesm2022/xxmachina-components-routes-query-pages.routes-CxTbOJDQ.mjs.map +0 -1
  118. package/fesm2022/xxmachina-components-routes-resources-resource.routes-CkkmqB2_.mjs.map +0 -1
@@ -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</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\nconst CORE_MESSAGE = `${chalk.cyan('● What is Plan X?')}\n A modern SSH and tmux alternative, peer-to-peer over WebRTC.\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\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\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 <ng-content select=\"[terminalSlot]\">\n <organisms-xterm\n class=\"terminal-display\"\n (terminalReady)=\"onTerminalReady($event)\"\n (githubLinkClick)=\"onGitHubLinkClick($event)\"\n (click)=\"focusInput()\"\n #xtermComponent\n />\n </ng-content>\n\n @if (!hideInputArea()) {\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 }\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 readonly hideInputArea = input<boolean>(false);\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 \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 \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 \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 void 0;\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 \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 \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 \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 \n adjustTextareaHeight() {\n const textarea = this.inputField()?.nativeElement;\n if (textarea) {\n \n textarea.style.height = '20px';\n \n const scrollHeight = textarea.scrollHeight;\n \n const minHeight = 44; \n textarea.style.height = Math.max(minHeight, scrollHeight) + 'px';\n }\n }\n\n \n preventPrefixDeletion(_event: KeyboardEvent) {\n void 0;\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 \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 \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; \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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"}
@@ -4,7 +4,7 @@ import { input, viewChild, afterNextRender, Component } from '@angular/core';
4
4
  import * as THREE from 'three';
5
5
  import { BackgroundTemplateStore } from '@ng-atomic/components/templates/background';
6
6
 
7
- const particleVertexShader = /* glsl */ `
7
+ const particleVertexShader = `
8
8
  attribute vec3 velocity;
9
9
  attribute float size;
10
10
 
@@ -33,7 +33,7 @@ void main() {
33
33
  }
34
34
  `;
35
35
 
36
- const particleFragmentShader = /* glsl */ `
36
+ const particleFragmentShader = `
37
37
  varying vec3 vColor;
38
38
  varying float vAlpha;
39
39
 
@@ -69,7 +69,7 @@ class WebGLParticleSystem {
69
69
  positions;
70
70
  velocities;
71
71
  isRunning = false;
72
- frameCount = 0; // 接続線更新頻度制御用
72
+ frameCount = 0;
73
73
  onResize = () => {
74
74
  const { width, height } = this.getSize();
75
75
  this.camera.aspect = width / height;
@@ -90,8 +90,8 @@ class WebGLParticleSystem {
90
90
  this.config = {
91
91
  container: config.container,
92
92
  particleCount: config.particleCount ?? this.getOptimalParticleCount(),
93
- connectionDistance: config.connectionDistance ?? 100, // パフォーマンス優先で短縮
94
- baseHue: config.baseHue ?? -1, // -1 = 全色相ランダム
93
+ connectionDistance: config.connectionDistance ?? 100,
94
+ baseHue: config.baseHue ?? -1,
95
95
  hueSpeed: config.hueSpeed ?? 30,
96
96
  };
97
97
  this.scene = new THREE.Scene();
@@ -110,7 +110,6 @@ class WebGLParticleSystem {
110
110
  }
111
111
  getOptimalParticleCount() {
112
112
  const isMobile = /iPhone|iPad|Android/i.test(navigator.userAgent);
113
- // パフォーマンス優先:パーティクル数を削減
114
113
  return isMobile ? 60 : 100;
115
114
  }
116
115
  createCamera() {
@@ -123,13 +122,12 @@ class WebGLParticleSystem {
123
122
  const { width, height } = this.getSize();
124
123
  const renderer = new THREE.WebGLRenderer({
125
124
  antialias: true,
126
- alpha: false, // 黒背景を強制(透明にしない)
125
+ alpha: false,
127
126
  });
128
127
  renderer.setSize(width, height);
129
128
  renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
130
- renderer.setClearColor(0x000000, 1); // 明示的に黒背景を設定
129
+ renderer.setClearColor(0x000000, 1);
131
130
  this.config.container.appendChild(renderer.domElement);
132
- // Canvas styling - コンテナ内に配置(position: absoluteに変更)
133
131
  renderer.domElement.style.position = 'absolute';
134
132
  renderer.domElement.style.top = '0';
135
133
  renderer.domElement.style.left = '0';
@@ -145,24 +143,20 @@ class WebGLParticleSystem {
145
143
  const sizes = new Float32Array(particleCount);
146
144
  for (let i = 0; i < particleCount; i++) {
147
145
  const i3 = i * 3;
148
- // ランダム位置
149
146
  this.positions[i3] = (Math.random() - 0.5) * width;
150
147
  this.positions[i3 + 1] = (Math.random() - 0.5) * height;
151
148
  this.positions[i3 + 2] = (Math.random() - 0.5) * 100;
152
- // ランダム速度
153
149
  this.velocities[i3] = (Math.random() - 0.5) * 50;
154
150
  this.velocities[i3 + 1] = (Math.random() - 0.5) * 50;
155
151
  this.velocities[i3 + 2] = 0;
156
- // HSLカラー(baseHue < 0 なら全色相ランダム)
157
152
  const hue = baseHue < 0
158
- ? Math.random() // 0-1 (全色相)
153
+ ? Math.random()
159
154
  : (baseHue + Math.random() * 60) / 360;
160
- // 彩度70%、明度60%で鮮やかに(Canvas版のshadowBlur効果を再現)
161
155
  const color = new THREE.Color().setHSL(hue, 0.7, 0.6);
162
156
  colors[i3] = color.r;
163
157
  colors[i3 + 1] = color.g;
164
158
  colors[i3 + 2] = color.b;
165
- sizes[i] = Math.random() * 2 + 2; // サイズ2-4(パフォーマンス優先)
159
+ sizes[i] = Math.random() * 2 + 2;
166
160
  }
167
161
  geometry.setAttribute('position', new THREE.BufferAttribute(this.positions, 3));
168
162
  geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3));
@@ -196,10 +190,8 @@ class WebGLParticleSystem {
196
190
  const { particleCount, connectionDistance, baseHue, hueSpeed } = this.config;
197
191
  const positions = [];
198
192
  const colors = [];
199
- // 空間分割グリッド
200
193
  const cellSize = connectionDistance;
201
194
  const grid = new Map();
202
- // パーティクルをグリッドに配置
203
195
  for (let i = 0; i < particleCount; i++) {
204
196
  const x = this.positions[i * 3];
205
197
  const y = this.positions[i * 3 + 1];
@@ -210,14 +202,11 @@ class WebGLParticleSystem {
210
202
  grid.set(key, []);
211
203
  grid.get(key).push(i);
212
204
  }
213
- // 接続線のhue(全色相でゆっくり変化)
214
205
  const elapsed = this.clock.getElapsedTime();
215
206
  const lineHue = baseHue < 0
216
207
  ? ((elapsed * hueSpeed) % 360) / 360
217
208
  : (baseHue + (elapsed * hueSpeed) % 60) / 360;
218
- // 色計算をキャッシュ(パフォーマンス向上)
219
209
  const lineColor = new THREE.Color().setHSL(lineHue, 0.8, 0.65);
220
- // 近傍セルのみ探索
221
210
  for (const [key, indices] of grid.entries()) {
222
211
  const [cx, cy] = key.split(',').map(Number);
223
212
  for (let dx = -1; dx <= 1; dx++) {
@@ -238,7 +227,6 @@ class WebGLParticleSystem {
238
227
  if (dist < connectionDistance) {
239
228
  const alpha = (1 - dist / connectionDistance) * 0.7;
240
229
  positions.push(this.positions[i3], this.positions[i3 + 1], this.positions[i3 + 2], this.positions[j3], this.positions[j3 + 1], this.positions[j3 + 2]);
241
- // キャッシュした色を使用(パフォーマンス向上)
242
230
  colors.push(lineColor.r * alpha, lineColor.g * alpha, lineColor.b * alpha, lineColor.r * alpha, lineColor.g * alpha, lineColor.b * alpha);
243
231
  }
244
232
  }
@@ -259,10 +247,8 @@ class WebGLParticleSystem {
259
247
  const halfH = height / 2;
260
248
  for (let i = 0; i < this.config.particleCount; i++) {
261
249
  const i3 = i * 3;
262
- // 速度による移動
263
250
  this.positions[i3] += this.velocities[i3] * delta;
264
251
  this.positions[i3 + 1] += this.velocities[i3 + 1] * delta;
265
- // 境界でラップアラウンド
266
252
  if (this.positions[i3] > halfW)
267
253
  this.positions[i3] = -halfW;
268
254
  if (this.positions[i3] < -halfW)
@@ -279,17 +265,13 @@ class WebGLParticleSystem {
279
265
  return;
280
266
  const delta = this.clock.getDelta();
281
267
  const elapsed = this.clock.getElapsedTime();
282
- // パーティクル位置更新
283
268
  this.updateParticlePositions(delta);
284
- // シェーダーuniform更新
285
269
  const material = this.particles.material;
286
270
  material.uniforms['uTime'].value = elapsed;
287
- // 接続線更新(3フレームに1回にしてパフォーマンス向上)
288
271
  this.frameCount++;
289
272
  if (this.frameCount % 3 === 0) {
290
273
  this.updateConnections();
291
274
  }
292
- // 描画
293
275
  this.renderer.render(this.scene, this.camera);
294
276
  requestAnimationFrame(this.animate);
295
277
  };
@@ -351,11 +333,10 @@ class BackgroundTemplate {
351
333
  afterNextRender(() => {
352
334
  this.particleSystem = new WebGLParticleSystem({
353
335
  container: this.container().nativeElement,
354
- baseHue: 180, // シアン〜グリーン系(Lainテーマ)
336
+ baseHue: 180,
355
337
  connectionDistance: 80,
356
338
  });
357
339
  this.particleSystem.start();
358
- // グリッチエフェクト(5秒ごと)
359
340
  this.glitchInterval = window.setInterval(() => this.triggerGlitch(), 5000);
360
341
  });
361
342
  }
@@ -416,7 +397,6 @@ class MachinaBackgroundTemplate {
416
397
  afterNextRender(() => {
417
398
  this.particleSystem = new WebGLParticleSystem({
418
399
  container: this.container().nativeElement,
419
- // baseHue未指定 = 全色相ランダム(元の実装と同じ)
420
400
  });
421
401
  this.particleSystem.start();
422
402
  });
@@ -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 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":"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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 = `\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 = `\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 \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, \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 \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 \n const hue = baseHue < 0\n ? Math.random() \n : (baseHue + Math.random() * 60) / 360;\n \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; \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 \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 \n const material = this.particles.material as THREE.ShaderMaterial;\n material.uniforms['uTime'].value = elapsed;\n\n \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, \n connectionDistance: 80,\n });\n this.particleSystem.start();\n\n \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 \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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"}