@maizzle/framework 6.0.0-rc.9 → 6.0.1
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/README.md +3 -3
- package/bin/maizzle.mjs +1 -1
- package/dist/build.d.ts +38 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +234 -0
- package/dist/build.js.map +1 -0
- package/dist/components/Body.vue +32 -3
- package/dist/components/Button.vue +91 -62
- package/dist/components/CodeBlock.vue +6 -4
- package/dist/components/CodeInline.vue +77 -6
- package/dist/components/Column.vue +67 -31
- package/dist/components/Container.vue +73 -12
- package/dist/components/Font.vue +96 -0
- package/dist/components/Head.vue +1 -1
- package/dist/components/Heading.vue +1 -1
- package/dist/components/Hr.vue +33 -0
- package/dist/components/Html.vue +36 -3
- package/dist/components/Img.vue +332 -0
- package/dist/components/Layout.vue +73 -21
- package/dist/components/Link.vue +1 -1
- package/dist/components/Markdown.vue +51 -24
- package/dist/components/MarkdownLayout.vue +39 -0
- package/dist/components/NotPlaintext.vue +14 -0
- package/dist/components/Outlook.vue +38 -11
- package/dist/components/OutlookBg.vue +241 -0
- package/dist/components/Plaintext.vue +14 -0
- package/dist/components/Preheader.vue +35 -10
- package/dist/components/QrCode.vue +157 -0
- package/dist/components/Raw.vue +28 -0
- package/dist/components/Row.vue +115 -22
- package/dist/components/Section.vue +65 -26
- package/dist/components/Spacer.vue +35 -29
- package/dist/components/Tailwind.vue +45 -0
- package/dist/components/Text.vue +3 -3
- package/dist/components/Vml.vue +207 -94
- package/dist/components/utils.d.ts +53 -0
- package/dist/components/utils.d.ts.map +1 -0
- package/dist/components/utils.js +80 -0
- package/dist/components/utils.js.map +1 -0
- package/dist/components/utils.ts +102 -0
- package/dist/composables/defineConfig.d.ts +13 -0
- package/dist/composables/defineConfig.d.ts.map +1 -0
- package/dist/composables/{defineConfig.mjs → defineConfig.js} +7 -9
- package/dist/composables/defineConfig.js.map +1 -0
- package/dist/composables/renderContext.d.ts +37 -0
- package/dist/composables/renderContext.d.ts.map +1 -0
- package/dist/composables/renderContext.js +6 -0
- package/dist/composables/renderContext.js.map +1 -0
- package/dist/composables/useBaseUrl.d.ts +19 -0
- package/dist/composables/useBaseUrl.d.ts.map +1 -0
- package/dist/composables/useBaseUrl.js +26 -0
- package/dist/composables/useBaseUrl.js.map +1 -0
- package/dist/composables/useConfig.d.ts +16 -0
- package/dist/composables/useConfig.d.ts.map +1 -0
- package/dist/composables/useConfig.js +19 -0
- package/dist/composables/useConfig.js.map +1 -0
- package/dist/composables/useCurrentTemplate.d.ts +31 -0
- package/dist/composables/useCurrentTemplate.d.ts.map +1 -0
- package/dist/composables/useCurrentTemplate.js +42 -0
- package/dist/composables/useCurrentTemplate.js.map +1 -0
- package/dist/composables/{useDoctype.d.mts → useDoctype.d.ts} +1 -1
- package/dist/composables/useDoctype.d.ts.map +1 -0
- package/dist/composables/{useDoctype.mjs → useDoctype.js} +3 -4
- package/dist/composables/useDoctype.js.map +1 -0
- package/dist/composables/{useEvent.d.mts → useEvent.d.ts} +3 -3
- package/dist/composables/useEvent.d.ts.map +1 -0
- package/dist/composables/{useEvent.mjs → useEvent.js} +4 -5
- package/dist/composables/useEvent.js.map +1 -0
- package/dist/composables/useFont.d.ts +50 -0
- package/dist/composables/useFont.d.ts.map +1 -0
- package/dist/composables/useFont.js +92 -0
- package/dist/composables/useFont.js.map +1 -0
- package/dist/composables/useOutlookFallback.d.ts +21 -0
- package/dist/composables/useOutlookFallback.d.ts.map +1 -0
- package/dist/composables/useOutlookFallback.js +29 -0
- package/dist/composables/useOutlookFallback.js.map +1 -0
- package/dist/composables/useOutputPath.d.ts +17 -0
- package/dist/composables/useOutputPath.d.ts.map +1 -0
- package/dist/composables/useOutputPath.js +23 -0
- package/dist/composables/useOutputPath.js.map +1 -0
- package/dist/composables/{usePlaintext.d.mts → usePlaintext.d.ts} +3 -1
- package/dist/composables/usePlaintext.d.ts.map +1 -0
- package/dist/composables/{usePlaintext.mjs → usePlaintext.js} +4 -4
- package/dist/composables/usePlaintext.js.map +1 -0
- package/dist/composables/usePreheader.d.ts +25 -0
- package/dist/composables/usePreheader.d.ts.map +1 -0
- package/dist/composables/usePreheader.js +28 -0
- package/dist/composables/usePreheader.js.map +1 -0
- package/dist/composables/useTransformers.d.ts +34 -0
- package/dist/composables/useTransformers.d.ts.map +1 -0
- package/dist/composables/useTransformers.js +48 -0
- package/dist/composables/useTransformers.js.map +1 -0
- package/dist/composables/useUrlQuery.d.ts +19 -0
- package/dist/composables/useUrlQuery.d.ts.map +1 -0
- package/dist/composables/useUrlQuery.js +26 -0
- package/dist/composables/useUrlQuery.js.map +1 -0
- package/dist/config/{defaults.d.mts → defaults.d.ts} +2 -2
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/{defaults.mjs → defaults.js} +10 -6
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +33 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +136 -0
- package/dist/config/index.js.map +1 -0
- package/dist/events/{index.d.mts → index.d.ts} +35 -12
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/{index.mjs → index.js} +31 -13
- package/dist/events/index.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +40 -0
- package/dist/{plaintext.d.mts → plaintext.d.ts} +1 -1
- package/dist/plaintext.d.ts.map +1 -0
- package/dist/{plaintext.mjs → plaintext.js} +4 -5
- package/dist/plaintext.js.map +1 -0
- package/dist/{plugin.d.mts → plugin.d.ts} +2 -2
- package/dist/plugin.d.ts.map +1 -0
- package/dist/{plugin.mjs → plugin.js} +8 -9
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/postcss/{mergeMediaQueries.d.mts → mergeMediaQueries.d.ts} +2 -2
- package/dist/plugins/postcss/mergeMediaQueries.d.ts.map +1 -0
- package/dist/plugins/postcss/{mergeMediaQueries.mjs → mergeMediaQueries.js} +2 -3
- package/dist/plugins/postcss/mergeMediaQueries.js.map +1 -0
- package/dist/plugins/postcss/{pruneVars.d.mts → pruneVars.d.ts} +1 -1
- package/dist/plugins/postcss/pruneVars.d.ts.map +1 -0
- package/dist/plugins/postcss/{pruneVars.mjs → pruneVars.js} +2 -2
- package/dist/plugins/postcss/pruneVars.js.map +1 -0
- package/dist/plugins/postcss/quoteFontFamilies.d.ts +13 -0
- package/dist/plugins/postcss/quoteFontFamilies.d.ts.map +1 -0
- package/dist/plugins/postcss/quoteFontFamilies.js +84 -0
- package/dist/plugins/postcss/quoteFontFamilies.js.map +1 -0
- package/dist/plugins/postcss/{removeDeclarations.d.mts → removeDeclarations.d.ts} +1 -1
- package/dist/plugins/postcss/removeDeclarations.d.ts.map +1 -0
- package/dist/plugins/postcss/{removeDeclarations.mjs → removeDeclarations.js} +2 -2
- package/dist/plugins/postcss/removeDeclarations.js.map +1 -0
- package/dist/plugins/postcss/resolveMaizzleImports.d.ts +16 -0
- package/dist/plugins/postcss/resolveMaizzleImports.d.ts.map +1 -0
- package/dist/plugins/postcss/resolveMaizzleImports.js +39 -0
- package/dist/plugins/postcss/resolveMaizzleImports.js.map +1 -0
- package/dist/plugins/postcss/resolveProps.d.ts +8 -0
- package/dist/plugins/postcss/resolveProps.d.ts.map +1 -0
- package/dist/plugins/postcss/resolveProps.js +155 -0
- package/dist/plugins/postcss/resolveProps.js.map +1 -0
- package/dist/plugins/postcss/{tailwindCleanup.d.mts → tailwindCleanup.d.ts} +2 -2
- package/dist/plugins/postcss/tailwindCleanup.d.ts.map +1 -0
- package/dist/plugins/postcss/{tailwindCleanup.mjs → tailwindCleanup.js} +5 -3
- package/dist/plugins/postcss/tailwindCleanup.js.map +1 -0
- package/dist/prepare.d.ts +17 -0
- package/dist/prepare.d.ts.map +1 -0
- package/dist/prepare.js +44 -0
- package/dist/prepare.js.map +1 -0
- package/dist/render/active.d.ts +8 -0
- package/dist/render/active.d.ts.map +1 -0
- package/dist/render/active.js +12 -0
- package/dist/render/active.js.map +1 -0
- package/dist/render/buildTemplate.d.ts +49 -0
- package/dist/render/buildTemplate.d.ts.map +1 -0
- package/dist/render/buildTemplate.js +141 -0
- package/dist/render/buildTemplate.js.map +1 -0
- package/dist/render/{createRenderer.d.mts → createRenderer.d.ts} +14 -6
- package/dist/render/createRenderer.d.ts.map +1 -0
- package/dist/render/createRenderer.js +468 -0
- package/dist/render/createRenderer.js.map +1 -0
- package/dist/render/index.d.ts +18 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +59 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/injectFonts.d.ts +15 -0
- package/dist/render/injectFonts.d.ts.map +1 -0
- package/dist/render/injectFonts.js +45 -0
- package/dist/render/injectFonts.js.map +1 -0
- package/dist/render/parallel/buildWorker.d.ts +31 -0
- package/dist/render/parallel/buildWorker.d.ts.map +1 -0
- package/dist/render/parallel/buildWorker.js +66 -0
- package/dist/render/parallel/buildWorker.js.map +1 -0
- package/dist/render/parallel/worker.mjs +28 -0
- package/dist/render/plugins/codeBlockExtract.d.ts +14 -0
- package/dist/render/plugins/codeBlockExtract.d.ts.map +1 -0
- package/dist/render/plugins/codeBlockExtract.js +38 -0
- package/dist/render/plugins/codeBlockExtract.js.map +1 -0
- package/dist/render/plugins/markdownExtract.d.ts +12 -0
- package/dist/render/plugins/markdownExtract.d.ts.map +1 -0
- package/dist/render/plugins/markdownExtract.js +49 -0
- package/dist/render/plugins/markdownExtract.js.map +1 -0
- package/dist/render/plugins/rawExtract.d.ts +14 -0
- package/dist/render/plugins/rawExtract.d.ts.map +1 -0
- package/dist/render/plugins/rawExtract.js +34 -0
- package/dist/render/plugins/rawExtract.js.map +1 -0
- package/dist/render/plugins/rowSourceLocation.d.ts +18 -0
- package/dist/render/plugins/rowSourceLocation.d.ts.map +1 -0
- package/dist/render/plugins/rowSourceLocation.js +45 -0
- package/dist/render/plugins/rowSourceLocation.js.map +1 -0
- package/dist/{serve.d.mts → serve.d.ts} +5 -3
- package/dist/serve.d.ts.map +1 -0
- package/dist/{serve.mjs → serve.js} +248 -119
- package/dist/serve.js.map +1 -0
- package/dist/server/compatibility.d.ts +59 -0
- package/dist/server/compatibility.d.ts.map +1 -0
- package/dist/server/compatibility.js +959 -0
- package/dist/server/compatibility.js.map +1 -0
- package/dist/server/{email.d.mts → email.d.ts} +2 -2
- package/dist/server/email.d.ts.map +1 -0
- package/dist/server/{email.mjs → email.js} +2 -3
- package/dist/server/email.js.map +1 -0
- package/dist/server/linter.d.ts +20 -0
- package/dist/server/linter.d.ts.map +1 -0
- package/dist/server/linter.js +345 -0
- package/dist/server/linter.js.map +1 -0
- package/dist/server/sfc-utils.d.ts +21 -0
- package/dist/server/sfc-utils.d.ts.map +1 -0
- package/dist/server/sfc-utils.js +198 -0
- package/dist/server/sfc-utils.js.map +1 -0
- package/dist/server/ui/.vite/deps/@lucide_vue.js +44967 -0
- package/dist/server/ui/.vite/deps/@lucide_vue.js.map +1 -0
- package/dist/server/ui/.vite/deps/@vueuse_core.js +8155 -0
- package/dist/server/ui/.vite/deps/@vueuse_core.js.map +1 -0
- package/dist/server/ui/.vite/deps/@vueuse_shared.js +1859 -0
- package/dist/server/ui/.vite/deps/@vueuse_shared.js.map +1 -0
- package/dist/server/ui/.vite/deps/_metadata.json +78 -0
- package/dist/server/ui/.vite/deps/chunk-EAsCxrDo.js +14 -0
- package/dist/server/ui/.vite/deps/class-variance-authority.js +57 -0
- package/dist/server/ui/.vite/deps/class-variance-authority.js.map +1 -0
- package/dist/server/ui/.vite/deps/clsx.js +18 -0
- package/dist/server/ui/.vite/deps/clsx.js.map +1 -0
- package/dist/server/ui/.vite/deps/culori.js +4312 -0
- package/dist/server/ui/.vite/deps/culori.js.map +1 -0
- package/dist/server/ui/.vite/deps/package.json +3 -0
- package/dist/server/ui/.vite/deps/reka-ui.js +44464 -0
- package/dist/server/ui/.vite/deps/reka-ui.js.map +1 -0
- package/dist/server/ui/.vite/deps/tailwind-merge.js +3458 -0
- package/dist/server/ui/.vite/deps/tailwind-merge.js.map +1 -0
- package/dist/server/ui/.vite/deps/vue-router.js +6383 -0
- package/dist/server/ui/.vite/deps/vue-router.js.map +1 -0
- package/dist/server/ui/.vite/deps/vue.js +2 -0
- package/dist/server/ui/.vite/deps/vue.runtime.esm-bundler-N1X0OxKs.js +8800 -0
- package/dist/server/ui/.vite/deps/vue.runtime.esm-bundler-N1X0OxKs.js.map +1 -0
- package/dist/server/ui/App.vue +106 -66
- package/dist/server/ui/components/SidebarClose.vue +12 -0
- package/dist/server/ui/components/ui/checkbox/Checkbox.vue +1 -1
- package/dist/server/ui/components/ui/command/Command.vue +5 -1
- package/dist/server/ui/components/ui/command/CommandInput.vue +2 -2
- package/dist/server/ui/components/ui/dialog/DialogContent.vue +1 -1
- package/dist/server/ui/components/ui/dialog/DialogScrollContent.vue +1 -1
- package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +1 -1
- package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +1 -1
- package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +1 -1
- package/dist/server/ui/components/ui/input/Input.vue +1 -1
- package/dist/server/ui/components/ui/sheet/SheetContent.vue +1 -1
- package/dist/server/ui/components/ui/sidebar/SidebarTrigger.vue +2 -2
- package/dist/server/ui/components/ui/tags-input/TagsInputInput.vue +1 -1
- package/dist/server/ui/components/ui/tags-input/TagsInputItemDelete.vue +1 -1
- package/dist/server/ui/lib/emulated-dark-mode.ts +146 -0
- package/dist/server/ui/main.css +25 -0
- package/dist/server/ui/pages/Home.vue +1 -1
- package/dist/server/ui/pages/Preview.vue +377 -186
- package/dist/server/ui/vite-env.d.ts +1 -0
- package/dist/tests/render/_helpers.d.ts +6 -0
- package/dist/tests/render/_helpers.d.ts.map +1 -0
- package/dist/tests/render/_helpers.js +16 -0
- package/dist/tests/render/_helpers.js.map +1 -0
- package/dist/transformers/addAttributes.d.ts +42 -0
- package/dist/transformers/addAttributes.d.ts.map +1 -0
- package/dist/transformers/{addAttributes.mjs → addAttributes.js} +40 -24
- package/dist/transformers/addAttributes.js.map +1 -0
- package/dist/transformers/attributeToStyle.d.ts +38 -0
- package/dist/transformers/attributeToStyle.d.ts.map +1 -0
- package/dist/transformers/attributeToStyle.js +94 -0
- package/dist/transformers/attributeToStyle.js.map +1 -0
- package/dist/transformers/base.d.ts +71 -0
- package/dist/transformers/base.d.ts.map +1 -0
- package/dist/transformers/{base.mjs → base.js} +65 -40
- package/dist/transformers/base.js.map +1 -0
- package/dist/transformers/columnWidth.d.ts +31 -0
- package/dist/transformers/columnWidth.d.ts.map +1 -0
- package/dist/transformers/columnWidth.js +527 -0
- package/dist/transformers/columnWidth.js.map +1 -0
- package/dist/transformers/entities.d.ts +37 -0
- package/dist/transformers/entities.d.ts.map +1 -0
- package/dist/transformers/entities.js +74 -0
- package/dist/transformers/entities.js.map +1 -0
- package/dist/transformers/filters/{defaults.d.mts → defaults.d.ts} +1 -1
- package/dist/transformers/filters/defaults.d.ts.map +1 -0
- package/dist/transformers/filters/{defaults.mjs → defaults.js} +2 -2
- package/dist/transformers/filters/defaults.js.map +1 -0
- package/dist/transformers/filters/index.d.ts +43 -0
- package/dist/transformers/filters/index.d.ts.map +1 -0
- package/dist/transformers/filters/index.js +89 -0
- package/dist/transformers/filters/index.js.map +1 -0
- package/dist/transformers/format.d.ts +22 -0
- package/dist/transformers/format.d.ts.map +1 -0
- package/dist/transformers/format.js +30 -0
- package/dist/transformers/format.js.map +1 -0
- package/dist/transformers/imgWidth.d.ts +20 -0
- package/dist/transformers/imgWidth.d.ts.map +1 -0
- package/dist/transformers/imgWidth.js +76 -0
- package/dist/transformers/imgWidth.js.map +1 -0
- package/dist/transformers/{index.d.mts → index.d.ts} +4 -3
- package/dist/transformers/index.d.ts.map +1 -0
- package/dist/transformers/index.js +163 -0
- package/dist/transformers/index.js.map +1 -0
- package/dist/transformers/inlineCss.d.ts +85 -0
- package/dist/transformers/inlineCss.d.ts.map +1 -0
- package/dist/transformers/inlineCss.js +112 -0
- package/dist/transformers/inlineCss.js.map +1 -0
- package/dist/transformers/inlineLink.d.ts +35 -0
- package/dist/transformers/inlineLink.d.ts.map +1 -0
- package/dist/transformers/{inlineLink.mjs → inlineLink.js} +35 -11
- package/dist/transformers/inlineLink.js.map +1 -0
- package/dist/transformers/minify.d.ts +21 -0
- package/dist/transformers/minify.d.ts.map +1 -0
- package/dist/transformers/minify.js +25 -0
- package/dist/transformers/minify.js.map +1 -0
- package/dist/transformers/minifyCodeInline.d.ts +29 -0
- package/dist/transformers/minifyCodeInline.d.ts.map +1 -0
- package/dist/transformers/minifyCodeInline.js +36 -0
- package/dist/transformers/minifyCodeInline.js.map +1 -0
- package/dist/transformers/msoPlaceholders.d.ts +33 -0
- package/dist/transformers/msoPlaceholders.d.ts.map +1 -0
- package/dist/transformers/msoPlaceholders.js +114 -0
- package/dist/transformers/msoPlaceholders.js.map +1 -0
- package/dist/transformers/purgeCss.d.ts +43 -0
- package/dist/transformers/purgeCss.d.ts.map +1 -0
- package/dist/transformers/purgeCss.js +207 -0
- package/dist/transformers/purgeCss.js.map +1 -0
- package/dist/transformers/removeAttributes.d.ts +54 -0
- package/dist/transformers/removeAttributes.d.ts.map +1 -0
- package/dist/transformers/removeAttributes.js +72 -0
- package/dist/transformers/removeAttributes.js.map +1 -0
- package/dist/transformers/{replaceStrings.d.mts → replaceStrings.d.ts} +2 -2
- package/dist/transformers/replaceStrings.d.ts.map +1 -0
- package/dist/transformers/{replaceStrings.mjs → replaceStrings.js} +2 -2
- package/dist/transformers/replaceStrings.js.map +1 -0
- package/dist/transformers/safeSelectors.d.ts +37 -0
- package/dist/transformers/safeSelectors.d.ts.map +1 -0
- package/dist/transformers/{safeClassNames.mjs → safeSelectors.js} +40 -10
- package/dist/transformers/safeSelectors.js.map +1 -0
- package/dist/transformers/shorthandCss.d.ts +47 -0
- package/dist/transformers/shorthandCss.d.ts.map +1 -0
- package/dist/transformers/shorthandCss.js +92 -0
- package/dist/transformers/shorthandCss.js.map +1 -0
- package/dist/transformers/sixHex.d.ts +25 -0
- package/dist/transformers/sixHex.d.ts.map +1 -0
- package/dist/transformers/sixHex.js +42 -0
- package/dist/transformers/sixHex.js.map +1 -0
- package/dist/transformers/tailwindComponent.d.ts +16 -0
- package/dist/transformers/tailwindComponent.d.ts.map +1 -0
- package/dist/transformers/tailwindComponent.js +101 -0
- package/dist/transformers/tailwindComponent.js.map +1 -0
- package/dist/transformers/{tailwindcss.d.mts → tailwindcss.d.ts} +2 -2
- package/dist/transformers/tailwindcss.d.ts.map +1 -0
- package/dist/transformers/{tailwindcss.mjs → tailwindcss.js} +33 -74
- package/dist/transformers/tailwindcss.js.map +1 -0
- package/dist/transformers/urlQuery.d.ts +36 -0
- package/dist/transformers/urlQuery.d.ts.map +1 -0
- package/dist/transformers/urlQuery.js +77 -0
- package/dist/transformers/urlQuery.js.map +1 -0
- package/dist/types/{config.d.mts → config.d.ts} +231 -46
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +1 -0
- package/dist/utils/ast/index.d.ts +4 -0
- package/dist/utils/ast/index.js +4 -0
- package/dist/utils/ast/{parser.d.mts → parser.d.ts} +1 -1
- package/dist/utils/ast/parser.d.ts.map +1 -0
- package/dist/utils/ast/{parser.mjs → parser.js} +2 -3
- package/dist/utils/ast/parser.js.map +1 -0
- package/dist/utils/ast/{serializer.d.mts → serializer.d.ts} +1 -1
- package/dist/utils/ast/serializer.d.ts.map +1 -0
- package/dist/utils/ast/serializer.js +46 -0
- package/dist/utils/ast/serializer.js.map +1 -0
- package/dist/utils/ast/{walker.d.mts → walker.d.ts} +1 -1
- package/dist/utils/ast/walker.d.ts.map +1 -0
- package/dist/utils/ast/{walker.mjs → walker.js} +2 -2
- package/dist/utils/ast/walker.js.map +1 -0
- package/dist/utils/cloneConfig.d.ts +13 -0
- package/dist/utils/cloneConfig.d.ts.map +1 -0
- package/dist/utils/cloneConfig.js +21 -0
- package/dist/utils/cloneConfig.js.map +1 -0
- package/dist/utils/compileTailwindCss.d.ts +16 -0
- package/dist/utils/compileTailwindCss.d.ts.map +1 -0
- package/dist/utils/compileTailwindCss.js +55 -0
- package/dist/utils/compileTailwindCss.js.map +1 -0
- package/dist/utils/componentSources.d.ts +50 -0
- package/dist/utils/componentSources.d.ts.map +1 -0
- package/dist/utils/componentSources.js +50 -0
- package/dist/utils/componentSources.js.map +1 -0
- package/dist/utils/cssBox.d.ts +42 -0
- package/dist/utils/cssBox.d.ts.map +1 -0
- package/dist/utils/cssBox.js +151 -0
- package/dist/utils/cssBox.js.map +1 -0
- package/dist/utils/decodeStyleEntities.d.ts +15 -0
- package/dist/utils/decodeStyleEntities.d.ts.map +1 -0
- package/dist/utils/decodeStyleEntities.js +18 -0
- package/dist/utils/decodeStyleEntities.js.map +1 -0
- package/dist/utils/{detect.d.mts → detect.d.ts} +1 -1
- package/dist/utils/detect.d.ts.map +1 -0
- package/dist/utils/{detect.mjs → detect.js} +2 -3
- package/dist/utils/detect.js.map +1 -0
- package/dist/utils/output-markers.d.ts +29 -0
- package/dist/utils/output-markers.d.ts.map +1 -0
- package/dist/utils/output-markers.js +68 -0
- package/dist/utils/output-markers.js.map +1 -0
- package/dist/utils/{url.d.mts → url.d.ts} +1 -1
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/{url.mjs → url.js} +2 -3
- package/dist/utils/url.js.map +1 -0
- package/dist/utils/watchPaths.d.ts +11 -0
- package/dist/utils/watchPaths.d.ts.map +1 -0
- package/dist/utils/watchPaths.js +19 -0
- package/dist/utils/watchPaths.js.map +1 -0
- package/node_modules/@clack/core/CHANGELOG.md +44 -0
- package/node_modules/@clack/core/dist/index.d.mts +125 -5
- package/node_modules/@clack/core/dist/index.mjs +972 -11
- package/node_modules/@clack/core/package.json +6 -2
- package/node_modules/@clack/prompts/CHANGELOG.md +70 -0
- package/node_modules/@clack/prompts/README.md +129 -3
- package/node_modules/@clack/prompts/dist/index.d.mts +567 -33
- package/node_modules/@clack/prompts/dist/index.mjs +1378 -133
- package/node_modules/@clack/prompts/package.json +7 -4
- package/node_modules/fast-string-truncated-width/dist/index.js +36 -96
- package/node_modules/fast-string-truncated-width/dist/types.d.ts +0 -3
- package/node_modules/fast-string-truncated-width/dist/utils.d.ts +3 -3
- package/node_modules/fast-string-truncated-width/dist/utils.js +14 -9
- package/node_modules/fast-string-truncated-width/package.json +1 -1
- package/node_modules/fast-string-truncated-width/readme.md +2 -3
- package/node_modules/fast-string-width/package.json +2 -2
- package/node_modules/fast-string-width/readme.md +0 -3
- package/node_modules/fast-wrap-ansi/lib/main.js +4 -2
- package/node_modules/fast-wrap-ansi/package.json +11 -11
- package/node_modules/maizzle/README.md +24 -0
- package/node_modules/maizzle/dist/commands/make/component.mjs +1 -1
- package/node_modules/maizzle/dist/commands/make/config.mjs +8 -7
- package/node_modules/maizzle/dist/commands/make/layout.mjs +3 -3
- package/node_modules/maizzle/dist/commands/make/scaffold.mjs +1 -1
- package/node_modules/maizzle/dist/commands/make/stubs/Layout.vue +146 -0
- package/node_modules/maizzle/dist/commands/make/stubs/component.vue +2 -4
- package/node_modules/maizzle/dist/commands/make/stubs/config.ts +1 -5
- package/node_modules/maizzle/dist/commands/make/template.mjs +1 -1
- package/node_modules/maizzle/dist/commands/new.mjs +46 -135
- package/node_modules/maizzle/dist/index.d.mts +1 -0
- package/node_modules/maizzle/dist/index.mjs +30 -7
- package/node_modules/maizzle/package.json +5 -4
- package/node_modules/nypm/dist/cli.mjs +28 -5
- package/node_modules/nypm/dist/index.d.mts +0 -8
- package/node_modules/nypm/dist/index.mjs +27 -4
- package/node_modules/nypm/package.json +12 -12
- package/node_modules/tinyexec/README.md +9 -1
- package/node_modules/tinyexec/dist/main.d.mts +22 -7
- package/node_modules/tinyexec/dist/main.mjs +189 -491
- package/node_modules/tinyexec/package.json +14 -16
- package/package.json +38 -31
- package/dist/_virtual/_rolldown/runtime.mjs +0 -32
- package/dist/build.d.mts +0 -19
- package/dist/build.d.mts.map +0 -1
- package/dist/build.mjs +0 -141
- package/dist/build.mjs.map +0 -1
- package/dist/components/Divider.vue +0 -133
- package/dist/components/Image.vue +0 -70
- package/dist/components/Overlap.vue +0 -80
- package/dist/components/utils.d.mts +0 -5
- package/dist/components/utils.d.mts.map +0 -1
- package/dist/components/utils.mjs +0 -9
- package/dist/components/utils.mjs.map +0 -1
- package/dist/composables/defineConfig.d.mts +0 -14
- package/dist/composables/defineConfig.d.mts.map +0 -1
- package/dist/composables/defineConfig.mjs.map +0 -1
- package/dist/composables/renderContext.d.mts +0 -24
- package/dist/composables/renderContext.d.mts.map +0 -1
- package/dist/composables/renderContext.mjs +0 -6
- package/dist/composables/renderContext.mjs.map +0 -1
- package/dist/composables/useConfig.d.mts +0 -9
- package/dist/composables/useConfig.d.mts.map +0 -1
- package/dist/composables/useConfig.mjs +0 -13
- package/dist/composables/useConfig.mjs.map +0 -1
- package/dist/composables/useDoctype.d.mts.map +0 -1
- package/dist/composables/useDoctype.mjs.map +0 -1
- package/dist/composables/useEvent.d.mts.map +0 -1
- package/dist/composables/useEvent.mjs.map +0 -1
- package/dist/composables/usePlaintext.d.mts.map +0 -1
- package/dist/composables/usePlaintext.mjs.map +0 -1
- package/dist/composables/usePreviewText.d.mts +0 -24
- package/dist/composables/usePreviewText.d.mts.map +0 -1
- package/dist/composables/usePreviewText.mjs +0 -29
- package/dist/composables/usePreviewText.mjs.map +0 -1
- package/dist/config/defaults.d.mts.map +0 -1
- package/dist/config/defaults.mjs.map +0 -1
- package/dist/config/index.d.mts +0 -15
- package/dist/config/index.d.mts.map +0 -1
- package/dist/config/index.mjs +0 -71
- package/dist/config/index.mjs.map +0 -1
- package/dist/events/index.d.mts.map +0 -1
- package/dist/events/index.mjs.map +0 -1
- package/dist/index.d.mts +0 -31
- package/dist/index.mjs +0 -31
- package/dist/node_modules/picomatch/index.mjs +0 -13
- package/dist/node_modules/picomatch/index.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/constants.mjs +0 -174
- package/dist/node_modules/picomatch/lib/constants.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/parse.mjs +0 -1067
- package/dist/node_modules/picomatch/lib/parse.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/picomatch.mjs +0 -304
- package/dist/node_modules/picomatch/lib/picomatch.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/scan.mjs +0 -296
- package/dist/node_modules/picomatch/lib/scan.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/utils.mjs +0 -53
- package/dist/node_modules/picomatch/lib/utils.mjs.map +0 -1
- package/dist/plaintext.d.mts.map +0 -1
- package/dist/plaintext.mjs.map +0 -1
- package/dist/plugin.d.mts.map +0 -1
- package/dist/plugin.mjs.map +0 -1
- package/dist/plugins/postcss/mergeMediaQueries.d.mts.map +0 -1
- package/dist/plugins/postcss/mergeMediaQueries.mjs.map +0 -1
- package/dist/plugins/postcss/pruneVars.d.mts.map +0 -1
- package/dist/plugins/postcss/pruneVars.mjs.map +0 -1
- package/dist/plugins/postcss/removeDeclarations.d.mts.map +0 -1
- package/dist/plugins/postcss/removeDeclarations.mjs.map +0 -1
- package/dist/plugins/postcss/tailwindCleanup.d.mts.map +0 -1
- package/dist/plugins/postcss/tailwindCleanup.mjs.map +0 -1
- package/dist/render/createRenderer.d.mts.map +0 -1
- package/dist/render/createRenderer.mjs +0 -286
- package/dist/render/createRenderer.mjs.map +0 -1
- package/dist/render/index.d.mts +0 -26
- package/dist/render/index.d.mts.map +0 -1
- package/dist/render/index.mjs +0 -46
- package/dist/render/index.mjs.map +0 -1
- package/dist/serve.d.mts.map +0 -1
- package/dist/serve.mjs.map +0 -1
- package/dist/server/compatibility.d.mts +0 -5
- package/dist/server/compatibility.d.mts.map +0 -1
- package/dist/server/compatibility.mjs +0 -97
- package/dist/server/compatibility.mjs.map +0 -1
- package/dist/server/email.d.mts.map +0 -1
- package/dist/server/email.mjs.map +0 -1
- package/dist/server/linter.d.mts +0 -5
- package/dist/server/linter.d.mts.map +0 -1
- package/dist/server/linter.mjs +0 -189
- package/dist/server/linter.mjs.map +0 -1
- package/dist/transformers/addAttributes.d.mts +0 -32
- package/dist/transformers/addAttributes.d.mts.map +0 -1
- package/dist/transformers/addAttributes.mjs.map +0 -1
- package/dist/transformers/attributeToStyle.d.mts +0 -25
- package/dist/transformers/attributeToStyle.d.mts.map +0 -1
- package/dist/transformers/attributeToStyle.mjs +0 -80
- package/dist/transformers/attributeToStyle.mjs.map +0 -1
- package/dist/transformers/base.d.mts +0 -8
- package/dist/transformers/base.d.mts.map +0 -1
- package/dist/transformers/base.mjs.map +0 -1
- package/dist/transformers/entities.d.mts +0 -8
- package/dist/transformers/entities.d.mts.map +0 -1
- package/dist/transformers/entities.mjs +0 -41
- package/dist/transformers/entities.mjs.map +0 -1
- package/dist/transformers/filters/defaults.d.mts.map +0 -1
- package/dist/transformers/filters/defaults.mjs.map +0 -1
- package/dist/transformers/filters/index.d.mts +0 -22
- package/dist/transformers/filters/index.d.mts.map +0 -1
- package/dist/transformers/filters/index.mjs +0 -67
- package/dist/transformers/filters/index.mjs.map +0 -1
- package/dist/transformers/format.d.mts +0 -15
- package/dist/transformers/format.d.mts.map +0 -1
- package/dist/transformers/format.mjs +0 -26
- package/dist/transformers/format.mjs.map +0 -1
- package/dist/transformers/index.d.mts.map +0 -1
- package/dist/transformers/index.mjs +0 -81
- package/dist/transformers/index.mjs.map +0 -1
- package/dist/transformers/inlineCSS.d.mts +0 -17
- package/dist/transformers/inlineCSS.d.mts.map +0 -1
- package/dist/transformers/inlineCSS.mjs +0 -70
- package/dist/transformers/inlineCSS.mjs.map +0 -1
- package/dist/transformers/inlineLink.d.mts +0 -14
- package/dist/transformers/inlineLink.d.mts.map +0 -1
- package/dist/transformers/inlineLink.mjs.map +0 -1
- package/dist/transformers/minify.d.mts +0 -17
- package/dist/transformers/minify.d.mts.map +0 -1
- package/dist/transformers/minify.mjs +0 -24
- package/dist/transformers/minify.mjs.map +0 -1
- package/dist/transformers/purgeCSS.d.mts +0 -23
- package/dist/transformers/purgeCSS.d.mts.map +0 -1
- package/dist/transformers/purgeCSS.mjs +0 -132
- package/dist/transformers/purgeCSS.mjs.map +0 -1
- package/dist/transformers/removeAttributes.d.mts +0 -31
- package/dist/transformers/removeAttributes.d.mts.map +0 -1
- package/dist/transformers/removeAttributes.mjs +0 -63
- package/dist/transformers/removeAttributes.mjs.map +0 -1
- package/dist/transformers/replaceStrings.d.mts.map +0 -1
- package/dist/transformers/replaceStrings.mjs.map +0 -1
- package/dist/transformers/safeClassNames.d.mts +0 -22
- package/dist/transformers/safeClassNames.d.mts.map +0 -1
- package/dist/transformers/safeClassNames.mjs.map +0 -1
- package/dist/transformers/shorthandCSS.d.mts +0 -24
- package/dist/transformers/shorthandCSS.d.mts.map +0 -1
- package/dist/transformers/shorthandCSS.mjs +0 -48
- package/dist/transformers/shorthandCSS.mjs.map +0 -1
- package/dist/transformers/sixHex.d.mts +0 -16
- package/dist/transformers/sixHex.d.mts.map +0 -1
- package/dist/transformers/sixHex.mjs +0 -30
- package/dist/transformers/sixHex.mjs.map +0 -1
- package/dist/transformers/tailwindcss.d.mts.map +0 -1
- package/dist/transformers/tailwindcss.mjs.map +0 -1
- package/dist/transformers/urlQuery.d.mts +0 -24
- package/dist/transformers/urlQuery.d.mts.map +0 -1
- package/dist/transformers/urlQuery.mjs +0 -65
- package/dist/transformers/urlQuery.mjs.map +0 -1
- package/dist/types/config.d.mts.map +0 -1
- package/dist/types/config.mjs +0 -1
- package/dist/types/index.d.mts +0 -2
- package/dist/types/index.mjs +0 -1
- package/dist/utils/ast/index.d.mts +0 -4
- package/dist/utils/ast/index.mjs +0 -5
- package/dist/utils/ast/parser.d.mts.map +0 -1
- package/dist/utils/ast/parser.mjs.map +0 -1
- package/dist/utils/ast/serializer.d.mts.map +0 -1
- package/dist/utils/ast/serializer.mjs +0 -37
- package/dist/utils/ast/serializer.mjs.map +0 -1
- package/dist/utils/ast/walker.d.mts.map +0 -1
- package/dist/utils/ast/walker.mjs.map +0 -1
- package/dist/utils/detect.d.mts.map +0 -1
- package/dist/utils/detect.mjs.map +0 -1
- package/dist/utils/url.d.mts.map +0 -1
- package/dist/utils/url.mjs.map +0 -1
- package/node_modules/@clack/core/dist/index.mjs.map +0 -1
- package/node_modules/@clack/prompts/dist/index.mjs.map +0 -1
- package/node_modules/fast-wrap-ansi/lib/main.js.map +0 -1
- package/node_modules/maizzle/dist/commands/make/stubs/layout.vue +0 -39
- package/node_modules/tinyexec/dist/LICENSES.txt +0 -83
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/utils/cursor.ts","../src/utils/settings.ts","../src/utils/string.ts","../src/utils/index.ts","../src/prompts/prompt.ts","../src/prompts/autocomplete.ts","../src/prompts/confirm.ts","../src/prompts/date.ts","../src/prompts/group-multiselect.ts","../src/prompts/multi-select.ts","../src/prompts/password.ts","../src/prompts/select.ts","../src/prompts/select-key.ts","../src/prompts/text.ts"],"sourcesContent":["export function findCursor<T extends { disabled?: boolean }>(\n\tcursor: number,\n\tdelta: number,\n\toptions: T[]\n) {\n\tconst hasEnabledOptions = options.some((opt) => !opt.disabled);\n\tif (!hasEnabledOptions) {\n\t\treturn cursor;\n\t}\n\tconst newCursor = cursor + delta;\n\tconst maxCursor = Math.max(options.length - 1, 0);\n\tconst clampedCursor = newCursor < 0 ? maxCursor : newCursor > maxCursor ? 0 : newCursor;\n\tconst newOption = options[clampedCursor];\n\tif (newOption.disabled) {\n\t\treturn findCursor(clampedCursor, delta < 0 ? -1 : 1, options);\n\t}\n\treturn clampedCursor;\n}\n","const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\nconst DEFAULT_MONTH_NAMES = [\n\t'January',\n\t'February',\n\t'March',\n\t'April',\n\t'May',\n\t'June',\n\t'July',\n\t'August',\n\t'September',\n\t'October',\n\t'November',\n\t'December',\n];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set<Action>;\n\taliases: Map<string, Action>;\n\tmessages: {\n\t\tcancel: string;\n\t\terror: string;\n\t};\n\twithGuide: boolean;\n\tdate: {\n\t\tmonthNames: string[];\n\t\tmessages: {\n\t\t\tinvalidMonth: string;\n\t\t\trequired: string;\n\t\t\tinvalidDay: (days: number, month: string) => string;\n\t\t\tafterMin: (min: Date) => string;\n\t\t\tbeforeMax: (max: Date) => string;\n\t\t};\n\t};\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map<string, Action>([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n\tmessages: {\n\t\tcancel: 'Canceled',\n\t\terror: 'Something went wrong',\n\t},\n\twithGuide: true,\n\tdate: {\n\t\tmonthNames: [...DEFAULT_MONTH_NAMES],\n\t\tmessages: {\n\t\t\trequired: 'Please enter a valid date',\n\t\t\tinvalidMonth: 'There are only 12 months in a year',\n\t\t\tinvalidDay: (days, month) => `There are only ${days} days in ${month}`,\n\t\t\tafterMin: (min) => `Date must be on or after ${min.toISOString().slice(0, 10)}`,\n\t\t\tbeforeMax: (max) => `Date must be on or before ${max.toISOString().slice(0, 10)}`,\n\t\t},\n\t},\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases?: Record<string, Action>;\n\n\t/**\n\t * Custom messages for prompts\n\t */\n\tmessages?: {\n\t\t/**\n\t\t * Custom message to display when a spinner is cancelled\n\t\t * @default \"Canceled\"\n\t\t */\n\t\tcancel?: string;\n\t\t/**\n\t\t * Custom message to display when a spinner encounters an error\n\t\t * @default \"Something went wrong\"\n\t\t */\n\t\terror?: string;\n\t};\n\n\twithGuide?: boolean;\n\n\t/**\n\t * Date prompt localization\n\t */\n\tdate?: {\n\t\t/** Month names for validation messages (January, February, ...) */\n\t\tmonthNames?: string[];\n\t\tmessages?: {\n\t\t\t/** Shown when date is missing */\n\t\t\trequired?: string;\n\t\t\t/** Shown when month > 12 */\n\t\t\tinvalidMonth?: string;\n\t\t\t/** (days, monthName) => message for invalid day */\n\t\t\tinvalidDay?: (days: number, month: string) => string;\n\t\t\t/** (min) => message when date is before minDate */\n\t\t\tafterMin?: (min: Date) => string;\n\t\t\t/** (max) => message when date is after maxDate */\n\t\t\tbeforeMax?: (max: Date) => string;\n\t\t};\n\t};\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\t// Handle each property in the updates\n\tif (updates.aliases !== undefined) {\n\t\tconst aliases = updates.aliases;\n\t\tfor (const alias in aliases) {\n\t\t\tif (!Object.hasOwn(aliases, alias)) continue;\n\n\t\t\tconst action = aliases[alias];\n\t\t\tif (!settings.actions.has(action)) continue;\n\n\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\tsettings.aliases.set(alias, action);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (updates.messages !== undefined) {\n\t\tconst messages = updates.messages;\n\t\tif (messages.cancel !== undefined) {\n\t\t\tsettings.messages.cancel = messages.cancel;\n\t\t}\n\t\tif (messages.error !== undefined) {\n\t\t\tsettings.messages.error = messages.error;\n\t\t}\n\t}\n\n\tif (updates.withGuide !== undefined) {\n\t\tsettings.withGuide = updates.withGuide !== false;\n\t}\n\n\tif (updates.date !== undefined) {\n\t\tconst date = updates.date;\n\t\tif (date.monthNames !== undefined) {\n\t\t\tsettings.date.monthNames = [...date.monthNames];\n\t\t}\n\t\tif (date.messages !== undefined) {\n\t\t\tif (date.messages.required !== undefined) {\n\t\t\t\tsettings.date.messages.required = date.messages.required;\n\t\t\t}\n\t\t\tif (date.messages.invalidMonth !== undefined) {\n\t\t\t\tsettings.date.messages.invalidMonth = date.messages.invalidMonth;\n\t\t\t}\n\t\t\tif (date.messages.invalidDay !== undefined) {\n\t\t\t\tsettings.date.messages.invalidDay = date.messages.invalidDay;\n\t\t\t}\n\t\t\tif (date.messages.afterMin !== undefined) {\n\t\t\t\tsettings.date.messages.afterMin = date.messages.afterMin;\n\t\t\t}\n\t\t\tif (date.messages.beforeMax !== undefined) {\n\t\t\t\tsettings.date.messages.beforeMax = date.messages.beforeMax;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array<string | undefined>, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst numLines = Math.max(aLines.length, bLines.length);\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < numLines; i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn {\n\t\tlines: diff,\n\t\tnumLinesBefore: aLines.length,\n\t\tnumLinesAfter: bLines.length,\n\t\tnumLines,\n\t};\n}\n","import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable, Writable } from 'node:stream';\nimport { ReadStream } from 'node:tty';\nimport { wrapAnsi } from 'fast-wrap-ansi';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings.js';\n\nexport * from './settings.js';\nexport * from './string.js';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\ninterface BlockOptions {\n\tinput?: Readable;\n\toutput?: Writable;\n\toverwrite?: boolean;\n\thideCursor?: boolean;\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n}: BlockOptions = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\n\tif (input instanceof ReadStream && input.isTTY) {\n\t\tinput.setRawMode(true);\n\t}\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/bombshell-dev/clack/issues/176\n\t\tif (input instanceof ReadStream && input.isTTY && !isWindows) {\n\t\t\tinput.setRawMode(false);\n\t\t}\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n\nexport const getColumns = (output: Writable): number => {\n\tif ('columns' in output && typeof output.columns === 'number') {\n\t\treturn output.columns;\n\t}\n\treturn 80;\n};\n\nexport const getRows = (output: Writable): number => {\n\tif ('rows' in output && typeof output.rows === 'number') {\n\t\treturn output.rows;\n\t}\n\treturn 20;\n};\n\nexport function wrapTextWithPrefix(\n\toutput: Writable | undefined,\n\ttext: string,\n\tprefix: string,\n\tstartPrefix: string = prefix\n): string {\n\tconst columns = getColumns(output ?? stdout);\n\tconst wrapped = wrapAnsi(text, columns - prefix.length, {\n\t\thard: true,\n\t\ttrim: false,\n\t});\n\tconst lines = wrapped\n\t\t.split('\\n')\n\t\t.map((line, index) => {\n\t\t\treturn `${index === 0 ? startPrefix : prefix}${line}`;\n\t\t})\n\t\t.join('\\n');\n\treturn lines;\n}\n","import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable, Writable } from 'node:stream';\nimport { wrapAnsi } from 'fast-wrap-ansi';\nimport { cursor, erase } from 'sisteransi';\nimport type { ClackEvents, ClackState } from '../types.js';\nimport type { Action } from '../utils/index.js';\nimport {\n\tCANCEL_SYMBOL,\n\tdiffLines,\n\tgetRows,\n\tisActionKey,\n\tsetRawMode,\n\tsettings,\n} from '../utils/index.js';\n\nexport interface PromptOptions<TValue, Self extends Prompt<TValue>> {\n\trender(this: Omit<Self, 'prompt'>): string | undefined;\n\tinitialValue?: any;\n\tinitialUserInput?: string;\n\tvalidate?: ((value: TValue | undefined) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt<TValue> {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit<PromptOptions<TValue, Prompt<TValue>>, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit<Prompt<TValue>, 'prompt'>) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map<string, { cb: (...args: any) => any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: TValue | undefined;\n\tpublic userInput = '';\n\n\tconstructor(options: PromptOptions<TValue, Prompt<TValue>>, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber<T extends keyof ClackEvents<TValue>>(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents<TValue>[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on<T extends keyof ClackEvents<TValue>>(event: T, cb: ClackEvents<TValue>[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once<T extends keyof ClackEvents<TValue>>(event: T, cb: ClackEvents<TValue>[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit<T extends keyof ClackEvents<TValue>>(\n\t\tevent: T,\n\t\t...data: Parameters<ClackEvents<TValue>[T]>\n\t) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise<TValue | symbol | undefined>((resolve) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t\tterminal: true,\n\t\t\t});\n\t\t\tthis.rl.prompt();\n\n\t\t\tif (this.opts.initialUserInput !== undefined) {\n\t\t\t\tthis._setUserInput(this.opts.initialUserInput, true);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprotected _isActionKey(char: string | undefined, _key: Key): boolean {\n\t\treturn char === '\\t';\n\t}\n\n\tprotected _setValue(value: TValue | undefined): void {\n\t\tthis.value = value;\n\t\tthis.emit('value', this.value);\n\t}\n\n\tprotected _setUserInput(value: string | undefined, write?: boolean): void {\n\t\tthis.userInput = value ?? '';\n\t\tthis.emit('userInput', this.userInput);\n\t\tif (write && this._track && this.rl) {\n\t\t\tthis.rl.write(this.userInput);\n\t\t\tthis._cursor = this.rl.cursor;\n\t\t}\n\t}\n\n\tprotected _clearUserInput(): void {\n\t\tthis.rl?.write(null, { ctrl: true, name: 'u' });\n\t\tthis._setUserInput('');\n\t}\n\n\tprivate onKeypress(char: string | undefined, key: Key) {\n\t\tif (this._track && key.name !== 'return') {\n\t\t\tif (key.name && this._isActionKey(char, key)) {\n\t\t\t\tthis.rl?.write(null, { ctrl: true, name: 'h' });\n\t\t\t}\n\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\tthis._setUserInput(this.rl?.line);\n\t\t}\n\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\n\t\t// Call the key event handler and emit the key event\n\t\tthis.emit('key', char?.toLowerCase(), key);\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.userInput);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrapAnsi(this._prevFrame, process.stdout.columns, { hard: true, trim: false }).split('\\n')\n\t\t\t\t.length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrapAnsi(this._render(this) ?? '', process.stdout.columns, {\n\t\t\thard: true,\n\t\t\ttrim: false,\n\t\t});\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tconst rows = getRows(this.output);\n\t\t\tthis.restoreCursor();\n\t\t\tif (diff) {\n\t\t\t\tconst diffOffsetAfter = Math.max(0, diff.numLinesAfter - rows);\n\t\t\t\tconst diffOffsetBefore = Math.max(0, diff.numLinesBefore - rows);\n\t\t\t\tlet diffLine = diff.lines.find((line) => line >= diffOffsetAfter);\n\n\t\t\t\tif (diffLine === undefined) {\n\t\t\t\t\tthis._prevFrame = frame;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a single line has changed, only update that line\n\t\t\t\tif (diff.lines.length === 1) {\n\t\t\t\t\tthis.output.write(cursor.move(0, diffLine - diffOffsetBefore));\n\t\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\t\tthis._prevFrame = frame;\n\t\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\t\treturn;\n\t\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t\t} else if (diff.lines.length > 1) {\n\t\t\t\t\tif (diffOffsetAfter < diffOffsetBefore) {\n\t\t\t\t\t\tdiffLine = diffOffsetAfter;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst adjustedDiffLine = diffLine - diffOffsetBefore;\n\t\t\t\t\t\tif (adjustedDiffLine > 0) {\n\t\t\t\t\t\t\tthis.output.write(cursor.move(0, adjustedDiffLine));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.output.write(erase.down());\n\t\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\t\tthis._prevFrame = frame;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n","import type { Key } from 'node:readline';\nimport { styleText } from 'node:util';\nimport { findCursor } from '../utils/cursor.js';\nimport Prompt, { type PromptOptions } from './prompt.js';\n\ninterface OptionLike {\n\tvalue: unknown;\n\tlabel?: string;\n\tdisabled?: boolean;\n}\n\ntype FilterFunction<T extends OptionLike> = (search: string, opt: T) => boolean;\n\nfunction getCursorForValue<T extends OptionLike>(\n\tselected: T['value'] | undefined,\n\titems: T[]\n): number {\n\tif (selected === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst currLength = items.length;\n\n\t// If filtering changed the available options, update cursor\n\tif (currLength === 0) {\n\t\treturn 0;\n\t}\n\n\t// Try to maintain the same selected item\n\tconst index = items.findIndex((item) => item.value === selected);\n\treturn index !== -1 ? index : 0;\n}\n\nfunction defaultFilter<T extends OptionLike>(input: string, option: T): boolean {\n\tconst label = option.label ?? String(option.value);\n\treturn label.toLowerCase().includes(input.toLowerCase());\n}\n\nfunction normalisedValue<T>(multiple: boolean, values: T[] | undefined): T | T[] | undefined {\n\tif (!values) {\n\t\treturn undefined;\n\t}\n\tif (multiple) {\n\t\treturn values;\n\t}\n\treturn values[0];\n}\n\nexport interface AutocompleteOptions<T extends OptionLike>\n\textends PromptOptions<T['value'] | T['value'][], AutocompletePrompt<T>> {\n\toptions: T[] | ((this: AutocompletePrompt<T>) => T[]);\n\tfilter?: FilterFunction<T>;\n\tmultiple?: boolean;\n\t/**\n\t * When set (non-empty), pressing Tab with no input fills the field with this value\n\t * and runs the normal filter/selection logic so the user can confirm with Enter.\n\t * Tab only fills the input when the placeholder matches at least one option under\n\t * the prompt's filter (so the value remains selectable).\n\t */\n\tplaceholder?: string;\n}\n\nexport default class AutocompletePrompt<T extends OptionLike> extends Prompt<\n\tT['value'] | T['value'][]\n> {\n\tfilteredOptions: T[];\n\tmultiple: boolean;\n\tisNavigating = false;\n\tselectedValues: Array<T['value']> = [];\n\n\tfocusedValue: T['value'] | undefined;\n\t#cursor = 0;\n\t#lastUserInput = '';\n\t#filterFn: FilterFunction<T> | undefined;\n\t#options: T[] | (() => T[]);\n\t#placeholder: string | undefined;\n\n\tget cursor(): number {\n\t\treturn this.#cursor;\n\t}\n\n\tget userInputWithCursor() {\n\t\tif (!this.userInput) {\n\t\t\treturn styleText(['inverse', 'hidden'], '_');\n\t\t}\n\t\tif (this._cursor >= this.userInput.length) {\n\t\t\treturn `${this.userInput}█`;\n\t\t}\n\t\tconst s1 = this.userInput.slice(0, this._cursor);\n\t\tconst [s2, ...s3] = this.userInput.slice(this._cursor);\n\t\treturn `${s1}${styleText('inverse', s2)}${s3.join('')}`;\n\t}\n\n\tget options(): T[] {\n\t\tif (typeof this.#options === 'function') {\n\t\t\treturn this.#options();\n\t\t}\n\t\treturn this.#options;\n\t}\n\n\tconstructor(opts: AutocompleteOptions<T>) {\n\t\tsuper(opts);\n\n\t\tthis.#options = opts.options;\n\t\tthis.#placeholder = opts.placeholder;\n\t\tconst options = this.options;\n\t\tthis.filteredOptions = [...options];\n\t\tthis.multiple = opts.multiple === true;\n\t\tthis.#filterFn =\n\t\t\ttypeof opts.options === 'function' ? opts.filter : (opts.filter ?? defaultFilter);\n\t\tlet initialValues: unknown[] | undefined;\n\t\tif (opts.initialValue && Array.isArray(opts.initialValue)) {\n\t\t\tif (this.multiple) {\n\t\t\t\tinitialValues = opts.initialValue;\n\t\t\t} else {\n\t\t\t\tinitialValues = opts.initialValue.slice(0, 1);\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this.multiple && this.options.length > 0) {\n\t\t\t\tinitialValues = [this.options[0].value];\n\t\t\t}\n\t\t}\n\n\t\tif (initialValues) {\n\t\t\tfor (const selectedValue of initialValues) {\n\t\t\t\tconst selectedIndex = options.findIndex((opt) => opt.value === selectedValue);\n\t\t\t\tif (selectedIndex !== -1) {\n\t\t\t\t\tthis.toggleSelected(selectedValue);\n\t\t\t\t\tthis.#cursor = selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.focusedValue = this.options[this.#cursor]?.value;\n\n\t\tthis.on('key', (char, key) => this.#onKey(char, key));\n\t\tthis.on('userInput', (value) => this.#onUserInputChanged(value));\n\t}\n\n\tprotected override _isActionKey(char: string | undefined, key: Key): boolean {\n\t\treturn (\n\t\t\tchar === '\\t' ||\n\t\t\t(this.multiple &&\n\t\t\t\tthis.isNavigating &&\n\t\t\t\tkey.name === 'space' &&\n\t\t\t\tchar !== undefined &&\n\t\t\t\tchar !== '')\n\t\t);\n\t}\n\n\t#onKey(_char: string | undefined, key: Key): void {\n\t\tconst isUpKey = key.name === 'up';\n\t\tconst isDownKey = key.name === 'down';\n\t\tconst isReturnKey = key.name === 'return';\n\n\t\t// Tab with empty input and placeholder: fill input with placeholder to trigger autocomplete\n\t\t// Only when the placeholder matches at least one (non-disabled) option so the value remains selectable\n\t\tconst isEmptyOrOnlyTab = this.userInput === '' || this.userInput === '\\t';\n\t\tconst placeholder = this.#placeholder;\n\t\tconst options = this.options;\n\t\tconst placeholderMatchesOption =\n\t\t\tplaceholder !== undefined &&\n\t\t\tplaceholder !== '' &&\n\t\t\toptions.some(\n\t\t\t\t(opt) => !opt.disabled && (this.#filterFn ? this.#filterFn(placeholder, opt) : true)\n\t\t\t);\n\t\tif (key.name === 'tab' && isEmptyOrOnlyTab && placeholderMatchesOption) {\n\t\t\tif (this.userInput === '\\t') {\n\t\t\t\tthis._clearUserInput();\n\t\t\t}\n\t\t\tthis._setUserInput(placeholder, true);\n\t\t\tthis.isNavigating = false;\n\t\t\treturn;\n\t\t}\n\n\t\t// Start navigation mode with up/down arrows\n\t\tif (isUpKey || isDownKey) {\n\t\t\tthis.#cursor = findCursor(this.#cursor, isUpKey ? -1 : 1, this.filteredOptions);\n\t\t\tthis.focusedValue = this.filteredOptions[this.#cursor]?.value;\n\t\t\tif (!this.multiple) {\n\t\t\t\tthis.selectedValues = [this.focusedValue];\n\t\t\t}\n\t\t\tthis.isNavigating = true;\n\t\t} else if (isReturnKey) {\n\t\t\tthis.value = normalisedValue(this.multiple, this.selectedValues);\n\t\t} else {\n\t\t\tif (this.multiple) {\n\t\t\t\tif (\n\t\t\t\t\tthis.focusedValue !== undefined &&\n\t\t\t\t\t(key.name === 'tab' || (this.isNavigating && key.name === 'space'))\n\t\t\t\t) {\n\t\t\t\t\tthis.toggleSelected(this.focusedValue);\n\t\t\t\t} else {\n\t\t\t\t\tthis.isNavigating = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.focusedValue) {\n\t\t\t\t\tthis.selectedValues = [this.focusedValue];\n\t\t\t\t}\n\t\t\t\tthis.isNavigating = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tdeselectAll() {\n\t\tthis.selectedValues = [];\n\t}\n\n\ttoggleSelected(value: T['value']) {\n\t\tif (this.filteredOptions.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.multiple) {\n\t\t\tif (this.selectedValues.includes(value)) {\n\t\t\t\tthis.selectedValues = this.selectedValues.filter((v) => v !== value);\n\t\t\t} else {\n\t\t\t\tthis.selectedValues = [...this.selectedValues, value];\n\t\t\t}\n\t\t} else {\n\t\t\tthis.selectedValues = [value];\n\t\t}\n\t}\n\n\t#onUserInputChanged(value: string): void {\n\t\tif (value !== this.#lastUserInput) {\n\t\t\tthis.#lastUserInput = value;\n\n\t\t\tconst options = this.options;\n\n\t\t\tif (value && this.#filterFn) {\n\t\t\t\tthis.filteredOptions = options.filter((opt) => this.#filterFn?.(value, opt));\n\t\t\t} else {\n\t\t\t\tthis.filteredOptions = [...options];\n\t\t\t}\n\t\t\tconst valueCursor = getCursorForValue(this.focusedValue, this.filteredOptions);\n\t\t\tthis.#cursor = findCursor(valueCursor, 0, this.filteredOptions);\n\t\t\tconst focusedOption = this.filteredOptions[this.#cursor];\n\t\t\tif (focusedOption && !focusedOption.disabled) {\n\t\t\t\tthis.focusedValue = focusedOption.value;\n\t\t\t} else {\n\t\t\t\tthis.focusedValue = undefined;\n\t\t\t}\n\t\t\tif (!this.multiple) {\n\t\t\t\tif (this.focusedValue !== undefined) {\n\t\t\t\t\tthis.toggleSelected(this.focusedValue);\n\t\t\t\t} else {\n\t\t\t\t\tthis.deselectAll();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt.js';\n\nexport interface ConfirmOptions extends PromptOptions<boolean, ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\n\nexport default class ConfirmPrompt extends Prompt<boolean> {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('userInput', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n","import type { Key } from 'node:readline';\nimport { settings } from '../utils/settings.js';\nimport Prompt, { type PromptOptions } from './prompt.js';\n\ninterface SegmentConfig {\n\ttype: 'year' | 'month' | 'day';\n\tlen: number;\n}\n\nexport interface DateParts {\n\tyear: string;\n\tmonth: string;\n\tday: string;\n}\n\nexport type DateFormat = 'YMD' | 'MDY' | 'DMY';\n\nconst SEGMENTS: Record<string, SegmentConfig> = {\n\tY: { type: 'year', len: 4 },\n\tM: { type: 'month', len: 2 },\n\tD: { type: 'day', len: 2 },\n} as const;\n\nfunction segmentsFor(fmt: DateFormat): SegmentConfig[] {\n\treturn [...fmt].map((c) => SEGMENTS[c as keyof typeof SEGMENTS]);\n}\n\nfunction detectLocaleFormat(locale?: string): { segments: SegmentConfig[]; separator: string } {\n\tconst fmt = new Intl.DateTimeFormat(locale, {\n\t\tyear: 'numeric',\n\t\tmonth: '2-digit',\n\t\tday: '2-digit',\n\t});\n\tconst parts = fmt.formatToParts(new Date(2000, 0, 15));\n\tconst segments: SegmentConfig[] = [];\n\tlet separator = '/';\n\tfor (const p of parts) {\n\t\tif (p.type === 'literal') {\n\t\t\tseparator = p.value.trim() || p.value;\n\t\t} else if (p.type === 'year' || p.type === 'month' || p.type === 'day') {\n\t\t\tsegments.push({ type: p.type, len: p.type === 'year' ? 4 : 2 });\n\t\t}\n\t}\n\treturn { segments, separator };\n}\n\n/** Parse string segment values to numbers, treating blanks as 0 */\nfunction parseSegmentToNum(s: string): number {\n\treturn Number.parseInt((s || '0').replace(/_/g, '0'), 10) || 0;\n}\n\nfunction parse(parts: DateParts): { year: number; month: number; day: number } {\n\treturn {\n\t\tyear: parseSegmentToNum(parts.year),\n\t\tmonth: parseSegmentToNum(parts.month),\n\t\tday: parseSegmentToNum(parts.day),\n\t};\n}\n\nfunction daysInMonth(year: number, month: number): number {\n\treturn new Date(year || 2001, month || 1, 0).getDate();\n}\n\n/** Validate and return calendar parts, or undefined if invalid */\nfunction validParts(parts: DateParts): { year: number; month: number; day: number } | undefined {\n\tconst { year, month, day } = parse(parts);\n\tif (!year || year < 0 || year > 9999) return undefined;\n\tif (!month || month < 1 || month > 12) return undefined;\n\tif (!day || day < 1) return undefined;\n\tconst d = new Date(Date.UTC(year, month - 1, day));\n\tif (d.getUTCFullYear() !== year || d.getUTCMonth() !== month - 1 || d.getUTCDate() !== day)\n\t\treturn undefined;\n\treturn { year, month, day };\n}\n\nfunction toDate(parts: DateParts): Date | undefined {\n\tconst p = validParts(parts);\n\treturn p ? new Date(Date.UTC(p.year, p.month - 1, p.day)) : undefined;\n}\n\nfunction segmentBounds(\n\ttype: 'year' | 'month' | 'day',\n\tctx: { year: number; month: number },\n\tminDate: Date | undefined,\n\tmaxDate: Date | undefined\n): { min: number; max: number } {\n\tconst minP = minDate\n\t\t? {\n\t\t\t\tyear: minDate.getUTCFullYear(),\n\t\t\t\tmonth: minDate.getUTCMonth() + 1,\n\t\t\t\tday: minDate.getUTCDate(),\n\t\t\t}\n\t\t: null;\n\tconst maxP = maxDate\n\t\t? {\n\t\t\t\tyear: maxDate.getUTCFullYear(),\n\t\t\t\tmonth: maxDate.getUTCMonth() + 1,\n\t\t\t\tday: maxDate.getUTCDate(),\n\t\t\t}\n\t\t: null;\n\n\tif (type === 'year') {\n\t\treturn { min: minP?.year ?? 1, max: maxP?.year ?? 9999 };\n\t}\n\tif (type === 'month') {\n\t\treturn {\n\t\t\tmin: minP && ctx.year === minP.year ? minP.month : 1,\n\t\t\tmax: maxP && ctx.year === maxP.year ? maxP.month : 12,\n\t\t};\n\t}\n\treturn {\n\t\tmin: minP && ctx.year === minP.year && ctx.month === minP.month ? minP.day : 1,\n\t\tmax:\n\t\t\tmaxP && ctx.year === maxP.year && ctx.month === maxP.month\n\t\t\t\t? maxP.day\n\t\t\t\t: daysInMonth(ctx.year, ctx.month),\n\t};\n}\n\nexport interface DateOptions extends PromptOptions<Date, DatePrompt> {\n\tformat?: DateFormat;\n\tlocale?: string;\n\tseparator?: string;\n\tdefaultValue?: Date;\n\tinitialValue?: Date;\n\tminDate?: Date;\n\tmaxDate?: Date;\n}\n\nexport default class DatePrompt extends Prompt<Date> {\n\t#segments: SegmentConfig[];\n\t#separator: string;\n\t#segmentValues: DateParts;\n\t#minDate: Date | undefined;\n\t#maxDate: Date | undefined;\n\t#cursor = { segmentIndex: 0, positionInSegment: 0 };\n\t#segmentSelected = true;\n\t#pendingTensDigit: string | null = null;\n\n\tinlineError = '';\n\n\tget segmentCursor() {\n\t\treturn { ...this.#cursor };\n\t}\n\n\tget segmentValues(): DateParts {\n\t\treturn { ...this.#segmentValues };\n\t}\n\n\tget segments(): readonly SegmentConfig[] {\n\t\treturn this.#segments;\n\t}\n\n\tget separator(): string {\n\t\treturn this.#separator;\n\t}\n\n\tget formattedValue(): string {\n\t\treturn this.#format(this.#segmentValues);\n\t}\n\n\t#format(parts: DateParts): string {\n\t\treturn this.#segments.map((s) => parts[s.type]).join(this.#separator);\n\t}\n\n\t#refresh() {\n\t\tthis._setUserInput(this.#format(this.#segmentValues));\n\t\tthis._setValue(toDate(this.#segmentValues) ?? undefined);\n\t}\n\n\tconstructor(opts: DateOptions) {\n\t\tconst detected = opts.format\n\t\t\t? { segments: segmentsFor(opts.format), separator: opts.separator ?? '/' }\n\t\t\t: detectLocaleFormat(opts.locale);\n\t\tconst sep = opts.separator ?? detected.separator;\n\t\tconst segments = opts.format ? segmentsFor(opts.format) : detected.segments;\n\n\t\tconst initialDate = opts.initialValue ?? opts.defaultValue;\n\t\tconst segmentValues: DateParts = initialDate\n\t\t\t? {\n\t\t\t\t\tyear: String(initialDate.getUTCFullYear()).padStart(4, '0'),\n\t\t\t\t\tmonth: String(initialDate.getUTCMonth() + 1).padStart(2, '0'),\n\t\t\t\t\tday: String(initialDate.getUTCDate()).padStart(2, '0'),\n\t\t\t\t}\n\t\t\t: { year: '____', month: '__', day: '__' };\n\n\t\tconst initialDisplay = segments.map((s) => segmentValues[s.type]).join(sep);\n\n\t\tsuper({ ...opts, initialUserInput: initialDisplay }, false);\n\t\tthis.#segments = segments;\n\t\tthis.#separator = sep;\n\t\tthis.#segmentValues = segmentValues;\n\t\tthis.#minDate = opts.minDate;\n\t\tthis.#maxDate = opts.maxDate;\n\t\tthis.#refresh();\n\n\t\tthis.on('cursor', (key) => this.#onCursor(key));\n\t\tthis.on('key', (char, key) => this.#onKey(char, key));\n\t\tthis.on('finalize', () => this.#onFinalize(opts));\n\t}\n\n\t#seg(): { segment: SegmentConfig; index: number } | undefined {\n\t\tconst index = Math.max(0, Math.min(this.#cursor.segmentIndex, this.#segments.length - 1));\n\t\tconst segment = this.#segments[index];\n\t\tif (!segment) return undefined;\n\t\tthis.#cursor.positionInSegment = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.#cursor.positionInSegment, segment.len - 1)\n\t\t);\n\t\treturn { segment, index };\n\t}\n\n\t#navigate(direction: 1 | -1) {\n\t\tthis.inlineError = '';\n\t\tthis.#pendingTensDigit = null;\n\t\tconst ctx = this.#seg();\n\t\tif (!ctx) return;\n\t\tthis.#cursor.segmentIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.#segments.length - 1, ctx.index + direction)\n\t\t);\n\t\tthis.#cursor.positionInSegment = 0;\n\t\tthis.#segmentSelected = true;\n\t}\n\n\t#adjust(direction: 1 | -1) {\n\t\tconst ctx = this.#seg();\n\t\tif (!ctx) return;\n\t\tconst { segment } = ctx;\n\t\tconst raw = this.#segmentValues[segment.type];\n\t\tconst isBlank = !raw || raw.replace(/_/g, '') === '';\n\t\tconst num = Number.parseInt((raw || '0').replace(/_/g, '0'), 10) || 0;\n\t\tconst bounds = segmentBounds(\n\t\t\tsegment.type,\n\t\t\tparse(this.#segmentValues),\n\t\t\tthis.#minDate,\n\t\t\tthis.#maxDate\n\t\t);\n\n\t\tlet next: number;\n\t\tif (isBlank) {\n\t\t\tnext = direction === 1 ? bounds.min : bounds.max;\n\t\t} else {\n\t\t\tnext = Math.max(Math.min(bounds.max, num + direction), bounds.min);\n\t\t}\n\n\t\tthis.#segmentValues = {\n\t\t\t...this.#segmentValues,\n\t\t\t[segment.type]: next.toString().padStart(segment.len, '0'),\n\t\t};\n\t\tthis.#segmentSelected = true;\n\t\tthis.#pendingTensDigit = null;\n\t\tthis.#refresh();\n\t}\n\n\t#onCursor(key?: string) {\n\t\tif (!key) return;\n\t\tswitch (key) {\n\t\t\tcase 'right':\n\t\t\t\treturn this.#navigate(1);\n\t\t\tcase 'left':\n\t\t\t\treturn this.#navigate(-1);\n\t\t\tcase 'up':\n\t\t\t\treturn this.#adjust(1);\n\t\t\tcase 'down':\n\t\t\t\treturn this.#adjust(-1);\n\t\t}\n\t}\n\n\t#onKey(char: string | undefined, key: Key) {\n\t\t// Backspace\n\t\tconst isBackspace =\n\t\t\tkey?.name === 'backspace' ||\n\t\t\tkey?.sequence === '\\x7f' ||\n\t\t\tkey?.sequence === '\\b' ||\n\t\t\tchar === '\\x7f' ||\n\t\t\tchar === '\\b';\n\t\tif (isBackspace) {\n\t\t\tthis.inlineError = '';\n\t\t\tconst ctx = this.#seg();\n\t\t\tif (!ctx) return;\n\t\t\tif (!this.#segmentValues[ctx.segment.type].replace(/_/g, '')) {\n\t\t\t\tthis.#navigate(-1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#segmentValues[ctx.segment.type] = '_'.repeat(ctx.segment.len);\n\t\t\tthis.#segmentSelected = true;\n\t\t\tthis.#cursor.positionInSegment = 0;\n\t\t\tthis.#refresh();\n\t\t\treturn;\n\t\t}\n\n\t\t// Tab navigation\n\t\tif (key?.name === 'tab') {\n\t\t\tthis.inlineError = '';\n\t\t\tconst ctx = this.#seg();\n\t\t\tif (!ctx) return;\n\t\t\tconst dir = key.shift ? -1 : 1;\n\t\t\tconst next = ctx.index + dir;\n\t\t\tif (next >= 0 && next < this.#segments.length) {\n\t\t\t\tthis.#cursor.segmentIndex = next;\n\t\t\t\tthis.#cursor.positionInSegment = 0;\n\t\t\t\tthis.#segmentSelected = true;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Digit input\n\t\tif (char && /^[0-9]$/.test(char)) {\n\t\t\tconst ctx = this.#seg();\n\t\t\tif (!ctx) return;\n\t\t\tconst { segment } = ctx;\n\t\t\tconst isBlank = !this.#segmentValues[segment.type].replace(/_/g, '');\n\n\t\t\t// Pending tens digit: complete the two-digit entry\n\t\t\tif (this.#segmentSelected && this.#pendingTensDigit !== null && !isBlank) {\n\t\t\t\tconst newVal = this.#pendingTensDigit + char;\n\t\t\t\tconst newParts = { ...this.#segmentValues, [segment.type]: newVal };\n\t\t\t\tconst err = this.#validateSegment(newParts, segment);\n\t\t\t\tif (err) {\n\t\t\t\t\tthis.inlineError = err;\n\t\t\t\t\tthis.#pendingTensDigit = null;\n\t\t\t\t\tthis.#segmentSelected = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.inlineError = '';\n\t\t\t\tthis.#segmentValues[segment.type] = newVal;\n\t\t\t\tthis.#pendingTensDigit = null;\n\t\t\t\tthis.#segmentSelected = false;\n\t\t\t\tthis.#refresh();\n\t\t\t\tif (ctx.index < this.#segments.length - 1) {\n\t\t\t\t\tthis.#cursor.segmentIndex = ctx.index + 1;\n\t\t\t\t\tthis.#cursor.positionInSegment = 0;\n\t\t\t\t\tthis.#segmentSelected = true;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Clear-on-type: typing into a selected filled segment clears it first\n\t\t\tif (this.#segmentSelected && !isBlank) {\n\t\t\t\tthis.#segmentValues[segment.type] = '_'.repeat(segment.len);\n\t\t\t\tthis.#cursor.positionInSegment = 0;\n\t\t\t}\n\t\t\tthis.#segmentSelected = false;\n\t\t\tthis.#pendingTensDigit = null;\n\n\t\t\tconst display = this.#segmentValues[segment.type];\n\t\t\tconst firstBlank = display.indexOf('_');\n\t\t\tconst pos =\n\t\t\t\tfirstBlank >= 0 ? firstBlank : Math.min(this.#cursor.positionInSegment, segment.len - 1);\n\t\t\tif (pos < 0 || pos >= segment.len) return;\n\n\t\t\tlet newVal = display.slice(0, pos) + char + display.slice(pos + 1);\n\n\t\t\t// Smart digit placement\n\t\t\tlet shouldStaySelected = false;\n\t\t\tif (pos === 0 && display === '__' && (segment.type === 'month' || segment.type === 'day')) {\n\t\t\t\tconst digit = Number.parseInt(char, 10);\n\t\t\t\tnewVal = `0${char}`;\n\t\t\t\tshouldStaySelected = digit <= (segment.type === 'month' ? 1 : 2);\n\t\t\t}\n\t\t\tif (segment.type === 'year') {\n\t\t\t\tconst digits = display.replace(/_/g, '');\n\t\t\t\tnewVal = (digits + char).padStart(segment.len, '_');\n\t\t\t}\n\n\t\t\tif (!newVal.includes('_')) {\n\t\t\t\tconst newParts = { ...this.#segmentValues, [segment.type]: newVal };\n\t\t\t\tconst err = this.#validateSegment(newParts, segment);\n\t\t\t\tif (err) {\n\t\t\t\t\tthis.inlineError = err;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.inlineError = '';\n\n\t\t\tthis.#segmentValues[segment.type] = newVal;\n\n\t\t\t// Clamp only when the current segment is fully entered\n\t\t\tconst parsed = !newVal.includes('_') ? validParts(this.#segmentValues) : undefined;\n\t\t\tif (parsed) {\n\t\t\t\tconst { year, month } = parsed;\n\t\t\t\tconst maxDay = daysInMonth(year, month);\n\t\t\t\tthis.#segmentValues = {\n\t\t\t\t\tyear: String(Math.max(0, Math.min(9999, year))).padStart(4, '0'),\n\t\t\t\t\tmonth: String(Math.max(1, Math.min(12, month))).padStart(2, '0'),\n\t\t\t\t\tday: String(Math.max(1, Math.min(maxDay, parsed.day))).padStart(2, '0'),\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis.#refresh();\n\n\t\t\t// Advance cursor\n\t\t\tconst nextBlank = newVal.indexOf('_');\n\t\t\tif (shouldStaySelected) {\n\t\t\t\tthis.#segmentSelected = true;\n\t\t\t\tthis.#pendingTensDigit = char;\n\t\t\t} else if (nextBlank >= 0) {\n\t\t\t\tthis.#cursor.positionInSegment = nextBlank;\n\t\t\t} else if (firstBlank >= 0 && ctx.index < this.#segments.length - 1) {\n\t\t\t\tthis.#cursor.segmentIndex = ctx.index + 1;\n\t\t\t\tthis.#cursor.positionInSegment = 0;\n\t\t\t\tthis.#segmentSelected = true;\n\t\t\t} else {\n\t\t\t\tthis.#cursor.positionInSegment = Math.min(pos + 1, segment.len - 1);\n\t\t\t}\n\t\t}\n\t}\n\n\t#validateSegment(parts: DateParts, seg: SegmentConfig): string | undefined {\n\t\tconst { month, day } = parse(parts);\n\t\tif (seg.type === 'month' && (month < 0 || month > 12)) {\n\t\t\treturn settings.date.messages.invalidMonth;\n\t\t}\n\t\tif (seg.type === 'day' && (day < 0 || day > 31)) {\n\t\t\treturn settings.date.messages.invalidDay(31, 'any month');\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t#onFinalize(opts: DateOptions) {\n\t\tconst { year, month, day } = parse(this.#segmentValues);\n\t\tif (year && month && day) {\n\t\t\tconst maxDay = daysInMonth(year, month);\n\t\t\tthis.#segmentValues = {\n\t\t\t\t...this.#segmentValues,\n\t\t\t\tday: String(Math.min(day, maxDay)).padStart(2, '0'),\n\t\t\t};\n\t\t}\n\t\tthis.value = toDate(this.#segmentValues) ?? opts.defaultValue ?? undefined;\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt.js';\n\nexport interface GroupMultiSelectOptions<T extends { value: any }>\n\textends PromptOptions<T['value'][], GroupMultiSelectPrompt<T>> {\n\toptions: Record<string, T[]>;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n\tselectableGroups?: boolean;\n}\nexport default class GroupMultiSelectPrompt<T extends { value: any }> extends Prompt<T['value'][]> {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\t#selectableGroups: boolean;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\tconst value = this.value;\n\t\tif (value === undefined) {\n\t\t\treturn false;\n\t\t}\n\t\treturn items.every((i) => value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (this.value === undefined) {\n\t\t\tthis.value = [];\n\t\t}\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.#selectableGroups = opts.selectableGroups !== false;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\tthis.#selectableGroups ? 0 : 1\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up': {\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right': {\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import { findCursor } from '../utils/cursor.js';\nimport Prompt, { type PromptOptions } from './prompt.js';\n\ninterface OptionLike {\n\tvalue: any;\n\tdisabled?: boolean;\n}\n\nexport interface MultiSelectOptions<T extends OptionLike>\n\textends PromptOptions<T['value'][], MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends OptionLike> extends Prompt<T['value'][]> {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value(): T['value'] {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate get _enabledOptions(): T[] {\n\t\treturn this.options.filter((option) => option.disabled !== true);\n\t}\n\n\tprivate toggleAll() {\n\t\tconst enabledOptions = this._enabledOptions;\n\t\tconst allSelected = this.value !== undefined && this.value.length === enabledOptions.length;\n\t\tthis.value = allSelected ? [] : enabledOptions.map((v) => v.value);\n\t}\n\n\tprivate toggleInvert() {\n\t\tconst value = this.value;\n\t\tif (!value) {\n\t\t\treturn;\n\t\t}\n\t\tconst notSelected = this._enabledOptions.filter((v) => !value.includes(v.value));\n\t\tthis.value = notSelected.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tif (this.value === undefined) {\n\t\t\tthis.value = [];\n\t\t}\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tconst cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.cursor = this.options[cursor].disabled ? findCursor<T>(cursor, 1, this.options) : cursor;\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t\tif (char === 'i') {\n\t\t\t\tthis.toggleInvert();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = findCursor<T>(this.cursor, -1, this.options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = findCursor<T>(this.cursor, 1, this.options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import { styleText } from 'node:util';\nimport Prompt, { type PromptOptions } from './prompt.js';\n\nexport interface PasswordOptions extends PromptOptions<string, PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt<string> {\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.userInput.replaceAll(/./g, this._mask);\n\t}\n\tget userInputWithCursor() {\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\treturn this.masked;\n\t\t}\n\t\tconst userInput = this.userInput;\n\t\tif (this.cursor >= userInput.length) {\n\t\t\treturn `${this.masked}${styleText(['inverse', 'hidden'], '_')}`;\n\t\t}\n\t\tconst masked = this.masked;\n\t\tconst s1 = masked.slice(0, this.cursor);\n\t\tconst s2 = masked.slice(this.cursor);\n\t\treturn `${s1}${styleText('inverse', s2[0])}${s2.slice(1)}`;\n\t}\n\tclear() {\n\t\tthis._clearUserInput();\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\t\tthis.on('userInput', (input) => {\n\t\t\tthis._setValue(input);\n\t\t});\n\t}\n}\n","import { findCursor } from '../utils/cursor.js';\nimport Prompt, { type PromptOptions } from './prompt.js';\n\nexport interface SelectOptions<T extends { value: any; disabled?: boolean }>\n\textends PromptOptions<T['value'], SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any; disabled?: boolean }> extends Prompt<\n\tT['value']\n> {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _selectedValue() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._selectedValue.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\n\t\tconst initialCursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tconst cursor = initialCursor === -1 ? 0 : initialCursor;\n\t\tthis.cursor = this.options[cursor].disabled ? findCursor<T>(cursor, 1, this.options) : cursor;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = findCursor<T>(this.cursor, -1, this.options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = findCursor<T>(this.cursor, 1, this.options);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt.js';\n\nexport interface SelectKeyOptions<T extends { value: string }>\n\textends PromptOptions<T['value'], SelectKeyPrompt<T>> {\n\toptions: T[];\n\tcaseSensitive?: boolean;\n}\nexport default class SelectKeyPrompt<T extends { value: string }> extends Prompt<T['value']> {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst caseSensitive = opts.caseSensitive === true;\n\t\tconst keys = this.options.map(({ value: [initial] }) => {\n\t\t\treturn caseSensitive ? initial : initial?.toLowerCase();\n\t\t});\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key, keyInfo) => {\n\t\t\tif (!key) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst casedKey = caseSensitive && keyInfo.shift ? key.toUpperCase() : key;\n\t\t\tif (!keys.includes(casedKey)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst value = this.options.find(({ value: [initial] }) => {\n\t\t\t\treturn caseSensitive ? initial === casedKey : initial?.toLowerCase() === key;\n\t\t\t});\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n","import { styleText } from 'node:util';\nimport Prompt, { type PromptOptions } from './prompt.js';\n\nexport interface TextOptions extends PromptOptions<string, TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt<string> {\n\tget userInputWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.userInput;\n\t\t}\n\t\tconst userInput = this.userInput;\n\t\tif (this.cursor >= userInput.length) {\n\t\t\treturn `${this.userInput}█`;\n\t\t}\n\t\tconst s1 = userInput.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = userInput.slice(this.cursor);\n\t\treturn `${s1}${styleText('inverse', s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper({\n\t\t\t...opts,\n\t\t\tinitialUserInput: opts.initialUserInput ?? opts.initialValue,\n\t\t});\n\n\t\tthis.on('userInput', (input) => {\n\t\t\tthis._setValue(input);\n\t\t});\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t\tif (this.value === undefined) {\n\t\t\t\tthis.value = '';\n\t\t\t}\n\t\t});\n\t}\n}\n"],"names":["findCursor","cursor","delta","options","opt","newCursor","maxCursor","clampedCursor","actions","DEFAULT_MONTH_NAMES","settings","days","month","min","max","updateSettings","updates","aliases","alias","action","messages","date","isActionKey","key","value","diffLines","a","b","aLines","bLines","numLines","diff","i","isWindows","CANCEL_SYMBOL","isCancel","setRawMode","input","block","stdin","output","stdout","overwrite","hideCursor","rl","readline","ReadStream","clear","data","name","sequence","str","dx","dy","getColumns","getRows","wrapTextWithPrefix","text","prefix","startPrefix","columns","wrapAnsi","line","index","g$1","trackValue","render","signal","opts","event","params","cb","cbs","cleanup","subscriber","resolve","char","_key","write","problem","lines","frame","rows","diffOffsetAfter","diffOffsetBefore","diffLine","erase","adjustedDiffLine","newLines","getCursorForValue","selected","items","item","defaultFilter","option","normalisedValue","multiple","values","T$1","Prompt","#cursor","#lastUserInput","#filterFn","#options","#placeholder","styleText","s1","s2","s3","initialValues","selectedValue","selectedIndex","#onKey","#onUserInputChanged","_char","isUpKey","isDownKey","isReturnKey","isEmptyOrOnlyTab","placeholder","placeholderMatchesOption","v","valueCursor","focusedOption","ConfirmPrompt","confirm","SEGMENTS","segmentsFor","fmt","c","detectLocaleFormat","locale","parts","segments","separator","p","parseSegmentToNum","s","parse","daysInMonth","year","validParts","day","d","toDate","segmentBounds","type","ctx","minDate","maxDate","minP","maxP","DatePrompt","#segments","#separator","#segmentValues","#minDate","#maxDate","#segmentSelected","#pendingTensDigit","#format","#refresh","detected","sep","initialDate","segmentValues","initialDisplay","#onCursor","#onFinalize","#seg","segment","#navigate","direction","#adjust","raw","isBlank","num","bounds","next","dir","newVal","newParts","err","#validateSegment","display","firstBlank","pos","shouldStaySelected","digit","parsed","maxDay","nextBlank","seg","GroupMultiSelectPrompt","#selectableGroups","group","o","groupedItems","currentIsGroup","enabledOptions","allSelected","notSelected","PasswordPrompt","userInput","masked","mask","SelectPrompt","initialCursor","SelectKeyPrompt","caseSensitive","keys","initial","keyInfo","casedKey","TextPrompt"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js","../src/common.ts","../src/limit-options.ts","../src/autocomplete.ts","../src/box.ts","../src/confirm.ts","../src/date.ts","../src/group.ts","../src/group-multi-select.ts","../src/log.ts","../src/messages.ts","../src/multi-select.ts","../src/note.ts","../src/password.ts","../src/path.ts","../src/spinner.ts","../src/progress-bar.ts","../src/select.ts","../src/select-key.ts","../src/stream.ts","../src/task.ts","../src/task-log.ts","../src/text.ts"],"sourcesContent":["import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import type { Readable, Writable } from 'node:stream';\nimport { styleText } from 'node:util';\nimport type { State } from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nexport const unicode = isUnicodeSupported();\nexport const isCI = (): boolean => process.env.CI === 'true';\nexport const isTTY = (output: Writable): boolean => {\n\treturn (output as Writable & { isTTY?: boolean }).isTTY === true;\n};\nexport const unicodeOr = (c: string, fallback: string) => (unicode ? c : fallback);\nexport const S_STEP_ACTIVE = unicodeOr('◆', '*');\nexport const S_STEP_CANCEL = unicodeOr('■', 'x');\nexport const S_STEP_ERROR = unicodeOr('▲', 'x');\nexport const S_STEP_SUBMIT = unicodeOr('◇', 'o');\n\nexport const S_BAR_START = unicodeOr('┌', 'T');\nexport const S_BAR = unicodeOr('│', '|');\nexport const S_BAR_END = unicodeOr('└', '—');\nexport const S_BAR_START_RIGHT = unicodeOr('┐', 'T');\nexport const S_BAR_END_RIGHT = unicodeOr('┘', '—');\n\nexport const S_RADIO_ACTIVE = unicodeOr('●', '>');\nexport const S_RADIO_INACTIVE = unicodeOr('○', ' ');\nexport const S_CHECKBOX_ACTIVE = unicodeOr('◻', '[•]');\nexport const S_CHECKBOX_SELECTED = unicodeOr('◼', '[+]');\nexport const S_CHECKBOX_INACTIVE = unicodeOr('◻', '[ ]');\nexport const S_PASSWORD_MASK = unicodeOr('▪', '•');\n\nexport const S_BAR_H = unicodeOr('─', '-');\nexport const S_CORNER_TOP_RIGHT = unicodeOr('╮', '+');\nexport const S_CONNECT_LEFT = unicodeOr('├', '+');\nexport const S_CORNER_BOTTOM_RIGHT = unicodeOr('╯', '+');\nexport const S_CORNER_BOTTOM_LEFT = unicodeOr('╰', '+');\nexport const S_CORNER_TOP_LEFT = unicodeOr('╭', '+');\n\nexport const S_INFO = unicodeOr('●', '•');\nexport const S_SUCCESS = unicodeOr('◆', '*');\nexport const S_WARN = unicodeOr('▲', '!');\nexport const S_ERROR = unicodeOr('■', 'x');\n\nexport const symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn styleText('cyan', S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn styleText('red', S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn styleText('yellow', S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn styleText('green', S_STEP_SUBMIT);\n\t}\n};\n\nexport const symbolBar = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn styleText('cyan', S_BAR);\n\t\tcase 'cancel':\n\t\t\treturn styleText('red', S_BAR);\n\t\tcase 'error':\n\t\t\treturn styleText('yellow', S_BAR);\n\t\tcase 'submit':\n\t\t\treturn styleText('green', S_BAR);\n\t}\n};\n\nexport interface CommonOptions {\n\tinput?: Readable;\n\toutput?: Writable;\n\tsignal?: AbortSignal;\n\twithGuide?: boolean;\n}\n","import { styleText } from 'node:util';\nimport { getColumns, getRows } from '@clack/core';\nimport { wrapAnsi } from 'fast-wrap-ansi';\nimport type { CommonOptions } from './common.js';\n\nexport interface LimitOptionsParams<TOption> extends CommonOptions {\n\toptions: TOption[];\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n\tmaxItems?: number;\n\tcolumnPadding?: number;\n\trowPadding?: number;\n}\n\nconst trimLines = (\n\tgroups: Array<string[]>,\n\tinitialLineCount: number,\n\tstartIndex: number,\n\tendIndex: number,\n\tmaxLines: number\n) => {\n\tlet lineCount = initialLineCount;\n\tlet removals = 0;\n\tfor (let i = startIndex; i < endIndex; i++) {\n\t\tconst group = groups[i];\n\t\tlineCount = lineCount - group.length;\n\t\tremovals++;\n\t\tif (lineCount <= maxLines) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn { lineCount, removals };\n};\n\nexport const limitOptions = <TOption>({\n\tcursor,\n\toptions,\n\tstyle,\n\toutput = process.stdout,\n\tmaxItems = Number.POSITIVE_INFINITY,\n\tcolumnPadding = 0,\n\trowPadding = 4,\n}: LimitOptionsParams<TOption>): string[] => {\n\tconst columns = getColumns(output);\n\tconst maxWidth = columns - columnPadding;\n\tconst rows = getRows(output);\n\tconst overflowFormat = styleText('dim', '...');\n\n\tconst outputMaxItems = Math.max(rows - rowPadding, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst computedMaxItems = Math.max(Math.min(maxItems, outputMaxItems), 5);\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= computedMaxItems - 3) {\n\t\tslidingWindowLocation = Math.max(\n\t\t\tMath.min(cursor - computedMaxItems + 3, options.length - computedMaxItems),\n\t\t\t0\n\t\t);\n\t}\n\n\tlet shouldRenderTopEllipsis = computedMaxItems < options.length && slidingWindowLocation > 0;\n\tlet shouldRenderBottomEllipsis =\n\t\tcomputedMaxItems < options.length && slidingWindowLocation + computedMaxItems < options.length;\n\n\tconst slidingWindowLocationEnd = Math.min(\n\t\tslidingWindowLocation + computedMaxItems,\n\t\toptions.length\n\t);\n\tconst lineGroups: Array<string[]> = [];\n\tlet lineCount = 0;\n\tif (shouldRenderTopEllipsis) {\n\t\tlineCount++;\n\t}\n\tif (shouldRenderBottomEllipsis) {\n\t\tlineCount++;\n\t}\n\n\tconst slidingWindowLocationWithEllipsis =\n\t\tslidingWindowLocation + (shouldRenderTopEllipsis ? 1 : 0);\n\tconst slidingWindowLocationEndWithEllipsis =\n\t\tslidingWindowLocationEnd - (shouldRenderBottomEllipsis ? 1 : 0);\n\n\tfor (let i = slidingWindowLocationWithEllipsis; i < slidingWindowLocationEndWithEllipsis; i++) {\n\t\tconst wrappedLines = wrapAnsi(style(options[i], i === cursor), maxWidth, {\n\t\t\thard: true,\n\t\t\ttrim: false,\n\t\t}).split('\\n');\n\t\tlineGroups.push(wrappedLines);\n\t\tlineCount += wrappedLines.length;\n\t}\n\n\tif (lineCount > outputMaxItems) {\n\t\tlet precedingRemovals = 0;\n\t\tlet followingRemovals = 0;\n\t\tlet newLineCount = lineCount;\n\t\tconst cursorGroupIndex = cursor - slidingWindowLocationWithEllipsis;\n\t\tconst trimLinesLocal = (startIndex: number, endIndex: number) =>\n\t\t\ttrimLines(lineGroups, newLineCount, startIndex, endIndex, outputMaxItems);\n\n\t\tif (shouldRenderTopEllipsis) {\n\t\t\t({ lineCount: newLineCount, removals: precedingRemovals } = trimLinesLocal(\n\t\t\t\t0,\n\t\t\t\tcursorGroupIndex\n\t\t\t));\n\t\t\tif (newLineCount > outputMaxItems) {\n\t\t\t\t({ lineCount: newLineCount, removals: followingRemovals } = trimLinesLocal(\n\t\t\t\t\tcursorGroupIndex + 1,\n\t\t\t\t\tlineGroups.length\n\t\t\t\t));\n\t\t\t}\n\t\t} else {\n\t\t\t({ lineCount: newLineCount, removals: followingRemovals } = trimLinesLocal(\n\t\t\t\tcursorGroupIndex + 1,\n\t\t\t\tlineGroups.length\n\t\t\t));\n\t\t\tif (newLineCount > outputMaxItems) {\n\t\t\t\t({ lineCount: newLineCount, removals: precedingRemovals } = trimLinesLocal(\n\t\t\t\t\t0,\n\t\t\t\t\tcursorGroupIndex\n\t\t\t\t));\n\t\t\t}\n\t\t}\n\n\t\tif (precedingRemovals > 0) {\n\t\t\tshouldRenderTopEllipsis = true;\n\t\t\tlineGroups.splice(0, precedingRemovals);\n\t\t}\n\t\tif (followingRemovals > 0) {\n\t\t\tshouldRenderBottomEllipsis = true;\n\t\t\tlineGroups.splice(lineGroups.length - followingRemovals, followingRemovals);\n\t\t}\n\t}\n\n\tconst result: string[] = [];\n\tif (shouldRenderTopEllipsis) {\n\t\tresult.push(overflowFormat);\n\t}\n\tfor (const lineGroup of lineGroups) {\n\t\tfor (const line of lineGroup) {\n\t\t\tresult.push(line);\n\t\t}\n\t}\n\tif (shouldRenderBottomEllipsis) {\n\t\tresult.push(overflowFormat);\n\t}\n\n\treturn result;\n};\n","import { styleText } from 'node:util';\nimport { AutocompletePrompt, settings } from '@clack/core';\nimport {\n\ttype CommonOptions,\n\tS_BAR,\n\tS_BAR_END,\n\tS_CHECKBOX_INACTIVE,\n\tS_CHECKBOX_SELECTED,\n\tS_RADIO_ACTIVE,\n\tS_RADIO_INACTIVE,\n\tsymbol,\n} from './common.js';\nimport { limitOptions } from './limit-options.js';\nimport type { Option } from './select.js';\n\nfunction getLabel<T>(option: Option<T>) {\n\treturn option.label ?? String(option.value ?? '');\n}\n\nfunction getFilteredOption<T>(searchText: string, option: Option<T>): boolean {\n\tif (!searchText) {\n\t\treturn true;\n\t}\n\tconst label = (option.label ?? String(option.value ?? '')).toLowerCase();\n\tconst hint = (option.hint ?? '').toLowerCase();\n\tconst value = String(option.value).toLowerCase();\n\tconst term = searchText.toLowerCase();\n\n\treturn label.includes(term) || hint.includes(term) || value.includes(term);\n}\n\nfunction getSelectedOptions<T>(values: T[], options: Option<T>[]): Option<T>[] {\n\tconst results: Option<T>[] = [];\n\n\tfor (const option of options) {\n\t\tif (values.includes(option.value)) {\n\t\t\tresults.push(option);\n\t\t}\n\t}\n\n\treturn results;\n}\n\ninterface AutocompleteSharedOptions<Value> extends CommonOptions {\n\t/**\n\t * The message to display to the user.\n\t */\n\tmessage: string;\n\t/**\n\t * Available options for the autocomplete prompt.\n\t */\n\toptions: Option<Value>[] | ((this: AutocompletePrompt<Option<Value>>) => Option<Value>[]);\n\t/**\n\t * Maximum number of items to display at once.\n\t */\n\tmaxItems?: number;\n\t/**\n\t * Placeholder text to display when no input is provided.\n\t */\n\tplaceholder?: string;\n\t/**\n\t * Validates the value\n\t */\n\tvalidate?: (value: Value | Value[] | undefined) => string | Error | undefined;\n\t/**\n\t * Custom filter function to match options against search input.\n\t * If not provided, a default filter that matches label, hint, and value is used.\n\t */\n\tfilter?: (search: string, option: Option<Value>) => boolean;\n}\n\nexport interface AutocompleteOptions<Value> extends AutocompleteSharedOptions<Value> {\n\t/**\n\t * The initial selected value.\n\t */\n\tinitialValue?: Value;\n\t/**\n\t * The initial user input\n\t */\n\tinitialUserInput?: string;\n}\n\nexport const autocomplete = <Value>(opts: AutocompleteOptions<Value>) => {\n\tconst prompt = new AutocompletePrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue ? [opts.initialValue] : undefined,\n\t\tinitialUserInput: opts.initialUserInput,\n\t\tplaceholder: opts.placeholder,\n\t\tfilter:\n\t\t\topts.filter ??\n\t\t\t((search: string, opt: Option<Value>) => {\n\t\t\t\treturn getFilteredOption(search, opt);\n\t\t\t}),\n\t\tsignal: opts.signal,\n\t\tinput: opts.input,\n\t\toutput: opts.output,\n\t\tvalidate: opts.validate,\n\t\trender() {\n\t\t\tconst hasGuide = opts.withGuide ?? settings.withGuide;\n\t\t\t// Title and message display\n\t\t\tconst headings = hasGuide\n\t\t\t\t? [`${styleText('gray', S_BAR)}`, `${symbol(this.state)} ${opts.message}`]\n\t\t\t\t: [`${symbol(this.state)} ${opts.message}`];\n\t\t\tconst userInput = this.userInput;\n\t\t\tconst options = this.options;\n\t\t\tconst placeholder = opts.placeholder;\n\t\t\tconst showPlaceholder = userInput === '' && placeholder !== undefined;\n\t\t\tconst opt = (option: Option<Value>, state: 'inactive' | 'active' | 'disabled') => {\n\t\t\t\tconst label = getLabel(option);\n\t\t\t\tconst hint =\n\t\t\t\t\toption.hint && option.value === this.focusedValue\n\t\t\t\t\t\t? styleText('dim', ` (${option.hint})`)\n\t\t\t\t\t\t: '';\n\t\t\t\tswitch (state) {\n\t\t\t\t\tcase 'active':\n\t\t\t\t\t\treturn `${styleText('green', S_RADIO_ACTIVE)} ${label}${hint}`;\n\t\t\t\t\tcase 'inactive':\n\t\t\t\t\t\treturn `${styleText('dim', S_RADIO_INACTIVE)} ${styleText('dim', label)}`;\n\t\t\t\t\tcase 'disabled':\n\t\t\t\t\t\treturn `${styleText('gray', S_RADIO_INACTIVE)} ${styleText(['strikethrough', 'gray'], label)}`;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Handle different states\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\t// Show selected value\n\t\t\t\t\tconst selected = getSelectedOptions(this.selectedValues, options);\n\t\t\t\t\tconst label =\n\t\t\t\t\t\tselected.length > 0 ? ` ${styleText('dim', selected.map(getLabel).join(', '))}` : '';\n\t\t\t\t\tconst submitPrefix = hasGuide ? styleText('gray', S_BAR) : '';\n\t\t\t\t\treturn `${headings.join('\\n')}\\n${submitPrefix}${label}`;\n\t\t\t\t}\n\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst userInputText = userInput\n\t\t\t\t\t\t? ` ${styleText(['strikethrough', 'dim'], userInput)}`\n\t\t\t\t\t\t: '';\n\t\t\t\t\tconst cancelPrefix = hasGuide ? styleText('gray', S_BAR) : '';\n\t\t\t\t\treturn `${headings.join('\\n')}\\n${cancelPrefix}${userInputText}`;\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\tconst barStyle = this.state === 'error' ? 'yellow' : 'cyan';\n\t\t\t\t\tconst guidePrefix = hasGuide ? `${styleText(barStyle, S_BAR)} ` : '';\n\t\t\t\t\tconst guidePrefixEnd = hasGuide ? styleText(barStyle, S_BAR_END) : '';\n\t\t\t\t\t// Display cursor position - show plain text in navigation mode\n\t\t\t\t\tlet searchText = '';\n\t\t\t\t\tif (this.isNavigating || showPlaceholder) {\n\t\t\t\t\t\tconst searchTextValue = showPlaceholder ? placeholder : userInput;\n\t\t\t\t\t\tsearchText = searchTextValue !== '' ? ` ${styleText('dim', searchTextValue)}` : '';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsearchText = ` ${this.userInputWithCursor}`;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Show match count if filtered\n\t\t\t\t\tconst matches =\n\t\t\t\t\t\tthis.filteredOptions.length !== options.length\n\t\t\t\t\t\t\t? styleText(\n\t\t\t\t\t\t\t\t\t'dim',\n\t\t\t\t\t\t\t\t\t` (${this.filteredOptions.length} match${this.filteredOptions.length === 1 ? '' : 'es'})`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: '';\n\n\t\t\t\t\t// No matches message\n\t\t\t\t\tconst noResults =\n\t\t\t\t\t\tthis.filteredOptions.length === 0 && userInput\n\t\t\t\t\t\t\t? [`${guidePrefix}${styleText('yellow', 'No matches found')}`]\n\t\t\t\t\t\t\t: [];\n\n\t\t\t\t\tconst validationError =\n\t\t\t\t\t\tthis.state === 'error' ? [`${guidePrefix}${styleText('yellow', this.error)}`] : [];\n\n\t\t\t\t\tif (hasGuide) {\n\t\t\t\t\t\theadings.push(`${guidePrefix.trimEnd()}`);\n\t\t\t\t\t}\n\t\t\t\t\theadings.push(\n\t\t\t\t\t\t`${guidePrefix}${styleText('dim', 'Search:')}${searchText}${matches}`,\n\t\t\t\t\t\t...noResults,\n\t\t\t\t\t\t...validationError\n\t\t\t\t\t);\n\n\t\t\t\t\t// Show instructions\n\t\t\t\t\tconst instructions = [\n\t\t\t\t\t\t`${styleText('dim', '↑/↓')} to select`,\n\t\t\t\t\t\t`${styleText('dim', 'Enter:')} confirm`,\n\t\t\t\t\t\t`${styleText('dim', 'Type:')} to search`,\n\t\t\t\t\t];\n\n\t\t\t\t\tconst footers = [`${guidePrefix}${instructions.join(' • ')}`, guidePrefixEnd];\n\n\t\t\t\t\t// Render options with selection\n\t\t\t\t\tconst displayOptions =\n\t\t\t\t\t\tthis.filteredOptions.length === 0\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: limitOptions({\n\t\t\t\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\t\t\t\toptions: this.filteredOptions,\n\t\t\t\t\t\t\t\t\tcolumnPadding: hasGuide ? 3 : 0, // for `| ` when guide is shown\n\t\t\t\t\t\t\t\t\trowPadding: headings.length + footers.length,\n\t\t\t\t\t\t\t\t\tstyle: (option, active) => {\n\t\t\t\t\t\t\t\t\t\treturn opt(\n\t\t\t\t\t\t\t\t\t\t\toption,\n\t\t\t\t\t\t\t\t\t\t\toption.disabled ? 'disabled' : active ? 'active' : 'inactive'\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\t\t\t\toutput: opts.output,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t// Return the formatted prompt\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...headings,\n\t\t\t\t\t\t...displayOptions.map((option) => `${guidePrefix}${option}`),\n\t\t\t\t\t\t...footers,\n\t\t\t\t\t].join('\\n');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t});\n\n\t// Return the result or cancel symbol\n\treturn prompt.prompt() as Promise<Value | symbol>;\n};\n\n// Type definition for the autocompleteMultiselect component\nexport interface AutocompleteMultiSelectOptions<Value> extends AutocompleteSharedOptions<Value> {\n\t/**\n\t * The initial selected values\n\t */\n\tinitialValues?: Value[];\n\t/**\n\t * If true, at least one option must be selected\n\t */\n\trequired?: boolean;\n}\n\n/**\n * Integrated autocomplete multiselect - combines type-ahead filtering with multiselect in one UI\n */\nexport const autocompleteMultiselect = <Value>(opts: AutocompleteMultiSelectOptions<Value>) => {\n\tconst formatOption = (\n\t\toption: Option<Value>,\n\t\tactive: boolean,\n\t\tselectedValues: Value[],\n\t\tfocusedValue: Value | undefined\n\t) => {\n\t\tconst isSelected = selectedValues.includes(option.value);\n\t\tconst label = option.label ?? String(option.value ?? '');\n\t\tconst hint =\n\t\t\toption.hint && focusedValue !== undefined && option.value === focusedValue\n\t\t\t\t? styleText('dim', ` (${option.hint})`)\n\t\t\t\t: '';\n\t\tconst checkbox = isSelected\n\t\t\t? styleText('green', S_CHECKBOX_SELECTED)\n\t\t\t: styleText('dim', S_CHECKBOX_INACTIVE);\n\n\t\tif (option.disabled) {\n\t\t\treturn `${styleText('gray', S_CHECKBOX_INACTIVE)} ${styleText(['strikethrough', 'gray'], label)}`;\n\t\t}\n\t\tif (active) {\n\t\t\treturn `${checkbox} ${label}${hint}`;\n\t\t}\n\t\treturn `${checkbox} ${styleText('dim', label)}`;\n\t};\n\n\t// Create text prompt which we'll use as foundation\n\tconst prompt = new AutocompletePrompt<Option<Value>>({\n\t\toptions: opts.options,\n\t\tmultiple: true,\n\t\tplaceholder: opts.placeholder,\n\t\tfilter:\n\t\t\topts.filter ??\n\t\t\t((search, opt) => {\n\t\t\t\treturn getFilteredOption(search, opt);\n\t\t\t}),\n\t\tvalidate: () => {\n\t\t\tif (opts.required && prompt.selectedValues.length === 0) {\n\t\t\t\treturn 'Please select at least one item';\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\tinitialValue: opts.initialValues,\n\t\tsignal: opts.signal,\n\t\tinput: opts.input,\n\t\toutput: opts.output,\n\t\trender() {\n\t\t\tconst hasGuide = opts.withGuide ?? settings.withGuide;\n\t\t\t// Title and symbol\n\t\t\tconst title = `${hasGuide ? `${styleText('gray', S_BAR)}\\n` : ''}${symbol(this.state)} ${\n\t\t\t\topts.message\n\t\t\t}\\n`;\n\n\t\t\t// Selection counter\n\t\t\tconst userInput = this.userInput;\n\t\t\tconst placeholder = opts.placeholder;\n\t\t\tconst showPlaceholder = userInput === '' && placeholder !== undefined;\n\n\t\t\t// Search input display\n\t\t\tconst searchText =\n\t\t\t\tthis.isNavigating || showPlaceholder\n\t\t\t\t\t? styleText('dim', showPlaceholder ? placeholder : userInput) // Just show plain text when in navigation mode\n\t\t\t\t\t: this.userInputWithCursor;\n\n\t\t\tconst options = this.options;\n\n\t\t\tconst matches =\n\t\t\t\tthis.filteredOptions.length !== options.length\n\t\t\t\t\t? styleText(\n\t\t\t\t\t\t\t'dim',\n\t\t\t\t\t\t\t` (${this.filteredOptions.length} match${this.filteredOptions.length === 1 ? '' : 'es'})`\n\t\t\t\t\t\t)\n\t\t\t\t\t: '';\n\n\t\t\t// Render prompt state\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${hasGuide ? `${styleText('gray', S_BAR)} ` : ''}${styleText(\n\t\t\t\t\t\t'dim',\n\t\t\t\t\t\t`${this.selectedValues.length} items selected`\n\t\t\t\t\t)}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\treturn `${title}${hasGuide ? `${styleText('gray', S_BAR)} ` : ''}${styleText(\n\t\t\t\t\t\t['strikethrough', 'dim'],\n\t\t\t\t\t\tuserInput\n\t\t\t\t\t)}`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst barStyle = this.state === 'error' ? 'yellow' : 'cyan';\n\t\t\t\t\tconst guidePrefix = hasGuide ? `${styleText(barStyle, S_BAR)} ` : '';\n\t\t\t\t\tconst guidePrefixEnd = hasGuide ? styleText(barStyle, S_BAR_END) : '';\n\t\t\t\t\t// Instructions\n\t\t\t\t\tconst instructions = [\n\t\t\t\t\t\t`${styleText('dim', '↑/↓')} to navigate`,\n\t\t\t\t\t\t`${styleText('dim', this.isNavigating ? 'Space/Tab:' : 'Tab:')} select`,\n\t\t\t\t\t\t`${styleText('dim', 'Enter:')} confirm`,\n\t\t\t\t\t\t`${styleText('dim', 'Type:')} to search`,\n\t\t\t\t\t];\n\n\t\t\t\t\t// No results message\n\t\t\t\t\tconst noResults =\n\t\t\t\t\t\tthis.filteredOptions.length === 0 && userInput\n\t\t\t\t\t\t\t? [`${guidePrefix}${styleText('yellow', 'No matches found')}`]\n\t\t\t\t\t\t\t: [];\n\n\t\t\t\t\tconst errorMessage =\n\t\t\t\t\t\tthis.state === 'error' ? [`${guidePrefix}${styleText('yellow', this.error)}`] : [];\n\n\t\t\t\t\t// Calculate header and footer line counts for rowPadding\n\t\t\t\t\tconst headerLines = [\n\t\t\t\t\t\t...`${title}${hasGuide ? styleText(barStyle, S_BAR) : ''}`.split('\\n'),\n\t\t\t\t\t\t`${guidePrefix}${styleText('dim', 'Search:')} ${searchText}${matches}`,\n\t\t\t\t\t\t...noResults,\n\t\t\t\t\t\t...errorMessage,\n\t\t\t\t\t];\n\t\t\t\t\tconst footerLines = [`${guidePrefix}${instructions.join(' • ')}`, guidePrefixEnd];\n\n\t\t\t\t\t// Get limited options for display\n\t\t\t\t\tconst displayOptions = limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.filteredOptions,\n\t\t\t\t\t\tstyle: (option, active) =>\n\t\t\t\t\t\t\tformatOption(option, active, this.selectedValues, this.focusedValue),\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\toutput: opts.output,\n\t\t\t\t\t\trowPadding: headerLines.length + footerLines.length,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Build the prompt display\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...headerLines,\n\t\t\t\t\t\t...displayOptions.map((option) => `${guidePrefix}${option}`),\n\t\t\t\t\t\t...footerLines,\n\t\t\t\t\t].join('\\n');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t});\n\n\t// Return the result or cancel symbol\n\treturn prompt.prompt() as Promise<Value[] | symbol>;\n};\n","import type { Writable } from 'node:stream';\nimport { getColumns, settings } from '@clack/core';\nimport stringWidth from 'fast-string-width';\nimport { wrapAnsi } from 'fast-wrap-ansi';\nimport {\n\ttype CommonOptions,\n\tS_BAR,\n\tS_BAR_END,\n\tS_BAR_END_RIGHT,\n\tS_BAR_H,\n\tS_BAR_START,\n\tS_BAR_START_RIGHT,\n\tS_CORNER_BOTTOM_LEFT,\n\tS_CORNER_BOTTOM_RIGHT,\n\tS_CORNER_TOP_LEFT,\n\tS_CORNER_TOP_RIGHT,\n} from './common.js';\n\nexport type BoxAlignment = 'left' | 'center' | 'right';\n\ntype BoxSymbols = [topLeft: string, topRight: string, bottomLeft: string, bottomRight: string];\n\nconst roundedSymbols: BoxSymbols = [\n\tS_CORNER_TOP_LEFT,\n\tS_CORNER_TOP_RIGHT,\n\tS_CORNER_BOTTOM_LEFT,\n\tS_CORNER_BOTTOM_RIGHT,\n];\nconst squareSymbols: BoxSymbols = [S_BAR_START, S_BAR_START_RIGHT, S_BAR_END, S_BAR_END_RIGHT];\n\nexport interface BoxOptions extends CommonOptions {\n\tcontentAlign?: BoxAlignment;\n\ttitleAlign?: BoxAlignment;\n\twidth?: number | 'auto';\n\ttitlePadding?: number;\n\tcontentPadding?: number;\n\trounded?: boolean;\n\tformatBorder?: (text: string) => string;\n}\n\nfunction getPaddingForLine(\n\tlineLength: number,\n\tinnerWidth: number,\n\tpadding: number,\n\tcontentAlign: BoxAlignment | undefined\n): [number, number] {\n\tlet leftPadding = padding;\n\tlet rightPadding = padding;\n\tif (contentAlign === 'center') {\n\t\tleftPadding = Math.floor((innerWidth - lineLength) / 2);\n\t} else if (contentAlign === 'right') {\n\t\tleftPadding = innerWidth - lineLength - padding;\n\t}\n\n\trightPadding = innerWidth - leftPadding - lineLength;\n\n\treturn [leftPadding, rightPadding];\n}\n\nconst defaultFormatBorder = (text: string) => text;\n\nexport const box = (message = '', title = '', opts?: BoxOptions) => {\n\tconst output: Writable = opts?.output ?? process.stdout;\n\tconst columns = getColumns(output);\n\tconst borderWidth = 1;\n\tconst borderTotalWidth = borderWidth * 2;\n\tconst titlePadding = opts?.titlePadding ?? 1;\n\tconst contentPadding = opts?.contentPadding ?? 2;\n\tconst width = opts?.width === undefined || opts.width === 'auto' ? 1 : Math.min(1, opts.width);\n\tconst hasGuide = opts?.withGuide ?? settings.withGuide;\n\tconst linePrefix = !hasGuide ? '' : `${S_BAR} `;\n\tconst formatBorder = opts?.formatBorder ?? defaultFormatBorder;\n\tconst symbols = (opts?.rounded ? roundedSymbols : squareSymbols).map(formatBorder);\n\tconst hSymbol = formatBorder(S_BAR_H);\n\tconst vSymbol = formatBorder(S_BAR);\n\tconst linePrefixWidth = stringWidth(linePrefix);\n\tconst titleWidth = stringWidth(title);\n\tconst maxBoxWidth = columns - linePrefixWidth;\n\tlet boxWidth = Math.floor(columns * width) - linePrefixWidth;\n\tif (opts?.width === 'auto') {\n\t\tconst lines = message.split('\\n');\n\t\tlet longestLine = titleWidth + titlePadding * 2;\n\t\tfor (const line of lines) {\n\t\t\tconst lineWithPadding = stringWidth(line) + contentPadding * 2;\n\t\t\tif (lineWithPadding > longestLine) {\n\t\t\t\tlongestLine = lineWithPadding;\n\t\t\t}\n\t\t}\n\t\tconst longestLineWidth = longestLine + borderTotalWidth;\n\t\tif (longestLineWidth < boxWidth) {\n\t\t\tboxWidth = longestLineWidth;\n\t\t}\n\t}\n\tif (boxWidth % 2 !== 0) {\n\t\tif (boxWidth < maxBoxWidth) {\n\t\t\tboxWidth++;\n\t\t} else {\n\t\t\tboxWidth--;\n\t\t}\n\t}\n\tconst innerWidth = boxWidth - borderTotalWidth;\n\tconst maxTitleLength = innerWidth - titlePadding * 2;\n\tconst truncatedTitle =\n\t\ttitleWidth > maxTitleLength ? `${title.slice(0, maxTitleLength - 3)}...` : title;\n\tconst [titlePaddingLeft, titlePaddingRight] = getPaddingForLine(\n\t\tstringWidth(truncatedTitle),\n\t\tinnerWidth,\n\t\ttitlePadding,\n\t\topts?.titleAlign\n\t);\n\tconst wrappedMessage = wrapAnsi(message, innerWidth - contentPadding * 2, {\n\t\thard: true,\n\t\ttrim: false,\n\t});\n\toutput.write(\n\t\t`${linePrefix}${symbols[0]}${hSymbol.repeat(titlePaddingLeft)}${truncatedTitle}${hSymbol.repeat(titlePaddingRight)}${symbols[1]}\\n`\n\t);\n\tconst wrappedLines = wrappedMessage.split('\\n');\n\tfor (const line of wrappedLines) {\n\t\tconst [leftLinePadding, rightLinePadding] = getPaddingForLine(\n\t\t\tstringWidth(line),\n\t\t\tinnerWidth,\n\t\t\tcontentPadding,\n\t\t\topts?.contentAlign\n\t\t);\n\t\toutput.write(\n\t\t\t`${linePrefix}${vSymbol}${' '.repeat(leftLinePadding)}${line}${' '.repeat(rightLinePadding)}${vSymbol}\\n`\n\t\t);\n\t}\n\toutput.write(`${linePrefix}${symbols[2]}${hSymbol.repeat(innerWidth)}${symbols[3]}\\n`);\n};\n","import { styleText } from 'node:util';\nimport { ConfirmPrompt, settings, wrapTextWithPrefix } from '@clack/core';\nimport {\n\ttype CommonOptions,\n\tS_BAR,\n\tS_BAR_END,\n\tS_RADIO_ACTIVE,\n\tS_RADIO_INACTIVE,\n\tsymbol,\n} from './common.js';\n\nexport interface ConfirmOptions extends CommonOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n\tvertical?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tsignal: opts.signal,\n\t\tinput: opts.input,\n\t\toutput: opts.output,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst hasGuide = opts.withGuide ?? settings.withGuide;\n\t\t\tconst titlePrefix = `${symbol(this.state)} `;\n\t\t\tconst titlePrefixBar = hasGuide ? `${styleText('gray', S_BAR)} ` : '';\n\t\t\tconst messageLines = wrapTextWithPrefix(\n\t\t\t\topts.output,\n\t\t\t\topts.message,\n\t\t\t\ttitlePrefixBar,\n\t\t\t\ttitlePrefix\n\t\t\t);\n\t\t\tconst title = `${hasGuide ? `${styleText('gray', S_BAR)}\\n` : ''}${messageLines}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\tconst submitPrefix = hasGuide ? `${styleText('gray', S_BAR)} ` : '';\n\t\t\t\t\treturn `${title}${submitPrefix}${styleText('dim', value)}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst cancelPrefix = hasGuide ? `${styleText('gray', S_BAR)} ` : '';\n\t\t\t\t\treturn `${title}${cancelPrefix}${styleText(['strikethrough', 'dim'], value)}${\n\t\t\t\t\t\thasGuide ? `\\n${styleText('gray', S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst defaultPrefix = hasGuide ? `${styleText('cyan', S_BAR)} ` : '';\n\t\t\t\t\tconst defaultPrefixEnd = hasGuide ? styleText('cyan', S_BAR_END) : '';\n\t\t\t\t\treturn `${title}${defaultPrefix}${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${styleText('green', S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${styleText('dim', S_RADIO_INACTIVE)} ${styleText('dim', active)}`\n\t\t\t\t\t}${opts.vertical ? (hasGuide ? `\\n${styleText('cyan', S_BAR)} ` : '\\n') : ` ${styleText('dim', '/')} `}${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${styleText('green', S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${styleText('dim', S_RADIO_INACTIVE)} ${styleText('dim', inactive)}`\n\t\t\t\t\t}\\n${defaultPrefixEnd}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<boolean | symbol>;\n};\n","import { styleText } from 'node:util';\nimport type { DateFormat, State } from '@clack/core';\nimport { DatePrompt, settings } from '@clack/core';\nimport { type CommonOptions, S_BAR, S_BAR_END, symbol } from './common.js';\n\nexport type { DateFormat };\n\nexport interface DateOptions extends CommonOptions {\n\tmessage: string;\n\tformat?: DateFormat;\n\tlocale?: string;\n\tdefaultValue?: Date;\n\tinitialValue?: Date;\n\tminDate?: Date;\n\tmaxDate?: Date;\n\tvalidate?: (value: Date | undefined) => string | Error | undefined;\n}\n\nexport const date = (opts: DateOptions) => {\n\tconst validate = opts.validate;\n\treturn new DatePrompt({\n\t\t...opts,\n\t\tvalidate(value: Date | undefined) {\n\t\t\tif (value === undefined) {\n\t\t\t\tif (opts.defaultValue !== undefined) return undefined;\n\t\t\t\tif (validate) return validate(value);\n\t\t\t\treturn settings.date.messages.required;\n\t\t\t}\n\t\t\tconst iso = (d: Date) => d.toISOString().slice(0, 10);\n\t\t\tif (opts.minDate && iso(value) < iso(opts.minDate)) {\n\t\t\t\treturn settings.date.messages.afterMin(opts.minDate);\n\t\t\t}\n\t\t\tif (opts.maxDate && iso(value) > iso(opts.maxDate)) {\n\t\t\t\treturn settings.date.messages.beforeMax(opts.maxDate);\n\t\t\t}\n\t\t\tif (validate) return validate(value);\n\t\t\treturn undefined;\n\t\t},\n\t\trender() {\n\t\t\tconst hasGuide = (opts?.withGuide ?? settings.withGuide) !== false;\n\t\t\tconst titlePrefix = `${hasGuide ? `${styleText('gray', S_BAR)}\\n` : ''}${symbol(this.state)} `;\n\t\t\tconst title = `${titlePrefix}${opts.message}\\n`;\n\n\t\t\tconst state = this.state !== 'initial' ? this.state : 'active';\n\n\t\t\tconst userInput = renderDate(this, state);\n\t\t\tconst value = this.value instanceof Date ? this.formattedValue : '';\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst errorText = this.error ? ` ${styleText('yellow', this.error)}` : '';\n\t\t\t\t\tconst bar = hasGuide ? `${styleText('yellow', S_BAR)} ` : '';\n\t\t\t\t\tconst barEnd = hasGuide ? styleText('yellow', S_BAR_END) : '';\n\t\t\t\t\treturn `${title.trim()}\\n${bar}${userInput}\\n${barEnd}${errorText}\\n`;\n\t\t\t\t}\n\t\t\t\tcase 'submit': {\n\t\t\t\t\tconst valueText = value ? ` ${styleText('dim', value)}` : '';\n\t\t\t\t\tconst bar = hasGuide ? styleText('gray', S_BAR) : '';\n\t\t\t\t\treturn `${title}${bar}${valueText}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst valueText = value ? ` ${styleText(['strikethrough', 'dim'], value)}` : '';\n\t\t\t\t\tconst bar = hasGuide ? styleText('gray', S_BAR) : '';\n\t\t\t\t\treturn `${title}${bar}${valueText}${value.trim() ? `\\n${bar}` : ''}`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst bar = hasGuide ? `${styleText('cyan', S_BAR)} ` : '';\n\t\t\t\t\tconst barEnd = hasGuide ? styleText('cyan', S_BAR_END) : '';\n\t\t\t\t\tconst inlineBar = hasGuide ? `${styleText('cyan', S_BAR)} ` : '';\n\t\t\t\t\tconst inlineError = this.inlineError\n\t\t\t\t\t\t? `\\n${inlineBar}${styleText('yellow', this.inlineError)}`\n\t\t\t\t\t\t: '';\n\t\t\t\t\treturn `${title}${bar}${userInput}${inlineError}\\n${barEnd}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Date | symbol>;\n};\n\nfunction renderDate(prompt: Omit<InstanceType<typeof DatePrompt>, 'prompt'>, state: State): string {\n\tconst parts = prompt.segmentValues;\n\tconst cursor = prompt.segmentCursor;\n\n\tif (state === 'submit' || state === 'cancel') {\n\t\treturn prompt.formattedValue;\n\t}\n\n\tconst sep = styleText('gray', prompt.separator);\n\treturn prompt.segments\n\t\t.map((seg, i) => {\n\t\t\tconst isActive = i === cursor.segmentIndex && !['submit', 'cancel'].includes(state);\n\t\t\tconst label = DEFAULT_LABELS[seg.type];\n\t\t\treturn renderSegment(parts[seg.type], { isActive, label });\n\t\t})\n\t\t.join(sep);\n}\n\ninterface SegmentOptions {\n\tisActive: boolean;\n\tlabel: string;\n}\nfunction renderSegment(value: string, opts: SegmentOptions): string {\n\tconst isBlank = !value || value.replace(/_/g, '') === '';\n\tif (opts.isActive) return styleText('inverse', isBlank ? opts.label : value.replace(/_/g, ' '));\n\tif (isBlank) return styleText('dim', opts.label);\n\treturn value.replace(/_/g, styleText('dim', ' '));\n}\n\nconst DEFAULT_LABELS: Record<'year' | 'month' | 'day', string> = {\n\tyear: 'yyyy',\n\tmonth: 'mm',\n\tday: 'dd',\n};\n","import { isCancel } from '@clack/core';\n\ntype Prettify<T> = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroupAwaitedReturn<T> = {\n\t[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;\n};\n\nexport interface PromptGroupOptions<T> {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify<Partial<PromptGroupAwaitedReturn<T>>> }) => void;\n}\n\nexport type PromptGroup<T> = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;\n\t}) => undefined | Promise<T[P] | undefined>;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async <T>(\n\tprompts: PromptGroup<T>,\n\topts?: PromptGroupOptions<T>\n): Promise<Prettify<PromptGroupAwaitedReturn<T>>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n","import { styleText } from 'node:util';\nimport { GroupMultiSelectPrompt, settings } from '@clack/core';\nimport {\n\ttype CommonOptions,\n\tS_BAR,\n\tS_BAR_END,\n\tS_CHECKBOX_ACTIVE,\n\tS_CHECKBOX_INACTIVE,\n\tS_CHECKBOX_SELECTED,\n\tsymbol,\n} from './common.js';\nimport type { Option } from './select.js';\n\nexport interface GroupMultiSelectOptions<Value> extends CommonOptions {\n\tmessage: string;\n\toptions: Record<string, Option<Value>[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n\tselectableGroups?: boolean;\n\tgroupSpacing?: number;\n}\nexport const groupMultiselect = <Value>(opts: GroupMultiSelectOptions<Value>) => {\n\tconst { selectableGroups = true, groupSpacing = 0 } = opts;\n\tconst opt = (\n\t\toption: Option<Value> & { group: string | boolean },\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: (Option<Value> & { group: string | boolean })[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof option.group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && next && next.group === true;\n\t\tconst prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : ' ') : '';\n\t\tlet spacingPrefix = '';\n\t\tif (groupSpacing > 0 && !isItem) {\n\t\t\tconst spacingPrefixText = `\\n${styleText('cyan', S_BAR)}`;\n\t\t\tspacingPrefix = `${spacingPrefixText.repeat(groupSpacing - 1)}${spacingPrefixText} `;\n\t\t}\n\n\t\tif (state === 'active') {\n\t\t\treturn `${spacingPrefix}${styleText('dim', prefix)}${styleText('cyan', S_CHECKBOX_ACTIVE)} ${label}${\n\t\t\t\toption.hint ? ` ${styleText('dim', `(${option.hint})`)}` : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${spacingPrefix}${prefix}${styleText('cyan', S_CHECKBOX_ACTIVE)} ${styleText('dim', label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${spacingPrefix}${prefix}${styleText('green', S_CHECKBOX_SELECTED)} ${styleText('dim', label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\tconst selectedCheckbox =\n\t\t\t\tisItem || selectableGroups ? styleText('green', S_CHECKBOX_SELECTED) : '';\n\t\t\treturn `${spacingPrefix}${styleText('dim', prefix)}${selectedCheckbox} ${styleText('dim', label)}${\n\t\t\t\toption.hint ? ` ${styleText('dim', `(${option.hint})`)}` : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${styleText(['strikethrough', 'dim'], label)}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${spacingPrefix}${styleText('dim', prefix)}${styleText('green', S_CHECKBOX_SELECTED)} ${label}${\n\t\t\t\toption.hint ? ` ${styleText('dim', `(${option.hint})`)}` : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${styleText('dim', label)}`;\n\t\t}\n\t\tconst unselectedCheckbox =\n\t\t\tisItem || selectableGroups ? styleText('dim', S_CHECKBOX_INACTIVE) : '';\n\t\treturn `${spacingPrefix}${styleText('dim', prefix)}${unselectedCheckbox} ${styleText('dim', label)}`;\n\t};\n\tconst required = opts.required ?? true;\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tsignal: opts.signal,\n\t\tinput: opts.input,\n\t\toutput: opts.output,\n\t\tinitialValues: opts.initialValues,\n\t\trequired,\n\t\tcursorAt: opts.cursorAt,\n\t\tselectableGroups,\n\t\tvalidate(selected: Value[] | undefined) {\n\t\t\tif (required && (selected === undefined || selected.length === 0))\n\t\t\t\treturn `Please select at least one option.\\n${styleText(\n\t\t\t\t\t'reset',\n\t\t\t\t\tstyleText(\n\t\t\t\t\t\t'dim',\n\t\t\t\t\t\t`Press ${styleText(['gray', 'bgWhite', 'inverse'], ' space ')} to select, ${styleText(\n\t\t\t\t\t\t\t'gray',\n\t\t\t\t\t\t\tstyleText(['bgWhite', 'inverse'], ' enter ')\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst hasGuide = opts.withGuide ?? settings.withGuide;\n\t\t\tconst title = `${hasGuide ? `${styleText('gray', S_BAR)}\\n` : ''}${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ?? [];\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\tconst selectedOptions = this.options\n\t\t\t\t\t\t.filter(({ value: optionValue }) => value.includes(optionValue))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'));\n\t\t\t\t\tconst optionsText =\n\t\t\t\t\t\tselectedOptions.length === 0 ? '' : ` ${selectedOptions.join(styleText('dim', ', '))}`;\n\t\t\t\t\treturn `${title}${hasGuide ? styleText('gray', S_BAR) : ''}${optionsText}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value: optionValue }) => value.includes(optionValue))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(styleText('dim', ', '));\n\t\t\t\t\treturn `${title}${hasGuide ? `${styleText('gray', S_BAR)} ` : ''}${\n\t\t\t\t\t\tlabel.trim() ? `${label}${hasGuide ? `\\n${styleText('gray', S_BAR)}` : ''}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0\n\t\t\t\t\t\t\t\t? `${hasGuide ? `${styleText('yellow', S_BAR_END)} ` : ''}${styleText('yellow', ln)}`\n\t\t\t\t\t\t\t\t: ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${hasGuide ? `${styleText('yellow', S_BAR)} ` : ''}${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tvalue.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${hasGuide ? `${styleText('yellow', S_BAR)} ` : ''}`)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst optionsText = this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tvalue.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tlet optionText = '';\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\toptionText = opt(\n\t\t\t\t\t\t\t\t\toption,\n\t\t\t\t\t\t\t\t\tselected ? 'group-active-selected' : 'group-active',\n\t\t\t\t\t\t\t\t\toptions\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else if (active && selected) {\n\t\t\t\t\t\t\t\toptionText = opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t} else if (selected) {\n\t\t\t\t\t\t\t\toptionText = opt(option, 'selected', options);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\toptionText = opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst prefix = i !== 0 && !optionText.startsWith('\\n') ? ' ' : '';\n\t\t\t\t\t\t\treturn `${prefix}${optionText}`;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${hasGuide ? styleText('cyan', S_BAR) : ''}`);\n\t\t\t\t\tconst optionsPrefix = optionsText.startsWith('\\n') ? '' : ' ';\n\t\t\t\t\treturn `${title}${hasGuide ? styleText('cyan', S_BAR) : ''}${optionsPrefix}${optionsText}\\n${\n\t\t\t\t\t\thasGuide ? styleText('cyan', S_BAR_END) : ''\n\t\t\t\t\t}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n","import { styleText } from 'node:util';\nimport { settings } from '@clack/core';\nimport {\n\ttype CommonOptions,\n\tS_BAR,\n\tS_ERROR,\n\tS_INFO,\n\tS_STEP_SUBMIT,\n\tS_SUCCESS,\n\tS_WARN,\n} from './common.js';\n\nexport interface LogMessageOptions extends CommonOptions {\n\tsymbol?: string;\n\tspacing?: number;\n\tsecondarySymbol?: string;\n}\n\nexport const log = {\n\tmessage: (\n\t\tmessage: string | string[] = [],\n\t\t{\n\t\t\tsymbol = styleText('gray', S_BAR),\n\t\t\tsecondarySymbol = styleText('gray', S_BAR),\n\t\t\toutput = process.stdout,\n\t\t\tspacing = 1,\n\t\t\twithGuide,\n\t\t}: LogMessageOptions = {}\n\t) => {\n\t\tconst parts: string[] = [];\n\t\tconst hasGuide = withGuide ?? settings.withGuide;\n\t\tconst spacingString = !hasGuide ? '' : secondarySymbol;\n\t\tconst prefix = !hasGuide ? '' : `${symbol} `;\n\t\tconst secondaryPrefix = !hasGuide ? '' : `${secondarySymbol} `;\n\n\t\tfor (let i = 0; i < spacing; i++) {\n\t\t\tparts.push(spacingString);\n\t\t}\n\n\t\tconst messageParts = Array.isArray(message) ? message : message.split('\\n');\n\t\tif (messageParts.length > 0) {\n\t\t\tconst [firstLine, ...lines] = messageParts;\n\t\t\tif (firstLine.length > 0) {\n\t\t\t\tparts.push(`${prefix}${firstLine}`);\n\t\t\t} else {\n\t\t\t\tparts.push(hasGuide ? symbol : '');\n\t\t\t}\n\t\t\tfor (const ln of lines) {\n\t\t\t\tif (ln.length > 0) {\n\t\t\t\t\tparts.push(`${secondaryPrefix}${ln}`);\n\t\t\t\t} else {\n\t\t\t\t\tparts.push(hasGuide ? secondarySymbol : '');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toutput.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string, opts?: LogMessageOptions) => {\n\t\tlog.message(message, { ...opts, symbol: styleText('blue', S_INFO) });\n\t},\n\tsuccess: (message: string, opts?: LogMessageOptions) => {\n\t\tlog.message(message, { ...opts, symbol: styleText('green', S_SUCCESS) });\n\t},\n\tstep: (message: string, opts?: LogMessageOptions) => {\n\t\tlog.message(message, { ...opts, symbol: styleText('green', S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string, opts?: LogMessageOptions) => {\n\t\tlog.message(message, { ...opts, symbol: styleText('yellow', S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string, opts?: LogMessageOptions) => {\n\t\tlog.warn(message, opts);\n\t},\n\terror: (message: string, opts?: LogMessageOptions) => {\n\t\tlog.message(message, { ...opts, symbol: styleText('red', S_ERROR) });\n\t},\n};\n","import type { Writable } from 'node:stream';\nimport { styleText } from 'node:util';\nimport { settings } from '@clack/core';\nimport { type CommonOptions, S_BAR, S_BAR_END, S_BAR_START } from './common.js';\n\nexport const cancel = (message = '', opts?: CommonOptions) => {\n\tconst output: Writable = opts?.output ?? process.stdout;\n\tconst hasGuide = opts?.withGuide ?? settings.withGuide;\n\tconst prefix = hasGuide ? `${styleText('gray', S_BAR_END)} ` : '';\n\toutput.write(`${prefix}${styleText('red', message)}\\n\\n`);\n};\n\nexport const intro = (title = '', opts?: CommonOptions) => {\n\tconst output: Writable = opts?.output ?? process.stdout;\n\tconst hasGuide = opts?.withGuide ?? settings.withGuide;\n\tconst prefix = hasGuide ? `${styleText('gray', S_BAR_START)} ` : '';\n\toutput.write(`${prefix}${title}\\n`);\n};\n\nexport const outro = (message = '', opts?: CommonOptions) => {\n\tconst output: Writable = opts?.output ?? process.stdout;\n\tconst hasGuide = opts?.withGuide ?? settings.withGuide;\n\tconst prefix = hasGuide ? `${styleText('gray', S_BAR)}\\n${styleText('gray', S_BAR_END)} ` : '';\n\toutput.write(`${prefix}${message}\\n\\n`);\n};\n","import { styleText } from 'node:util';\nimport { MultiSelectPrompt, settings, wrapTextWithPrefix } from '@clack/core';\nimport {\n\ttype CommonOptions,\n\tS_BAR,\n\tS_BAR_END,\n\tS_CHECKBOX_ACTIVE,\n\tS_CHECKBOX_INACTIVE,\n\tS_CHECKBOX_SELECTED,\n\tsymbol,\n\tsymbolBar,\n} from './common.js';\nimport { limitOptions } from './limit-options.js';\nimport type { Option } from './select.js';\n\nexport interface MultiSelectOptions<Value> extends CommonOptions {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nconst computeLabel = (label: string, format: (text: string) => string) => {\n\treturn label\n\t\t.split('\\n')\n\t\t.map((line) => format(line))\n\t\t.join('\\n');\n};\n\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled'\n\t\t\t| 'disabled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'disabled') {\n\t\t\treturn `${styleText('gray', S_CHECKBOX_INACTIVE)} ${computeLabel(label, (str) => styleText(['strikethrough', 'gray'], str))}${\n\t\t\t\toption.hint ? ` ${styleText('dim', `(${option.hint ?? 'disabled'})`)}` : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${styleText('cyan', S_CHECKBOX_ACTIVE)} ${label}${\n\t\t\t\toption.hint ? ` ${styleText('dim', `(${option.hint})`)}` : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${styleText('green', S_CHECKBOX_SELECTED)} ${computeLabel(label, (text) => styleText('dim', text))}${\n\t\t\t\toption.hint ? ` ${styleText('dim', `(${option.hint})`)}` : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${computeLabel(label, (text) => styleText(['strikethrough', 'dim'], text))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${styleText('green', S_CHECKBOX_SELECTED)} ${label}${\n\t\t\t\toption.hint ? ` ${styleText('dim', `(${option.hint})`)}` : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${computeLabel(label, (text) => styleText('dim', text))}`;\n\t\t}\n\t\treturn `${styleText('dim', S_CHECKBOX_INACTIVE)} ${computeLabel(label, (text) => styleText('dim', text))}`;\n\t};\n\tconst required = opts.required ?? true;\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tsignal: opts.signal,\n\t\tinput: opts.input,\n\t\toutput: opts.output,\n\t\tinitialValues: opts.initialValues,\n\t\trequired,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[] | undefined) {\n\t\t\tif (required && (selected === undefined || selected.length === 0))\n\t\t\t\treturn `Please select at least one option.\\n${styleText(\n\t\t\t\t\t'reset',\n\t\t\t\t\tstyleText(\n\t\t\t\t\t\t'dim',\n\t\t\t\t\t\t`Press ${styleText(['gray', 'bgWhite', 'inverse'], ' space ')} to select, ${styleText(\n\t\t\t\t\t\t\t'gray',\n\t\t\t\t\t\t\tstyleText('bgWhite', styleText('inverse', ' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst hasGuide = opts.withGuide ?? settings.withGuide;\n\t\t\tconst wrappedMessage = wrapTextWithPrefix(\n\t\t\t\topts.output,\n\t\t\t\topts.message,\n\t\t\t\thasGuide ? `${symbolBar(this.state)} ` : '',\n\t\t\t\t`${symbol(this.state)} `\n\t\t\t);\n\t\t\tconst title = `${hasGuide ? `${styleText('gray', S_BAR)}\\n` : ''}${wrappedMessage}\\n`;\n\t\t\tconst value = this.value ?? [];\n\n\t\t\tconst styleOption = (option: Option<Value>, active: boolean) => {\n\t\t\t\tif (option.disabled) {\n\t\t\t\t\treturn opt(option, 'disabled');\n\t\t\t\t}\n\t\t\t\tconst selected = value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\tconst submitText =\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value: optionValue }) => value.includes(optionValue))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(styleText('dim', ', ')) || styleText('dim', 'none');\n\t\t\t\t\tconst wrappedSubmitText = wrapTextWithPrefix(\n\t\t\t\t\t\topts.output,\n\t\t\t\t\t\tsubmitText,\n\t\t\t\t\t\thasGuide ? `${styleText('gray', S_BAR)} ` : ''\n\t\t\t\t\t);\n\t\t\t\t\treturn `${title}${wrappedSubmitText}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value: optionValue }) => value.includes(optionValue))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(styleText('dim', ', '));\n\t\t\t\t\tif (label.trim() === '') {\n\t\t\t\t\t\treturn `${title}${styleText('gray', S_BAR)}`;\n\t\t\t\t\t}\n\t\t\t\t\tconst wrappedLabel = wrapTextWithPrefix(\n\t\t\t\t\t\topts.output,\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\thasGuide ? `${styleText('gray', S_BAR)} ` : ''\n\t\t\t\t\t);\n\t\t\t\t\treturn `${title}${wrappedLabel}${hasGuide ? `\\n${styleText('gray', S_BAR)}` : ''}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst prefix = hasGuide ? `${styleText('yellow', S_BAR)} ` : '';\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0\n\t\t\t\t\t\t\t\t? `${hasGuide ? `${styleText('yellow', S_BAR_END)} ` : ''}${styleText('yellow', ln)}`\n\t\t\t\t\t\t\t\t: ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\t// Calculate rowPadding: title lines + footer lines (error message + trailing newline)\n\t\t\t\t\tconst titleLineCount = title.split('\\n').length;\n\t\t\t\t\tconst footerLineCount = footer.split('\\n').length + 1; // footer + trailing newline\n\t\t\t\t\treturn `${title}${prefix}${limitOptions({\n\t\t\t\t\t\toutput: opts.output,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tcolumnPadding: prefix.length,\n\t\t\t\t\t\trowPadding: titleLineCount + footerLineCount,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${prefix}`)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst prefix = hasGuide ? `${styleText('cyan', S_BAR)} ` : '';\n\t\t\t\t\t// Calculate rowPadding: title lines + footer lines (S_BAR_END + trailing newline)\n\t\t\t\t\tconst titleLineCount = title.split('\\n').length;\n\t\t\t\t\tconst footerLineCount = hasGuide ? 2 : 1; // S_BAR_END + trailing newline\n\t\t\t\t\treturn `${title}${prefix}${limitOptions({\n\t\t\t\t\t\toutput: opts.output,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tcolumnPadding: prefix.length,\n\t\t\t\t\t\trowPadding: titleLineCount + footerLineCount,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${prefix}`)}\\n${hasGuide ? styleText('cyan', S_BAR_END) : ''}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n","import process from 'node:process';\nimport type { Writable } from 'node:stream';\nimport { styleText } from 'node:util';\nimport { getColumns, settings } from '@clack/core';\nimport stringWidth from 'fast-string-width';\nimport { type Options as WrapAnsiOptions, wrapAnsi } from 'fast-wrap-ansi';\nimport {\n\ttype CommonOptions,\n\tS_BAR,\n\tS_BAR_H,\n\tS_CONNECT_LEFT,\n\tS_CORNER_BOTTOM_LEFT,\n\tS_CORNER_BOTTOM_RIGHT,\n\tS_CORNER_TOP_RIGHT,\n\tS_STEP_SUBMIT,\n} from './common.js';\n\ntype FormatFn = (line: string) => string;\nexport interface NoteOptions extends CommonOptions {\n\tformat?: FormatFn;\n}\n\nconst defaultNoteFormatter = (line: string): string => styleText('dim', line);\n\nconst wrapWithFormat = (message: string, width: number, format: FormatFn): string => {\n\tconst opts: WrapAnsiOptions = {\n\t\thard: true,\n\t\ttrim: false,\n\t};\n\tconst wrapMsg = wrapAnsi(message, width, opts).split('\\n');\n\tconst maxWidthNormal = wrapMsg.reduce((sum, ln) => Math.max(stringWidth(ln), sum), 0);\n\tconst maxWidthFormat = wrapMsg.map(format).reduce((sum, ln) => Math.max(stringWidth(ln), sum), 0);\n\tconst wrapWidth = width - (maxWidthFormat - maxWidthNormal);\n\treturn wrapAnsi(message, wrapWidth, opts);\n};\n\nexport const note = (message = '', title = '', opts?: NoteOptions) => {\n\tconst output: Writable = opts?.output ?? process.stdout;\n\tconst hasGuide = opts?.withGuide ?? settings.withGuide;\n\tconst format = opts?.format ?? defaultNoteFormatter;\n\tconst wrapMsg = wrapWithFormat(message, getColumns(output) - 6, format);\n\tconst lines = ['', ...wrapMsg.split('\\n').map(format), ''];\n\tconst titleLen = stringWidth(title);\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst width = stringWidth(ln);\n\t\t\t\treturn width > sum ? width : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${styleText('gray', S_BAR)} ${ln}${' '.repeat(len - stringWidth(ln))}${styleText('gray', S_BAR)}`\n\t\t)\n\t\t.join('\\n');\n\tconst leadingBorder = hasGuide ? `${styleText('gray', S_BAR)}\\n` : '';\n\tconst bottomLeft = hasGuide ? S_CONNECT_LEFT : S_CORNER_BOTTOM_LEFT;\n\toutput.write(\n\t\t`${leadingBorder}${styleText('green', S_STEP_SUBMIT)} ${styleText('reset', title)} ${styleText(\n\t\t\t'gray',\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${styleText('gray', bottomLeft + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n","import { styleText } from 'node:util';\nimport { PasswordPrompt, settings } from '@clack/core';\nimport { type CommonOptions, S_BAR, S_BAR_END, S_PASSWORD_MASK, symbol } from './common.js';\n\nexport interface PasswordOptions extends CommonOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string | undefined) => string | Error | undefined;\n\tclearOnError?: boolean;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\tsignal: opts.signal,\n\t\tinput: opts.input,\n\t\toutput: opts.output,\n\t\trender() {\n\t\t\tconst hasGuide = opts.withGuide ?? settings.withGuide;\n\t\t\tconst title = `${hasGuide ? `${styleText('gray', S_BAR)}\\n` : ''}${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst userInput = this.userInputWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst errorPrefix = hasGuide ? `${styleText('yellow', S_BAR)} ` : '';\n\t\t\t\t\tconst errorPrefixEnd = hasGuide ? `${styleText('yellow', S_BAR_END)} ` : '';\n\t\t\t\t\tconst maskedText = masked ?? '';\n\t\t\t\t\tif (opts.clearOnError) {\n\t\t\t\t\t\tthis.clear();\n\t\t\t\t\t}\n\t\t\t\t\treturn `${title.trim()}\\n${errorPrefix}${maskedText}\\n${errorPrefixEnd}${styleText('yellow', this.error)}\\n`;\n\t\t\t\t}\n\t\t\t\tcase 'submit': {\n\t\t\t\t\tconst submitPrefix = hasGuide ? `${styleText('gray', S_BAR)} ` : '';\n\t\t\t\t\tconst maskedText = masked ? styleText('dim', masked) : '';\n\t\t\t\t\treturn `${title}${submitPrefix}${maskedText}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst cancelPrefix = hasGuide ? `${styleText('gray', S_BAR)} ` : '';\n\t\t\t\t\tconst maskedText = masked ? styleText(['strikethrough', 'dim'], masked) : '';\n\t\t\t\t\treturn `${title}${cancelPrefix}${maskedText}${\n\t\t\t\t\t\tmasked && hasGuide ? `\\n${styleText('gray', S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst defaultPrefix = hasGuide ? `${styleText('cyan', S_BAR)} ` : '';\n\t\t\t\t\tconst defaultPrefixEnd = hasGuide ? styleText('cyan', S_BAR_END) : '';\n\t\t\t\t\treturn `${title}${defaultPrefix}${userInput}\\n${defaultPrefixEnd}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n","import { existsSync, lstatSync, readdirSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { autocomplete } from './autocomplete.js';\nimport type { CommonOptions } from './common.js';\n\nexport interface PathOptions extends CommonOptions {\n\troot?: string;\n\tdirectory?: boolean;\n\tinitialValue?: string;\n\tmessage: string;\n\tvalidate?: (value: string | undefined) => string | Error | undefined;\n}\n\nexport const path = (opts: PathOptions) => {\n\tconst validate = opts.validate;\n\n\treturn autocomplete({\n\t\t...opts,\n\t\tinitialUserInput: opts.initialValue ?? opts.root ?? process.cwd(),\n\t\tmaxItems: 5,\n\t\tvalidate(value) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\t// Shouldn't ever happen since we don't enable `multiple: true`\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (!value) {\n\t\t\t\treturn 'Please select a path';\n\t\t\t}\n\t\t\tif (validate) {\n\t\t\t\treturn validate(value);\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\toptions() {\n\t\t\tconst userInput = this.userInput;\n\t\t\tif (userInput === '') {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tlet searchPath: string;\n\n\t\t\t\tif (!existsSync(userInput)) {\n\t\t\t\t\tsearchPath = dirname(userInput);\n\t\t\t\t} else {\n\t\t\t\t\tconst stat = lstatSync(userInput);\n\t\t\t\t\tif (stat.isDirectory() && (!opts.directory || userInput.endsWith('/'))) {\n\t\t\t\t\t\tsearchPath = userInput;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsearchPath = dirname(userInput);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Strip trailing slash so startsWith matches the directory itself among its siblings\n\t\t\t\tconst prefix =\n\t\t\t\t\tuserInput.length > 1 && userInput.endsWith('/') ? userInput.slice(0, -1) : userInput;\n\n\t\t\t\tconst items = readdirSync(searchPath)\n\t\t\t\t\t.map((item) => {\n\t\t\t\t\t\tconst path = join(searchPath, item);\n\t\t\t\t\t\tconst stats = lstatSync(path);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tname: item,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\tisDirectory: stats.isDirectory(),\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t({ path, isDirectory }) => path.startsWith(prefix) && (isDirectory || !opts.directory)\n\t\t\t\t\t);\n\n\t\t\t\treturn items.map((item) => ({\n\t\t\t\t\tvalue: item.path,\n\t\t\t\t}));\n\t\t\t} catch (_e) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t});\n};\n","import { styleText } from 'node:util';\nimport { block, getColumns, settings } from '@clack/core';\nimport { wrapAnsi } from 'fast-wrap-ansi';\nimport { cursor, erase } from 'sisteransi';\nimport {\n\ttype CommonOptions,\n\tisCI as isCIFn,\n\tS_BAR,\n\tS_STEP_CANCEL,\n\tS_STEP_ERROR,\n\tS_STEP_SUBMIT,\n\tunicode,\n} from './common.js';\n\nexport interface SpinnerOptions extends CommonOptions {\n\tindicator?: 'dots' | 'timer';\n\tonCancel?: () => void;\n\tcancelMessage?: string;\n\terrorMessage?: string;\n\tframes?: string[];\n\tdelay?: number;\n\tstyleFrame?: (frame: string) => string;\n}\n\nexport interface SpinnerResult {\n\tstart(msg?: string): void;\n\tstop(msg?: string): void;\n\tcancel(msg?: string): void;\n\terror(msg?: string): void;\n\tmessage(msg?: string): void;\n\tclear(): void;\n\treadonly isCancelled: boolean;\n}\n\nconst defaultStyleFn: SpinnerOptions['styleFrame'] = (frame) => styleText('magenta', frame);\n\nexport const spinner = ({\n\tindicator = 'dots',\n\tonCancel,\n\toutput = process.stdout,\n\tcancelMessage,\n\terrorMessage,\n\tframes = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'],\n\tdelay = unicode ? 80 : 120,\n\tsignal,\n\t...opts\n}: SpinnerOptions = {}): SpinnerResult => {\n\tconst isCI = isCIFn();\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet isCancelled = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined;\n\tlet _origin: number = performance.now();\n\tconst columns = getColumns(output);\n\tconst styleFn = opts?.styleFrame ?? defaultStyleFn;\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg =\n\t\t\tcode > 1\n\t\t\t\t? (errorMessage ?? settings.messages.error)\n\t\t\t\t: (cancelMessage ?? settings.messages.cancel);\n\t\tisCancelled = code === 1;\n\t\tif (isSpinnerActive) {\n\t\t\t_stop(msg, code);\n\t\t\tif (isCancelled && typeof onCancel === 'function') {\n\t\t\t\tonCancel();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', signalEventHandler);\n\t\t}\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\n\t\tif (signal) {\n\t\t\tsignal.removeEventListener('abort', signalEventHandler);\n\t\t}\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) output.write('\\n');\n\t\tconst wrapped = wrapAnsi(_prevMessage, columns, {\n\t\t\thard: true,\n\t\t\ttrim: false,\n\t\t});\n\t\tconst prevLines = wrapped.split('\\n');\n\t\tif (prevLines.length > 1) {\n\t\t\toutput.write(cursor.up(prevLines.length - 1));\n\t\t}\n\t\toutput.write(cursor.to(0));\n\t\toutput.write(erase.down());\n\t};\n\n\tconst removeTrailingDots = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst hasGuide = opts.withGuide ?? settings.withGuide;\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block({ output });\n\t\t_message = removeTrailingDots(msg);\n\t\t_origin = performance.now();\n\t\tif (hasGuide) {\n\t\t\toutput.write(`${styleText('gray', S_BAR)}\\n`);\n\t\t}\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = styleFn(frames[frameIndex]);\n\t\t\tlet outputMessage: string;\n\n\t\t\tif (isCI) {\n\t\t\t\toutputMessage = `${frame} ${_message}...`;\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\toutputMessage = `${frame} ${_message} ${formatTimer(_origin)}`;\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\toutputMessage = `${frame} ${_message}${loadingDots}`;\n\t\t\t}\n\n\t\t\tconst wrapped = wrapAnsi(outputMessage, columns, {\n\t\t\t\thard: true,\n\t\t\t\ttrim: false,\n\t\t\t});\n\t\t\toutput.write(wrapped);\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\t// indicator increase by 1 every 8 frames\n\t\t\tindicatorTimer = indicatorTimer < 4 ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst _stop = (msg = '', code = 0, silent: boolean = false): void => {\n\t\tif (!isSpinnerActive) return;\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? styleText('green', S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? styleText('red', S_STEP_CANCEL)\n\t\t\t\t\t: styleText('red', S_STEP_ERROR);\n\t\t_message = msg ?? _message;\n\t\tif (!silent) {\n\t\t\tif (indicator === 'timer') {\n\t\t\t\toutput.write(`${step} ${_message} ${formatTimer(_origin)}\\n`);\n\t\t\t} else {\n\t\t\t\toutput.write(`${step} ${_message}\\n`);\n\t\t\t}\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst stop = (msg = ''): void => _stop(msg, 0);\n\tconst cancel = (msg = ''): void => _stop(msg, 1);\n\tconst error = (msg = ''): void => _stop(msg, 2);\n\t// TODO (43081j): this will leave the initial S_BAR since we purposely\n\t// don't erase that in `clearPrevMessage`. In future, we may want to treat\n\t// `clear` as a special case and remove the bar too.\n\tconst clear = (): void => _stop('', 0, true);\n\n\tconst message = (msg = ''): void => {\n\t\t_message = removeTrailingDots(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t\tcancel,\n\t\terror,\n\t\tclear,\n\t\tget isCancelled() {\n\t\t\treturn isCancelled;\n\t\t},\n\t};\n};\n","import { styleText } from 'node:util';\nimport type { State } from '@clack/core';\nimport { unicodeOr } from './common.js';\nimport { type SpinnerOptions, type SpinnerResult, spinner } from './spinner.js';\n\nconst S_PROGRESS_CHAR: Record<NonNullable<ProgressOptions['style']>, string> = {\n\tlight: unicodeOr('─', '-'),\n\theavy: unicodeOr('━', '='),\n\tblock: unicodeOr('█', '#'),\n};\n\nexport interface ProgressOptions extends SpinnerOptions {\n\tstyle?: 'light' | 'heavy' | 'block';\n\tmax?: number;\n\tsize?: number;\n}\n\nexport interface ProgressResult extends SpinnerResult {\n\tadvance(step?: number, msg?: string): void;\n}\n\nexport function progress({\n\tstyle = 'heavy',\n\tmax: userMax = 100,\n\tsize: userSize = 40,\n\t...spinnerOptions\n}: ProgressOptions = {}): ProgressResult {\n\tconst spin = spinner(spinnerOptions);\n\tlet value = 0;\n\tlet previousMessage = '';\n\n\tconst max = Math.max(1, userMax);\n\tconst size = Math.max(1, userSize);\n\n\tconst activeStyle = (state: State) => {\n\t\tswitch (state) {\n\t\t\tcase 'initial':\n\t\t\tcase 'active':\n\t\t\t\treturn (text: string) => styleText('magenta', text);\n\t\t\tcase 'error':\n\t\t\tcase 'cancel':\n\t\t\t\treturn (text: string) => styleText('red', text);\n\t\t\tcase 'submit':\n\t\t\t\treturn (text: string) => styleText('green', text);\n\t\t\tdefault:\n\t\t\t\treturn (text: string) => styleText('magenta', text);\n\t\t}\n\t};\n\tconst drawProgress = (state: State, msg: string) => {\n\t\tconst active = Math.floor((value / max) * size);\n\t\treturn `${activeStyle(state)(S_PROGRESS_CHAR[style].repeat(active))}${styleText('dim', S_PROGRESS_CHAR[style].repeat(size - active))} ${msg}`;\n\t};\n\n\tconst start = (msg = '') => {\n\t\tpreviousMessage = msg;\n\t\tspin.start(drawProgress('initial', msg));\n\t};\n\tconst advance = (step = 1, msg?: string): void => {\n\t\tvalue = Math.min(max, step + value);\n\t\tspin.message(drawProgress('active', msg ?? previousMessage));\n\t\tpreviousMessage = msg ?? previousMessage;\n\t};\n\treturn {\n\t\tstart,\n\t\tstop: spin.stop,\n\t\tcancel: spin.cancel,\n\t\terror: spin.error,\n\t\tclear: spin.clear,\n\t\tadvance,\n\t\tisCancelled: spin.isCancelled,\n\t\tmessage: (msg: string) => advance(0, msg),\n\t};\n}\n","import { styleText } from 'node:util';\nimport { SelectPrompt, settings, wrapTextWithPrefix } from '@clack/core';\nimport {\n\ttype CommonOptions,\n\tS_BAR,\n\tS_BAR_END,\n\tS_RADIO_ACTIVE,\n\tS_RADIO_INACTIVE,\n\tsymbol,\n\tsymbolBar,\n} from './common.js';\nimport { limitOptions } from './limit-options.js';\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t\t/**\n\t\t\t * Whether this option is disabled.\n\t\t\t * Disabled options are visible but cannot be selected.\n\t\t\t *\n\t\t\t * By default, options are not disabled.\n\t\t\t */\n\t\t\tdisabled?: boolean;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t\t/**\n\t\t\t * Whether this option is disabled.\n\t\t\t * Disabled options are visible but cannot be selected.\n\t\t\t *\n\t\t\t * By default, options are not disabled.\n\t\t\t */\n\t\t\tdisabled?: boolean;\n\t\t};\n\nexport interface SelectOptions<Value> extends CommonOptions {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nconst computeLabel = (label: string, format: (text: string) => string) => {\n\tif (!label.includes('\\n')) {\n\t\treturn format(label);\n\t}\n\treturn label\n\t\t.split('\\n')\n\t\t.map((line) => format(line))\n\t\t.join('\\n');\n};\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' | 'disabled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'disabled':\n\t\t\t\treturn `${styleText('gray', S_RADIO_INACTIVE)} ${computeLabel(label, (text) => styleText('gray', text))}${\n\t\t\t\t\toption.hint ? ` ${styleText('dim', `(${option.hint ?? 'disabled'})`)}` : ''\n\t\t\t\t}`;\n\t\t\tcase 'selected':\n\t\t\t\treturn `${computeLabel(label, (text) => styleText('dim', text))}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${styleText('green', S_RADIO_ACTIVE)} ${label}${\n\t\t\t\t\toption.hint ? ` ${styleText('dim', `(${option.hint})`)}` : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${computeLabel(label, (str) => styleText(['strikethrough', 'dim'], str))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${styleText('dim', S_RADIO_INACTIVE)} ${computeLabel(label, (text) => styleText('dim', text))}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tsignal: opts.signal,\n\t\tinput: opts.input,\n\t\toutput: opts.output,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst hasGuide = opts.withGuide ?? settings.withGuide;\n\t\t\tconst titlePrefix = `${symbol(this.state)} `;\n\t\t\tconst titlePrefixBar = `${symbolBar(this.state)} `;\n\t\t\tconst messageLines = wrapTextWithPrefix(\n\t\t\t\topts.output,\n\t\t\t\topts.message,\n\t\t\t\ttitlePrefixBar,\n\t\t\t\ttitlePrefix\n\t\t\t);\n\t\t\tconst title = `${hasGuide ? `${styleText('gray', S_BAR)}\\n` : ''}${messageLines}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\tconst submitPrefix = hasGuide ? `${styleText('gray', S_BAR)} ` : '';\n\t\t\t\t\tconst wrappedLines = wrapTextWithPrefix(\n\t\t\t\t\t\topts.output,\n\t\t\t\t\t\topt(this.options[this.cursor], 'selected'),\n\t\t\t\t\t\tsubmitPrefix\n\t\t\t\t\t);\n\t\t\t\t\treturn `${title}${wrappedLines}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst cancelPrefix = hasGuide ? `${styleText('gray', S_BAR)} ` : '';\n\t\t\t\t\tconst wrappedLines = wrapTextWithPrefix(\n\t\t\t\t\t\topts.output,\n\t\t\t\t\t\topt(this.options[this.cursor], 'cancelled'),\n\t\t\t\t\t\tcancelPrefix\n\t\t\t\t\t);\n\t\t\t\t\treturn `${title}${wrappedLines}${hasGuide ? `\\n${styleText('gray', S_BAR)}` : ''}`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst prefix = hasGuide ? `${styleText('cyan', S_BAR)} ` : '';\n\t\t\t\t\tconst prefixEnd = hasGuide ? styleText('cyan', S_BAR_END) : '';\n\t\t\t\t\t// Calculate rowPadding: title lines + footer lines (S_BAR_END + trailing newline)\n\t\t\t\t\tconst titleLineCount = title.split('\\n').length;\n\t\t\t\t\tconst footerLineCount = hasGuide ? 2 : 1; // S_BAR_END + trailing newline (or just trailing newline)\n\t\t\t\t\treturn `${title}${prefix}${limitOptions({\n\t\t\t\t\t\toutput: opts.output,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tcolumnPadding: prefix.length,\n\t\t\t\t\t\trowPadding: titleLineCount + footerLineCount,\n\t\t\t\t\t\tstyle: (item, active) =>\n\t\t\t\t\t\t\topt(item, item.disabled ? 'disabled' : active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${prefix}`)}\\n${prefixEnd}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n","import { styleText } from 'node:util';\nimport { SelectKeyPrompt, settings, wrapTextWithPrefix } from '@clack/core';\nimport { type CommonOptions, S_BAR, S_BAR_END, symbol } from './common.js';\nimport type { Option } from './select.js';\n\nexport interface SelectKeyOptions<Value extends string> extends CommonOptions {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tcaseSensitive?: boolean;\n}\n\nexport const selectKey = <Value extends string>(opts: SelectKeyOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${styleText('dim', label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${styleText(['strikethrough', 'dim'], label)}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${styleText(['bgCyan', 'gray'], ` ${option.value} `)} ${label}${\n\t\t\t\toption.hint ? ` ${styleText('dim', `(${option.hint})`)}` : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${styleText(['gray', 'bgWhite', 'inverse'], ` ${option.value} `)} ${label}${\n\t\t\toption.hint ? ` ${styleText('dim', `(${option.hint})`)}` : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tsignal: opts.signal,\n\t\tinput: opts.input,\n\t\toutput: opts.output,\n\t\tinitialValue: opts.initialValue,\n\t\tcaseSensitive: opts.caseSensitive,\n\t\trender() {\n\t\t\tconst hasGuide = opts.withGuide ?? settings.withGuide;\n\t\t\tconst title = `${hasGuide ? `${styleText('gray', S_BAR)}\\n` : ''}${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\tconst submitPrefix = hasGuide ? `${styleText('gray', S_BAR)} ` : '';\n\t\t\t\t\tconst selectedOption =\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0];\n\t\t\t\t\tconst wrapped = wrapTextWithPrefix(\n\t\t\t\t\t\topts.output,\n\t\t\t\t\t\topt(selectedOption, 'selected'),\n\t\t\t\t\t\tsubmitPrefix\n\t\t\t\t\t);\n\t\t\t\t\treturn `${title}${wrapped}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst cancelPrefix = hasGuide ? `${styleText('gray', S_BAR)} ` : '';\n\t\t\t\t\tconst wrapped = wrapTextWithPrefix(\n\t\t\t\t\t\topts.output,\n\t\t\t\t\t\topt(this.options[0], 'cancelled'),\n\t\t\t\t\t\tcancelPrefix\n\t\t\t\t\t);\n\t\t\t\t\treturn `${title}${wrapped}${hasGuide ? `\\n${styleText('gray', S_BAR)}` : ''}`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst defaultPrefix = hasGuide ? `${styleText('cyan', S_BAR)} ` : '';\n\t\t\t\t\tconst defaultPrefixEnd = hasGuide ? styleText('cyan', S_BAR_END) : '';\n\t\t\t\t\tconst wrapped = this.options\n\t\t\t\t\t\t.map((option, i) =>\n\t\t\t\t\t\t\twrapTextWithPrefix(\n\t\t\t\t\t\t\t\topts.output,\n\t\t\t\t\t\t\t\topt(option, i === this.cursor ? 'active' : 'inactive'),\n\t\t\t\t\t\t\t\tdefaultPrefix\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${wrapped}\\n${defaultPrefixEnd}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n","import { stripVTControlCharacters as strip, styleText } from 'node:util';\nimport { S_BAR, S_ERROR, S_INFO, S_STEP_SUBMIT, S_SUCCESS, S_WARN } from './common.js';\nimport type { LogMessageOptions } from './log.js';\n\nconst prefix = `${styleText('gray', S_BAR)} `;\n\n// TODO (43081j): this currently doesn't support custom `output` writables\n// because we rely on `columns` existing (i.e. `process.stdout.columns).\n//\n// If we want to support `output` being passed in, we will need to use\n// a condition like `if (output insance Writable)` to check if it has columns\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable<string> | AsyncIterable<string>,\n\t\t{ symbol = styleText('gray', S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${styleText('gray', S_BAR)}\\n${symbol} `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: styleText('blue', S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: styleText('green', S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: styleText('green', S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: styleText('yellow', S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: styleText('red', S_ERROR) });\n\t},\n};\n","import type { CommonOptions } from './common.js';\nimport { spinner } from './spinner.js';\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[], opts?: CommonOptions) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner(opts);\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n","import type { Writable } from 'node:stream';\nimport { styleText } from 'node:util';\nimport { getColumns } from '@clack/core';\nimport { erase } from 'sisteransi';\nimport {\n\ttype CommonOptions,\n\tisCI as isCIFn,\n\tisTTY as isTTYFn,\n\tS_BAR,\n\tS_STEP_SUBMIT,\n} from './common.js';\nimport { log } from './log.js';\n\nexport interface TaskLogOptions extends CommonOptions {\n\ttitle: string;\n\tlimit?: number;\n\tspacing?: number;\n\tretainLog?: boolean;\n}\n\nexport interface TaskLogMessageOptions {\n\traw?: boolean;\n}\n\nexport interface TaskLogCompletionOptions {\n\tshowLog?: boolean;\n}\n\ninterface BufferEntry {\n\theader?: string;\n\tvalue: string;\n\tfull: string;\n\tresult?: {\n\t\tstatus: 'success' | 'error';\n\t\tmessage: string;\n\t};\n}\n\nconst stripDestructiveANSI = (input: string): string => {\n\t// biome-ignore lint/suspicious/noControlCharactersInRegex: intentional\n\treturn input.replace(/\\x1b\\[(?:\\d+;)*\\d*[ABCDEFGHfJKSTsu]|\\x1b\\[(s|u)/g, '');\n};\n\n/**\n * Renders a log which clears on success and remains on failure\n */\nexport const taskLog = (opts: TaskLogOptions) => {\n\tconst output: Writable = opts.output ?? process.stdout;\n\tconst columns = getColumns(output);\n\tconst secondarySymbol = styleText('gray', S_BAR);\n\tconst spacing = opts.spacing ?? 1;\n\tconst barSize = 3;\n\tconst retainLog = opts.retainLog === true;\n\tconst isTTY = !isCIFn() && isTTYFn(output);\n\n\toutput.write(`${secondarySymbol}\\n`);\n\toutput.write(`${styleText('green', S_STEP_SUBMIT)} ${opts.title}\\n`);\n\tfor (let i = 0; i < spacing; i++) {\n\t\toutput.write(`${secondarySymbol}\\n`);\n\t}\n\n\tconst buffers: BufferEntry[] = [\n\t\t{\n\t\t\tvalue: '',\n\t\t\tfull: '',\n\t\t},\n\t];\n\tlet lastMessageWasRaw = false;\n\n\tconst clear = (clearTitle: boolean): void => {\n\t\tif (buffers.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet lines = 0;\n\n\t\tif (clearTitle) {\n\t\t\tlines += spacing + 2;\n\t\t}\n\n\t\tfor (const buffer of buffers) {\n\t\t\tconst { value, result } = buffer;\n\t\t\tlet text = result?.message ?? value;\n\n\t\t\tif (text.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (result === undefined && buffer.header !== undefined && buffer.header !== '') {\n\t\t\t\ttext += `\\n${buffer.header}`;\n\t\t\t}\n\n\t\t\tconst bufferHeight = text.split('\\n').reduce((count, line) => {\n\t\t\t\tif (line === '') {\n\t\t\t\t\treturn count + 1;\n\t\t\t\t}\n\t\t\t\treturn count + Math.ceil((line.length + barSize) / columns);\n\t\t\t}, 0);\n\n\t\t\tlines += bufferHeight;\n\t\t}\n\n\t\tif (lines > 0) {\n\t\t\tlines += 1;\n\t\t\toutput.write(erase.lines(lines));\n\t\t}\n\t};\n\tconst printBuffer = (buffer: BufferEntry, messageSpacing?: number, full?: boolean): void => {\n\t\tconst messages = full ? `${buffer.full}\\n${buffer.value}` : buffer.value;\n\t\tif (buffer.header !== undefined && buffer.header !== '') {\n\t\t\tlog.message(\n\t\t\t\tbuffer.header.split('\\n').map((line) => styleText('bold', line)),\n\t\t\t\t{\n\t\t\t\t\toutput,\n\t\t\t\t\tsecondarySymbol,\n\t\t\t\t\tsymbol: secondarySymbol,\n\t\t\t\t\tspacing: 0,\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\tlog.message(\n\t\t\tmessages.split('\\n').map((line) => styleText('dim', line)),\n\t\t\t{\n\t\t\t\toutput,\n\t\t\t\tsecondarySymbol,\n\t\t\t\tsymbol: secondarySymbol,\n\t\t\t\tspacing: messageSpacing ?? spacing,\n\t\t\t}\n\t\t);\n\t};\n\tconst renderBuffer = (): void => {\n\t\tfor (const buffer of buffers) {\n\t\t\tconst { header, value, full } = buffer;\n\t\t\tif ((header === undefined || header.length === 0) && value.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tprintBuffer(buffer, undefined, retainLog === true && full.length > 0);\n\t\t}\n\t};\n\tconst message = (buffer: BufferEntry, msg: string, mopts?: TaskLogMessageOptions) => {\n\t\tclear(false);\n\t\tif ((mopts?.raw !== true || !lastMessageWasRaw) && buffer.value !== '') {\n\t\t\tbuffer.value += '\\n';\n\t\t}\n\t\tbuffer.value += stripDestructiveANSI(msg);\n\t\tlastMessageWasRaw = mopts?.raw === true;\n\t\tif (opts.limit !== undefined) {\n\t\t\tconst lines = buffer.value.split('\\n');\n\t\t\tconst linesToRemove = lines.length - opts.limit;\n\t\t\tif (linesToRemove > 0) {\n\t\t\t\tconst removedLines = lines.splice(0, linesToRemove);\n\t\t\t\tif (retainLog) {\n\t\t\t\t\tbuffer.full += (buffer.full === '' ? '' : '\\n') + removedLines.join('\\n');\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuffer.value = lines.join('\\n');\n\t\t}\n\t\tif (isTTY) {\n\t\t\tprintBuffers();\n\t\t}\n\t};\n\tconst printBuffers = (): void => {\n\t\tfor (const buffer of buffers) {\n\t\t\tif (buffer.result) {\n\t\t\t\tif (buffer.result.status === 'error') {\n\t\t\t\t\tlog.error(buffer.result.message, { output, secondarySymbol, spacing: 0 });\n\t\t\t\t} else {\n\t\t\t\t\tlog.success(buffer.result.message, { output, secondarySymbol, spacing: 0 });\n\t\t\t\t}\n\t\t\t} else if (buffer.value !== '') {\n\t\t\t\tprintBuffer(buffer, 0);\n\t\t\t}\n\t\t}\n\t};\n\tconst completeBuffer = (buffer: BufferEntry, result: BufferEntry['result']): void => {\n\t\tclear(false);\n\n\t\tbuffer.result = result;\n\n\t\tif (isTTY) {\n\t\t\tprintBuffers();\n\t\t}\n\t};\n\n\treturn {\n\t\tmessage(msg: string, mopts?: TaskLogMessageOptions) {\n\t\t\tmessage(buffers[0], msg, mopts);\n\t\t},\n\t\tgroup(name: string) {\n\t\t\tconst buffer: BufferEntry = {\n\t\t\t\theader: name,\n\t\t\t\tvalue: '',\n\t\t\t\tfull: '',\n\t\t\t};\n\t\t\tbuffers.push(buffer);\n\t\t\treturn {\n\t\t\t\tmessage(msg: string, mopts?: TaskLogMessageOptions) {\n\t\t\t\t\tmessage(buffer, msg, mopts);\n\t\t\t\t},\n\t\t\t\terror(message: string) {\n\t\t\t\t\tcompleteBuffer(buffer, {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsuccess(message: string) {\n\t\t\t\t\tcompleteBuffer(buffer, {\n\t\t\t\t\t\tstatus: 'success',\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\terror(message: string, opts?: TaskLogCompletionOptions): void {\n\t\t\tclear(true);\n\t\t\tlog.error(message, { output, secondarySymbol, spacing: 1 });\n\t\t\tif (opts?.showLog !== false) {\n\t\t\t\trenderBuffer();\n\t\t\t}\n\t\t\t// clear buffer since error is an end state\n\t\t\tbuffers.splice(1, buffers.length - 1);\n\t\t\tbuffers[0].value = '';\n\t\t\tbuffers[0].full = '';\n\t\t},\n\t\tsuccess(message: string, opts?: TaskLogCompletionOptions): void {\n\t\t\tclear(true);\n\t\t\tlog.success(message, { output, secondarySymbol, spacing: 1 });\n\t\t\tif (opts?.showLog === true) {\n\t\t\t\trenderBuffer();\n\t\t\t}\n\t\t\t// clear buffer since success is an end state\n\t\t\tbuffers.splice(1, buffers.length - 1);\n\t\t\tbuffers[0].value = '';\n\t\t\tbuffers[0].full = '';\n\t\t},\n\t};\n};\n","import { styleText } from 'node:util';\nimport { settings, TextPrompt } from '@clack/core';\nimport { type CommonOptions, S_BAR, S_BAR_END, symbol } from './common.js';\n\nexport interface TextOptions extends CommonOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string | undefined) => string | Error | undefined;\n}\n\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\toutput: opts.output,\n\t\tsignal: opts.signal,\n\t\tinput: opts.input,\n\t\trender() {\n\t\t\tconst hasGuide = opts?.withGuide ?? settings.withGuide;\n\t\t\tconst titlePrefix = `${hasGuide ? `${styleText('gray', S_BAR)}\\n` : ''}${symbol(this.state)} `;\n\t\t\tconst title = `${titlePrefix}${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? styleText('inverse', opts.placeholder[0]) + styleText('dim', opts.placeholder.slice(1))\n\t\t\t\t: styleText(['inverse', 'hidden'], '_');\n\t\t\tconst userInput = !this.userInput ? placeholder : this.userInputWithCursor;\n\t\t\tconst value = this.value ?? '';\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst errorText = this.error ? ` ${styleText('yellow', this.error)}` : '';\n\t\t\t\t\tconst errorPrefix = hasGuide ? `${styleText('yellow', S_BAR)} ` : '';\n\t\t\t\t\tconst errorPrefixEnd = hasGuide ? styleText('yellow', S_BAR_END) : '';\n\t\t\t\t\treturn `${title.trim()}\\n${errorPrefix}${userInput}\\n${errorPrefixEnd}${errorText}\\n`;\n\t\t\t\t}\n\t\t\t\tcase 'submit': {\n\t\t\t\t\tconst valueText = value ? ` ${styleText('dim', value)}` : '';\n\t\t\t\t\tconst submitPrefix = hasGuide ? styleText('gray', S_BAR) : '';\n\t\t\t\t\treturn `${title}${submitPrefix}${valueText}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst valueText = value ? ` ${styleText(['strikethrough', 'dim'], value)}` : '';\n\t\t\t\t\tconst cancelPrefix = hasGuide ? styleText('gray', S_BAR) : '';\n\t\t\t\t\treturn `${title}${cancelPrefix}${valueText}${value.trim() ? `\\n${cancelPrefix}` : ''}`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst defaultPrefix = hasGuide ? `${styleText('cyan', S_BAR)} ` : '';\n\t\t\t\t\tconst defaultPrefixEnd = hasGuide ? styleText('cyan', S_BAR_END) : '';\n\t\t\t\t\treturn `${title}${defaultPrefix}${userInput}\\n${defaultPrefixEnd}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n"],"names":["isUnicodeSupported","process","unicode","isCI","isTTY","output","unicodeOr","c","fallback","S_STEP_ACTIVE","S_STEP_CANCEL","S_STEP_ERROR","S_STEP_SUBMIT","S_BAR_START","S_BAR","S_BAR_END","S_BAR_START_RIGHT","S_BAR_END_RIGHT","S_RADIO_ACTIVE","S_RADIO_INACTIVE","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","S_PASSWORD_MASK","S_BAR_H","S_CORNER_TOP_RIGHT","S_CONNECT_LEFT","S_CORNER_BOTTOM_RIGHT","S_CORNER_BOTTOM_LEFT","S_CORNER_TOP_LEFT","S_INFO","S_SUCCESS","S_WARN","S_ERROR","symbol","state","styleText","symbolBar","trimLines","groups","initialLineCount","startIndex","endIndex","maxLines","lineCount","removals","i","group","limitOptions","cursor","options","style","maxItems","columnPadding","rowPadding","maxWidth","getColumns","rows","getRows","overflowFormat","outputMaxItems","computedMaxItems","slidingWindowLocation","shouldRenderTopEllipsis","shouldRenderBottomEllipsis","slidingWindowLocationEnd","lineGroups","slidingWindowLocationWithEllipsis","slidingWindowLocationEndWithEllipsis","wrappedLines","wrapAnsi","precedingRemovals","followingRemovals","newLineCount","cursorGroupIndex","trimLinesLocal","result","lineGroup","line","getLabel","option","getFilteredOption","searchText","label","hint","value","term","getSelectedOptions","values","results","autocomplete","opts","AutocompletePrompt","search","opt","hasGuide","settings","headings","userInput","placeholder","showPlaceholder","selected","submitPrefix","userInputText","cancelPrefix","barStyle","guidePrefix","guidePrefixEnd","searchTextValue","matches","noResults","validationError","instructions","footers","displayOptions","active","autocompleteMultiselect","formatOption","selectedValues","focusedValue","isSelected","checkbox","prompt","title","errorMessage","headerLines","footerLines","roundedSymbols","squareSymbols","getPaddingForLine","lineLength","innerWidth","padding","contentAlign","leftPadding","rightPadding","defaultFormatBorder","text","box","message","columns","borderTotalWidth","titlePadding","contentPadding","width","linePrefix","formatBorder","symbols","hSymbol","vSymbol","linePrefixWidth","stringWidth","titleWidth","maxBoxWidth","boxWidth","lines","longestLine","lineWithPadding","longestLineWidth","maxTitleLength","truncatedTitle","titlePaddingLeft","titlePaddingRight","wrappedMessage","leftLinePadding","rightLinePadding","confirm","inactive","ConfirmPrompt","titlePrefix","titlePrefixBar","messageLines","wrapTextWithPrefix","defaultPrefix","defaultPrefixEnd","date","validate","DatePrompt","iso","d","renderDate","errorText","bar","barEnd","valueText","inlineBar","inlineError","parts","sep","seg","isActive","DEFAULT_LABELS","renderSegment","isBlank","prompts","promptNames","name","e","isCancel","groupMultiselect","selectableGroups","groupSpacing","isItem","next","isLast","prefix","spacingPrefix","spacingPrefixText","selectedCheckbox","unselectedCheckbox","required","GroupMultiSelectPrompt","selectedOptions","optionValue","optionsText","footer","ln","groupActive","optionText","optionsPrefix","log","secondarySymbol","spacing","withGuide","spacingString","secondaryPrefix","messageParts","firstLine","cancel","intro","outro","computeLabel","format","multiselect","str","MultiSelectPrompt","styleOption","submitText","wrappedSubmitText","wrappedLabel","titleLineCount","footerLineCount","defaultNoteFormatter","wrapWithFormat","wrapMsg","maxWidthNormal","sum","maxWidthFormat","wrapWidth","note","titleLen","len","msg","leadingBorder","bottomLeft","password","PasswordPrompt","masked","errorPrefix","errorPrefixEnd","maskedText","path","searchPath","existsSync","lstatSync","dirname","readdirSync","item","join","stats","isDirectory","defaultStyleFn","frame","spinner","indicator","onCancel","cancelMessage","frames","delay","signal","isCIFn","unblock","loop","isSpinnerActive","isCancelled","_message","_prevMessage","_origin","styleFn","handleExit","code","_stop","errorEventHandler","signalEventHandler","registerHooks","clearHooks","clearPrevMessage","prevLines","erase","removeTrailingDots","formatTimer","origin","duration","min","secs","start","block","frameIndex","indicatorTimer","outputMessage","loadingDots","wrapped","silent","step","S_PROGRESS_CHAR","progress","userMax","userSize","spinnerOptions","spin","previousMessage","max","size","activeStyle","drawProgress","advance","select","SelectPrompt","prefixEnd","selectKey","SelectKeyPrompt","selectedOption","stream","iterable","lineWidth","chunk","strip","chunkLen","tasks","task","s","stripDestructiveANSI","input","taskLog","barSize","retainLog","isTTYFn","buffers","lastMessageWasRaw","clear","clearTitle","buffer","bufferHeight","count","printBuffer","messageSpacing","full","messages","renderBuffer","header","mopts","linesToRemove","removedLines","printBuffers","completeBuffer","TextPrompt"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|