@flyingrobots/bijou 1.3.0 → 1.6.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/dist/adapters/test/fixtures.d.ts +8 -0
- package/dist/adapters/test/fixtures.d.ts.map +1 -0
- package/dist/adapters/test/fixtures.js +18 -0
- package/dist/adapters/test/fixtures.js.map +1 -0
- package/dist/adapters/test/index.d.ts +4 -0
- package/dist/adapters/test/index.d.ts.map +1 -1
- package/dist/adapters/test/index.js +11 -2
- package/dist/adapters/test/index.js.map +1 -1
- package/dist/core/components/accordion.d.ts +2 -0
- package/dist/core/components/accordion.d.ts.map +1 -1
- package/dist/core/components/accordion.js +31 -27
- package/dist/core/components/accordion.js.map +1 -1
- package/dist/core/components/alert.d.ts +3 -0
- package/dist/core/components/alert.d.ts.map +1 -1
- package/dist/core/components/alert.js +18 -14
- package/dist/core/components/alert.js.map +1 -1
- package/dist/core/components/badge.d.ts.map +1 -1
- package/dist/core/components/badge.js +15 -19
- package/dist/core/components/badge.js.map +1 -1
- package/dist/core/components/box.d.ts.map +1 -1
- package/dist/core/components/box.js +34 -26
- package/dist/core/components/box.js.map +1 -1
- package/dist/core/components/breadcrumb.d.ts +3 -0
- package/dist/core/components/breadcrumb.d.ts.map +1 -1
- package/dist/core/components/breadcrumb.js +28 -22
- package/dist/core/components/breadcrumb.js.map +1 -1
- package/dist/core/components/dag-render.d.ts.map +1 -1
- package/dist/core/components/dag-render.js +14 -3
- package/dist/core/components/dag-render.js.map +1 -1
- package/dist/core/components/dag.d.ts.map +1 -1
- package/dist/core/components/dag.js +9 -9
- package/dist/core/components/dag.js.map +1 -1
- package/dist/core/components/enumerated-list.d.ts.map +1 -1
- package/dist/core/components/enumerated-list.js +56 -66
- package/dist/core/components/enumerated-list.js.map +1 -1
- package/dist/core/components/hyperlink.d.ts.map +1 -1
- package/dist/core/components/hyperlink.js +6 -12
- package/dist/core/components/hyperlink.js.map +1 -1
- package/dist/core/components/kbd.d.ts +3 -0
- package/dist/core/components/kbd.d.ts.map +1 -1
- package/dist/core/components/kbd.js +13 -8
- package/dist/core/components/kbd.js.map +1 -1
- package/dist/core/components/log.d.ts.map +1 -1
- package/dist/core/components/log.js +35 -31
- package/dist/core/components/log.js.map +1 -1
- package/dist/core/components/markdown-parse.d.ts +1 -2
- package/dist/core/components/markdown-parse.d.ts.map +1 -1
- package/dist/core/components/markdown-parse.js +9 -11
- package/dist/core/components/markdown-parse.js.map +1 -1
- package/dist/core/components/markdown-render.d.ts.map +1 -1
- package/dist/core/components/markdown-render.js +34 -43
- package/dist/core/components/markdown-render.js.map +1 -1
- package/dist/core/components/markdown.d.ts.map +1 -1
- package/dist/core/components/markdown.js +5 -4
- package/dist/core/components/markdown.js.map +1 -1
- package/dist/core/components/paginator.d.ts.map +1 -1
- package/dist/core/components/paginator.js +22 -20
- package/dist/core/components/paginator.js.map +1 -1
- package/dist/core/components/progress.d.ts.map +1 -1
- package/dist/core/components/progress.js +29 -30
- package/dist/core/components/progress.js.map +1 -1
- package/dist/core/components/separator.d.ts.map +1 -1
- package/dist/core/components/separator.js +24 -20
- package/dist/core/components/separator.js.map +1 -1
- package/dist/core/components/skeleton.d.ts.map +1 -1
- package/dist/core/components/skeleton.js +12 -10
- package/dist/core/components/skeleton.js.map +1 -1
- package/dist/core/components/spinner.d.ts.map +1 -1
- package/dist/core/components/spinner.js +8 -11
- package/dist/core/components/spinner.js.map +1 -1
- package/dist/core/components/stepper.d.ts +3 -0
- package/dist/core/components/stepper.d.ts.map +1 -1
- package/dist/core/components/stepper.js +35 -30
- package/dist/core/components/stepper.js.map +1 -1
- package/dist/core/components/table.d.ts +2 -0
- package/dist/core/components/table.d.ts.map +1 -1
- package/dist/core/components/table.js +54 -45
- package/dist/core/components/table.js.map +1 -1
- package/dist/core/components/tabs.d.ts +3 -0
- package/dist/core/components/tabs.d.ts.map +1 -1
- package/dist/core/components/tabs.js +40 -33
- package/dist/core/components/tabs.js.map +1 -1
- package/dist/core/components/timeline.d.ts.map +1 -1
- package/dist/core/components/timeline.js +23 -23
- package/dist/core/components/timeline.js.map +1 -1
- package/dist/core/components/tree.d.ts.map +1 -1
- package/dist/core/components/tree.js +10 -10
- package/dist/core/components/tree.js.map +1 -1
- package/dist/core/detect/tty.d.ts.map +1 -1
- package/dist/core/detect/tty.js +12 -6
- package/dist/core/detect/tty.js.map +1 -1
- package/dist/core/forms/confirm.d.ts.map +1 -1
- package/dist/core/forms/confirm.js +12 -14
- package/dist/core/forms/confirm.js.map +1 -1
- package/dist/core/forms/filter-interactive.d.ts.map +1 -1
- package/dist/core/forms/filter-interactive.js +33 -15
- package/dist/core/forms/filter-interactive.js.map +1 -1
- package/dist/core/forms/form-utils.js +2 -2
- package/dist/core/forms/form-utils.js.map +1 -1
- package/dist/core/forms/input.d.ts.map +1 -1
- package/dist/core/forms/input.js +17 -14
- package/dist/core/forms/input.js.map +1 -1
- package/dist/core/forms/multiselect.d.ts.map +1 -1
- package/dist/core/forms/multiselect.js +41 -12
- package/dist/core/forms/multiselect.js.map +1 -1
- package/dist/core/forms/select.d.ts +3 -0
- package/dist/core/forms/select.d.ts.map +1 -1
- package/dist/core/forms/select.js +20 -8
- package/dist/core/forms/select.js.map +1 -1
- package/dist/core/forms/textarea-editor.d.ts.map +1 -1
- package/dist/core/forms/textarea-editor.js +10 -6
- package/dist/core/forms/textarea-editor.js.map +1 -1
- package/dist/core/mode-render.d.ts +37 -0
- package/dist/core/mode-render.d.ts.map +1 -0
- package/dist/core/mode-render.js +42 -0
- package/dist/core/mode-render.js.map +1 -0
- package/dist/core/theme/accessors.d.ts +33 -0
- package/dist/core/theme/accessors.d.ts.map +1 -0
- package/dist/core/theme/accessors.js +21 -0
- package/dist/core/theme/accessors.js.map +1 -0
- package/dist/core/theme/index.d.ts +1 -0
- package/dist/core/theme/index.d.ts.map +1 -1
- package/dist/core/theme/index.js +2 -0
- package/dist/core/theme/index.js.map +1 -1
- package/dist/core/theme/resolve.d.ts.map +1 -1
- package/dist/core/theme/resolve.js +3 -0
- package/dist/core/theme/resolve.js.map +1 -1
- package/dist/core/theme/tokens.d.ts +16 -2
- package/dist/core/theme/tokens.d.ts.map +1 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +9 -1
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/ports/context.d.ts +13 -0
- package/dist/ports/context.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tty.d.ts","sourceRoot":"","sources":["../../../src/core/detect/tty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"tty.d.ts","sourceRoot":"","sources":["../../../src/core/detect/tty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAY1D;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,CAAC;AAE1E;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAclE;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3C;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,CAcpE"}
|
package/dist/core/detect/tty.js
CHANGED
|
@@ -8,6 +8,15 @@
|
|
|
8
8
|
* CI=true -> 'static' (single-frame rendering)
|
|
9
9
|
* stdout.isTTY -> 'interactive' (full experience)
|
|
10
10
|
*/
|
|
11
|
+
/**
|
|
12
|
+
* Build an environment variable accessor from a runtime port.
|
|
13
|
+
* Falls back to `process.env` when no runtime is provided.
|
|
14
|
+
*/
|
|
15
|
+
function envAccessor(runtime) {
|
|
16
|
+
return runtime
|
|
17
|
+
? (key) => runtime.env(key)
|
|
18
|
+
: (key) => process.env[key];
|
|
19
|
+
}
|
|
11
20
|
/**
|
|
12
21
|
* Detect the appropriate output mode for the current environment.
|
|
13
22
|
*
|
|
@@ -18,9 +27,7 @@
|
|
|
18
27
|
* @returns The detected {@link OutputMode}.
|
|
19
28
|
*/
|
|
20
29
|
export function detectOutputMode(runtime) {
|
|
21
|
-
const env = runtime
|
|
22
|
-
? (key) => runtime.env(key)
|
|
23
|
-
: (key) => process.env[key];
|
|
30
|
+
const env = envAccessor(runtime);
|
|
24
31
|
const stdoutIsTTY = runtime?.stdoutIsTTY ?? (process.stdout.isTTY === true);
|
|
25
32
|
if (env('BIJOU_ACCESSIBLE') === '1')
|
|
26
33
|
return 'accessible';
|
|
@@ -45,9 +52,8 @@ export function detectOutputMode(runtime) {
|
|
|
45
52
|
* @returns The detected {@link ColorScheme}. Defaults to `'dark'`.
|
|
46
53
|
*/
|
|
47
54
|
export function detectColorScheme(runtime) {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
: process.env['COLORFGBG'];
|
|
55
|
+
const env = envAccessor(runtime);
|
|
56
|
+
const raw = env('COLORFGBG');
|
|
51
57
|
if (raw === undefined)
|
|
52
58
|
return 'dark';
|
|
53
59
|
const parts = raw.split(';');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tty.js","sourceRoot":"","sources":["../../../src/core/detect/tty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"tty.js","sourceRoot":"","sources":["../../../src/core/detect/tty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;GAGG;AACH,SAAS,WAAW,CAAC,OAAqB;IACxC,OAAO,OAAO;QACZ,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QACnC,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAYD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAqB;IACpD,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAE5E,IAAI,GAAG,CAAC,kBAAkB,CAAC,KAAK,GAAG;QAAE,OAAO,YAAY,CAAC;IAEzD,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACjD,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1C,IAAI,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC;IAEhC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAE7C,OAAO,aAAa,CAAC;AACvB,CAAC;AAUD;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAqB;IACrD,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IAE7B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAErC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,kEAAkE;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IAEtC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,MAAM,CAAC;IAE7B,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../../src/core/forms/confirm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../../src/core/forms/confirm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAK3D;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,yDAAyD;IACzD,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBvE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveCtx } from '../resolve-ctx.js';
|
|
2
2
|
import { formatFormTitle } from './form-utils.js';
|
|
3
|
+
import { renderByMode } from '../mode-render.js';
|
|
3
4
|
/**
|
|
4
5
|
* Prompt the user with a yes/no confirmation question.
|
|
5
6
|
*
|
|
@@ -12,23 +13,20 @@ import { formatFormTitle } from './form-utils.js';
|
|
|
12
13
|
*/
|
|
13
14
|
export async function confirm(options) {
|
|
14
15
|
const ctx = resolveCtx(options.ctx);
|
|
15
|
-
const mode = ctx.mode;
|
|
16
16
|
const noColor = ctx.theme.noColor;
|
|
17
17
|
const defaultYes = options.defaultValue !== false;
|
|
18
18
|
const hint = defaultYes ? 'Y/n' : 'y/N';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
+ ctx.style.styled(ctx.theme.theme.semantic.muted, ` [${hint}]`) + ' ';
|
|
31
|
-
}
|
|
19
|
+
const prompt = renderByMode(ctx.mode, {
|
|
20
|
+
accessible: () => `${options.title} Type yes or no (default: ${defaultYes ? 'yes' : 'no'}): `,
|
|
21
|
+
pipe: () => `${options.title} ${hint}? `,
|
|
22
|
+
interactive: () => {
|
|
23
|
+
if (noColor) {
|
|
24
|
+
return `${formatFormTitle(options.title, ctx)} [${hint}] `;
|
|
25
|
+
}
|
|
26
|
+
return formatFormTitle(options.title, ctx)
|
|
27
|
+
+ ctx.style.styled(ctx.semantic('muted'), ` [${hint}]`) + ' ';
|
|
28
|
+
},
|
|
29
|
+
}, options);
|
|
32
30
|
const answer = await ctx.io.question(prompt);
|
|
33
31
|
const trimmed = answer.trim().toLowerCase();
|
|
34
32
|
if (trimmed === '')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../../src/core/forms/confirm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../../src/core/forms/confirm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUjD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAuB;IACnD,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC;IAClD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAExC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE;QACpC,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,6BAA6B,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK;QAC7F,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI;QACxC,WAAW,EAAE,GAAG,EAAE;YAChB,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;YAC7D,CAAC;YACD,OAAO,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;kBACtC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;QAClE,CAAC;KACF,EAAE,OAAO,CAAC,CAAC;IAEZ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-interactive.d.ts","sourceRoot":"","sources":["../../../src/core/forms/filter-interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,EAAE,CAAC,CAAC;IACT,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACvD,kCAAkC;IAClC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uGAAuG;IACvG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IAC5D,yDAAyD;IACzD,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAO/E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"filter-interactive.d.ts","sourceRoot":"","sources":["../../../src/core/forms/filter-interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,EAAE,CAAC,CAAC;IACT,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACvD,kCAAkC;IAClC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uGAAuG;IACvG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IAC5D,yDAAyD;IACzD,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAO/E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAkPnG"}
|
|
@@ -44,17 +44,20 @@ export async function interactiveFilter(options, ctx) {
|
|
|
44
44
|
throw new Error('[bijou] filter(): options array must contain at least one option');
|
|
45
45
|
}
|
|
46
46
|
const noColor = ctx.theme.noColor;
|
|
47
|
-
const t = ctx.theme;
|
|
48
47
|
const styledFn = createStyledFn(ctx);
|
|
49
48
|
const boldFn = createBoldFn(ctx);
|
|
50
49
|
const matchFn = options.match ?? defaultMatch;
|
|
51
|
-
const
|
|
50
|
+
const rawMaxVisible = options.maxVisible ?? 7;
|
|
51
|
+
const maxVisible = Number.isFinite(rawMaxVisible)
|
|
52
|
+
? Math.max(1, Math.floor(rawMaxVisible))
|
|
53
|
+
: 7;
|
|
52
54
|
const term = terminalRenderer(ctx);
|
|
53
55
|
let mode = 'normal';
|
|
54
56
|
let query = '';
|
|
55
57
|
let cursor = 0;
|
|
56
58
|
let scrollOffset = 0;
|
|
57
59
|
let filtered = [...options.options];
|
|
60
|
+
/** Re-run the match function against all options and clamp the cursor. */
|
|
58
61
|
function applyFilter() {
|
|
59
62
|
if (query === '') {
|
|
60
63
|
filtered = [...options.options];
|
|
@@ -65,6 +68,7 @@ export async function interactiveFilter(options, ctx) {
|
|
|
65
68
|
cursor = Math.min(cursor, Math.max(0, filtered.length - 1));
|
|
66
69
|
clampScroll();
|
|
67
70
|
}
|
|
71
|
+
/** Keep the scroll offset so the cursor stays within the visible window. */
|
|
68
72
|
function clampScroll() {
|
|
69
73
|
if (cursor < scrollOffset) {
|
|
70
74
|
scrollOffset = cursor;
|
|
@@ -74,19 +78,22 @@ export async function interactiveFilter(options, ctx) {
|
|
|
74
78
|
}
|
|
75
79
|
scrollOffset = Math.max(0, Math.min(scrollOffset, Math.max(0, filtered.length - maxVisible)));
|
|
76
80
|
}
|
|
81
|
+
/** Return the slice of filtered options currently visible on screen. */
|
|
77
82
|
function visibleItems() {
|
|
78
83
|
return filtered.slice(scrollOffset, scrollOffset + maxVisible);
|
|
79
84
|
}
|
|
85
|
+
/** Calculate the total terminal lines occupied by the current render. */
|
|
80
86
|
function renderLineCount() {
|
|
81
87
|
return 2 + Math.min(filtered.length, maxVisible) + 1; // header + filter input + items + status
|
|
82
88
|
}
|
|
89
|
+
/** Write the filter UI (title, input, option list, status) to the terminal. */
|
|
83
90
|
function render() {
|
|
84
91
|
const label = formatFormTitle(options.title, ctx);
|
|
85
92
|
term.writeLine(label);
|
|
86
93
|
// Filter input with mode indicator (: normal, / insert)
|
|
87
94
|
const indicator = mode === 'insert' ? '/' : ':';
|
|
88
|
-
const filterDisplay = query || (options.placeholder ? styledFn(
|
|
89
|
-
ctx.io.write(`\x1b[K ${styledFn(
|
|
95
|
+
const filterDisplay = query || (options.placeholder ? styledFn(ctx.semantic('muted'), options.placeholder) : '');
|
|
96
|
+
ctx.io.write(`\x1b[K ${styledFn(ctx.semantic('info'), indicator)} ${filterDisplay}\n`);
|
|
90
97
|
// Visible items
|
|
91
98
|
const vis = visibleItems();
|
|
92
99
|
for (let i = 0; i < vis.length; i++) {
|
|
@@ -94,7 +101,7 @@ export async function interactiveFilter(options, ctx) {
|
|
|
94
101
|
const isCurrent = scrollOffset + i === cursor;
|
|
95
102
|
const prefix = isCurrent ? '❯' : ' ';
|
|
96
103
|
if (isCurrent && !noColor) {
|
|
97
|
-
ctx.io.write(`\x1b[K ${styledFn(
|
|
104
|
+
ctx.io.write(`\x1b[K ${styledFn(ctx.semantic('info'), prefix)} ${boldFn(opt.label)}\n`);
|
|
98
105
|
}
|
|
99
106
|
else {
|
|
100
107
|
ctx.io.write(`\x1b[K ${prefix} ${opt.label}\n`);
|
|
@@ -102,23 +109,24 @@ export async function interactiveFilter(options, ctx) {
|
|
|
102
109
|
}
|
|
103
110
|
// Status
|
|
104
111
|
const status = `${filtered.length}/${options.options.length} items`;
|
|
105
|
-
ctx.io.write(`\x1b[K ${styledFn(
|
|
112
|
+
ctx.io.write(`\x1b[K ${styledFn(ctx.semantic('muted'), status)}\n`);
|
|
106
113
|
}
|
|
114
|
+
/** Move the cursor up to overwrite the previous render. */
|
|
107
115
|
function clearRender(lineCount) {
|
|
108
116
|
term.moveUp(lineCount);
|
|
109
117
|
}
|
|
118
|
+
/** Erase the previous render block and draw fresh output. */
|
|
110
119
|
function clearAndRerender(prevLineCount) {
|
|
111
120
|
clearRender(prevLineCount);
|
|
112
121
|
term.clearBlock(prevLineCount);
|
|
113
122
|
render();
|
|
114
123
|
}
|
|
115
|
-
|
|
124
|
+
/** Erase the full UI and print the final selection summary line. */
|
|
125
|
+
function cleanup(selectedLabel) {
|
|
116
126
|
const total = renderLineCount();
|
|
117
127
|
clearRender(total);
|
|
118
128
|
term.clearBlock(total);
|
|
119
|
-
const
|
|
120
|
-
const selectedLabel = selected ? selected.label : '(none)';
|
|
121
|
-
const label = formatFormTitle(options.title, ctx) + ' ' + styledFn(t.theme.semantic.info, selectedLabel);
|
|
129
|
+
const label = formatFormTitle(options.title, ctx) + ' ' + styledFn(ctx.semantic('info'), selectedLabel);
|
|
122
130
|
ctx.io.write(`\x1b[K${label}\n`);
|
|
123
131
|
term.showCursor();
|
|
124
132
|
}
|
|
@@ -127,6 +135,7 @@ export async function interactiveFilter(options, ctx) {
|
|
|
127
135
|
// navigateUp/navigateDown use clearRender + render instead of clearAndRerender
|
|
128
136
|
// because render() uses per-line \x1b[K (clear-to-end-of-line), making a full
|
|
129
137
|
// clearBlock unnecessary for a simple cursor position change.
|
|
138
|
+
/** Move the cursor up one item, wrapping around at the top. */
|
|
130
139
|
function navigateUp() {
|
|
131
140
|
if (filtered.length === 0)
|
|
132
141
|
return;
|
|
@@ -136,6 +145,7 @@ export async function interactiveFilter(options, ctx) {
|
|
|
136
145
|
clearRender(prevLineCount);
|
|
137
146
|
render();
|
|
138
147
|
}
|
|
148
|
+
/** Move the cursor down one item, wrapping around at the bottom. */
|
|
139
149
|
function navigateDown() {
|
|
140
150
|
if (filtered.length === 0)
|
|
141
151
|
return;
|
|
@@ -145,6 +155,7 @@ export async function interactiveFilter(options, ctx) {
|
|
|
145
155
|
clearRender(prevLineCount);
|
|
146
156
|
render();
|
|
147
157
|
}
|
|
158
|
+
/** Append a character to the query, re-filter, and re-render. */
|
|
148
159
|
function typeChar(ch) {
|
|
149
160
|
const prevLineCount = renderLineCount();
|
|
150
161
|
query += ch;
|
|
@@ -153,6 +164,7 @@ export async function interactiveFilter(options, ctx) {
|
|
|
153
164
|
}
|
|
154
165
|
// switchMode uses the same lightweight rerender pattern as navigate functions —
|
|
155
166
|
// only the mode indicator line changes, and render() clears each line with \x1b[K.
|
|
167
|
+
/** Toggle between normal and insert input modes and re-render. */
|
|
156
168
|
function switchMode(newMode) {
|
|
157
169
|
mode = newMode;
|
|
158
170
|
const prevLineCount = renderLineCount();
|
|
@@ -164,15 +176,19 @@ export async function interactiveFilter(options, ctx) {
|
|
|
164
176
|
// ── Mode-independent ───────────────────────────────────
|
|
165
177
|
if (key === '\r' || key === '\n') {
|
|
166
178
|
handle.dispose();
|
|
167
|
-
|
|
179
|
+
const selected = filtered[cursor];
|
|
180
|
+
const resolvedLabel = selected ? selected.label : '(none)';
|
|
181
|
+
cleanup(resolvedLabel);
|
|
168
182
|
resolve(filtered[cursor]?.value ?? options.defaultValue ?? options.options[0].value);
|
|
169
183
|
return;
|
|
170
184
|
}
|
|
171
185
|
if (key === '\x03') {
|
|
172
186
|
// Ctrl+C — cancel from either mode
|
|
187
|
+
const fallbackValue = options.defaultValue ?? options.options[0].value;
|
|
188
|
+
const fallbackOption = options.options.find((opt) => Object.is(opt.value, fallbackValue));
|
|
173
189
|
handle.dispose();
|
|
174
|
-
cleanup();
|
|
175
|
-
resolve(
|
|
190
|
+
cleanup(fallbackOption?.label ?? '(none)');
|
|
191
|
+
resolve(fallbackValue);
|
|
176
192
|
return;
|
|
177
193
|
}
|
|
178
194
|
// ── Normal mode ────────────────────────────────────────
|
|
@@ -182,9 +198,11 @@ export async function interactiveFilter(options, ctx) {
|
|
|
182
198
|
// TODO: bare \x1b may false-trigger on slow connections where escape
|
|
183
199
|
// sequences arrive as separate bytes. Timer-based disambiguation is a
|
|
184
200
|
// shared debt with textarea-editor.ts — unify in a future PR.
|
|
201
|
+
const fallbackValue = options.defaultValue ?? options.options[0].value;
|
|
202
|
+
const fallbackOption = options.options.find((opt) => Object.is(opt.value, fallbackValue));
|
|
185
203
|
handle.dispose();
|
|
186
|
-
cleanup();
|
|
187
|
-
resolve(
|
|
204
|
+
cleanup(fallbackOption?.label ?? '(none)');
|
|
205
|
+
resolve(fallbackValue);
|
|
188
206
|
return;
|
|
189
207
|
}
|
|
190
208
|
if (key === 'j' || key === '\x1b[B') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-interactive.js","sourceRoot":"","sources":["../../../src/core/forms/filter-interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAkClG;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAI,KAAa,EAAE,MAAuB;IACpE,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAI,OAAyB,EAAE,GAAiB;IACrF,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IAClC,MAAM,
|
|
1
|
+
{"version":3,"file":"filter-interactive.js","sourceRoot":"","sources":["../../../src/core/forms/filter-interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ export function formatFormTitle(title, ctx) {
|
|
|
21
21
|
if (ctx.theme.noColor || ctx.mode === 'accessible') {
|
|
22
22
|
return `? ${title}`;
|
|
23
23
|
}
|
|
24
|
-
return ctx.style.styled(ctx.
|
|
24
|
+
return ctx.style.styled(ctx.semantic('info'), '? ') + ctx.style.bold(title);
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Write a styled validation error message to the output.
|
|
@@ -37,7 +37,7 @@ export function writeValidationError(message, ctx) {
|
|
|
37
37
|
ctx.io.write(message + '\n');
|
|
38
38
|
}
|
|
39
39
|
else {
|
|
40
|
-
ctx.io.write(ctx.style.styled(ctx.
|
|
40
|
+
ctx.io.write(ctx.style.styled(ctx.semantic('error'), message) + '\n');
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-utils.js","sourceRoot":"","sources":["../../../src/core/forms/form-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,GAAiB;IAC9D,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACnD,OAAO,KAAK,KAAK,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"form-utils.js","sourceRoot":"","sources":["../../../src/core/forms/form-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/core/forms/input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/core/forms/input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAK3D;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,MAAM,CAAC;IACxD,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlE"}
|
package/dist/core/forms/input.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveCtx } from '../resolve-ctx.js';
|
|
2
2
|
import { formatFormTitle, writeValidationError } from './form-utils.js';
|
|
3
|
+
import { renderByMode } from '../mode-render.js';
|
|
3
4
|
/**
|
|
4
5
|
* Prompt the user for a single-line text input.
|
|
5
6
|
*
|
|
@@ -14,9 +15,8 @@ import { formatFormTitle, writeValidationError } from './form-utils.js';
|
|
|
14
15
|
*/
|
|
15
16
|
export async function input(options) {
|
|
16
17
|
const ctx = resolveCtx(options.ctx);
|
|
17
|
-
const mode = ctx.mode;
|
|
18
18
|
const noColor = ctx.theme.noColor;
|
|
19
|
-
const prompt = buildPrompt(options,
|
|
19
|
+
const prompt = buildPrompt(options, noColor, ctx);
|
|
20
20
|
const answer = await ctx.io.question(prompt);
|
|
21
21
|
const value = answer.trim() || options.defaultValue || '';
|
|
22
22
|
if (options.required && value === '') {
|
|
@@ -33,22 +33,25 @@ export async function input(options) {
|
|
|
33
33
|
/**
|
|
34
34
|
* Build a mode-appropriate prompt string for the input field.
|
|
35
35
|
*
|
|
36
|
+
* Mode is derived from `ctx`.
|
|
37
|
+
*
|
|
36
38
|
* @param options - Input field configuration.
|
|
37
|
-
* @param mode - Current output mode (interactive, accessible, pipe).
|
|
38
39
|
* @param noColor - Whether color output is disabled.
|
|
39
|
-
* @param ctx - Bijou context for styling.
|
|
40
|
+
* @param ctx - Bijou context for styling and mode.
|
|
40
41
|
* @returns Formatted prompt string.
|
|
41
42
|
*/
|
|
42
|
-
function buildPrompt(options,
|
|
43
|
+
function buildPrompt(options, noColor, ctx) {
|
|
43
44
|
const defaultHint = options.defaultValue ? ` (${options.defaultValue})` : '';
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
45
|
+
return renderByMode(ctx.mode, {
|
|
46
|
+
accessible: () => `Enter ${options.title.toLowerCase()}${defaultHint}: `,
|
|
47
|
+
pipe: () => `${options.title}${defaultHint}: `,
|
|
48
|
+
interactive: () => {
|
|
49
|
+
if (noColor)
|
|
50
|
+
return `${options.title}${defaultHint}: `;
|
|
51
|
+
const label = formatFormTitle(options.title, ctx);
|
|
52
|
+
const hint = options.defaultValue ? ctx.style.styled(ctx.semantic('muted'), ` (${options.defaultValue})`) : '';
|
|
53
|
+
return `${label}${hint} `;
|
|
54
|
+
},
|
|
55
|
+
}, options);
|
|
53
56
|
}
|
|
54
57
|
//# sourceMappingURL=input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/core/forms/input.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/core/forms/input.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAYjD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB;IAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IAElC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAE1D,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACrC,oBAAoB,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,MAAM,GAAqB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,WAAW,CAAC,OAAqB,EAAE,OAAgB,EAAE,GAAiB;IAC7E,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7E,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE;QAC5B,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,WAAW,IAAI;QACxE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,WAAW,IAAI;QAC9C,WAAW,EAAE,GAAG,EAAE;YAChB,IAAI,OAAO;gBAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,WAAW,IAAI,CAAC;YACvD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/G,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC;QAC5B,CAAC;KACF,EAAE,OAAO,CAAC,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiselect.d.ts","sourceRoot":"","sources":["../../../src/core/forms/multiselect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"multiselect.d.ts","sourceRoot":"","sources":["../../../src/core/forms/multiselect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAE,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IAC3E,yDAAyD;IACzD,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAU1F"}
|
|
@@ -49,47 +49,74 @@ async function numberedMultiselect(options, ctx) {
|
|
|
49
49
|
*/
|
|
50
50
|
async function interactiveMultiselect(options, ctx) {
|
|
51
51
|
const noColor = ctx.theme.noColor;
|
|
52
|
-
const t = ctx.theme;
|
|
53
52
|
const styledFn = createStyledFn(ctx);
|
|
54
53
|
const boldFn = createBoldFn(ctx);
|
|
55
54
|
const term = terminalRenderer(ctx);
|
|
55
|
+
const rawMaxVisible = options.maxVisible ?? 7;
|
|
56
|
+
const maxVisible = Number.isFinite(rawMaxVisible)
|
|
57
|
+
? Math.max(1, Math.floor(rawMaxVisible))
|
|
58
|
+
: 7;
|
|
56
59
|
let cursor = 0;
|
|
60
|
+
let scrollOffset = 0;
|
|
57
61
|
const selected = new Set();
|
|
62
|
+
/** Keep the scroll offset so the cursor stays within the visible window (cursor-relative then absolute bounds). */
|
|
63
|
+
function clampScroll() {
|
|
64
|
+
if (cursor < scrollOffset) {
|
|
65
|
+
scrollOffset = cursor;
|
|
66
|
+
}
|
|
67
|
+
else if (cursor >= scrollOffset + maxVisible) {
|
|
68
|
+
scrollOffset = cursor - maxVisible + 1;
|
|
69
|
+
}
|
|
70
|
+
scrollOffset = Math.max(0, Math.min(scrollOffset, Math.max(0, options.options.length - maxVisible)));
|
|
71
|
+
}
|
|
72
|
+
/** Return the slice of options currently visible on screen. */
|
|
73
|
+
function visibleOptions() {
|
|
74
|
+
return options.options.slice(scrollOffset, scrollOffset + maxVisible);
|
|
75
|
+
}
|
|
76
|
+
/** Calculate the total terminal lines occupied by the current render. */
|
|
77
|
+
function renderLineCount() {
|
|
78
|
+
return 1 + Math.min(options.options.length, maxVisible);
|
|
79
|
+
}
|
|
80
|
+
/** Write the multiselect UI (title, hint, option list) to the terminal. Hides the cursor as a side effect. */
|
|
58
81
|
function render() {
|
|
59
82
|
const label = formatFormTitle(options.title, ctx);
|
|
60
83
|
term.hideCursor();
|
|
61
|
-
const hint = styledFn(
|
|
84
|
+
const hint = styledFn(ctx.semantic('muted'), '(space to toggle, enter to confirm)');
|
|
62
85
|
term.writeLine(`${label} ${hint}`);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
const
|
|
86
|
+
const visible = visibleOptions();
|
|
87
|
+
for (let i = 0; i < visible.length; i++) {
|
|
88
|
+
const globalIndex = scrollOffset + i;
|
|
89
|
+
const opt = visible[i];
|
|
90
|
+
const isCurrent = globalIndex === cursor;
|
|
91
|
+
const isSelected = selected.has(globalIndex);
|
|
67
92
|
const prefix = isCurrent ? '\u276f' : ' ';
|
|
68
93
|
const check = isSelected ? '\u25c9' : '\u25cb';
|
|
69
94
|
const desc = opt.description
|
|
70
|
-
? styledFn(
|
|
95
|
+
? styledFn(ctx.semantic('muted'), ` \u2014 ${opt.description}`)
|
|
71
96
|
: '';
|
|
72
97
|
if (isCurrent && !noColor) {
|
|
73
|
-
ctx.io.write(`\x1b[K ${styledFn(
|
|
98
|
+
ctx.io.write(`\x1b[K ${styledFn(ctx.semantic('info'), prefix)} ${styledFn(ctx.semantic('info'), check)} ${boldFn(opt.label)}${desc}\n`);
|
|
74
99
|
}
|
|
75
100
|
else if (isSelected && !noColor) {
|
|
76
|
-
ctx.io.write(`\x1b[K ${prefix} ${styledFn(
|
|
101
|
+
ctx.io.write(`\x1b[K ${prefix} ${styledFn(ctx.status('success'), check)} ${opt.label}${desc}\n`);
|
|
77
102
|
}
|
|
78
103
|
else {
|
|
79
104
|
ctx.io.write(`\x1b[K ${prefix} ${check} ${opt.label}${desc}\n`);
|
|
80
105
|
}
|
|
81
106
|
}
|
|
82
107
|
}
|
|
108
|
+
/** Move the cursor up to overwrite the previous render. */
|
|
83
109
|
function clearRender() {
|
|
84
|
-
const totalLines =
|
|
110
|
+
const totalLines = renderLineCount();
|
|
85
111
|
term.moveUp(totalLines);
|
|
86
112
|
}
|
|
113
|
+
/** Erase the full UI, print the final selection summary line, and restore cursor visibility. */
|
|
87
114
|
function cleanup() {
|
|
88
115
|
clearRender();
|
|
89
|
-
const totalLines =
|
|
116
|
+
const totalLines = renderLineCount();
|
|
90
117
|
term.clearBlock(totalLines);
|
|
91
118
|
const selectedLabels = [...selected].sort().map((i) => options.options[i].label).join(', ');
|
|
92
|
-
const label = formatFormTitle(options.title, ctx) + ' ' + styledFn(
|
|
119
|
+
const label = formatFormTitle(options.title, ctx) + ' ' + styledFn(ctx.semantic('info'), selectedLabels);
|
|
93
120
|
ctx.io.write(`\x1b[K${label}\n`);
|
|
94
121
|
term.showCursor();
|
|
95
122
|
}
|
|
@@ -98,11 +125,13 @@ async function interactiveMultiselect(options, ctx) {
|
|
|
98
125
|
const handle = ctx.io.rawInput((key) => {
|
|
99
126
|
if (key === '\x1b[A' || key === 'k') {
|
|
100
127
|
cursor = (cursor - 1 + options.options.length) % options.options.length;
|
|
128
|
+
clampScroll();
|
|
101
129
|
clearRender();
|
|
102
130
|
render();
|
|
103
131
|
}
|
|
104
132
|
else if (key === '\x1b[B' || key === 'j') {
|
|
105
133
|
cursor = (cursor + 1) % options.options.length;
|
|
134
|
+
clampScroll();
|
|
106
135
|
clearRender();
|
|
107
136
|
render();
|
|
108
137
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiselect.js","sourceRoot":"","sources":["../../../src/core/forms/multiselect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAYvI;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAa,OAA8B;IAC1E,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5C,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpC,OAAO,YAAY,CACjB,GAAG,EACH,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC,CAAC,EACzC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,CACvC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,mBAAmB,CAAI,OAA8B,EAAE,GAAiB;IACrF,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACzD,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,YAAY;QACtC,CAAC,CAAC,qCAAqC;QACvC,CAAC,CAAC,mCAAmC,CAAC;IAExC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,sBAAsB,CAAI,OAA8B,EAAE,GAAiB;IACxF,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IAClC,MAAM,
|
|
1
|
+
{"version":3,"file":"multiselect.js","sourceRoot":"","sources":["../../../src/core/forms/multiselect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAYvI;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAa,OAA8B;IAC1E,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5C,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpC,OAAO,YAAY,CACjB,GAAG,EACH,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC,CAAC,EACzC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,CACvC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,mBAAmB,CAAI,OAA8B,EAAE,GAAiB;IACrF,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACzD,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,YAAY;QACtC,CAAC,CAAC,qCAAqC;QACvC,CAAC,CAAC,mCAAmC,CAAC;IAExC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,sBAAsB,CAAI,OAA8B,EAAE,GAAiB;IACxF,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC,CAAC;IAEN,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,mHAAmH;IACnH,SAAS,WAAW;QAClB,IAAI,MAAM,GAAG,YAAY,EAAE,CAAC;YAC1B,YAAY,GAAG,MAAM,CAAC;QACxB,CAAC;aAAM,IAAI,MAAM,IAAI,YAAY,GAAG,UAAU,EAAE,CAAC;YAC/C,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC;QACzC,CAAC;QACD,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,+DAA+D;IAC/D,SAAS,cAAc;QACrB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC;IACxE,CAAC;IAED,yEAAyE;IACzE,SAAS,eAAe;QACtB,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED,8GAA8G;IAC9G,SAAS,MAAM;QACb,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,qCAAqC,CAAC,CAAC;QACpF,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;QAEpC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YACxB,MAAM,SAAS,GAAG,WAAW,KAAK,MAAM,CAAC;YACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW;gBAC1B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,CAAC,WAAW,EAAE,CAAC;gBAC/D,CAAC,CAAC,EAAE,CAAC;YACP,IAAI,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1B,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAC3I,CAAC;iBAAM,IAAI,UAAU,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC;YACpG,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,MAAM,IAAI,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,SAAS,WAAW;QAClB,MAAM,UAAU,GAAG,eAAe,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,gGAAgG;IAChG,SAAS,OAAO;QACd,WAAW,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,eAAe,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5B,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7F,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC;QACzG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,CAAC;IAET,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAW,EAAE,EAAE;YAC7C,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBACpC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;gBACxE,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,CAAC;gBAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;iBAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC3C,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC/C,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,CAAC;gBAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;iBAAM,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;;oBAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7E,WAAW,EAAE,CAAC;gBAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;iBAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACxC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAAC,OAAO,EAAE,CAAC;gBAC5B,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,CAAC;iBAAM,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBAC5C,qEAAqE;gBACrE,sEAAsE;gBACtE,+BAA+B;gBAC/B,MAAM,CAAC,OAAO,EAAE,CAAC;gBAAC,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -15,6 +15,9 @@ export interface SelectOptions<T = string> extends SelectFieldOptions<T> {
|
|
|
15
15
|
* Uses arrow-key navigation in interactive TTY mode, or a numbered list
|
|
16
16
|
* fallback for pipe and accessible modes.
|
|
17
17
|
*
|
|
18
|
+
* If `defaultValue` does not match any option (via {@link Object.is}), the
|
|
19
|
+
* first option is used as the cancellation fallback.
|
|
20
|
+
*
|
|
18
21
|
* @typeParam T - Type of each option's value.
|
|
19
22
|
* @param options - Select field configuration.
|
|
20
23
|
* @returns The value of the selected option.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/core/forms/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM,CAAE,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IACtE,yDAAyD;IACzD,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/core/forms/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM,CAAE,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IACtE,yDAAyD;IACzD,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAY9E"}
|