From ea56f46941a38f0bb38b85f97c715bfb8a4a625b Mon Sep 17 00:00:00 2001 From: Knox Joseph Date: Tue, 24 Nov 2020 12:46:45 +0530 Subject: [PATCH] Added new Tabs Component. Tabs contain one or more Tab component. Added Tabs page to Examples and made needed changes for that. --- example/src/pages/tabs/Tabs.svelte | 120 ++++++++++++++++ example/src/pages/tabs/code.md | 68 +++++++++ example/src/pages/tabs/custom.js | 12 ++ example/src/pages/tabs/doc.md | 16 +++ example/src/pages/tabs/index.js | 3 + example/src/pages/tabs/props.js | 20 +++ example/src/sitenav.js | 6 + src/Tab.svelte | 31 +++++ src/Tabs.svelte | 216 +++++++++++++++++++++++++++++ src/index.js | 4 + 10 files changed, 496 insertions(+) create mode 100644 example/src/pages/tabs/Tabs.svelte create mode 100644 example/src/pages/tabs/code.md create mode 100644 example/src/pages/tabs/custom.js create mode 100644 example/src/pages/tabs/doc.md create mode 100644 example/src/pages/tabs/index.js create mode 100644 example/src/pages/tabs/props.js create mode 100644 src/Tab.svelte create mode 100644 src/Tabs.svelte diff --git a/example/src/pages/tabs/Tabs.svelte b/example/src/pages/tabs/Tabs.svelte new file mode 100644 index 0000000..875a0c9 --- /dev/null +++ b/example/src/pages/tabs/Tabs.svelte @@ -0,0 +1,120 @@ + +
+ + +
Content 1...
+
+ + +
Content 2...
+
+ + +
Content 3...
+
+
+ + { tabChange(e) }} style="margin-top:36px"> + {#each tabs as tab, i (tab)} + +
+
{tab} content
+ +
+
+ {/each} +
+ +
+ + +
Change active tab
+ +
+
+ +
+
+ {@html code} +
+
+
+ + + {@html doc} + + + + + +

CSS custom properties

+
+ + + + diff --git a/example/src/pages/tabs/code.md b/example/src/pages/tabs/code.md new file mode 100644 index 0000000..b8d8232 --- /dev/null +++ b/example/src/pages/tabs/code.md @@ -0,0 +1,68 @@ +```xml + + +
Content 1...
+
+ + +
Content 2...
+
+ + +
Content 3...
+
+
+ +{ tabChange(e) }} style="margin-top:36px"> + {#each tabs as tab, i (tab)} + +
+
{tab} content
+ +
+
+ {/each} +
+ +
+ + +
Change active tab
+ +
+ + + + + +``` diff --git a/example/src/pages/tabs/custom.js b/example/src/pages/tabs/custom.js new file mode 100644 index 0000000..9417274 --- /dev/null +++ b/example/src/pages/tabs/custom.js @@ -0,0 +1,12 @@ +export default [ + { + name: '--color', + def: '#333', + desc: '.tabbutton color, hover background', + }, + { + name: '--primary', + def: '#1976d2', + desc: '.tabbuttonactive, hover background, .tabindicator', + }, +]; diff --git a/example/src/pages/tabs/doc.md b/example/src/pages/tabs/doc.md new file mode 100644 index 0000000..7124776 --- /dev/null +++ b/example/src/pages/tabs/doc.md @@ -0,0 +1,16 @@ +Tabs specifiy grouped content on same level chosen one by one. +There are two components. The wrapper **Tabs** component and the individual **Tab** component. + +If the number of tabs overflow its wrapper, the tab names will have swipe/drag capability enabled. + +#### HTMLElement attributes + +You can use HTMLElement attributes, like + +`id`, `style`, `data-*` and so on + +#### Events +`change` - When a tab is clicked, it despatches the custom event **change**. +event.detail.activeTab has the current active tab number. + +Any HTMLElement events diff --git a/example/src/pages/tabs/index.js b/example/src/pages/tabs/index.js new file mode 100644 index 0000000..80e3f26 --- /dev/null +++ b/example/src/pages/tabs/index.js @@ -0,0 +1,3 @@ +import Tabs from './Tabs.svelte'; + +export default Tabs; \ No newline at end of file diff --git a/example/src/pages/tabs/props.js b/example/src/pages/tabs/props.js new file mode 100644 index 0000000..6660cdd --- /dev/null +++ b/example/src/pages/tabs/props.js @@ -0,0 +1,20 @@ +export default [ + { + name: 'tabNames', + def: "''", + type: 'Array of strings', + desc: 'Array of names for each tab', + }, + { + name: 'activeTab', + def: '0', + type: 'number', + desc: 'Optional active tab number for Tabs component.', + }, + { + name: 'class', + def: "''", + type: 'string', + desc: 'Custom global CSS class name', + } +]; diff --git a/example/src/sitenav.js b/example/src/sitenav.js index 053df15..1a9b6ad 100644 --- a/example/src/sitenav.js +++ b/example/src/sitenav.js @@ -14,6 +14,7 @@ import Ripple from '/pages/ripple'; import Sidepanel from '/pages/sidepanel'; import Snackbar from '/pages/snackbar'; import Textfield from '/pages/textfield'; +import Tabs from '/pages/tabs'; import { NotFound } from '/pages/errors'; let routes = [ @@ -96,6 +97,11 @@ let routes = [ component: Textfield, name: 'Textfield', }, + { + path: '/tabs', + component: Tabs, + name: 'Tabs', + }, { path: '*', component: NotFound, diff --git a/src/Tab.svelte b/src/Tab.svelte new file mode 100644 index 0000000..e01b189 --- /dev/null +++ b/src/Tab.svelte @@ -0,0 +1,31 @@ +
+ +
+ + + + \ No newline at end of file diff --git a/src/Tabs.svelte b/src/Tabs.svelte new file mode 100644 index 0000000..87b6ae5 --- /dev/null +++ b/src/Tabs.svelte @@ -0,0 +1,216 @@ +
+
+ {#each tabNames as tab, i (tab)} + + {/each} + +
+ +
+
+ +
+
+
+ + + + + + \ No newline at end of file diff --git a/src/index.js b/src/index.js index 44f375a..93cd75d 100644 --- a/src/index.js +++ b/src/index.js @@ -13,6 +13,8 @@ import Ripple from './Ripple.svelte'; import Sidepanel from './Sidepanel.svelte'; import Snackbar from './Snackbar.svelte'; import Textfield from './Textfield.svelte'; +import Tabs from './Tabs.svelte'; +import Tab from './Tab.svelte'; export { Button, @@ -30,4 +32,6 @@ export { Sidepanel, Snackbar, Textfield, + Tabs, + Tab };