diff --git a/packages/chlorophyll-storybook/src/stories/css/tabs-bar/TabsBar.stories.svelte b/packages/chlorophyll-storybook/src/stories/css/tabs-bar/TabsBar.stories.svelte
new file mode 100644
index 0000000000..7b3fdf4349
--- /dev/null
+++ b/packages/chlorophyll-storybook/src/stories/css/tabs-bar/TabsBar.stories.svelte
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+`}
+ name="Default"
+ args={{}}
+/>
diff --git a/packages/chlorophyll-storybook/src/stories/css/tabs-bar/TabsBar.svelte b/packages/chlorophyll-storybook/src/stories/css/tabs-bar/TabsBar.svelte
new file mode 100644
index 0000000000..933b6244d9
--- /dev/null
+++ b/packages/chlorophyll-storybook/src/stories/css/tabs-bar/TabsBar.svelte
@@ -0,0 +1,18 @@
+
+
+
+
+ Content for tab 1
+ Content for tab 2
+ Content for tab 3
+
diff --git a/packages/chlorophyll-storybook/src/stories/css/tabs-bar/index.stories.mdx b/packages/chlorophyll-storybook/src/stories/css/tabs-bar/index.stories.mdx
new file mode 100644
index 0000000000..7a1ca4ab34
--- /dev/null
+++ b/packages/chlorophyll-storybook/src/stories/css/tabs-bar/index.stories.mdx
@@ -0,0 +1,11 @@
+import { Meta, Story } from '@storybook/addon-docs/blocks';
+
+
+
+# Tabs bar
+
+Tabs make it easy to explore and switch between different views or functional aspects of an app or to browse categorized data sets.
+
+
diff --git a/packages/chlorophyll/src/scss/classes/_index.scss b/packages/chlorophyll/src/scss/classes/_index.scss
index 8197caffa9..50c4ca23e5 100644
--- a/packages/chlorophyll/src/scss/classes/_index.scss
+++ b/packages/chlorophyll/src/scss/classes/_index.scss
@@ -3,6 +3,7 @@
@use 'button';
@use 'input';
@use 'link';
+@use 'tabs-bar';
@use 'utility/spacing';
@use 'typography';
diff --git a/packages/chlorophyll/src/scss/classes/tabs-bar/_index.scss b/packages/chlorophyll/src/scss/classes/tabs-bar/_index.scss
new file mode 100644
index 0000000000..8d7ff5f1a9
--- /dev/null
+++ b/packages/chlorophyll/src/scss/classes/tabs-bar/_index.scss
@@ -0,0 +1,21 @@
+@use '../../mixins/tabs-bar';
+
+#{tabs-bar.$selector-tab} {
+ @include tabs-bar.tab;
+}
+
+#{tabs-bar.$selector-tab--selected} {
+ @include tabs-bar.tab--selected;
+}
+
+#{tabs-bar.$selector-tabs-bar} {
+ @include tabs-bar.tabs-bar
+}
+
+#{tabs-bar.$selector-tab-panel} {
+ @include tabs-bar.tabs-panel;
+}
+
+#{tabs-bar.$selector-tab-panel--selected} {
+ @include tabs-bar.tabs-panel--selected;
+}
\ No newline at end of file
diff --git a/packages/chlorophyll/src/scss/mixins/tabs-bar/_index.scss b/packages/chlorophyll/src/scss/mixins/tabs-bar/_index.scss
new file mode 100644
index 0000000000..ae91a429b7
--- /dev/null
+++ b/packages/chlorophyll/src/scss/mixins/tabs-bar/_index.scss
@@ -0,0 +1,55 @@
+@use '../../tokens';
+@use '../../mixins/utility';
+@use '../../functions';
+
+$selector-tab: "[role=tab]";
+$selector-tab--selected: $selector-tab + "[aria-selected=true]";
+$selector-tab-panel: "[role=tabpanel]";
+$selector-tab-panel--selected: $selector-tab-panel + "[aria-hidden=false]";
+$selector-tabs-bar: "[role=tablist]";
+
+@mixin tab {
+ @include utility.add-border($sides: "bottom");
+ @include utility.add-border-color;
+ @include utility.padding-horizontal(5);
+ @include utility.padding-vertical(4);
+ @include utility.font-weight('medium');
+ @include utility.min-width(10);
+
+ color: map-get(tokens.$theme-colors, 'primary');
+ text-decoration: none;
+ text-align: center;
+
+ @include utility.add-hover-state;
+ @include utility.add-focus;
+}
+
+@mixin tab--selected {
+ @include utility.add-border($sides: ("top", "right", "left"));
+ @include utility.add-border-color;
+
+ border-bottom: tokens.$border-width transparent;
+ color: map-get(tokens.$grey, 1);
+
+ @include utility.add-hover-state;
+}
+
+@mixin tabs-bar {
+ display: flex;
+
+ &::after {
+ @include utility.add-border($sides: ("bottom"));
+ @include utility.add-border-color;
+ content: '';
+ display: block;
+ flex-grow: 1;
+ }
+}
+
+@mixin tabs-panel {
+ display: none;
+}
+
+@mixin tabs-panel--selected {
+ display: block;
+}
\ No newline at end of file
diff --git a/packages/chlorophyll/src/scss/mixins/utility/_border.scss b/packages/chlorophyll/src/scss/mixins/utility/_border.scss
index 59d46c2977..97243782e3 100644
--- a/packages/chlorophyll/src/scss/mixins/utility/_border.scss
+++ b/packages/chlorophyll/src/scss/mixins/utility/_border.scss
@@ -1,8 +1,19 @@
@use '../../tokens';
+
@mixin add-border-radius() {
border-radius: tokens.$border-radius;
}
-@mixin add-border() {
- border: solid tokens.$border-width;
+@mixin add-border($sides: false) {
+ @if not $sides {
+ border: solid tokens.$border-width;
+ } @else {
+ @each $side in $sides {
+ border-#{$side}: solid tokens.$border-width;
+ }
+ }
}
+
+@mixin add-border-color() {
+ border-color: tokens.$border-color-default;
+}
\ No newline at end of file
diff --git a/packages/chlorophyll/src/scss/mixins/utility/_focus.scss b/packages/chlorophyll/src/scss/mixins/utility/_focus.scss
index 03832f21f4..4f038d15ae 100644
--- a/packages/chlorophyll/src/scss/mixins/utility/_focus.scss
+++ b/packages/chlorophyll/src/scss/mixins/utility/_focus.scss
@@ -19,6 +19,7 @@
&:hover {
background: $color;
+ color: white;
}
}
diff --git a/packages/chlorophyll/src/scss/mixins/utility/_spacing.scss b/packages/chlorophyll/src/scss/mixins/utility/_spacing.scss
index bb02b9900a..9f97865f0b 100644
--- a/packages/chlorophyll/src/scss/mixins/utility/_spacing.scss
+++ b/packages/chlorophyll/src/scss/mixins/utility/_spacing.scss
@@ -53,3 +53,7 @@
padding-bottom: map-get(tokens.$spacing, $size);
padding-top: map-get(tokens.$spacing, $size);
}
+
+@mixin min-width($size) {
+ min-width: map-get(tokens.$spacing, $size);
+}
\ No newline at end of file
diff --git a/packages/chlorophyll/src/scss/tokens/_border.scss b/packages/chlorophyll/src/scss/tokens/_border.scss
index aca3f6e9e3..aac6cd6016 100644
--- a/packages/chlorophyll/src/scss/tokens/_border.scss
+++ b/packages/chlorophyll/src/scss/tokens/_border.scss
@@ -1,2 +1,5 @@
+@use 'color';
+
$radius: 4px;
$width: 1px;
+$color-default: map-get(color.$grey, 4)
\ No newline at end of file
diff --git a/packages/chlorophyll/src/scss/tokens/_spacing.scss b/packages/chlorophyll/src/scss/tokens/_spacing.scss
index acbb8ab414..ba5d341955 100644
--- a/packages/chlorophyll/src/scss/tokens/_spacing.scss
+++ b/packages/chlorophyll/src/scss/tokens/_spacing.scss
@@ -8,4 +8,6 @@ $spacing: (
6: 1.5rem,
7: 2rem,
8: 4rem,
+ 9: 6rem,
+ 10: 8rem
);