From 46cb9aa44b069da3599e7e6815945e4b81112d6e Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Thu, 19 Dec 2019 04:20:20 -0800 Subject: [PATCH] feat(components): add Tile Supports #34 TODO: - remove exported props - compose TileGroup, SelectableTile, RadioTile components --- src/components/Tile/ClickableTile.svelte | 42 +++++++++ src/components/Tile/ExpandableTile.svelte | 88 +++++++++++++++++++ src/components/Tile/RadioTile.svelte | 59 +++++++++++++ src/components/Tile/SelectableTile.svelte | 78 ++++++++++++++++ src/components/Tile/Tile.Story.svelte | 68 ++++++++++++++ src/components/Tile/Tile.stories.js | 64 ++++++++++++++ src/components/Tile/Tile.svelte | 14 +++ .../Tile/TileAboveTheFoldContent.svelte | 7 ++ .../Tile/TileBelowTheFoldContent.svelte | 7 ++ src/components/Tile/TileGroup.svelte | 19 ++++ src/components/Tile/index.js | 9 ++ src/index.js | 19 +++- 12 files changed, 472 insertions(+), 2 deletions(-) create mode 100644 src/components/Tile/ClickableTile.svelte create mode 100644 src/components/Tile/ExpandableTile.svelte create mode 100644 src/components/Tile/RadioTile.svelte create mode 100644 src/components/Tile/SelectableTile.svelte create mode 100644 src/components/Tile/Tile.Story.svelte create mode 100644 src/components/Tile/Tile.stories.js create mode 100644 src/components/Tile/Tile.svelte create mode 100644 src/components/Tile/TileAboveTheFoldContent.svelte create mode 100644 src/components/Tile/TileBelowTheFoldContent.svelte create mode 100644 src/components/Tile/TileGroup.svelte create mode 100644 src/components/Tile/index.js diff --git a/src/components/Tile/ClickableTile.svelte b/src/components/Tile/ClickableTile.svelte new file mode 100644 index 00000000..5d36a9fb --- /dev/null +++ b/src/components/Tile/ClickableTile.svelte @@ -0,0 +1,42 @@ + + + + + diff --git a/src/components/Tile/ExpandableTile.svelte b/src/components/Tile/ExpandableTile.svelte new file mode 100644 index 00000000..1b58c834 --- /dev/null +++ b/src/components/Tile/ExpandableTile.svelte @@ -0,0 +1,88 @@ + + +
+
+
+ +
+ +
+ +
+
+
diff --git a/src/components/Tile/RadioTile.svelte b/src/components/Tile/RadioTile.svelte new file mode 100644 index 00000000..231026a1 --- /dev/null +++ b/src/components/Tile/RadioTile.svelte @@ -0,0 +1,59 @@ + + + + diff --git a/src/components/Tile/SelectableTile.svelte b/src/components/Tile/SelectableTile.svelte new file mode 100644 index 00000000..eb356433 --- /dev/null +++ b/src/components/Tile/SelectableTile.svelte @@ -0,0 +1,78 @@ + + + + diff --git a/src/components/Tile/Tile.Story.svelte b/src/components/Tile/Tile.Story.svelte new file mode 100644 index 00000000..c255c025 --- /dev/null +++ b/src/components/Tile/Tile.Story.svelte @@ -0,0 +1,68 @@ + + + +
+ {#if story === 'filter'} + + {:else if story === 'clickable'} + Clickable Tile + {:else if story === 'multi-select'} +
+ Multi-select Tile + Multi-select Tile + Multi-select Tile +
+ {:else if story === 'selectable'} + + {#each radioTiles as { value, id, labelText }, i (id)} + { + selected = value; + }} + {value} + {id} + {labelText}> + Selectable Tile + + {/each} + + {:else if story === 'expandable'} + +
+ +
Above the fold content here
+
+
+
+ +
Below the fold content here
+
+
+
+ {:else} + Default Tile + {/if} +
+
diff --git a/src/components/Tile/Tile.stories.js b/src/components/Tile/Tile.stories.js new file mode 100644 index 00000000..e46f116e --- /dev/null +++ b/src/components/Tile/Tile.stories.js @@ -0,0 +1,64 @@ +import { withKnobs, select, number, boolean, text } from '@storybook/addon-knobs'; +import Component from './Tile.Story.svelte'; + +export default { title: 'Tile', decorators: [withKnobs] }; + +export const Default = () => ({ + Component, + props: { + light: boolean('Light variant (light)', false) + } +}); + +export const Clickable = () => ({ + Component, + props: { + story: 'clickable', + href: text('Href for clickable UI (href)', 'javascript:void(0)'), + light: boolean('Light variant (light)', false) + } +}); + +export const MultiSelect = () => ({ + Component, + props: { + story: 'multi-select', + selected: boolean('Selected (selected)', false), + light: boolean('Light variant (light)', false) + } +}); + +const radioValues = { + None: '', + standard: 'standard', + 'default-selected': 'default-selected', + selected: 'selected' +}; + +export const Selectable = () => ({ + Component, + props: { + story: 'selectable', + name: text('Form item name (name in )', 'tiles'), + light: boolean('Light variant (light)', false) + } +}); + +export const Expandable = () => ({ + Component, + props: { + story: 'expandable', + tabIndex: number('Tab index (tabIndex)', 0), + expanded: boolean('Expanded (expanded)', false), + tileMaxHeight: number('Max height (tileMaxHeight)', 0), + tileCollapsedIconText: text( + 'Collapsed icon text (tileCollapsedIconText)', + 'Interact to Expand tile' + ), + tileExpandedIconText: text( + 'Collapsed icon text (tileExpandedIconText)', + 'Interact to Collapse tile' + ), + light: boolean('Light variant (light)', false) + } +}); diff --git a/src/components/Tile/Tile.svelte b/src/components/Tile/Tile.svelte new file mode 100644 index 00000000..08794dd6 --- /dev/null +++ b/src/components/Tile/Tile.svelte @@ -0,0 +1,14 @@ + + +
+ +
diff --git a/src/components/Tile/TileAboveTheFoldContent.svelte b/src/components/Tile/TileAboveTheFoldContent.svelte new file mode 100644 index 00000000..09f0425f --- /dev/null +++ b/src/components/Tile/TileAboveTheFoldContent.svelte @@ -0,0 +1,7 @@ + + + + + diff --git a/src/components/Tile/TileBelowTheFoldContent.svelte b/src/components/Tile/TileBelowTheFoldContent.svelte new file mode 100644 index 00000000..0a35adb5 --- /dev/null +++ b/src/components/Tile/TileBelowTheFoldContent.svelte @@ -0,0 +1,7 @@ + + + + + diff --git a/src/components/Tile/TileGroup.svelte b/src/components/Tile/TileGroup.svelte new file mode 100644 index 00000000..bd26e160 --- /dev/null +++ b/src/components/Tile/TileGroup.svelte @@ -0,0 +1,19 @@ + + +
+ {#if legend} + {legend} + {/if} +
+ +
+
diff --git a/src/components/Tile/index.js b/src/components/Tile/index.js new file mode 100644 index 00000000..926396cc --- /dev/null +++ b/src/components/Tile/index.js @@ -0,0 +1,9 @@ +import Tile from './Tile.svelte'; + +export default Tile; +export { default as ClickableTile } from './ClickableTile.svelte'; +export { default as ExpandableTile } from './ExpandableTile.svelte'; +export { default as SelectableTile } from './SelectableTile.svelte'; +export { default as TileGroup } from './TileGroup.svelte'; +export { default as TileAboveTheFoldContent } from './TileAboveTheFoldContent.svelte'; +export { default as TileBelowTheFoldContent } from './TileBelowTheFoldContent.svelte'; diff --git a/src/index.js b/src/index.js index 36105eb7..e7d843bb 100644 --- a/src/index.js +++ b/src/index.js @@ -18,6 +18,14 @@ import SkeletonText from './components/SkeletonText'; import Tag, { TagSkeleton } from './components/Tag'; import TextArea, { TextAreaSkeleton } from './components/TextArea'; import TextInput, { TextInputSkeleton, PasswordInput } from './components/TextInput'; +import Tile, { + ClickableTile, + ExpandableTile, + SelectableTile, + TileGroup, + TileAboveTheFoldContent, + TileBelowTheFoldContent +} from './components/Tile'; import Toggle, { ToggleSkeleton } from './components/Toggle'; import ToggleSmall, { ToggleSmallSkeleton } from './components/ToggleSmall'; import TooltipDefinition from './components/TooltipDefinition'; @@ -35,20 +43,24 @@ export { ButtonSkeleton, Checkbox, CheckboxSkeleton, + ClickableTile, CodeSnippet, CodeSnippetSkeleton, Copy, CopyButton, DataTableSkeleton, + ExpandableTile, InlineLoading, - Loading, Link, ListItem, + Loading, OrderedList, + PasswordInput, RadioButton, RadioButtonSkeleton, Search, SearchSkeleton, + SelectableTile, SkeletonPlaceholder, SkeletonText, Tag, @@ -57,7 +69,10 @@ export { TextAreaSkeleton, TextInput, TextInputSkeleton, - PasswordInput, + Tile, + TileAboveTheFoldContent, + TileBelowTheFoldContent, + TileGroup, Toggle, ToggleSkeleton, ToggleSmall,