diff --git a/src/components/DataTable/DataTable.Story.svelte b/src/components/DataTable/DataTable.Story.svelte new file mode 100644 index 00000000..facc39f9 --- /dev/null +++ b/src/components/DataTable/DataTable.Story.svelte @@ -0,0 +1,126 @@ + + + + {#if story === 'composed'} + + + + + + {#each props.headers as header, i (header.key)} + {header.header} + {/each} + + + + {#each props.rows as row, i} + + {#each row.cells as cell, j} + {cell.value} + {/each} + + {/each} + +
+
+
+ {:else} + { + console.log('on:click:header', detail); + }} + on:click:row={({ detail }) => { + console.log('on:click:row', detail); + }} + on:click:cell={({ detail }) => { + console.log('on:click:cell', detail); + }} + {rows} + {headers} /> + {/if} +
diff --git a/src/components/DataTable/DataTable.stories.js b/src/components/DataTable/DataTable.stories.js new file mode 100644 index 00000000..4137fccf --- /dev/null +++ b/src/components/DataTable/DataTable.stories.js @@ -0,0 +1,19 @@ +import { withKnobs, boolean, select, text } from '@storybook/addon-knobs'; +import Component from './DataTable.Story.svelte'; + +export default { title: 'DataTable', decorators: [withKnobs] }; + +export const Default = () => ({ + Component, + props: { + title: text('Optional DataTable title (title)', ''), + description: text('Optional DataTable description (description)', ''), + zebra: boolean('Zebra row styles (zebra)', false), + size: select( + 'Row height (size)', + { compact: 'compact', short: 'short', tall: 'tall', none: null }, + null + ), + stickyHeader: boolean('Sticky header (experimental)', false) + } +}); diff --git a/src/components/DataTable/DataTable.svelte b/src/components/DataTable/DataTable.svelte new file mode 100644 index 00000000..41dd9485 --- /dev/null +++ b/src/components/DataTable/DataTable.svelte @@ -0,0 +1,68 @@ + + + + + + + + {#each headers as header, i (header.key)} + { + dispatch('click:header', { header }); + }}> + {header.value} + + {/each} + + + + {#each rows as row, i (row.id)} + { + dispatch('click:row', { row }); + }}> + {#each row.cells as cell, j (cell.key)} + { + dispatch('click:cell', { row, cell }); + }}> + {cell.value} + + {/each} + + {/each} + +
+
+
diff --git a/src/components/DataTable/Table.svelte b/src/components/DataTable/Table.svelte new file mode 100644 index 00000000..d0de7c2f --- /dev/null +++ b/src/components/DataTable/Table.svelte @@ -0,0 +1,28 @@ + + +{#if stickyHeader} +
+ + +
+
+{:else} + + +
+{/if} diff --git a/src/components/DataTable/TableBody.svelte b/src/components/DataTable/TableBody.svelte new file mode 100644 index 00000000..fcb38748 --- /dev/null +++ b/src/components/DataTable/TableBody.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/src/components/DataTable/TableCell.svelte b/src/components/DataTable/TableCell.svelte new file mode 100644 index 00000000..1d3e93cd --- /dev/null +++ b/src/components/DataTable/TableCell.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/src/components/DataTable/TableContainer.svelte b/src/components/DataTable/TableContainer.svelte new file mode 100644 index 00000000..5d5adc3d --- /dev/null +++ b/src/components/DataTable/TableContainer.svelte @@ -0,0 +1,22 @@ + + +
+ {#if title} +
+

{title}

+

{description}

+
+ {/if} + +
diff --git a/src/components/DataTable/TableHead.svelte b/src/components/DataTable/TableHead.svelte new file mode 100644 index 00000000..522cd18b --- /dev/null +++ b/src/components/DataTable/TableHead.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/src/components/DataTable/TableHeader.svelte b/src/components/DataTable/TableHeader.svelte new file mode 100644 index 00000000..5b2b2617 --- /dev/null +++ b/src/components/DataTable/TableHeader.svelte @@ -0,0 +1,49 @@ + + +{#if !isSortable} + + + + + +{:else} + + + +{/if} diff --git a/src/components/DataTable/TableRow.svelte b/src/components/DataTable/TableRow.svelte new file mode 100644 index 00000000..ca89ca26 --- /dev/null +++ b/src/components/DataTable/TableRow.svelte @@ -0,0 +1,20 @@ + + + + + diff --git a/src/components/DataTable/index.js b/src/components/DataTable/index.js new file mode 100644 index 00000000..e69de29b