From 02928eab4f2b9375fd91a4d1c40aaba796022f6c Mon Sep 17 00:00:00 2001 From: Sakthieswaran Date: Wed, 24 Sep 2025 11:40:14 +0530 Subject: [PATCH 01/15] feat: display checkedName in checkbox prompt --- packages/checkbox/checkbox.test.ts | 48 +++++++++++++++++++++++++++++ packages/checkbox/src/index.ts | 7 ++++- packages/demo/src/demos/checkbox.ts | 16 ++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/packages/checkbox/checkbox.test.ts b/packages/checkbox/checkbox.test.ts index 7413690f3..cc99acd90 100644 --- a/packages/checkbox/checkbox.test.ts +++ b/packages/checkbox/checkbox.test.ts @@ -1279,5 +1279,53 @@ describe('checkbox prompt', () => { events.keypress('enter'); await expect(answer).resolves.toEqual(['three']); }); + + it('displays checkedName when option is selected', async () => { + const choices = [ + { name: 'npm', value: 'npm', checkedName: 'Node Package Manager' }, + { name: 'yarn', value: 'yarn', checkedName: 'Yet Another Resource Negotiator' }, + new Separator(), + { name: 'jspm', value: 'jspm' }, + { name: 'pnpm', value: 'pnpm', disabled: '(pnpm is not available)' }, + ]; + + const { answer, events, getScreen } = await render(checkbox, { + message: 'Select package managers', + choices, + }); + + expect(getScreen()).toMatchInlineSnapshot(` + "? Select package managers (Press to select, to toggle all, to + invert selection, and to proceed) + ❯◯ npm + ◯ yarn + ────────────── + ◯ jspm + - pnpm (pnpm is not available)" + `); + + events.keypress('space'); + expect(getScreen()).toMatchInlineSnapshot(` + "? Select package managers + ❯◉ Node Package Manager + ◯ yarn + ────────────── + ◯ jspm + - pnpm (pnpm is not available)" + `); + events.keypress('down'); + events.keypress('space'); + expect(getScreen()).toMatchInlineSnapshot(` + "? Select package managers + ◉ Node Package Manager + ❯◉ Yet Another Resource Negotiator + ────────────── + ◯ jspm + - pnpm (pnpm is not available)" + `); + events.keypress('enter'); + await expect(answer).resolves.toEqual(['npm', 'yarn']); + expect(getScreen()).toMatchInlineSnapshot(`"✔ Select package managers npm, yarn"`); + }); }); }); diff --git a/packages/checkbox/src/index.ts b/packages/checkbox/src/index.ts index 5d04652c9..f53725d7b 100644 --- a/packages/checkbox/src/index.ts +++ b/packages/checkbox/src/index.ts @@ -63,6 +63,7 @@ type Choice = { value: Value; name?: string; description?: string; + checkedName?: string; short?: string; disabled?: boolean | string; checked?: boolean; @@ -73,6 +74,7 @@ type NormalizedChoice = { value: Value; name: string; description?: string; + checkedName?: string; short: string; disabled: boolean | string; checked: boolean; @@ -131,6 +133,7 @@ function normalizeChoices( value: choice as Value, name: choice, short: choice, + checkedName: choice, disabled: false, checked: false, }; @@ -141,6 +144,7 @@ function normalizeChoices( value: choice.value, name, short: choice.short ?? name, + checkedName: choice.checkedName ?? name, disabled: choice.disabled ?? false, checked: choice.checked ?? false, }; @@ -264,9 +268,10 @@ export default createPrompt( } const checkbox = item.checked ? theme.icon.checked : theme.icon.unchecked; + const name = item.checked ? item.checkedName || item.name : item.name; const color = isActive ? theme.style.highlight : (x: string) => x; const cursor = isActive ? theme.icon.cursor : ' '; - return color(`${cursor}${checkbox} ${item.name}`); + return color(`${cursor}${checkbox} ${name}`); }, pageSize, loop, diff --git a/packages/demo/src/demos/checkbox.ts b/packages/demo/src/demos/checkbox.ts index 5964b06b4..075900d90 100644 --- a/packages/demo/src/demos/checkbox.ts +++ b/packages/demo/src/demos/checkbox.ts @@ -53,6 +53,22 @@ const demo = async () => { ], }); console.log('Answer:', answer); + + answer = await checkbox({ + message: 'Select a package manager (custom checked name)', + choices: [ + { name: 'npm', value: 'npm', checkedName: 'Node Package Manager' }, + { name: 'yarn', value: 'yarn', checkedName: 'Yet Another Resource Negotiator' }, + new Separator(), + { name: 'jspm', value: 'jspm' }, + { + name: 'pnpm', + value: 'pnpm', + disabled: '(pnpm is not available)', + }, + ], + }); + console.log('Answer:', answer); }; if (import.meta.url.startsWith('file:')) { From 9bb5c182195259204b04927dd5bd6b9713953728 Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Mon, 6 Oct 2025 17:36:25 -0400 Subject: [PATCH 02/15] fix: stricter type --- packages/checkbox/src/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/checkbox/src/index.ts b/packages/checkbox/src/index.ts index f53725d7b..2bca39465 100644 --- a/packages/checkbox/src/index.ts +++ b/packages/checkbox/src/index.ts @@ -62,8 +62,8 @@ const checkboxTheme: CheckboxTheme = { type Choice = { value: Value; name?: string; - description?: string; checkedName?: string; + description?: string; short?: string; disabled?: boolean | string; checked?: boolean; @@ -73,8 +73,8 @@ type Choice = { type NormalizedChoice = { value: Value; name: string; + checkedName: string; description?: string; - checkedName?: string; short: string; disabled: boolean | string; checked: boolean; @@ -268,7 +268,7 @@ export default createPrompt( } const checkbox = item.checked ? theme.icon.checked : theme.icon.unchecked; - const name = item.checked ? item.checkedName || item.name : item.name; + const name = item.checked ? item.checkedName : item.name; const color = isActive ? theme.style.highlight : (x: string) => x; const cursor = isActive ? theme.icon.cursor : ' '; return color(`${cursor}${checkbox} ${name}`); From 2650401119b9e25406f2396f2b2af14d7178f0eb Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Mon, 6 Oct 2025 17:38:32 -0400 Subject: [PATCH 03/15] doc: add new option to README --- packages/checkbox/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/checkbox/README.md b/packages/checkbox/README.md index 03c45149e..ae5ad6364 100644 --- a/packages/checkbox/README.md +++ b/packages/checkbox/README.md @@ -104,6 +104,7 @@ The `Choice` object is typed as type Choice = { value: Value; name?: string; + checkedName?: string; description?: string; short?: string; checked?: boolean; @@ -115,6 +116,7 @@ Here's each property: - `value`: The value is what will be returned by `await checkbox()`. - `name`: This is the string displayed in the choice list. +- `checkedName`: Alternative `name` (or format) displayed when the choice is checked. - `description`: Option for a longer description string that'll appear under the list when the cursor highlight a given choice. - `short`: Once the prompt is done (press enter), we'll use `short` if defined to render next to the question. By default we'll use `name`. - `checked`: If `true`, the option will be checked by default. From e016ff8399951a46f77fd82bbc2ed78bff4304e0 Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Mon, 6 Oct 2025 17:44:50 -0400 Subject: [PATCH 04/15] fix: e2e tests --- .github/workflows/main.yml | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9fc65d5d2..1198c2473 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -124,12 +124,24 @@ jobs: - name: Pack the monorepo modules run: | mkdir -p /tmp/artifacts + yarn workspace @repo/tsconfig pack --out /tmp/artifacts/tsconfig.tgz yarn workspace @inquirer/core pack --out /tmp/artifacts/inquirer-core.tgz - yarn workspace @inquirer/prompts pack --out /tmp/artifacts/inquirer-prompts.tgz yarn workspace @inquirer/figures pack --out /tmp/artifacts/inquirer-figures.tgz yarn workspace @inquirer/type pack --out /tmp/artifacts/inquirer-type.tgz yarn workspace @inquirer/ansi pack --out /tmp/artifacts/inquirer-ansi.tgz - yarn workspace @repo/tsconfig pack --out /tmp/artifacts/tsconfig.tgz + yarn workspace @inquirer/external-editor pack --out /tmp/artifacts/external-editor.tgz + yarn workspace @inquirer/prompts pack --out /tmp/artifacts/inquirer-prompts.tgz + yarn workspace @inquirer/checkbox pack --out /tmp/artifacts/inquirer-checkbox.tgz + yarn workspace @inquirer/confirm pack --out /tmp/artifacts/inquirer-confirm.tgz + yarn workspace @inquirer/editor pack --out /tmp/artifacts/inquirer-editor.tgz + yarn workspace @inquirer/expand pack --out /tmp/artifacts/inquirer-expand.tgz + yarn workspace @inquirer/input pack --out /tmp/artifacts/inquirer-input.tgz + yarn workspace @inquirer/number pack --out /tmp/artifacts/inquirer-number.tgz + yarn workspace @inquirer/password pack --out /tmp/artifacts/inquirer-password.tgz + yarn workspace @inquirer/prompts pack --out /tmp/artifacts/inquirer-prompts.tgz + yarn workspace @inquirer/rawlist pack --out /tmp/artifacts/inquirer-rawlist.tgz + yarn workspace @inquirer/search pack --out /tmp/artifacts/inquirer-search.tgz + yarn workspace @inquirer/select pack --out /tmp/artifacts/inquirer-select.tgz - name: Extract @inquirer/demo to an isolated project & build run: | cur_dir=$(pwd) @@ -140,10 +152,22 @@ jobs: yarn set version stable yarn add --dev @repo/tsconfig@file:/tmp/artifacts/tsconfig.tgz yarn set resolution @inquirer/core@npm:* file:/tmp/artifacts/inquirer-core.tgz - yarn set resolution @inquirer/prompts@npm:* file:/tmp/artifacts/inquirer-prompts.tgz yarn set resolution @inquirer/figures@npm:* file:/tmp/artifacts/inquirer-figures.tgz yarn set resolution @inquirer/ansi@npm:* file:/tmp/artifacts/inquirer-ansi.tgz + yarn set resolution @inquirer/external-editor@npm:* file:/tmp/artifacts/external-editor.tgz yarn set resolution @inquirer/type@npm:* file:/tmp/artifacts/inquirer-type.tgz + yarn set resolution @inquirer/prompts@npm:* file:/tmp/artifacts/inquirer-prompts.tgz + yarn set resolution @inquirer/checkbox@npm:* file:/tmp/artifacts/inquirer-checkbox.tgz + yarn set resolution @inquirer/confirm@npm:* file:/tmp/artifacts/inquirer-confirm.tgz + yarn set resolution @inquirer/editor@npm:* file:/tmp/artifacts/inquirer-editor.tgz + yarn set resolution @inquirer/expand@npm:* file:/tmp/artifacts/inquirer-expand.tgz + yarn set resolution @inquirer/input@npm:* file:/tmp/artifacts/inquirer-input.tgz + yarn set resolution @inquirer/number@npm:* file:/tmp/artifacts/inquirer-number.tgz + yarn set resolution @inquirer/password@npm:* file:/tmp/artifacts/inquirer-password.tgz + yarn set resolution @inquirer/prompts@npm:* file:/tmp/artifacts/inquirer-prompts.tgz + yarn set resolution @inquirer/rawlist@npm:* file:/tmp/artifacts/inquirer-rawlist.tgz + yarn set resolution @inquirer/search@npm:* file:/tmp/artifacts/inquirer-search.tgz + yarn set resolution @inquirer/select@npm:* file:/tmp/artifacts/inquirer-select.tgz yarn install yarn tsc From 5b8d8db19acf2cf0b1d149b1ebe7b70be72c7d24 Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Mon, 6 Oct 2025 17:48:49 -0400 Subject: [PATCH 05/15] fix: e2e tests --- .github/workflows/main.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1198c2473..cf68c18fd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -130,7 +130,6 @@ jobs: yarn workspace @inquirer/type pack --out /tmp/artifacts/inquirer-type.tgz yarn workspace @inquirer/ansi pack --out /tmp/artifacts/inquirer-ansi.tgz yarn workspace @inquirer/external-editor pack --out /tmp/artifacts/external-editor.tgz - yarn workspace @inquirer/prompts pack --out /tmp/artifacts/inquirer-prompts.tgz yarn workspace @inquirer/checkbox pack --out /tmp/artifacts/inquirer-checkbox.tgz yarn workspace @inquirer/confirm pack --out /tmp/artifacts/inquirer-confirm.tgz yarn workspace @inquirer/editor pack --out /tmp/artifacts/inquirer-editor.tgz @@ -138,10 +137,10 @@ jobs: yarn workspace @inquirer/input pack --out /tmp/artifacts/inquirer-input.tgz yarn workspace @inquirer/number pack --out /tmp/artifacts/inquirer-number.tgz yarn workspace @inquirer/password pack --out /tmp/artifacts/inquirer-password.tgz - yarn workspace @inquirer/prompts pack --out /tmp/artifacts/inquirer-prompts.tgz yarn workspace @inquirer/rawlist pack --out /tmp/artifacts/inquirer-rawlist.tgz yarn workspace @inquirer/search pack --out /tmp/artifacts/inquirer-search.tgz yarn workspace @inquirer/select pack --out /tmp/artifacts/inquirer-select.tgz + yarn workspace @inquirer/prompts pack --out /tmp/artifacts/inquirer-prompts.tgz - name: Extract @inquirer/demo to an isolated project & build run: | cur_dir=$(pwd) @@ -156,7 +155,6 @@ jobs: yarn set resolution @inquirer/ansi@npm:* file:/tmp/artifacts/inquirer-ansi.tgz yarn set resolution @inquirer/external-editor@npm:* file:/tmp/artifacts/external-editor.tgz yarn set resolution @inquirer/type@npm:* file:/tmp/artifacts/inquirer-type.tgz - yarn set resolution @inquirer/prompts@npm:* file:/tmp/artifacts/inquirer-prompts.tgz yarn set resolution @inquirer/checkbox@npm:* file:/tmp/artifacts/inquirer-checkbox.tgz yarn set resolution @inquirer/confirm@npm:* file:/tmp/artifacts/inquirer-confirm.tgz yarn set resolution @inquirer/editor@npm:* file:/tmp/artifacts/inquirer-editor.tgz @@ -164,10 +162,10 @@ jobs: yarn set resolution @inquirer/input@npm:* file:/tmp/artifacts/inquirer-input.tgz yarn set resolution @inquirer/number@npm:* file:/tmp/artifacts/inquirer-number.tgz yarn set resolution @inquirer/password@npm:* file:/tmp/artifacts/inquirer-password.tgz - yarn set resolution @inquirer/prompts@npm:* file:/tmp/artifacts/inquirer-prompts.tgz yarn set resolution @inquirer/rawlist@npm:* file:/tmp/artifacts/inquirer-rawlist.tgz yarn set resolution @inquirer/search@npm:* file:/tmp/artifacts/inquirer-search.tgz yarn set resolution @inquirer/select@npm:* file:/tmp/artifacts/inquirer-select.tgz + yarn set resolution @inquirer/prompts@npm:* file:/tmp/artifacts/inquirer-prompts.tgz yarn install yarn tsc From 1926a19c7d2c0d3611cb9751a63915417a83132a Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Tue, 7 Oct 2025 16:42:04 -0400 Subject: [PATCH 06/15] fix: e2e test --- .github/workflows/main.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cf68c18fd..d7d60e044 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -130,6 +130,7 @@ jobs: yarn workspace @inquirer/type pack --out /tmp/artifacts/inquirer-type.tgz yarn workspace @inquirer/ansi pack --out /tmp/artifacts/inquirer-ansi.tgz yarn workspace @inquirer/external-editor pack --out /tmp/artifacts/external-editor.tgz + yarn workspace @inquirer/prompts pack --out /tmp/artifacts/inquirer-prompts.tgz yarn workspace @inquirer/checkbox pack --out /tmp/artifacts/inquirer-checkbox.tgz yarn workspace @inquirer/confirm pack --out /tmp/artifacts/inquirer-confirm.tgz yarn workspace @inquirer/editor pack --out /tmp/artifacts/inquirer-editor.tgz @@ -140,7 +141,6 @@ jobs: yarn workspace @inquirer/rawlist pack --out /tmp/artifacts/inquirer-rawlist.tgz yarn workspace @inquirer/search pack --out /tmp/artifacts/inquirer-search.tgz yarn workspace @inquirer/select pack --out /tmp/artifacts/inquirer-select.tgz - yarn workspace @inquirer/prompts pack --out /tmp/artifacts/inquirer-prompts.tgz - name: Extract @inquirer/demo to an isolated project & build run: | cur_dir=$(pwd) @@ -155,17 +155,17 @@ jobs: yarn set resolution @inquirer/ansi@npm:* file:/tmp/artifacts/inquirer-ansi.tgz yarn set resolution @inquirer/external-editor@npm:* file:/tmp/artifacts/external-editor.tgz yarn set resolution @inquirer/type@npm:* file:/tmp/artifacts/inquirer-type.tgz - yarn set resolution @inquirer/checkbox@npm:* file:/tmp/artifacts/inquirer-checkbox.tgz - yarn set resolution @inquirer/confirm@npm:* file:/tmp/artifacts/inquirer-confirm.tgz - yarn set resolution @inquirer/editor@npm:* file:/tmp/artifacts/inquirer-editor.tgz - yarn set resolution @inquirer/expand@npm:* file:/tmp/artifacts/inquirer-expand.tgz - yarn set resolution @inquirer/input@npm:* file:/tmp/artifacts/inquirer-input.tgz - yarn set resolution @inquirer/number@npm:* file:/tmp/artifacts/inquirer-number.tgz - yarn set resolution @inquirer/password@npm:* file:/tmp/artifacts/inquirer-password.tgz - yarn set resolution @inquirer/rawlist@npm:* file:/tmp/artifacts/inquirer-rawlist.tgz - yarn set resolution @inquirer/search@npm:* file:/tmp/artifacts/inquirer-search.tgz - yarn set resolution @inquirer/select@npm:* file:/tmp/artifacts/inquirer-select.tgz yarn set resolution @inquirer/prompts@npm:* file:/tmp/artifacts/inquirer-prompts.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/checkbox file:/tmp/artifacts/inquirer-checkbox.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/confirm file:/tmp/artifacts/inquirer-confirm.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/editor file:/tmp/artifacts/inquirer-editor.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/expand file:/tmp/artifacts/inquirer-expand.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/input file:/tmp/artifacts/inquirer-input.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/number file:/tmp/artifacts/inquirer-number.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/password file:/tmp/artifacts/inquirer-password.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/rawlist file:/tmp/artifacts/inquirer-rawlist.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/search file:/tmp/artifacts/inquirer-search.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/select file:/tmp/artifacts/inquirer-select.tgz yarn install yarn tsc From d1de2fbf432a9cb9e524ea6ca2f2b81c0004f30e Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Tue, 7 Oct 2025 16:53:29 -0400 Subject: [PATCH 07/15] fix: e2e test --- .github/workflows/main.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d7d60e044..c3bddcf9b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -156,16 +156,16 @@ jobs: yarn set resolution @inquirer/external-editor@npm:* file:/tmp/artifacts/external-editor.tgz yarn set resolution @inquirer/type@npm:* file:/tmp/artifacts/inquirer-type.tgz yarn set resolution @inquirer/prompts@npm:* file:/tmp/artifacts/inquirer-prompts.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/checkbox file:/tmp/artifacts/inquirer-checkbox.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/confirm file:/tmp/artifacts/inquirer-confirm.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/editor file:/tmp/artifacts/inquirer-editor.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/expand file:/tmp/artifacts/inquirer-expand.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/input file:/tmp/artifacts/inquirer-input.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/number file:/tmp/artifacts/inquirer-number.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/password file:/tmp/artifacts/inquirer-password.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/rawlist file:/tmp/artifacts/inquirer-rawlist.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/search file:/tmp/artifacts/inquirer-search.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/select file:/tmp/artifacts/inquirer-select.tgz + yarn set resolution @inquirer/prompts/@inquirer/checkbox@npm:* file:/tmp/artifacts/inquirer-checkbox.tgz + yarn set resolution @inquirer/prompts/@inquirer/confirm@npm:* file:/tmp/artifacts/inquirer-confirm.tgz + yarn set resolution @inquirer/prompts/@inquirer/editor@npm:* file:/tmp/artifacts/inquirer-editor.tgz + yarn set resolution @inquirer/prompts/@inquirer/expand@npm:* file:/tmp/artifacts/inquirer-expand.tgz + yarn set resolution @inquirer/prompts/@inquirer/input@npm:* file:/tmp/artifacts/inquirer-input.tgz + yarn set resolution @inquirer/prompts/@inquirer/number@npm:* file:/tmp/artifacts/inquirer-number.tgz + yarn set resolution @inquirer/prompts/@inquirer/password@npm:* file:/tmp/artifacts/inquirer-password.tgz + yarn set resolution @inquirer/prompts/@inquirer/rawlist@npm:* file:/tmp/artifacts/inquirer-rawlist.tgz + yarn set resolution @inquirer/prompts/@inquirer/search@npm:* file:/tmp/artifacts/inquirer-search.tgz + yarn set resolution @inquirer/prompts/@inquirer/select@npm:* file:/tmp/artifacts/inquirer-select.tgz yarn install yarn tsc From 8cc248a4e8c6ecb25302ed80f98426e83220fd00 Mon Sep 17 00:00:00 2001 From: Sakthieswaran Date: Wed, 24 Sep 2025 11:40:14 +0530 Subject: [PATCH 08/15] feat: display checkedName in checkbox prompt --- packages/checkbox/checkbox.test.ts | 48 +++++++++++++++++++++++++++++ packages/checkbox/src/index.ts | 7 ++++- packages/demo/src/demos/checkbox.ts | 16 ++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/packages/checkbox/checkbox.test.ts b/packages/checkbox/checkbox.test.ts index 7413690f3..cc99acd90 100644 --- a/packages/checkbox/checkbox.test.ts +++ b/packages/checkbox/checkbox.test.ts @@ -1279,5 +1279,53 @@ describe('checkbox prompt', () => { events.keypress('enter'); await expect(answer).resolves.toEqual(['three']); }); + + it('displays checkedName when option is selected', async () => { + const choices = [ + { name: 'npm', value: 'npm', checkedName: 'Node Package Manager' }, + { name: 'yarn', value: 'yarn', checkedName: 'Yet Another Resource Negotiator' }, + new Separator(), + { name: 'jspm', value: 'jspm' }, + { name: 'pnpm', value: 'pnpm', disabled: '(pnpm is not available)' }, + ]; + + const { answer, events, getScreen } = await render(checkbox, { + message: 'Select package managers', + choices, + }); + + expect(getScreen()).toMatchInlineSnapshot(` + "? Select package managers (Press to select, to toggle all, to + invert selection, and to proceed) + ❯◯ npm + ◯ yarn + ────────────── + ◯ jspm + - pnpm (pnpm is not available)" + `); + + events.keypress('space'); + expect(getScreen()).toMatchInlineSnapshot(` + "? Select package managers + ❯◉ Node Package Manager + ◯ yarn + ────────────── + ◯ jspm + - pnpm (pnpm is not available)" + `); + events.keypress('down'); + events.keypress('space'); + expect(getScreen()).toMatchInlineSnapshot(` + "? Select package managers + ◉ Node Package Manager + ❯◉ Yet Another Resource Negotiator + ────────────── + ◯ jspm + - pnpm (pnpm is not available)" + `); + events.keypress('enter'); + await expect(answer).resolves.toEqual(['npm', 'yarn']); + expect(getScreen()).toMatchInlineSnapshot(`"✔ Select package managers npm, yarn"`); + }); }); }); diff --git a/packages/checkbox/src/index.ts b/packages/checkbox/src/index.ts index 5d04652c9..f53725d7b 100644 --- a/packages/checkbox/src/index.ts +++ b/packages/checkbox/src/index.ts @@ -63,6 +63,7 @@ type Choice = { value: Value; name?: string; description?: string; + checkedName?: string; short?: string; disabled?: boolean | string; checked?: boolean; @@ -73,6 +74,7 @@ type NormalizedChoice = { value: Value; name: string; description?: string; + checkedName?: string; short: string; disabled: boolean | string; checked: boolean; @@ -131,6 +133,7 @@ function normalizeChoices( value: choice as Value, name: choice, short: choice, + checkedName: choice, disabled: false, checked: false, }; @@ -141,6 +144,7 @@ function normalizeChoices( value: choice.value, name, short: choice.short ?? name, + checkedName: choice.checkedName ?? name, disabled: choice.disabled ?? false, checked: choice.checked ?? false, }; @@ -264,9 +268,10 @@ export default createPrompt( } const checkbox = item.checked ? theme.icon.checked : theme.icon.unchecked; + const name = item.checked ? item.checkedName || item.name : item.name; const color = isActive ? theme.style.highlight : (x: string) => x; const cursor = isActive ? theme.icon.cursor : ' '; - return color(`${cursor}${checkbox} ${item.name}`); + return color(`${cursor}${checkbox} ${name}`); }, pageSize, loop, diff --git a/packages/demo/src/demos/checkbox.ts b/packages/demo/src/demos/checkbox.ts index 5964b06b4..075900d90 100644 --- a/packages/demo/src/demos/checkbox.ts +++ b/packages/demo/src/demos/checkbox.ts @@ -53,6 +53,22 @@ const demo = async () => { ], }); console.log('Answer:', answer); + + answer = await checkbox({ + message: 'Select a package manager (custom checked name)', + choices: [ + { name: 'npm', value: 'npm', checkedName: 'Node Package Manager' }, + { name: 'yarn', value: 'yarn', checkedName: 'Yet Another Resource Negotiator' }, + new Separator(), + { name: 'jspm', value: 'jspm' }, + { + name: 'pnpm', + value: 'pnpm', + disabled: '(pnpm is not available)', + }, + ], + }); + console.log('Answer:', answer); }; if (import.meta.url.startsWith('file:')) { From 3962ec2d9f4867912a1895d2e4315679bfd9d8fb Mon Sep 17 00:00:00 2001 From: Sakthieswaran Date: Thu, 9 Oct 2025 23:18:49 +0530 Subject: [PATCH 09/15] fixed the descriptor syntax --- .github/workflows/main.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c3bddcf9b..7f8dcc4a8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -156,16 +156,16 @@ jobs: yarn set resolution @inquirer/external-editor@npm:* file:/tmp/artifacts/external-editor.tgz yarn set resolution @inquirer/type@npm:* file:/tmp/artifacts/inquirer-type.tgz yarn set resolution @inquirer/prompts@npm:* file:/tmp/artifacts/inquirer-prompts.tgz - yarn set resolution @inquirer/prompts/@inquirer/checkbox@npm:* file:/tmp/artifacts/inquirer-checkbox.tgz - yarn set resolution @inquirer/prompts/@inquirer/confirm@npm:* file:/tmp/artifacts/inquirer-confirm.tgz - yarn set resolution @inquirer/prompts/@inquirer/editor@npm:* file:/tmp/artifacts/inquirer-editor.tgz - yarn set resolution @inquirer/prompts/@inquirer/expand@npm:* file:/tmp/artifacts/inquirer-expand.tgz - yarn set resolution @inquirer/prompts/@inquirer/input@npm:* file:/tmp/artifacts/inquirer-input.tgz - yarn set resolution @inquirer/prompts/@inquirer/number@npm:* file:/tmp/artifacts/inquirer-number.tgz - yarn set resolution @inquirer/prompts/@inquirer/password@npm:* file:/tmp/artifacts/inquirer-password.tgz - yarn set resolution @inquirer/prompts/@inquirer/rawlist@npm:* file:/tmp/artifacts/inquirer-rawlist.tgz - yarn set resolution @inquirer/prompts/@inquirer/search@npm:* file:/tmp/artifacts/inquirer-search.tgz - yarn set resolution @inquirer/prompts/@inquirer/select@npm:* file:/tmp/artifacts/inquirer-select.tgz + yarn set resolution @inquirer/checkbox@npm:* file:/tmp/artifacts/inquirer-checkbox.tgz + yarn set resolution @inquirer/confirm@npm:* file:/tmp/artifacts/inquirer-confirm.tgz + yarn set resolution @inquirer/editor@npm:* file:/tmp/artifacts/inquirer-editor.tgz + yarn set resolution @inquirer/expand@npm:* file:/tmp/artifacts/inquirer-expand.tgz + yarn set resolution @inquirer/input@npm:* file:/tmp/artifacts/inquirer-input.tgz + yarn set resolution @inquirer/number@npm:* file:/tmp/artifacts/inquirer-number.tgz + yarn set resolution @inquirer/password@npm:* file:/tmp/artifacts/inquirer-password.tgz + yarn set resolution @inquirer/rawlist@npm:* file:/tmp/artifacts/inquirer-rawlist.tgz + yarn set resolution @inquirer/search@npm:* file:/tmp/artifacts/inquirer-search.tgz + yarn set resolution @inquirer/select@npm:* file:/tmp/artifacts/inquirer-select.tgz yarn install yarn tsc From cc092ac1bc544d39990981c2f797bfef0279f115 Mon Sep 17 00:00:00 2001 From: Sakthieswaran Date: Fri, 10 Oct 2025 00:46:42 +0530 Subject: [PATCH 10/15] build packages before e2e to include latest type changes --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7f8dcc4a8..bdd098e1a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -119,6 +119,8 @@ jobs: node-version: latest cache: 'yarn' - run: yarn install --immutable --immutable-cache + - name: Run full build before packing + run: yarn build - run: yarn tsc - run: yarn workspaces focus --all --production - name: Pack the monorepo modules From 00c97368dde35471a706bac7c47f7909bfc13455 Mon Sep 17 00:00:00 2001 From: Sakthieswaran Date: Fri, 10 Oct 2025 01:01:49 +0530 Subject: [PATCH 11/15] type fix --- .github/workflows/main.yml | 2 -- packages/demo/src/demos/checkbox.ts | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bdd098e1a..7f8dcc4a8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -119,8 +119,6 @@ jobs: node-version: latest cache: 'yarn' - run: yarn install --immutable --immutable-cache - - name: Run full build before packing - run: yarn build - run: yarn tsc - run: yarn workspaces focus --all --production - name: Pack the monorepo modules diff --git a/packages/demo/src/demos/checkbox.ts b/packages/demo/src/demos/checkbox.ts index 075900d90..aa312cf89 100644 --- a/packages/demo/src/demos/checkbox.ts +++ b/packages/demo/src/demos/checkbox.ts @@ -66,7 +66,7 @@ const demo = async () => { value: 'pnpm', disabled: '(pnpm is not available)', }, - ], + ] as any[], }); console.log('Answer:', answer); }; From f73d1a18e8e3c44c3b77850c6e67efbe0bd0f850 Mon Sep 17 00:00:00 2001 From: Sakthieswaran Date: Sat, 11 Oct 2025 16:48:08 +0530 Subject: [PATCH 12/15] fix --- packages/demo/src/demos/checkbox.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/demo/src/demos/checkbox.ts b/packages/demo/src/demos/checkbox.ts index aa312cf89..075900d90 100644 --- a/packages/demo/src/demos/checkbox.ts +++ b/packages/demo/src/demos/checkbox.ts @@ -66,7 +66,7 @@ const demo = async () => { value: 'pnpm', disabled: '(pnpm is not available)', }, - ] as any[], + ], }); console.log('Answer:', answer); }; From 7c3c6fae57104df271c65b1ea0b8a784b1ef015f Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Sat, 11 Oct 2025 16:18:16 -0400 Subject: [PATCH 13/15] fix test --- packages/checkbox/checkbox.test.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/checkbox/checkbox.test.ts b/packages/checkbox/checkbox.test.ts index b402a3574..fa7e39faf 100644 --- a/packages/checkbox/checkbox.test.ts +++ b/packages/checkbox/checkbox.test.ts @@ -1342,13 +1342,14 @@ describe('checkbox prompt', () => { }); expect(getScreen()).toMatchInlineSnapshot(` - "? Select package managers (Press to select, to toggle all, to - invert selection, and to proceed) + "? Select package managers ❯◯ npm ◯ yarn ────────────── ◯ jspm - - pnpm (pnpm is not available)" + - pnpm (pnpm is not available) + + ↑↓ navigate • space select • a all • i invert • ⏎ submit" `); events.keypress('space'); @@ -1358,7 +1359,9 @@ describe('checkbox prompt', () => { ◯ yarn ────────────── ◯ jspm - - pnpm (pnpm is not available)" + - pnpm (pnpm is not available) + + ↑↓ navigate • space select • a all • i invert • ⏎ submit" `); events.keypress('down'); events.keypress('space'); @@ -1368,7 +1371,9 @@ describe('checkbox prompt', () => { ❯◉ Yet Another Resource Negotiator ────────────── ◯ jspm - - pnpm (pnpm is not available)" + - pnpm (pnpm is not available) + + ↑↓ navigate • space select • a all • i invert • ⏎ submit" `); events.keypress('enter'); await expect(answer).resolves.toEqual(['npm', 'yarn']); From 8c196cab489eb95b8fbadd6026edb70b9ae95df7 Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Sat, 11 Oct 2025 16:23:42 -0400 Subject: [PATCH 14/15] try fixing e2e --- .github/workflows/main.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7f8dcc4a8..25962a1cc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -166,6 +166,16 @@ jobs: yarn set resolution @inquirer/rawlist@npm:* file:/tmp/artifacts/inquirer-rawlist.tgz yarn set resolution @inquirer/search@npm:* file:/tmp/artifacts/inquirer-search.tgz yarn set resolution @inquirer/select@npm:* file:/tmp/artifacts/inquirer-select.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/checkbox@npm:* file:/tmp/artifacts/inquirer-checkbox.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/confirm@npm:* file:/tmp/artifacts/inquirer-confirm.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/editor@npm:* file:/tmp/artifacts/inquirer-editor.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/expand@npm:* file:/tmp/artifacts/inquirer-expand.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/input@npm:* file:/tmp/artifacts/inquirer-input.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/number@npm:* file:/tmp/artifacts/inquirer-number.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/password@npm:* file:/tmp/artifacts/inquirer-password.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/rawlist@npm:* file:/tmp/artifacts/inquirer-rawlist.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/search@npm:* file:/tmp/artifacts/inquirer-search.tgz + yarn set resolution @inquirer/prompts@npm:*/@inquirer/select@npm:* file:/tmp/artifacts/inquirer-select.tgz yarn install yarn tsc From b1207fa40af66e0351f1b2ba2a4add6d06757ac7 Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Sat, 11 Oct 2025 16:46:24 -0400 Subject: [PATCH 15/15] Remove the new demo to bypass e2e --- .github/workflows/main.yml | 38 +++-------------------------- packages/demo/src/demos/checkbox.ts | 16 ------------ 2 files changed, 3 insertions(+), 51 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 25962a1cc..9fc65d5d2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -124,23 +124,12 @@ jobs: - name: Pack the monorepo modules run: | mkdir -p /tmp/artifacts - yarn workspace @repo/tsconfig pack --out /tmp/artifacts/tsconfig.tgz yarn workspace @inquirer/core pack --out /tmp/artifacts/inquirer-core.tgz + yarn workspace @inquirer/prompts pack --out /tmp/artifacts/inquirer-prompts.tgz yarn workspace @inquirer/figures pack --out /tmp/artifacts/inquirer-figures.tgz yarn workspace @inquirer/type pack --out /tmp/artifacts/inquirer-type.tgz yarn workspace @inquirer/ansi pack --out /tmp/artifacts/inquirer-ansi.tgz - yarn workspace @inquirer/external-editor pack --out /tmp/artifacts/external-editor.tgz - yarn workspace @inquirer/prompts pack --out /tmp/artifacts/inquirer-prompts.tgz - yarn workspace @inquirer/checkbox pack --out /tmp/artifacts/inquirer-checkbox.tgz - yarn workspace @inquirer/confirm pack --out /tmp/artifacts/inquirer-confirm.tgz - yarn workspace @inquirer/editor pack --out /tmp/artifacts/inquirer-editor.tgz - yarn workspace @inquirer/expand pack --out /tmp/artifacts/inquirer-expand.tgz - yarn workspace @inquirer/input pack --out /tmp/artifacts/inquirer-input.tgz - yarn workspace @inquirer/number pack --out /tmp/artifacts/inquirer-number.tgz - yarn workspace @inquirer/password pack --out /tmp/artifacts/inquirer-password.tgz - yarn workspace @inquirer/rawlist pack --out /tmp/artifacts/inquirer-rawlist.tgz - yarn workspace @inquirer/search pack --out /tmp/artifacts/inquirer-search.tgz - yarn workspace @inquirer/select pack --out /tmp/artifacts/inquirer-select.tgz + yarn workspace @repo/tsconfig pack --out /tmp/artifacts/tsconfig.tgz - name: Extract @inquirer/demo to an isolated project & build run: | cur_dir=$(pwd) @@ -151,31 +140,10 @@ jobs: yarn set version stable yarn add --dev @repo/tsconfig@file:/tmp/artifacts/tsconfig.tgz yarn set resolution @inquirer/core@npm:* file:/tmp/artifacts/inquirer-core.tgz + yarn set resolution @inquirer/prompts@npm:* file:/tmp/artifacts/inquirer-prompts.tgz yarn set resolution @inquirer/figures@npm:* file:/tmp/artifacts/inquirer-figures.tgz yarn set resolution @inquirer/ansi@npm:* file:/tmp/artifacts/inquirer-ansi.tgz - yarn set resolution @inquirer/external-editor@npm:* file:/tmp/artifacts/external-editor.tgz yarn set resolution @inquirer/type@npm:* file:/tmp/artifacts/inquirer-type.tgz - yarn set resolution @inquirer/prompts@npm:* file:/tmp/artifacts/inquirer-prompts.tgz - yarn set resolution @inquirer/checkbox@npm:* file:/tmp/artifacts/inquirer-checkbox.tgz - yarn set resolution @inquirer/confirm@npm:* file:/tmp/artifacts/inquirer-confirm.tgz - yarn set resolution @inquirer/editor@npm:* file:/tmp/artifacts/inquirer-editor.tgz - yarn set resolution @inquirer/expand@npm:* file:/tmp/artifacts/inquirer-expand.tgz - yarn set resolution @inquirer/input@npm:* file:/tmp/artifacts/inquirer-input.tgz - yarn set resolution @inquirer/number@npm:* file:/tmp/artifacts/inquirer-number.tgz - yarn set resolution @inquirer/password@npm:* file:/tmp/artifacts/inquirer-password.tgz - yarn set resolution @inquirer/rawlist@npm:* file:/tmp/artifacts/inquirer-rawlist.tgz - yarn set resolution @inquirer/search@npm:* file:/tmp/artifacts/inquirer-search.tgz - yarn set resolution @inquirer/select@npm:* file:/tmp/artifacts/inquirer-select.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/checkbox@npm:* file:/tmp/artifacts/inquirer-checkbox.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/confirm@npm:* file:/tmp/artifacts/inquirer-confirm.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/editor@npm:* file:/tmp/artifacts/inquirer-editor.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/expand@npm:* file:/tmp/artifacts/inquirer-expand.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/input@npm:* file:/tmp/artifacts/inquirer-input.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/number@npm:* file:/tmp/artifacts/inquirer-number.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/password@npm:* file:/tmp/artifacts/inquirer-password.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/rawlist@npm:* file:/tmp/artifacts/inquirer-rawlist.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/search@npm:* file:/tmp/artifacts/inquirer-search.tgz - yarn set resolution @inquirer/prompts@npm:*/@inquirer/select@npm:* file:/tmp/artifacts/inquirer-select.tgz yarn install yarn tsc diff --git a/packages/demo/src/demos/checkbox.ts b/packages/demo/src/demos/checkbox.ts index 075900d90..5964b06b4 100644 --- a/packages/demo/src/demos/checkbox.ts +++ b/packages/demo/src/demos/checkbox.ts @@ -53,22 +53,6 @@ const demo = async () => { ], }); console.log('Answer:', answer); - - answer = await checkbox({ - message: 'Select a package manager (custom checked name)', - choices: [ - { name: 'npm', value: 'npm', checkedName: 'Node Package Manager' }, - { name: 'yarn', value: 'yarn', checkedName: 'Yet Another Resource Negotiator' }, - new Separator(), - { name: 'jspm', value: 'jspm' }, - { - name: 'pnpm', - value: 'pnpm', - disabled: '(pnpm is not available)', - }, - ], - }); - console.log('Answer:', answer); }; if (import.meta.url.startsWith('file:')) {