@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.
- package/fesm2022/xxmachina-components-extras-flow.mjs +73 -140
- package/fesm2022/xxmachina-components-extras-flow.mjs.map +1 -1
- package/fesm2022/xxmachina-components-features-query.mjs +3 -29
- package/fesm2022/xxmachina-components-features-query.mjs.map +1 -1
- package/fesm2022/xxmachina-components-groups-query-form.mjs +0 -54
- package/fesm2022/xxmachina-components-groups-query-form.mjs.map +1 -1
- package/fesm2022/xxmachina-components-molecules-inline-edit-field.mjs +0 -1
- package/fesm2022/xxmachina-components-molecules-inline-edit-field.mjs.map +1 -1
- package/fesm2022/xxmachina-components-molecules-user-avatar-menu.mjs +96 -0
- package/fesm2022/xxmachina-components-molecules-user-avatar-menu.mjs.map +1 -0
- package/fesm2022/xxmachina-components-molecules-weekly-header.mjs +2 -2
- package/fesm2022/xxmachina-components-molecules-workspace-selector.mjs +123 -0
- package/fesm2022/xxmachina-components-molecules-workspace-selector.mjs.map +1 -0
- package/fesm2022/xxmachina-components-organisms-calendar-section.mjs +2 -2
- package/fesm2022/xxmachina-components-organisms-calendar-section.mjs.map +1 -1
- package/fesm2022/xxmachina-components-organisms-event-input-section.mjs +0 -1
- package/fesm2022/xxmachina-components-organisms-event-input-section.mjs.map +1 -1
- package/fesm2022/xxmachina-components-organisms-terminal-input-section.mjs +2 -18
- package/fesm2022/xxmachina-components-organisms-terminal-input-section.mjs.map +1 -1
- package/fesm2022/xxmachina-components-organisms-video-trimmer-section.mjs +0 -3
- package/fesm2022/xxmachina-components-organisms-video-trimmer-section.mjs.map +1 -1
- package/fesm2022/xxmachina-components-organisms-xterm.mjs +283 -261
- package/fesm2022/xxmachina-components-organisms-xterm.mjs.map +1 -1
- package/fesm2022/xxmachina-components-pages-command.mjs +3 -9
- package/fesm2022/xxmachina-components-pages-command.mjs.map +1 -1
- package/fesm2022/xxmachina-components-pages-query-v2.mjs +0 -13
- package/fesm2022/xxmachina-components-pages-query-v2.mjs.map +1 -1
- package/fesm2022/xxmachina-components-pages-query.mjs +3 -67
- package/fesm2022/xxmachina-components-pages-query.mjs.map +1 -1
- package/fesm2022/xxmachina-components-pages-thread.mjs +2 -18
- package/fesm2022/xxmachina-components-pages-thread.mjs.map +1 -1
- package/fesm2022/{xxmachina-components-routes-commands-command.routes-CSwIdXZg.mjs → xxmachina-components-routes-commands-command.routes-Ca2yVrwL.mjs} +1 -2
- package/fesm2022/xxmachina-components-routes-commands-command.routes-Ca2yVrwL.mjs.map +1 -0
- package/fesm2022/{xxmachina-components-routes-commands-pages.routes-j2xVop4W.mjs → xxmachina-components-routes-commands-pages.routes-COpFeEsz.mjs} +2 -2
- package/fesm2022/{xxmachina-components-routes-commands-pages.routes-j2xVop4W.mjs.map → xxmachina-components-routes-commands-pages.routes-COpFeEsz.mjs.map} +1 -1
- package/fesm2022/xxmachina-components-routes-commands.mjs +1 -2
- package/fesm2022/xxmachina-components-routes-commands.mjs.map +1 -1
- package/fesm2022/xxmachina-components-routes-pages.mjs +0 -1
- package/fesm2022/xxmachina-components-routes-pages.mjs.map +1 -1
- package/fesm2022/xxmachina-components-routes-queries.mjs +0 -2
- package/fesm2022/xxmachina-components-routes-queries.mjs.map +1 -1
- package/fesm2022/{xxmachina-components-routes-query-pages.routes-CxTbOJDQ.mjs → xxmachina-components-routes-query-pages.routes-BNuONo3g.mjs} +1 -5
- package/fesm2022/xxmachina-components-routes-query-pages.routes-BNuONo3g.mjs.map +1 -0
- package/fesm2022/xxmachina-components-routes-query.mjs +1 -1
- package/fesm2022/{xxmachina-components-routes-resources-pages.routes-CRXxavHb.mjs → xxmachina-components-routes-resources-pages.routes-DEu2qpeu.mjs} +2 -2
- package/fesm2022/{xxmachina-components-routes-resources-pages.routes-CRXxavHb.mjs.map → xxmachina-components-routes-resources-pages.routes-DEu2qpeu.mjs.map} +1 -1
- package/fesm2022/{xxmachina-components-routes-resources-resource.routes-CkkmqB2_.mjs → xxmachina-components-routes-resources-resource.routes-CWxi2agj.mjs} +1 -2
- package/fesm2022/xxmachina-components-routes-resources-resource.routes-CWxi2agj.mjs.map +1 -0
- package/fesm2022/xxmachina-components-routes-resources.mjs +1 -1
- package/fesm2022/xxmachina-components-routes-transformer.mjs +0 -1
- package/fesm2022/xxmachina-components-routes-transformer.mjs.map +1 -1
- package/fesm2022/xxmachina-components-services-forms-query.mjs +1 -1
- package/fesm2022/xxmachina-components-services-forms-query.mjs.map +1 -1
- package/fesm2022/xxmachina-components-services-graphql.mjs +0 -4
- package/fesm2022/xxmachina-components-services-graphql.mjs.map +1 -1
- package/fesm2022/xxmachina-components-services-json-schema.mjs +6 -12
- package/fesm2022/xxmachina-components-services-json-schema.mjs.map +1 -1
- package/fesm2022/xxmachina-components-services-query.mjs +0 -7
- package/fesm2022/xxmachina-components-services-query.mjs.map +1 -1
- package/fesm2022/xxmachina-components-services-recording.mjs +0 -13
- package/fesm2022/xxmachina-components-services-recording.mjs.map +1 -1
- package/fesm2022/xxmachina-components-services-thread.mjs +0 -2
- package/fesm2022/xxmachina-components-services-thread.mjs.map +1 -1
- package/fesm2022/xxmachina-components-services-version.mjs +171 -0
- package/fesm2022/xxmachina-components-services-version.mjs.map +1 -0
- package/fesm2022/xxmachina-components-services-workspace-switcher.mjs +9 -0
- package/fesm2022/xxmachina-components-services-workspace-switcher.mjs.map +1 -0
- package/fesm2022/xxmachina-components-templates-agent.mjs +98 -146
- package/fesm2022/xxmachina-components-templates-agent.mjs.map +1 -1
- package/fesm2022/xxmachina-components-templates-background.mjs +10 -30
- package/fesm2022/xxmachina-components-templates-background.mjs.map +1 -1
- package/fesm2022/xxmachina-components-templates-env.mjs +295 -0
- package/fesm2022/xxmachina-components-templates-env.mjs.map +1 -0
- package/fesm2022/xxmachina-components-templates-flow-nodes-issue.mjs.map +1 -1
- package/fesm2022/xxmachina-components-templates-flow.mjs +1 -1
- package/fesm2022/xxmachina-components-templates-flow.mjs.map +1 -1
- package/fesm2022/xxmachina-components-templates-machina-icon-button-menu.mjs +78 -0
- package/fesm2022/xxmachina-components-templates-machina-icon-button-menu.mjs.map +1 -0
- package/fesm2022/xxmachina-components.mjs +9 -10
- package/fesm2022/xxmachina-components.mjs.map +1 -1
- package/package.json +25 -1
- package/types/xxmachina-components-extras-flow.d.ts +8 -43
- package/types/xxmachina-components-extras-flow.d.ts.map +1 -1
- package/types/xxmachina-components-features-query.d.ts +3 -24
- package/types/xxmachina-components-features-query.d.ts.map +1 -1
- package/types/xxmachina-components-groups-query-form.d.ts +2 -2
- package/types/xxmachina-components-molecules-user-avatar-menu.d.ts +19 -0
- package/types/xxmachina-components-molecules-user-avatar-menu.d.ts.map +1 -0
- package/types/xxmachina-components-molecules-workspace-selector.d.ts +25 -0
- package/types/xxmachina-components-molecules-workspace-selector.d.ts.map +1 -0
- package/types/xxmachina-components-organisms-xterm.d.ts +130 -111
- package/types/xxmachina-components-organisms-xterm.d.ts.map +1 -1
- package/types/xxmachina-components-pages-query-v2.d.ts +0 -3
- package/types/xxmachina-components-pages-query-v2.d.ts.map +1 -1
- package/types/xxmachina-components-pages-query.d.ts +0 -19
- package/types/xxmachina-components-pages-query.d.ts.map +1 -1
- package/types/xxmachina-components-services-forms-query.d.ts +1 -1
- package/types/xxmachina-components-services-graphql.d.ts +0 -3
- package/types/xxmachina-components-services-graphql.d.ts.map +1 -1
- package/types/xxmachina-components-services-query.d.ts +0 -7
- package/types/xxmachina-components-services-query.d.ts.map +1 -1
- package/types/xxmachina-components-services-version.d.ts +32 -0
- package/types/xxmachina-components-services-version.d.ts.map +1 -0
- package/types/xxmachina-components-services-workspace-switcher.d.ts +17 -0
- package/types/xxmachina-components-services-workspace-switcher.d.ts.map +1 -0
- package/types/xxmachina-components-templates-agent.d.ts +2 -1
- package/types/xxmachina-components-templates-agent.d.ts.map +1 -1
- package/types/xxmachina-components-templates-env.d.ts +43 -0
- package/types/xxmachina-components-templates-env.d.ts.map +1 -0
- package/types/xxmachina-components-templates-flow-nodes-issue.d.ts +0 -2
- package/types/xxmachina-components-templates-flow-nodes-issue.d.ts.map +1 -1
- package/types/xxmachina-components-templates-machina-icon-button-menu.d.ts +18 -0
- package/types/xxmachina-components-templates-machina-icon-button-menu.d.ts.map +1 -0
- package/types/xxmachina-components.d.ts +2 -0
- package/types/xxmachina-components.d.ts.map +1 -1
- package/fesm2022/xxmachina-components-routes-commands-command.routes-CSwIdXZg.mjs.map +0 -1
- package/fesm2022/xxmachina-components-routes-query-pages.routes-CxTbOJDQ.mjs.map +0 -1
- package/fesm2022/xxmachina-components-routes-resources-resource.routes-CkkmqB2_.mjs.map +0 -1
|
@@ -20,11 +20,8 @@ import { svgToSixel, XtermOrganism } from '@xxmachina/components/organisms/xterm
|
|
|
20
20
|
import { NavigatorOrganismStore } from '@ng-atomic/components/organisms/navigator';
|
|
21
21
|
import chalk from 'chalk';
|
|
22
22
|
|
|
23
|
-
/**
|
|
24
|
-
* コアメッセージ(共通部分)
|
|
25
|
-
*/
|
|
26
23
|
const CORE_MESSAGE = `${chalk.cyan('● What is Plan X?')}
|
|
27
|
-
|
|
24
|
+
A modern SSH and tmux alternative, peer-to-peer over WebRTC.
|
|
28
25
|
Connect any machine worldwide with a single command and deploy AI agents anywhere.
|
|
29
26
|
|
|
30
27
|
${chalk.cyan(`● Vision: ${chalk.bold.yellow('"The Planet is the Computer"')}`)}
|
|
@@ -42,18 +39,12 @@ ${chalk.cyan('● Meta-Kernel')}
|
|
|
42
39
|
${chalk.cyan('● Autopoiesis')}
|
|
43
40
|
Self-improving, self-sustaining, self-replicating living system
|
|
44
41
|
Agents evolve themselves and spawn new agents`;
|
|
45
|
-
/**
|
|
46
|
-
* ウェルカムメッセージ(起動時に表示)
|
|
47
|
-
*/
|
|
48
42
|
const WELCOME_MESSAGE = `${chalk.cyan(`● Welcome to ${chalk.bold.yellow('Plan X')}`)}
|
|
49
43
|
|
|
50
44
|
${CORE_MESSAGE}
|
|
51
45
|
|
|
52
46
|
${chalk.gray('powered by Plan X Agent LLC.')}
|
|
53
47
|
`;
|
|
54
|
-
/**
|
|
55
|
-
* aboutコマンドのメッセージ
|
|
56
|
-
*/
|
|
57
48
|
const ABOUT_MESSAGE = `${chalk.bold.cyan('● Plan X - OS for the LLM Era')}
|
|
58
49
|
|
|
59
50
|
${CORE_MESSAGE}
|
|
@@ -82,10 +73,10 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
82
73
|
store = inject(EntranceTemplateStore);
|
|
83
74
|
cdr = inject(ChangeDetectorRef);
|
|
84
75
|
app = inject(AppService);
|
|
85
|
-
// 認証状態のチェック(非ログイン時は閉じるボタンを非表示)
|
|
86
76
|
authState = injectAuthState();
|
|
87
77
|
isLoggedIn = computed(() => !!this.authState(), ...(ngDevMode ? [{ debugName: "isLoggedIn" }] : []));
|
|
88
78
|
endActions = input([], ...(ngDevMode ? [{ debugName: "endActions" }] : []));
|
|
79
|
+
hideInputArea = input(false, ...(ngDevMode ? [{ debugName: "hideInputArea" }] : []));
|
|
89
80
|
navStartActions = computed(() => {
|
|
90
81
|
if (!this.isLoggedIn())
|
|
91
82
|
return [];
|
|
@@ -98,40 +89,31 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
98
89
|
showCursor = false;
|
|
99
90
|
cursorLeft = 60;
|
|
100
91
|
cursorTop = 12;
|
|
101
|
-
// xterm関連
|
|
102
92
|
terminal;
|
|
103
93
|
commandHistory = [];
|
|
104
94
|
historyIndex = -1;
|
|
105
|
-
// 入力管理
|
|
106
95
|
currentInput = '';
|
|
107
96
|
ngAfterViewInit() {
|
|
108
|
-
// 入力フィールドにフォーカス
|
|
109
97
|
setTimeout(() => {
|
|
110
98
|
const textarea = this.inputField()?.nativeElement;
|
|
111
99
|
if (textarea) {
|
|
112
100
|
textarea.focus();
|
|
113
|
-
// 初期高さを適切に設定
|
|
114
101
|
this.adjustTextareaHeight();
|
|
115
102
|
}
|
|
116
103
|
}, 100);
|
|
117
104
|
}
|
|
118
105
|
onWindowResize() {
|
|
119
|
-
// ウィンドウリサイズ時にターミナルをフィット
|
|
120
106
|
this.xtermComponent()?.fit();
|
|
121
107
|
}
|
|
122
108
|
onTerminalReady(terminal) {
|
|
123
109
|
this.terminal = terminal;
|
|
124
|
-
// 初期化時にターミナルをコンテナサイズにフィット
|
|
125
110
|
setTimeout(() => {
|
|
126
111
|
this.xtermComponent()?.fit();
|
|
127
112
|
}, 50);
|
|
128
|
-
// 初期メッセージの表示
|
|
129
113
|
this.showWelcomeMessage();
|
|
130
|
-
// 初回ロード時は最上部にスクロール(アスキーアートから見えるように)
|
|
131
114
|
setTimeout(() => {
|
|
132
115
|
this.terminal.scrollToTop();
|
|
133
116
|
}, 100);
|
|
134
|
-
// 入力フィールドにフォーカスと高さ調整
|
|
135
117
|
const textarea = this.inputField()?.nativeElement;
|
|
136
118
|
if (textarea) {
|
|
137
119
|
textarea.focus();
|
|
@@ -144,7 +126,6 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
144
126
|
}
|
|
145
127
|
async showWelcomeMessage() {
|
|
146
128
|
this.terminal.writeln('');
|
|
147
|
-
// assetsからSVGを読み込んでSIXELフォーマットで表示
|
|
148
129
|
try {
|
|
149
130
|
const response = await fetch('/assets/machina-ascii-art.svg');
|
|
150
131
|
const svgString = await response.text();
|
|
@@ -154,7 +135,6 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
154
135
|
}
|
|
155
136
|
catch (error) {
|
|
156
137
|
console.warn('SIXEL logo display failed, using ASCII fallback:', error);
|
|
157
|
-
// フォールバック: ASCII artでX_Xロゴを表示
|
|
158
138
|
this.terminal.writeln(`${chalk.cyan(' ██╗ ██╗ ██╗ ██╗')}`);
|
|
159
139
|
this.terminal.writeln(`${chalk.cyan(' ╚██╗██╔╝ ╚██╗██╔╝ ')}`);
|
|
160
140
|
this.terminal.writeln(`${chalk.cyan(' ╚███╔╝ ╚███╔╝ ')}`);
|
|
@@ -163,23 +143,20 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
163
143
|
this.terminal.writeln(`${chalk.cyan(' ╚═╝ ╚═╝ ╚═╝ ╚═╝ ')}`);
|
|
164
144
|
}
|
|
165
145
|
this.terminal.writeln('');
|
|
166
|
-
// ウェルカムメッセージを表示
|
|
167
146
|
WELCOME_MESSAGE.split('\n').forEach(line => this.terminal.writeln(line));
|
|
168
147
|
this.terminal.writeln('');
|
|
169
148
|
this.terminal.writeln(`${chalk.cyan('● Type \x1b[1;36mlogin\x1b[1;33m to sign in with Google\x1b[0m')}`);
|
|
170
149
|
this.terminal.writeln(`${chalk.cyan('● Type \x1b[1;36mhelp\x1b[1;33m for more commands\x1b[0m')}`);
|
|
171
150
|
this.terminal.writeln('');
|
|
172
|
-
// プロンプト表示
|
|
173
151
|
this.showPrompt();
|
|
174
152
|
}
|
|
175
153
|
showPrompt() {
|
|
176
|
-
|
|
154
|
+
void 0;
|
|
177
155
|
}
|
|
178
156
|
processCommand(command) {
|
|
179
157
|
this.isProcessing = true;
|
|
180
158
|
this.statusText = 'Processing...';
|
|
181
159
|
this.cdr.markForCheck();
|
|
182
|
-
// ログインコマンド
|
|
183
160
|
if (command === 'login') {
|
|
184
161
|
this.terminal.writeln('\x1b[1;32m● Initiating Google authentication...\x1b[0m');
|
|
185
162
|
setTimeout(() => {
|
|
@@ -217,7 +194,6 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
217
194
|
this.completeProcessing();
|
|
218
195
|
}
|
|
219
196
|
}
|
|
220
|
-
// ログアウトコマンド
|
|
221
197
|
else if (command === 'logout' || command === 'signout') {
|
|
222
198
|
this.terminal.writeln('\x1b[1;32m● Signing out...\x1b[0m');
|
|
223
199
|
setTimeout(() => {
|
|
@@ -229,7 +205,6 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
229
205
|
}, 500);
|
|
230
206
|
}, 300);
|
|
231
207
|
}
|
|
232
|
-
// ヘルプコマンド
|
|
233
208
|
else if (command === 'help' || command === '?') {
|
|
234
209
|
this.terminal.writeln('\x1b[1;32m● Available commands:\x1b[0m');
|
|
235
210
|
this.terminal.writeln(' \x1b[36mlogin\x1b[0m - Sign in with Google (default)');
|
|
@@ -247,12 +222,10 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
247
222
|
this.terminal.writeln(' \x1b[36m↑\x1b[0m / \x1b[36m↓\x1b[0m - Navigate command history');
|
|
248
223
|
this.completeProcessing();
|
|
249
224
|
}
|
|
250
|
-
// machina情報コマンド
|
|
251
225
|
else if (command === 'about') {
|
|
252
226
|
ABOUT_MESSAGE.split('\n').forEach(line => this.terminal.writeln(line));
|
|
253
227
|
this.completeProcessing();
|
|
254
228
|
}
|
|
255
|
-
// 利用規約コマンド
|
|
256
229
|
else if (command === 'terms') {
|
|
257
230
|
this.terminal.writeln('\x1b[1;32m● Opening Terms of Service...\x1b[0m');
|
|
258
231
|
setTimeout(() => {
|
|
@@ -260,13 +233,11 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
260
233
|
this.completeProcessing();
|
|
261
234
|
}, 300);
|
|
262
235
|
}
|
|
263
|
-
// クリアコマンド
|
|
264
236
|
else if (command === 'clear' || command === 'cls') {
|
|
265
237
|
this.terminal.clear();
|
|
266
238
|
this.terminal.scrollToBottom();
|
|
267
239
|
this.completeProcessing();
|
|
268
240
|
}
|
|
269
|
-
// 不明なコマンド
|
|
270
241
|
else {
|
|
271
242
|
this.terminal.writeln(`\x1b[1;31m● Command not found: ${command}\x1b[0m`);
|
|
272
243
|
this.terminal.writeln(' Type "help" for available commands.');
|
|
@@ -278,32 +249,24 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
278
249
|
this.statusText = 'Ready';
|
|
279
250
|
this.cdr.markForCheck();
|
|
280
251
|
this.terminal.writeln('');
|
|
281
|
-
// 最新の出力が見えるようにスクロール
|
|
282
252
|
this.terminal.scrollToBottom();
|
|
283
|
-
// 入力フィールドにフォーカスを戻す
|
|
284
253
|
setTimeout(() => {
|
|
285
254
|
this.inputField()?.nativeElement?.focus();
|
|
286
255
|
}, 100);
|
|
287
256
|
}
|
|
288
257
|
handleEnter(event) {
|
|
289
|
-
// Shift+EnterまたはCtrl+Enterの場合は改行を許可
|
|
290
258
|
if (event.shiftKey || event.ctrlKey) {
|
|
291
|
-
return;
|
|
259
|
+
return;
|
|
292
260
|
}
|
|
293
261
|
event.preventDefault();
|
|
294
262
|
const actualCommand = this.currentInput.trim();
|
|
295
263
|
if (actualCommand) {
|
|
296
|
-
// コマンドをターミナルに表示(改行を含む場合は適切に処理)
|
|
297
264
|
const displayCommand = actualCommand.split('\n').map(line => '\x1b[32m> \x1b[0m' + line).join('\r\n');
|
|
298
265
|
this.terminal.write(displayCommand + '\r\n');
|
|
299
|
-
// 履歴に追加
|
|
300
266
|
this.commandHistory.push(actualCommand);
|
|
301
267
|
this.historyIndex = this.commandHistory.length;
|
|
302
|
-
// コマンドを処理
|
|
303
268
|
this.processCommand(actualCommand);
|
|
304
|
-
// 入力を初期状態にリセット
|
|
305
269
|
this.currentInput = '';
|
|
306
|
-
// textareaの高さをリセット
|
|
307
270
|
const textarea = this.inputField()?.nativeElement;
|
|
308
271
|
if (textarea) {
|
|
309
272
|
textarea.style.height = 'auto';
|
|
@@ -313,12 +276,10 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
313
276
|
navigateHistory(event, direction) {
|
|
314
277
|
event.preventDefault();
|
|
315
278
|
if (direction === -1 && this.historyIndex > 0) {
|
|
316
|
-
// 上矢印
|
|
317
279
|
this.historyIndex--;
|
|
318
280
|
this.currentInput = this.commandHistory[this.historyIndex];
|
|
319
281
|
}
|
|
320
282
|
else if (direction === 1) {
|
|
321
|
-
// 下矢印
|
|
322
283
|
if (this.historyIndex < this.commandHistory.length - 1) {
|
|
323
284
|
this.historyIndex++;
|
|
324
285
|
this.currentInput = this.commandHistory[this.historyIndex];
|
|
@@ -351,76 +312,59 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
351
312
|
}
|
|
352
313
|
this.dispatch(action);
|
|
353
314
|
}
|
|
354
|
-
// 入力フィールドにフォーカスを設定
|
|
355
315
|
focusInput() {
|
|
356
316
|
this.inputField()?.nativeElement?.focus();
|
|
357
317
|
}
|
|
358
|
-
// textareaの高さを内容に合わせて調整
|
|
359
318
|
adjustTextareaHeight() {
|
|
360
319
|
const textarea = this.inputField()?.nativeElement;
|
|
361
320
|
if (textarea) {
|
|
362
|
-
// 一旦高さをリセット
|
|
363
321
|
textarea.style.height = '20px';
|
|
364
|
-
// scrollHeightを確認し、実際に必要な高さを設定
|
|
365
322
|
const scrollHeight = textarea.scrollHeight;
|
|
366
|
-
|
|
367
|
-
const minHeight = 44; // padding: 12px * 2 + line-height: 20px
|
|
323
|
+
const minHeight = 44;
|
|
368
324
|
textarea.style.height = Math.max(minHeight, scrollHeight) + 'px';
|
|
369
325
|
}
|
|
370
326
|
}
|
|
371
|
-
// キーダウンイベントのハンドラ(プレフィックス削除防止は不要になったためノーオペレーション)
|
|
372
327
|
preventPrefixDeletion(_event) {
|
|
373
|
-
|
|
328
|
+
void 0;
|
|
374
329
|
}
|
|
375
|
-
// 入力時の処理
|
|
376
330
|
handleInput(event) {
|
|
377
331
|
const textarea = event.target;
|
|
378
|
-
// 高さ調整(改行が含まれている場合のみ)
|
|
379
332
|
if (this.currentInput.includes('\n')) {
|
|
380
333
|
this.adjustTextareaHeight();
|
|
381
334
|
}
|
|
382
335
|
else {
|
|
383
|
-
// 1行の場合は固定高さ
|
|
384
336
|
textarea.style.height = '44px';
|
|
385
337
|
}
|
|
386
|
-
// カーソル位置を更新
|
|
387
338
|
this.updateCursorPosition();
|
|
388
339
|
}
|
|
389
|
-
// フォーカス時の処理
|
|
390
340
|
handleFocus() {
|
|
391
341
|
this.showCursor = true;
|
|
392
342
|
this.updateCursorPosition();
|
|
393
343
|
}
|
|
394
|
-
// ブラー時の処理
|
|
395
344
|
handleBlur() {
|
|
396
345
|
this.showCursor = false;
|
|
397
346
|
}
|
|
398
|
-
// カーソル位置の更新
|
|
399
347
|
updateCursorPosition() {
|
|
400
348
|
const textarea = this.inputField()?.nativeElement;
|
|
401
349
|
if (!textarea)
|
|
402
350
|
return;
|
|
403
351
|
const cursorPos = textarea.selectionStart;
|
|
404
352
|
const textBeforeCursor = this.currentInput.substring(0, cursorPos);
|
|
405
|
-
// 改行で分割
|
|
406
353
|
const lines = textBeforeCursor.split('\n');
|
|
407
354
|
const currentLineIndex = lines.length - 1;
|
|
408
355
|
const currentLineText = lines[currentLineIndex];
|
|
409
|
-
// 仮のcanvasを使って現在の行のテキスト幅を計算
|
|
410
356
|
const canvas = document.createElement('canvas');
|
|
411
357
|
const context = canvas.getContext('2d');
|
|
412
358
|
if (context) {
|
|
413
359
|
context.font = '14px "SF Mono", Monaco, monospace';
|
|
414
360
|
const textWidth = context.measureText(currentLineText).width;
|
|
415
|
-
|
|
416
|
-
this.cursorLeft = 8 + textWidth; // 8px は textarea の左パディング
|
|
417
|
-
// 垂直位置を調整(行数に基づいて、スクロール位置も考慮)
|
|
361
|
+
this.cursorLeft = 8 + textWidth;
|
|
418
362
|
const scrollTop = textarea.scrollTop;
|
|
419
|
-
this.cursorTop = 12 + (currentLineIndex * 20) - scrollTop;
|
|
363
|
+
this.cursorTop = 12 + (currentLineIndex * 20) - scrollTop;
|
|
420
364
|
}
|
|
421
365
|
}
|
|
422
366
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AgentTemplate, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
423
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
367
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: AgentTemplate, isStandalone: true, selector: "templates-agent", inputs: { endActions: { classPropertyName: "endActions", publicName: "endActions", isSignal: true, isRequired: false, transformFunction: null }, hideInputArea: { classPropertyName: "hideInputArea", publicName: "hideInputArea", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:resize": "onWindowResize()" }, classAttribute: "template" }, viewQueries: [{ propertyName: "xtermComponent", first: true, predicate: ["xtermComponent"], descendants: true, isSignal: true }, { propertyName: "inputField", first: true, predicate: ["inputField"], descendants: true, isSignal: true }], usesInheritance: true, hostDirectives: [{ directive: i1.EntranceTemplateStore, inputs: ["form", "form", "actions", "actions", "title", "title", "fieldMap", "fieldMap"] }], ngImport: i0, template: `
|
|
424
368
|
<frames-scroll class="terminal-window">
|
|
425
369
|
<organisms-navigator top injectable class="terminal-header"
|
|
426
370
|
[startActions]="navStartActions()"
|
|
@@ -428,51 +372,55 @@ class AgentTemplate extends NgAtomicComponent {
|
|
|
428
372
|
(action)="onNavAction($event)"
|
|
429
373
|
>MACHINA</organisms-navigator>
|
|
430
374
|
|
|
431
|
-
<
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
375
|
+
<ng-content select="[terminalSlot]">
|
|
376
|
+
<organisms-xterm
|
|
377
|
+
class="terminal-display"
|
|
378
|
+
(terminalReady)="onTerminalReady($event)"
|
|
379
|
+
(githubLinkClick)="onGitHubLinkClick($event)"
|
|
380
|
+
(click)="focusInput()"
|
|
381
|
+
#xtermComponent
|
|
382
|
+
/>
|
|
383
|
+
</ng-content>
|
|
438
384
|
|
|
439
|
-
|
|
440
|
-
<div class="input-
|
|
441
|
-
<
|
|
442
|
-
|
|
443
|
-
<
|
|
444
|
-
|
|
445
|
-
<
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
385
|
+
@if (!hideInputArea()) {
|
|
386
|
+
<div bottom class="input-area">
|
|
387
|
+
<div class="input-line">
|
|
388
|
+
<span class="input-prefix">></span>
|
|
389
|
+
<div class="textarea-wrapper">
|
|
390
|
+
<span class="arrow-prefix">></span>
|
|
391
|
+
<div class="input-container">
|
|
392
|
+
<textarea
|
|
393
|
+
#inputField
|
|
394
|
+
class="terminal-input"
|
|
395
|
+
[(ngModel)]="currentInput"
|
|
396
|
+
(keydown.enter)="handleEnter($event)"
|
|
397
|
+
(keydown.arrowUp)="navigateHistory($event, -1)"
|
|
398
|
+
(keydown.arrowDown)="navigateHistory($event, 1)"
|
|
399
|
+
(keydown.control.k)="generateCommand($event)"
|
|
400
|
+
(keydown.meta.k)="generateCommand($event)"
|
|
401
|
+
(keydown)="preventPrefixDeletion($event)"
|
|
402
|
+
(input)="handleInput($event)"
|
|
403
|
+
(focus)="handleFocus()"
|
|
404
|
+
(blur)="handleBlur()"
|
|
405
|
+
(keyup)="updateCursorPosition()"
|
|
406
|
+
(click)="updateCursorPosition()"
|
|
407
|
+
(scroll)="updateCursorPosition()"
|
|
408
|
+
[disabled]="isProcessing"
|
|
409
|
+
placeholder="Type a command..."
|
|
410
|
+
rows="1"
|
|
411
|
+
></textarea>
|
|
412
|
+
<div class="block-cursor"
|
|
413
|
+
[class.visible]="showCursor"
|
|
414
|
+
[style.left.px]="cursorLeft"
|
|
415
|
+
[style.top.px]="cursorTop"
|
|
416
|
+
></div>
|
|
417
|
+
</div>
|
|
470
418
|
</div>
|
|
471
419
|
</div>
|
|
472
420
|
</div>
|
|
473
|
-
|
|
421
|
+
}
|
|
474
422
|
</frames-scroll>
|
|
475
|
-
`, isInline: true, styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-
|
|
423
|
+
`, isInline: true, styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-0hAu: var(--text);--user: #33ff33;--user-SCOPED-IN-entrance-0hAu: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-0hAu: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-0hAu: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-0hAu: var(--border)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}:host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:transparent;font-family:SF Mono,Monaco,monospace;container-type:inline-size;container-name:agent-container;transition:all .3s ease}.terminal-window{--height: 100%;--contents-gap: 0;width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-0hAu);border-radius:8px;box-shadow:0 20px 40px #0000004d;animation:fadeIn .3s;transition:all .3s ease}.terminal-header{display:flex;justify-content:space-between;align-items:center;height:56px;min-height:56px;flex-shrink:0;padding:0;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-0hAu);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-0hAu);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-0hAu);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-0hAu);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-0hAu);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-0hAu);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .3s ease;padding:16px 20px}.input-line{display:block;position:relative}.input-line .input-prefix{display:none}.input-line .textarea-wrapper{display:flex;align-items:flex-start;position:relative;border:1px solid rgba(255,255,255,.2);border-radius:4px;transition:border-color .2s ease}.input-line .textarea-wrapper:focus-within{border-color:#fff6}.input-line .textarea-wrapper .arrow-prefix{color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;padding:12px 0 12px 16px;flex-shrink:0;pointer-events:none}.input-line .textarea-wrapper .input-container{flex:1;position:relative;overflow:hidden}.input-line .textarea-wrapper .terminal-input{width:100%;background:transparent;border:none;outline:none;color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;caret-color:transparent;padding:12px 16px 12px 8px;transition:none;resize:none;height:44px;min-height:44px;max-height:200px;overflow-y:auto;overflow-x:hidden;line-height:20px;box-sizing:border-box;white-space:pre-wrap;word-wrap:break-word}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.input-line .textarea-wrapper .terminal-input{caret-shape:block}.input-line .textarea-wrapper .terminal-input:disabled{opacity:.5;cursor:not-allowed}.input-line .textarea-wrapper .terminal-input:-webkit-autofill{-webkit-text-fill-color:#e0e0e0;-webkit-box-shadow:0 0 0 1000px rgba(0,0,0,.9) inset}.input-line .textarea-wrapper .terminal-input::placeholder{color:#ffffff4d;opacity:1}.input-line .textarea-wrapper .block-cursor{position:absolute;width:10px;height:20px;background:#e0e0e0;opacity:0;pointer-events:none}.input-line .textarea-wrapper .block-cursor.visible{animation:blink 1s infinite}@keyframes blink{0%,50%{opacity:.8}51%,to{opacity:0}}:host:has(.terminal-window){height:100vh;height:100dvh;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0;padding-top:env(safe-area-inset-top)}.terminal-window{height:100%;max-height:100vh;max-height:100dvh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0}.terminal-header .terminal-title{font-size:12px}.terminal-header .terminal-status{font-size:11px}.terminal-header .close-button{margin-right:.25rem}}@container agent-container (min-width: 601px) and (max-width: 900px){.terminal-window{max-width:100%;height:100%;border-radius:0}}@container agent-container (max-width: 400px){.terminal-header{height:56px;padding:0}.terminal-header .close-button{margin-right:.2rem}.input-area{padding:12px 16px}.textarea-wrapper .arrow-prefix{font-size:13px;padding:10px 0 10px 12px}.textarea-wrapper .terminal-input{font-size:12px;padding:10px 12px 10px 6px;height:40px;min-height:40px;line-height:20px}}.ascii-art{font-family:Consolas,Monaco,Liberation Mono,Menlo,Courier New,monospace!important;font-size:10px!important;line-height:1.1!important;letter-spacing:0!important;font-weight:400!important;margin:1em 0!important;padding:1em!important;white-space:pre!important;overflow-x:auto!important;overflow-y:hidden!important;display:block!important;width:fit-content!important;background:#ffffff08;border:1px solid var(--border-SCOPED-IN-entrance-0hAu);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-0hAu)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-0hAu),0 0 20px var(--accent-SCOPED-IN-entrance-0hAu);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ScrollFrame, selector: "frames-scroll" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "component", type: XtermOrganism, selector: "organisms-xterm", outputs: ["terminalReady", "githubLinkClick"] }, { kind: "directive", type: NavigatorOrganismStore, selector: "organisms-navigator", inputs: ["startActions", "endActions", "title"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
|
|
476
424
|
}
|
|
477
425
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AgentTemplate, decorators: [{
|
|
478
426
|
type: Component,
|
|
@@ -497,49 +445,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
|
|
|
497
445
|
(action)="onNavAction($event)"
|
|
498
446
|
>MACHINA</organisms-navigator>
|
|
499
447
|
|
|
500
|
-
<
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
448
|
+
<ng-content select="[terminalSlot]">
|
|
449
|
+
<organisms-xterm
|
|
450
|
+
class="terminal-display"
|
|
451
|
+
(terminalReady)="onTerminalReady($event)"
|
|
452
|
+
(githubLinkClick)="onGitHubLinkClick($event)"
|
|
453
|
+
(click)="focusInput()"
|
|
454
|
+
#xtermComponent
|
|
455
|
+
/>
|
|
456
|
+
</ng-content>
|
|
507
457
|
|
|
508
|
-
|
|
509
|
-
<div class="input-
|
|
510
|
-
<
|
|
511
|
-
|
|
512
|
-
<
|
|
513
|
-
|
|
514
|
-
<
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
458
|
+
@if (!hideInputArea()) {
|
|
459
|
+
<div bottom class="input-area">
|
|
460
|
+
<div class="input-line">
|
|
461
|
+
<span class="input-prefix">></span>
|
|
462
|
+
<div class="textarea-wrapper">
|
|
463
|
+
<span class="arrow-prefix">></span>
|
|
464
|
+
<div class="input-container">
|
|
465
|
+
<textarea
|
|
466
|
+
#inputField
|
|
467
|
+
class="terminal-input"
|
|
468
|
+
[(ngModel)]="currentInput"
|
|
469
|
+
(keydown.enter)="handleEnter($event)"
|
|
470
|
+
(keydown.arrowUp)="navigateHistory($event, -1)"
|
|
471
|
+
(keydown.arrowDown)="navigateHistory($event, 1)"
|
|
472
|
+
(keydown.control.k)="generateCommand($event)"
|
|
473
|
+
(keydown.meta.k)="generateCommand($event)"
|
|
474
|
+
(keydown)="preventPrefixDeletion($event)"
|
|
475
|
+
(input)="handleInput($event)"
|
|
476
|
+
(focus)="handleFocus()"
|
|
477
|
+
(blur)="handleBlur()"
|
|
478
|
+
(keyup)="updateCursorPosition()"
|
|
479
|
+
(click)="updateCursorPosition()"
|
|
480
|
+
(scroll)="updateCursorPosition()"
|
|
481
|
+
[disabled]="isProcessing"
|
|
482
|
+
placeholder="Type a command..."
|
|
483
|
+
rows="1"
|
|
484
|
+
></textarea>
|
|
485
|
+
<div class="block-cursor"
|
|
486
|
+
[class.visible]="showCursor"
|
|
487
|
+
[style.left.px]="cursorLeft"
|
|
488
|
+
[style.top.px]="cursorTop"
|
|
489
|
+
></div>
|
|
490
|
+
</div>
|
|
539
491
|
</div>
|
|
540
492
|
</div>
|
|
541
493
|
</div>
|
|
542
|
-
|
|
494
|
+
}
|
|
543
495
|
</frames-scroll>
|
|
544
496
|
`, host: {
|
|
545
497
|
class: 'template'
|
|
@@ -553,8 +505,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
|
|
|
553
505
|
'fieldMap',
|
|
554
506
|
],
|
|
555
507
|
},
|
|
556
|
-
], styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-
|
|
557
|
-
}], propDecorators: { endActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "endActions", required: false }] }], xtermComponent: [{ type: i0.ViewChild, args: ['xtermComponent', { isSignal: true }] }], inputField: [{ type: i0.ViewChild, args: ['inputField', { isSignal: true }] }], onWindowResize: [{
|
|
508
|
+
], styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-0hAu: var(--text);--user: #33ff33;--user-SCOPED-IN-entrance-0hAu: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-0hAu: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-0hAu: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-0hAu: var(--border)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}:host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:transparent;font-family:SF Mono,Monaco,monospace;container-type:inline-size;container-name:agent-container;transition:all .3s ease}.terminal-window{--height: 100%;--contents-gap: 0;width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-0hAu);border-radius:8px;box-shadow:0 20px 40px #0000004d;animation:fadeIn .3s;transition:all .3s ease}.terminal-header{display:flex;justify-content:space-between;align-items:center;height:56px;min-height:56px;flex-shrink:0;padding:0;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-0hAu);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-0hAu);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-0hAu);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-0hAu);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-0hAu);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-0hAu);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .3s ease;padding:16px 20px}.input-line{display:block;position:relative}.input-line .input-prefix{display:none}.input-line .textarea-wrapper{display:flex;align-items:flex-start;position:relative;border:1px solid rgba(255,255,255,.2);border-radius:4px;transition:border-color .2s ease}.input-line .textarea-wrapper:focus-within{border-color:#fff6}.input-line .textarea-wrapper .arrow-prefix{color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;padding:12px 0 12px 16px;flex-shrink:0;pointer-events:none}.input-line .textarea-wrapper .input-container{flex:1;position:relative;overflow:hidden}.input-line .textarea-wrapper .terminal-input{width:100%;background:transparent;border:none;outline:none;color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;caret-color:transparent;padding:12px 16px 12px 8px;transition:none;resize:none;height:44px;min-height:44px;max-height:200px;overflow-y:auto;overflow-x:hidden;line-height:20px;box-sizing:border-box;white-space:pre-wrap;word-wrap:break-word}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.input-line .textarea-wrapper .terminal-input{caret-shape:block}.input-line .textarea-wrapper .terminal-input:disabled{opacity:.5;cursor:not-allowed}.input-line .textarea-wrapper .terminal-input:-webkit-autofill{-webkit-text-fill-color:#e0e0e0;-webkit-box-shadow:0 0 0 1000px rgba(0,0,0,.9) inset}.input-line .textarea-wrapper .terminal-input::placeholder{color:#ffffff4d;opacity:1}.input-line .textarea-wrapper .block-cursor{position:absolute;width:10px;height:20px;background:#e0e0e0;opacity:0;pointer-events:none}.input-line .textarea-wrapper .block-cursor.visible{animation:blink 1s infinite}@keyframes blink{0%,50%{opacity:.8}51%,to{opacity:0}}:host:has(.terminal-window){height:100vh;height:100dvh;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0;padding-top:env(safe-area-inset-top)}.terminal-window{height:100%;max-height:100vh;max-height:100dvh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0}.terminal-header .terminal-title{font-size:12px}.terminal-header .terminal-status{font-size:11px}.terminal-header .close-button{margin-right:.25rem}}@container agent-container (min-width: 601px) and (max-width: 900px){.terminal-window{max-width:100%;height:100%;border-radius:0}}@container agent-container (max-width: 400px){.terminal-header{height:56px;padding:0}.terminal-header .close-button{margin-right:.2rem}.input-area{padding:12px 16px}.textarea-wrapper .arrow-prefix{font-size:13px;padding:10px 0 10px 12px}.textarea-wrapper .terminal-input{font-size:12px;padding:10px 12px 10px 6px;height:40px;min-height:40px;line-height:20px}}.ascii-art{font-family:Consolas,Monaco,Liberation Mono,Menlo,Courier New,monospace!important;font-size:10px!important;line-height:1.1!important;letter-spacing:0!important;font-weight:400!important;margin:1em 0!important;padding:1em!important;white-space:pre!important;overflow-x:auto!important;overflow-y:hidden!important;display:block!important;width:fit-content!important;background:#ffffff08;border:1px solid var(--border-SCOPED-IN-entrance-0hAu);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-0hAu)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-0hAu),0 0 20px var(--accent-SCOPED-IN-entrance-0hAu);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}\n"] }]
|
|
509
|
+
}], propDecorators: { endActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "endActions", required: false }] }], hideInputArea: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideInputArea", required: false }] }], xtermComponent: [{ type: i0.ViewChild, args: ['xtermComponent', { isSignal: true }] }], inputField: [{ type: i0.ViewChild, args: ['inputField', { isSignal: true }] }], onWindowResize: [{
|
|
558
510
|
type: HostListener,
|
|
559
511
|
args: ['window:resize']
|
|
560
512
|
}] } });
|