buildless-cli 0.1.6

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 (42) hide show
  1. package/README.md +49 -0
  2. package/dist/app.d.ts +9 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +67 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/auth.d.ts +14 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +100 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/config.d.ts +14 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +45 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/firestore.d.ts +28 -0
  15. package/dist/firestore.d.ts.map +1 -0
  16. package/dist/firestore.js +340 -0
  17. package/dist/firestore.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +94 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/log.d.ts +3 -0
  23. package/dist/log.d.ts.map +1 -0
  24. package/dist/log.js +10 -0
  25. package/dist/log.js.map +1 -0
  26. package/dist/ui/app-search.d.ts +11 -0
  27. package/dist/ui/app-search.d.ts.map +1 -0
  28. package/dist/ui/app-search.js +83 -0
  29. package/dist/ui/app-search.js.map +1 -0
  30. package/dist/ui/runner.d.ts +12 -0
  31. package/dist/ui/runner.d.ts.map +1 -0
  32. package/dist/ui/runner.js +419 -0
  33. package/dist/ui/runner.js.map +1 -0
  34. package/dist/ui/useRunnerRenderSource.d.ts +53 -0
  35. package/dist/ui/useRunnerRenderSource.d.ts.map +1 -0
  36. package/dist/ui/useRunnerRenderSource.js +69 -0
  37. package/dist/ui/useRunnerRenderSource.js.map +1 -0
  38. package/dist/ui/useRunnerSession.d.ts +16 -0
  39. package/dist/ui/useRunnerSession.d.ts.map +1 -0
  40. package/dist/ui/useRunnerSession.js +188 -0
  41. package/dist/ui/useRunnerSession.js.map +1 -0
  42. package/package.json +41 -0
