From 6c75c8a973652b47a5dfa3d6500fddbcd1f8e030 Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Sat, 21 Dec 2019 17:18:35 -0800 Subject: [PATCH] feat(components): add Select, SelectItem, SelectItemGroup Closes #31 --- README.md | 4 + src/components/Select/Select.Skeleton.svelte | 19 ++++ src/components/Select/Select.Story.svelte | 29 +++++ src/components/Select/Select.stories.js | 36 ++++++ src/components/Select/Select.svelte | 110 +++++++++++++++++++ src/components/Select/SelectItem.svelte | 19 ++++ src/components/Select/SelectItemGroup.svelte | 15 +++ src/components/Select/index.js | 6 + src/index.js | 5 + 9 files changed, 243 insertions(+) create mode 100644 src/components/Select/Select.Skeleton.svelte create mode 100644 src/components/Select/Select.Story.svelte create mode 100644 src/components/Select/Select.stories.js create mode 100644 src/components/Select/Select.svelte create mode 100644 src/components/Select/SelectItem.svelte create mode 100644 src/components/Select/SelectItemGroup.svelte create mode 100644 src/components/Select/index.js diff --git a/README.md b/README.md index 0afb9dfa..ac413ff6 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,10 @@ Currently, the following components are supported: - RadioButtonGroup - Search - SearchSkeleton +- Select + - SelectSkeleton + - SelectItem + - SelectItemGroup - SkeletonPlaceholder - SkeletonText - Tag diff --git a/src/components/Select/Select.Skeleton.svelte b/src/components/Select/Select.Skeleton.svelte new file mode 100644 index 00000000..a8b3c90d --- /dev/null +++ b/src/components/Select/Select.Skeleton.svelte @@ -0,0 +1,19 @@ + + +
+ {#if !hideLabel} + + {/if} +
+
+
+
diff --git a/src/components/Select/Select.Story.svelte b/src/components/Select/Select.Story.svelte new file mode 100644 index 00000000..169f9e36 --- /dev/null +++ b/src/components/Select/Select.Story.svelte @@ -0,0 +1,29 @@ + + + +
+ {#if story === 'skeleton'} + + {:else} + + {/if} +
+
diff --git a/src/components/Select/Select.stories.js b/src/components/Select/Select.stories.js new file mode 100644 index 00000000..aa9ce3fd --- /dev/null +++ b/src/components/Select/Select.stories.js @@ -0,0 +1,36 @@ +import { withKnobs, text, boolean } from '@storybook/addon-knobs'; +import Component from './Select.Story.svelte'; + +export default { title: 'Select', decorators: [withKnobs] }; + +const labelPositions = { + 'Left (left)': 'left', + 'Right (right)': 'right' +}; + +export const Default = () => ({ + Component, + props: { + select: { + light: boolean('Light variant (light in )', false), + disabled: boolean('Disabled (disabled in )', false), + invalid: boolean('Show form validation UI (invalid in )', + 'A valid value is required' + ), + labelText: text('Label text (helperText)', 'Select'), + helperText: text('Helper text (helperText)', 'Optional helper text.') + }, + group: { + disabled: boolean('Disabled (disabled in )', false) + } + } +}); + +export const Skeleton = () => ({ + Component, + props: { story: 'skeleton', hideLabel: boolean('No label (hideLabel in { + selected.set(event.target.value); + }} + {id}> + + + + {#if invalid} + + {/if} +
+ {#if invalid} +
{invalidText}
+ {/if} + + {#if helperText} +
{helperText}
+ {/if} + {/if} + + {#if !inline} +
+ + + {#if invalid} + + {/if} +
+ {#if invalid} +
{invalidText}
+ {/if} + {/if} + + diff --git a/src/components/Select/SelectItem.svelte b/src/components/Select/SelectItem.svelte new file mode 100644 index 00000000..13d17f20 --- /dev/null +++ b/src/components/Select/SelectItem.svelte @@ -0,0 +1,19 @@ + + + diff --git a/src/components/Select/SelectItemGroup.svelte b/src/components/Select/SelectItemGroup.svelte new file mode 100644 index 00000000..af0ff642 --- /dev/null +++ b/src/components/Select/SelectItemGroup.svelte @@ -0,0 +1,15 @@ + + + + + diff --git a/src/components/Select/index.js b/src/components/Select/index.js new file mode 100644 index 00000000..b5ab0843 --- /dev/null +++ b/src/components/Select/index.js @@ -0,0 +1,6 @@ +import Select from './Select.svelte'; + +export default Select; +export { default as SelectSkeleton } from './Select.Skeleton.svelte'; +export { default as SelectItem } from './SelectItem.svelte'; +export { default as SelectItemGroup } from './SelectItemGroup.svelte'; diff --git a/src/index.js b/src/index.js index 035e6f83..948910bf 100644 --- a/src/index.js +++ b/src/index.js @@ -27,6 +27,7 @@ import ProgressIndicator, { import RadioButton, { RadioButtonSkeleton } from './components/RadioButton'; import RadioButtonGroup from './components/RadioButtonGroup'; import Search, { SearchSkeleton } from './components/Search'; +import Select, { SelectSkeleton, SelectItem, SelectItemGroup } from './components/Select'; import SkeletonPlaceholder from './components/SkeletonPlaceholder'; import SkeletonText from './components/SkeletonText'; import Tag, { TagSkeleton } from './components/Tag'; @@ -85,6 +86,10 @@ export { Search, SearchSkeleton, SelectableTile, + Select, + SelectSkeleton, + SelectItem, + SelectItemGroup, SkeletonPlaceholder, SkeletonText, Switch,