summaryrefslogtreecommitdiff
path: root/packages/create-astro/src/components/Select.tsx
diff options
context:
space:
mode:
authorGravatar Nate Moore <natemoo-re@users.noreply.github.com> 2021-05-03 12:15:13 -0500
committerGravatar GitHub <noreply@github.com> 2021-05-03 12:15:13 -0500
commited631329e731d31e384dacc1ec399ba60b7c906b (patch)
tree0c998bb642c1feab773cb0e751dbb0ece1e59d64 /packages/create-astro/src/components/Select.tsx
parent467820996f71b0c78f2000294cb6f3c0a8f3aca4 (diff)
downloadastro-ed631329e731d31e384dacc1ec399ba60b7c906b.tar.gz
astro-ed631329e731d31e384dacc1ec399ba60b7c906b.tar.zst
astro-ed631329e731d31e384dacc1ec399ba60b7c906b.zip
`create-astro` UI (#164)
* refactor: improve create-astro layout, build script * feat(create-astro): v0.1.0 * docs(create-astro): add README * feat(create-astro): add meta files to starter templates
Diffstat (limited to 'packages/create-astro/src/components/Select.tsx')
-rw-r--r--packages/create-astro/src/components/Select.tsx32
1 files changed, 32 insertions, 0 deletions
diff --git a/packages/create-astro/src/components/Select.tsx b/packages/create-astro/src/components/Select.tsx
new file mode 100644
index 000000000..acf8eb29f
--- /dev/null
+++ b/packages/create-astro/src/components/Select.tsx
@@ -0,0 +1,32 @@
+import SelectInput from 'ink-select-input';
+import React, { FC } from 'react';
+import { Text, Box } from 'ink';
+// @ts-expect-error
+const { default: Select } = SelectInput;
+
+interface Props {
+ isSelected?: boolean;
+ label: string;
+ description?: string;
+}
+const Indicator: FC<Props> = ({ isSelected }) => isSelected ? <Text color="#3894FF">[ </Text> : <Text> </Text>
+const Item: FC<Props> = ({isSelected = false, label, description }) => (
+ <Box display="flex">
+ <Text color={isSelected ? '#3894FF' : 'white'} dimColor={!isSelected}>{label}</Text>
+ {isSelected && description && typeof description === 'string' && <Text> {description}</Text>}
+ {isSelected && description && typeof description !== 'string' && <Box marginLeft={1}>{description}</Box>}
+ </Box>
+);
+
+interface SelectProps {
+ items: { value: string|number|boolean, label: string, description?: any }[]
+ onSelect(value: string|number|boolean): void;
+}
+const CustomSelect: FC<SelectProps> = ({ items, onSelect }) => {
+ const handleSelect = ({ value }) => onSelect(value);
+ return (
+ <Select indicatorComponent={Indicator} itemComponent={Item} items={items} onSelect={handleSelect} />
+ )
+}
+
+export default CustomSelect;