@@ -0,0 +1,419 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from "react";
3
+ import { Box, Text, useInput } from "ink";
4
+ import { useRunnerSession } from "./useRunnerSession.js";
5
+ import { useRunnerRenderSource } from "./useRunnerRenderSource.js";
6
+ export const Runner = ({ projectId, versionId, terminalUrl, idToken, onBackToApps, onExit, }) => {
7
+ const { screen: rawScreen, error, connecting, sessionId, sendMessage } = useRunnerSession({
8
+ projectId,
9
+ versionId,
10
+ terminalUrl,
11
+ idToken,
12
+ });
13
+ const [listScrollOffsets, setListScrollOffsets] = useState({});
14
+ const { screen, listScrollInfo, lineWidgetIds } = useRunnerRenderSource(rawScreen, listScrollOffsets);
15
+ const [inputMode, setInputMode] = useState(false);
16
+ const [activeInputIndex, setActiveInputIndex] = useState(0);
17
+ const [fieldValues, setFieldValues] = useState({});
18
+ const inputFields = useMemo(() => {
19
+ if (!screen)
20
+ return [];
21
+ if (screen.inputFields && screen.inputFields.length > 0)
22
+ return screen.inputFields;
23
+ if (screen.inputField)
24
+ return [screen.inputField];
25
+ return [];
26
+ }, [screen]);
27
+ const selectableLines = useMemo(() => {
28
+ return (screen?.actionLines || [])
29
+ .filter((line) => line.selectable && (line.target || line.aidAlias || line.action))
30
+ .sort((a, b) => a.index - b.index);
31
+ }, [screen?.actionLines]);
32
+ const shortcutByKey = useMemo(() => {
33
+ const map = new Map();
34
+ for (const s of screen?.shortcuts || []) {
35
+ const k = String(s.key || "").trim().toLowerCase();
36
+ if (k)
37
+ map.set(k, s);
38
+ }
39
+ return map;
40
+ }, [screen?.shortcuts]);
41
+ const [selectedLineIndex, setSelectedLineIndex] = useState(0);
42
+ useEffect(() => {
43
+ setSelectedLineIndex(0);
44
+ setListScrollOffsets({});
45
+ }, [screen?.sessionId]);
46
+ useEffect(() => {
47
+ if (selectableLines.length > 0) {
48
+ setSelectedLineIndex((prev) => Math.min(prev, selectableLines.length - 1));
49
+ }
50
+ }, [selectableLines.length]);
51
+ useEffect(() => {
52
+ if (!inputFields.length) {
53
+ setInputMode(false);
54
+ setActiveInputIndex(0);
55
+ return;
56
+ }
57
+ setActiveInputIndex((prev) => Math.min(prev, inputFields.length - 1));
58
+ }, [inputFields.length]);
59
+ useEffect(() => {
60
+ if (!inputFields.length)
61
+ return;
62
+ setFieldValues((prev) => {
63
+ const next = { ...prev };
64
+ for (const field of inputFields) {
65
+ const isNonEditable = (field.maxLength ?? 0) === 0;
66
+ if (isNonEditable || next[field.id] === undefined) {
67
+ next[field.id] = String(field.value || "");
68
+ }
69
+ }
70
+ return next;
71
+ });
72
+ }, [inputFields]);
73
+ const collectFields = (extra) => {
74
+ return { ...fieldValues, ...extra };
75
+ };
76
+ const applySelectedLine = (line) => {
77
+ const fields = collectFields(line.fields);
78
+ if (line.target) {
79
+ sendMessage({ type: "nav", target: line.target, fields });
80
+ return;
81
+ }
82
+ if (line.aidAlias) {
83
+ sendMessage({ type: "aid", key: line.aidAlias, fields });
84
+ return;
85
+ }
86
+ if (line.action) {
87
+ sendMessage({ type: "action", action: line.action, fields });
88
+ }
89
+ };
90
+ const executeShortcut = (shortcut) => {
91
+ const fields = collectFields(shortcut.fields);
92
+ if (shortcut.target) {
93
+ sendMessage({ type: "nav", target: shortcut.target, fields });
94
+ return;
95
+ }
96
+ if (shortcut.action) {
97
+ sendMessage({ type: "action", action: shortcut.action, fields });
98
+ return;
99
+ }
100
+ if (shortcut.aidAlias) {
101
+ sendMessage({ type: "aid", key: shortcut.aidAlias, fields });
102
+ }
103
+ };
104
+ const toggleActiveCheckbox = () => {
105
+ const activeField = inputFields[activeInputIndex];
106
+ if (!activeField)
107
+ return;
108
+ const toggleAction = activeField.action ?? { type: "data.toggleFlag", path: activeField.id };
109
+ sendMessage({ type: "action", action: toggleAction, fields: collectFields() });
110
+ };
111
+ const activeField = inputFields[activeInputIndex] ?? null;
112
+ const isEditable = activeField != null && (activeField.maxLength ?? 0) > 0;
113
+ const isMultiLine = isEditable && (activeField.rows ?? 1) > 1;
114
+ useInput((input, key) => {
115
+ if (key.ctrl && input === "c") {
116
+ onExit();
117
+ return;
118
+ }
119
+ if (!screen)
120
+ return;
121
+ // -- Input mode (typing into a text field) --
122
+ if (inputMode) {
123
+ if (!activeField)
124
+ return;
125
+ if (key.escape) {
126
+ sendMessage({ type: "aid", key: "B", fields: fieldValues });
127
+ setInputMode(false);
128
+ return;
129
+ }
130
+ // Non-editable field (checkbox/select/radio/number/date): arrow keys cycle fields, Enter/Space toggle
131
+ if (!isEditable) {
132
+ if (key.tab || input === "\t" || key.downArrow || key.rightArrow) {
133
+ setActiveInputIndex((prev) => (prev + 1) % inputFields.length);
134
+ return;
135
+ }
136
+ if (key.upArrow || key.leftArrow) {
137
+ setActiveInputIndex((prev) => inputFields.length ? (prev - 1 + inputFields.length) % inputFields.length : 0);
138
+ return;
139
+ }
140
+ if (key.return || input === " ") {
141
+ toggleActiveCheckbox();
142
+ return;
143
+ }
144
+ // Pass through to shortcut handling below
145
+ if (input) {
146
+ const shortcut = shortcutByKey.get(input.toLowerCase());
147
+ if (shortcut) {
148
+ executeShortcut(shortcut);
149
+ return;
150
+ }
151
+ }
152
+ return;
153
+ }
154
+ // Editable text field
155
+ if (key.tab || input === "\t") {
156
+ // Tab submits the field values and exits input mode
157
+ sendMessage({ type: "aid", key: "ENTER", fields: fieldValues });
158
+ setInputMode(false);
159
+ return;
160
+ }
161
+ if (key.backspace || key.delete) {
162
+ setFieldValues((prev) => ({
163
+ ...prev,
164
+ [activeField.id]: (prev[activeField.id] || "").slice(0, -1),
165
+ }));
166
+ return;
167
+ }
168
+ if (key.return) {
169
+ if (isMultiLine) {
170
+ // Enter in multi-line: add newline
171
+ setFieldValues((prev) => {
172
+ const current = prev[activeField.id] || "";
173
+ if (current.length >= activeField.maxLength)
174
+ return prev;
175
+ return { ...prev, [activeField.id]: current + "\n" };
176
+ });
177
+ return;
178
+ }
179
+ // Single-line Enter: submit
180
+ sendMessage({ type: "aid", key: "ENTER", fields: fieldValues });
181
+ setInputMode(false);
182
+ return;
183
+ }
184
+ if (input) {
185
+ setFieldValues((prev) => {
186
+ const current = prev[activeField.id] || "";
187
+ if (current.length >= activeField.maxLength)
188
+ return prev;
189
+ return { ...prev, [activeField.id]: current + input };
190
+ });
191
+ }
192
+ return;
193
+ }
194
+ // -- Normal mode (not typing) --
195
+ if (input === "x" || input === "q") {
196
+ onBackToApps();
197
+ return;
198
+ }
199
+ if (key.escape) {
200
+ sendMessage({ type: "aid", key: "B", fields: fieldValues });
201
+ return;
202
+ }
203
+ // Ctrl+Enter: ENTER_BACK
204
+ if (key.return && (key.ctrl || key.meta)) {
205
+ sendMessage({ type: "aid", key: "ENTER_BACK", fields: fieldValues });
206
+ return;
207
+ }
208
+ // Space: toggle checkbox when focused on non-editable field
209
+ if (input === " " && activeField && !isEditable) {
210
+ toggleActiveCheckbox();
211
+ return;
212
+ }
213
+ if (key.return) {
214
+ // Non-editable field focused: toggle checkbox
215
+ if (activeField && !isEditable) {
216
+ toggleActiveCheckbox();
217
+ return;
218
+ }
219
+ // Editable field focused: enter input mode
220
+ if (inputFields.length > 0 && isEditable) {
221
+ setInputMode(true);
222
+ return;
223
+ }
224
+ // Selectable action line: execute it
225
+ const line = selectableLines[selectedLineIndex];
226
+ if (line) {
227
+ applySelectedLine(line);
228
+ return;
229
+ }
230
+ // Default: send ENTER
231
+ sendMessage({ type: "aid", key: "ENTER", fields: fieldValues });
232
+ return;
233
+ }
234
+ // PageUp/PageDown: scroll list by a full page
235
+ if (key.pageUp || key.pageDown) {
236
+ const delta = key.pageDown ? 1 : -1;
237
+ const currentLine = selectableLines[selectedLineIndex];
238
+ const wId = currentLine ? lineWidgetIds?.[currentLine.index] : undefined;
239
+ if (wId && listScrollInfo?.[wId]) {
240
+ const info = listScrollInfo[wId];
241
+ const scrollAmount = delta * info.visibleRows;
242
+ const newOffset = Math.max(0, Math.min(info.offset + scrollAmount, info.totalRows - info.visibleRows));
243
+ if (newOffset !== info.offset) {
244
+ setListScrollOffsets((prev) => ({ ...prev, [wId]: newOffset }));
245
+ }
246
+ }
247
+ return;
248
+ }
249
+ // Arrow keys: map to date picker shortcuts (h/l/j/k) when available,
250
+ // otherwise cycle input fields or selectable lines
251
+ if (key.upArrow || key.downArrow || key.leftArrow || key.rightArrow) {
252
+ const arrowMap = {
253
+ // ink key names aren't available as event.key, so we check the boolean flags
254
+ };
255
+ let mapped;
256
+ if (key.leftArrow)
257
+ mapped = "h";
258
+ else if (key.rightArrow)
259
+ mapped = "l";
260
+ else if (key.upArrow)
261
+ mapped = "k";
262
+ else if (key.downArrow)
263
+ mapped = "j";
264
+ if (mapped) {
265
+ const shortcut = shortcutByKey.get(mapped);
266
+ if (shortcut) {
267
+ executeShortcut(shortcut);
268
+ return;
269
+ }
270
+ }
271
+ // Up/Down: cycle input fields if present, otherwise selectable lines
272
+ if (key.upArrow || key.downArrow) {
273
+ const delta = key.downArrow ? 1 : -1;
274
+ if (inputFields.length > 0) {
275
+ setActiveInputIndex((prev) => (prev + delta + inputFields.length) % inputFields.length);
276
+ }
277
+ else if (selectableLines.length > 0) {
278
+ const nextIdx = selectedLineIndex + delta;
279
+ // Check if at boundary and can scroll a list widget
280
+ if (nextIdx < 0 || nextIdx >= selectableLines.length) {
281
+ const currentLine = selectableLines[selectedLineIndex];
282
+ const wId = currentLine ? lineWidgetIds?.[currentLine.index] : undefined;
283
+ if (wId && listScrollInfo?.[wId]) {
284
+ const info = listScrollInfo[wId];
285
+ if (delta > 0 && info.offset + info.visibleRows < info.totalRows) {
286
+ setListScrollOffsets((prev) => ({ ...prev, [wId]: info.offset + 1 }));
287
+ return;
288
+ }
289
+ if (delta < 0 && info.offset > 0) {
290
+ setListScrollOffsets((prev) => ({ ...prev, [wId]: info.offset - 1 }));
291
+ return;
292
+ }
293
+ }
294
+ }
295
+ setSelectedLineIndex((prev) => (prev + delta + selectableLines.length) % selectableLines.length);
296
+ }
297
+ }
298
+ return;
299
+ }
300
+ if ((key.tab || input === "\t" || input === "i") && inputFields.length > 0) {
301
+ setInputMode(true);
302
+ return;
303
+ }
304
+ // Shortcut keys (checked before hardcoded aids so screen-defined hotkeys take priority)
305
+ if (input) {
306
+ const shortcut = shortcutByKey.get(input.toLowerCase());
307
+ if (shortcut) {
308
+ executeShortcut(shortcut);
309
+ return;
310
+ }
311
+ }
312
+ if (input === "b") {
313
+ sendMessage({ type: "aid", key: "B", fields: fieldValues });
314
+ return;
315
+ }
316
+ if (input === "c") {
317
+ sendMessage({ type: "aid", key: "C", fields: fieldValues });
318
+ return;
319
+ }
320
+ });
321
+ // Build a map of lineIndex -> fieldId for all input fields (including multi-line spans)
322
+ // NOTE: all useMemo/useEffect hooks must be before early returns
323
+ const fieldLineMap = useMemo(() => {
324
+ const map = new Map();
325
+ for (const field of inputFields) {
326
+ if (typeof field.lineIndex !== "number")
327
+ continue;
328
+ const rows = Math.max(1, Number(field.rows ?? 1));
329
+ const lineStep = Math.max(1, Number(field.lineStep ?? 1));
330
+ for (let r = 0; r < rows; r++) {
331
+ map.set(field.lineIndex + r * lineStep, {
332
+ fieldId: field.id,
333
+ rowOffset: r,
334
+ label: field.label || field.id,
335
+ rows,
336
+ });
337
+ }
338
+ }
339
+ return map;
340
+ }, [inputFields]);
341
+ // Build display lines with inline editing
342
+ const displayLines = useMemo(() => {
343
+ if (!screen)
344
+ return [];
345
+ const lines = [...(screen.lines || [])];
346
+ if (!inputMode || !activeField || !isEditable)
347
+ return lines;
348
+ const fieldId = activeField.id;
349
+ const editValue = fieldValues[fieldId] || "";
350
+ const label = activeField.label || activeField.id;
351
+ const labelPrefix = label ? `${label}: ` : "";
352
+ const indent = " ".repeat(labelPrefix.length);
353
+ const rows = Math.max(1, Number(activeField.rows ?? 1));
354
+ const lineStep = Math.max(1, Number(activeField.lineStep ?? 1));
355
+ if (typeof activeField.lineIndex !== "number")
356
+ return lines;
357
+ // Split the edited value into display rows
358
+ const editLines = editValue.split(/\r?\n/);
359
+ const paddedEditLines = editLines.slice(0, rows);
360
+ while (paddedEditLines.length < rows)
361
+ paddedEditLines.push("");
362
+ for (let r = 0; r < rows; r++) {
363
+ const lineIdx = activeField.lineIndex + r * lineStep;
364
+ if (lineIdx >= 0 && lineIdx < lines.length) {
365
+ const prefix = r === 0 ? labelPrefix : indent;
366
+ const text = paddedEditLines[r] || "";
367
+ // Show cursor on the last row with content, or last visible row if overflowing
368
+ const cursor = (r === editLines.length - 1 || (r === rows - 1 && editLines.length >= rows)) ? "\u2588" : "";
369
+ lines[lineIdx] = `${prefix}${text}${cursor}`;
370
+ }
371
+ }
372
+ return lines;
373
+ }, [screen, inputMode, activeField, isEditable, fieldValues, inputFields]);
374
+ // Hints for status bar
375
+ const hintText = useMemo(() => {
376
+ if (!activeField)
377
+ return "Enter=select, b=back, Tab/i=edit, arrows=nav, x=apps";
378
+ if (inputMode && isEditable) {
379
+ return isMultiLine
380
+ ? "Type to edit, Enter=newline, Tab=submit, Esc=cancel"
381
+ : "Type to edit, Enter=submit, Tab=submit, Esc=cancel";
382
+ }
383
+ if (isEditable)
384
+ return "Enter=edit, Tab=next field, arrows=nav, b=back, x=apps";
385
+ return "Enter/Space=toggle, arrows=nav, b=back, x=apps";
386
+ }, [activeField, inputMode, isEditable, isMultiLine]);
387
+ if (error) {
388
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: "red", children: ["Runner error: ", error] }), _jsx(Text, { children: "Press x to return to apps, or Ctrl+C to exit." })] }));
389
+ }
390
+ if (connecting || !screen) {
391
+ return (_jsx(Box, { flexDirection: "column", children: _jsx(Text, { color: "green", children: "Starting runner..." }) }));
392
+ }
393
+ const selectedLine = selectableLines[selectedLineIndex];
394
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: "green", children: ["RUNNER | project=", projectId, " | version=", versionId || "published", " | session=", sessionId || "-"] }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: displayLines.map((line, idx) => {
395
+ const match = selectableLines.findIndex((entry) => entry.index === idx);
396
+ const isSelectedActionLine = match >= 0 && selectableLines[match] === selectedLine;
397
+ const fieldInfo = fieldLineMap.get(idx);
398
+ const isActiveInputLine = fieldInfo != null && fieldInfo.fieldId === activeField?.id;
399
+ const isAnyInputLine = fieldInfo != null;
400
+ const lineColor = isSelectedActionLine
401
+ ? "green"
402
+ : isActiveInputLine
403
+ ? inputMode
404
+ ? "yellow"
405
+ : "cyan"
406
+ : isAnyInputLine
407
+ ? "cyan"
408
+ : undefined;
409
+ const lineBackground = isActiveInputLine && inputMode ? "blackBright" : undefined;
410
+ // Add spacing before standalone action buttons (like web's isButton marginTop)
411
+ const actionLine = match >= 0 ? selectableLines[match] : undefined;
412
+ const isButton = actionLine && !actionLine.fields;
413
+ const prevWidgetId = idx > 0 ? lineWidgetIds?.[idx - 1] : undefined;
414
+ const curWidgetId = lineWidgetIds?.[idx];
415
+ const needsTopSpace = isButton && prevWidgetId && prevWidgetId !== curWidgetId;
416
+ return (_jsx(Box, { flexDirection: "column", marginTop: needsTopSpace ? 1 : 0, children: _jsx(Text, { color: lineColor, backgroundColor: lineBackground, bold: isActiveInputLine, children: line }) }, `${idx}-${line}`));
417
+ }) }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "gray", children: screen.statusLine }), _jsx(Text, { color: "gray", children: hintText })] })] }));
418
+ };
419
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/ui/runner.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { TerminalActionLine, TerminalScreenPayload } from "@blo/shared/terminal";
2
+ import type { ListScrollInfo } from "@blo/shared/screen-runtime";
3
+ export declare const useRunnerRenderSource: (screen: TerminalScreenPayload | null, listScrollOffsets?: Record<string, number>) => {
4
+ screen: TerminalScreenPayload | null;
5
+ listScrollInfo: Record<string, ListScrollInfo> | undefined;
6
+ lineWidgetIds?: undefined;
7
+ } | {
8
+ screen: {
9
+ lines: string[];
10
+ actionLines: TerminalActionLine[];
11
+ inputFields: {
12
+ lineIndex: number | undefined;
13
+ id: string;
14
+ value: string;
15
+ maxLength: number;
16
+ label?: string;
17
+ rows?: number;
18
+ lineStep?: number;
19
+ action?: import("@blo/shared/screen-spec").ScreenAction;
20
+ }[];
21
+ inputField: {
22
+ id: string;
23
+ value: string;
24
+ maxLength: number;
25
+ label: string | undefined;
26
+ lineIndex: number | undefined;
27
+ rows: number | undefined;
28
+ action: import("@blo/shared/screen-spec").ScreenAction | undefined;
29
+ } | undefined;
30
+ shortcuts: import("@blo/shared/screen-runtime").RuntimeShortcut[];
31
+ statusLine: string;
32
+ type: "screen";
33
+ sessionId: string;
34
+ screen: string;
35
+ runnerVersion?: string;
36
+ terminalVersion?: string;
37
+ screenSpec?: import("@blo/shared/screen-spec").TerminalScreenSpecV2;
38
+ state?: {
39
+ activeScreenId: string;
40
+ fields: Record<string, string>;
41
+ fieldErrors?: Record<string, string>;
42
+ data: Record<string, unknown>;
43
+ statusLine: string;
44
+ };
45
+ actionId?: string;
46
+ clientSeq?: number;
47
+ revision?: number;
48
+ deduped?: boolean;
49
+ };
50
+ listScrollInfo: Record<string, ListScrollInfo> | undefined;
51
+ lineWidgetIds: (string | undefined)[];
52
+ };
53
+ //# sourceMappingURL=useRunnerRenderSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRunnerRenderSource.d.ts","sourceRoot":"","sources":["../../src/ui/useRunnerRenderSource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGjE,eAAO,MAAM,qBAAqB,GAChC,QAAQ,qBAAqB,GAAG,IAAI,EACpC,oBAAoB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;oBAGiD,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAuC5H,CAAC;;;;;;;;;;;CA8BX,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { useMemo } from "react";
2
+ import { collectScreenSpecContext } from "@blo/shared/screen-runtime";
3
+ export const useRunnerRenderSource = (screen, listScrollOffsets) => {
4
+ const result = useMemo(() => {
5
+ if (!screen?.screenSpec || !screen?.state)
6
+ return { screen, listScrollInfo: undefined };
7
+ const ctx = collectScreenSpecContext(screen.screenSpec, {
8
+ activeScreenId: screen.state.activeScreenId || screen.screen,
9
+ fields: screen.state.fields || {},
10
+ fieldErrors: screen.state.fieldErrors || {},
11
+ data: screen.state.data || {},
12
+ statusLine: screen.state.statusLine || screen.statusLine,
13
+ }, { hideHotkeys: false, listScrollOffsets });
14
+ const lines = ctx.lines.map((line) => line.text);
15
+ const lineWidgetIds = ctx.lines.map((line) => line.widgetId);
16
+ const fieldLineIndexById = new Map();
17
+ ctx.lines.forEach((line, idx) => {
18
+ if (line.fieldId && !fieldLineIndexById.has(line.fieldId)) {
19
+ fieldLineIndexById.set(line.fieldId, idx);
20
+ }
21
+ });
22
+ const actionLines = [];
23
+ ctx.lines.forEach((line, idx) => {
24
+ if (!(line.target || line.aidAlias || line.action))
25
+ return;
26
+ actionLines.push({
27
+ index: idx,
28
+ selectable: line.selectable,
29
+ target: line.target,
30
+ aidAlias: line.aidAlias,
31
+ action: line.action,
32
+ fields: line.fields,
33
+ });
34
+ });
35
+ const inputFields = ctx.inputFields.map((field) => ({
36
+ ...field,
37
+ lineIndex: fieldLineIndexById.get(field.id),
38
+ }));
39
+ const firstMatch = ctx.firstInput
40
+ ? inputFields.find((f) => f.id === ctx.firstInput?.id)
41
+ : undefined;
42
+ const inputField = ctx.firstInput
43
+ ? {
44
+ id: ctx.firstInput.id,
45
+ value: screen.state.fields?.[ctx.firstInput.id] || "",
46
+ maxLength: ctx.firstInput.maxLength,
47
+ label: firstMatch?.label,
48
+ lineIndex: fieldLineIndexById.get(ctx.firstInput.id),
49
+ rows: firstMatch?.rows,
50
+ action: firstMatch?.action,
51
+ }
52
+ : undefined;
53
+ return {
54
+ screen: {
55
+ ...screen,
56
+ lines,
57
+ actionLines,
58
+ inputFields,
59
+ inputField,
60
+ shortcuts: ctx.shortcuts,
61
+ statusLine: screen.state.statusLine || screen.statusLine,
62
+ },
63
+ listScrollInfo: ctx.listScrollInfo,
64
+ lineWidgetIds,
65
+ };
66
+ }, [screen, listScrollOffsets]);
67
+ return result;
68
+ };
69
+ //# sourceMappingURL=useRunnerRenderSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRunnerRenderSource.js","sourceRoot":"","sources":["../../src/ui/useRunnerRenderSource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { TerminalClientMessage, TerminalScreenPayload } from "@blo/shared/terminal";
2
+ type SessionArgs = {
3
+ projectId: string;
4
+ versionId?: string;
5
+ terminalUrl: string;
6
+ idToken: string;
7
+ };
8
+ export declare const useRunnerSession: ({ projectId, versionId, terminalUrl, idToken }: SessionArgs) => {
9
+ screen: TerminalScreenPayload | null;
10
+ error: string | null;
11
+ connecting: boolean;
12
+ sessionId: string | null;
13
+ sendMessage: (message: TerminalClientMessage) => void;
14
+ };
15
+ export {};
16
+ //# sourceMappingURL=useRunnerSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRunnerSession.d.ts","sourceRoot":"","sources":["../../src/ui/useRunnerSession.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EAEtB,MAAM,sBAAsB,CAAC;AAe9B,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,gDAAgD,WAAW;;;;;2BAwK5D,qBAAqB;CAcpD,CAAC"}