diff --git a/__tests__/Tag.test.tsx b/__tests__/Tag.test.tsx
new file mode 100644
index 0000000..5fad12e
--- /dev/null
+++ b/__tests__/Tag.test.tsx
@@ -0,0 +1,16 @@
+import { shallow } from 'enzyme';
+import React from 'react';
+import { Tag, Variant } from '@/components';
+
+describe('Tag test', () => {
+
+ it('should render tag', () => {
+ const container = shallow(
+
+ Hello world
+
+ );
+
+ expect(container.find('.tag.tag-orange').length).toBe(1);
+ });
+});
diff --git a/src/components/Tag/Tag.tsx b/src/components/Tag/Tag.tsx
new file mode 100644
index 0000000..b82a222
--- /dev/null
+++ b/src/components/Tag/Tag.tsx
@@ -0,0 +1,37 @@
+import * as React from 'react';
+import PropTypes from 'prop-types';
+import { Variant } from '@/components';
+import clsx from 'clsx';
+
+export interface TagProps extends React.HTMLAttributes {
+ variant: Variant | string;
+}
+
+const Tag = React.forwardRef((
+ {
+ children,
+ className,
+ variant
+ },
+ ref
+): React.ReactElement => (
+
+ {children}
+
+));
+
+Tag.displayName = 'Tag';
+Tag.propTypes = {
+ children: PropTypes.node,
+ className: PropTypes.string,
+ variant: PropTypes.string.isRequired
+}
+
+export default Tag;
diff --git a/src/components/Tag/index.ts b/src/components/Tag/index.ts
new file mode 100644
index 0000000..03a21a6
--- /dev/null
+++ b/src/components/Tag/index.ts
@@ -0,0 +1 @@
+export { default as Tag } from './Tag';
diff --git a/src/components/index.ts b/src/components/index.ts
index 22c7f1e..41a7ea9 100644
--- a/src/components/index.ts
+++ b/src/components/index.ts
@@ -8,3 +8,4 @@ export * from './Icon';
export * from './utils';
export * from './TextField';
export * from './SelectField';
+export * from './Tag';
diff --git a/src/style/base/_variables.scss b/src/style/base/_variables.scss
index 7f0298c..5da7188 100644
--- a/src/style/base/_variables.scss
+++ b/src/style/base/_variables.scss
@@ -8,6 +8,7 @@ $colors: (
'default': hsl(0, 65%, 51%),
'hover': hsl(0, 66%, 47%),
'active': hsl(0, 73%, 41%),
+ 'dark': hsl(0, 73%, 41%),
'default-font-color': #fff, //AA
),
'pink': (
@@ -15,6 +16,7 @@ $colors: (
'default': hsl(338, 78%, 48%),
'hover': hsl(336, 78%, 43%),
'active': hsl(334, 79%, 38%),
+ 'dark': hsl(328, 81%, 29%),
'default-font-color': #fff, //AA
),
'purple': (
@@ -22,6 +24,7 @@ $colors: (
'default': hsl(287, 65%, 40%),
'hover': hsl(282, 68%, 38%),
'active': hsl(277, 70%, 35%),
+ 'dark': hsl(267, 75%, 31%),
'default-font-color': #fff, //AAAA
),
'deep-purple': (
@@ -30,6 +33,7 @@ $colors: (
'default': hsl(260, 54%, 45%),
'hover': hsl(258, 58%, 42%),
'active': hsl(251, 69%, 34%),
+ 'dark': hsl(251, 69%, 34%),
'default-font-color': #fff,
),
'indigo': (
@@ -37,6 +41,7 @@ $colors: (
'default': hsl(232, 50%, 45%),
'hover': hsl(232, 54%, 41%),
'active': hsl(233, 57%, 37%),
+ 'dark': hsl(235, 66%, 30%),
'default-font-color': #fff, //AAA
),
'blue': (
@@ -44,6 +49,7 @@ $colors: (
'default': hsl(210, 79%, 46%),
'hover': hsl(212, 80%, 42%),
'active': hsl(216, 85%, 34%),
+ 'dark': hsl(216, 85%, 34%),
'default-font-color': #fff, //AA
),
'light-blue': (
@@ -51,6 +57,7 @@ $colors: (
'default': hsl(199, 91%, 64%),
'hover': hsl(199, 92%, 56%),
'active': hsl(199, 98%, 48%),
+ 'dark': hsl(206, 99%, 31%),
'default-font-color': #000, //AAA
),
'teal': (
@@ -58,6 +65,7 @@ $colors: (
'default': hsl(187, 100%, 38%),
'hover': hsl(186, 100%, 33%),
'active': hsl(185, 100%, 28%),
+ 'dark': hsl(182, 100%, 20%),
'default-font-color': #000, //AAA
),
'green': (
@@ -65,6 +73,7 @@ $colors: (
'default': hsl(123, 41%, 45%),
'hover': hsl(123, 43%, 39%),
'active': hsl(123, 46%, 34%),
+ 'dark': hsl(124, 55%, 24%),
'default-font-color': #000, //AA
),
'light-green': (
@@ -72,6 +81,7 @@ $colors: (
'default': hsl(89, 46%, 48%),
'hover': hsl(92, 48%, 42%),
'active': hsl(95, 49%, 36%),
+ 'dark': hsl(103, 56%, 26%),
'default-font-color': #000, //AAA
),
'lime': (
@@ -79,6 +89,7 @@ $colors: (
'default': hsl(64, 60%, 50%),
'hover': hsl(62, 61%, 44%),
'active': hsl(60, 63%, 38%),
+ 'dark': hsl(54, 70%, 30%),
'default-font-color': #000, //AAA
),
'yellow': (
@@ -86,6 +97,7 @@ $colors: (
'default': hsl(49, 98%, 60%),
'hover': hsl(43, 96%, 58%),
'active': hsl(37, 95%, 56%),
+ 'dark': hsl(28, 92%, 53%),
'default-font-color': #000, //AAA
),
'amber': (
@@ -93,6 +105,7 @@ $colors: (
'default': hsl(42, 100%, 50%),
'hover': hsl(38, 100%, 50%),
'active': hsl(34, 100%, 50%),
+ 'dark': hsl(26, 100%, 50%),
'default-font-color': #000, //AAA
),
'orange': (
@@ -100,6 +113,7 @@ $colors: (
'default': hsl(33, 100%, 49%),
'hover': hsl(30, 100%, 48%),
'active': hsl(27, 100%, 47%),
+ 'dark': hsl(21, 100%, 45%),
'default-font-color': #000, //AAA
),
'brown': (
@@ -107,6 +121,7 @@ $colors: (
'default': hsl(15, 25%, 34%),
'hover': hsl(14, 26%, 29%),
'active': hsl(11, 26%, 24%),
+ 'dark': hsl(9, 28%, 19%),
'default-font-color': #fff, //AAA
),
'gray': (
@@ -114,6 +129,7 @@ $colors: (
'default': hsl(0, 0%, 46%),
'hover': hsl(0, 0%, 38%),
'active': hsl(0, 0%, 26%),
+ 'dark': hsl(0, 0%, 13%),
'default-font-color': #fff, //AA
),
'blue-gray': (
@@ -121,6 +137,7 @@ $colors: (
'default': hsl(199, 18%, 33%),
'hover': hsl(200, 18%, 26%),
'active': hsl(200, 19%, 18%),
+ 'dark': hsl(200, 19%, 18%),
'default-font-color': #fff, //AAA
)
);
@@ -168,7 +185,7 @@ $primary-color-light-background: color('deep-purple', 'background');
$danger-color: color('red', 'default');
$danger-color-hover: color('red', 'hover');
$danger-color-active: color('red', 'active');
-$danger-color-light-background: color('red', 'default');
+$danger-color-light-background: color('red', 'background');
$success-color: color('green', 'default');
$success-color-hover: color('green', 'hover');
diff --git a/src/style/components/_tags.scss b/src/style/components/_tags.scss
new file mode 100644
index 0000000..2a4f99b
--- /dev/null
+++ b/src/style/components/_tags.scss
@@ -0,0 +1,35 @@
+@use "../base/variables";
+
+.tag {
+ align-items: center;
+ border-radius: var(--base-border-radius);
+ display: inline-block;
+ font: {
+ weight: 500;
+ }
+ padding: calc(var(--base-gutter) / 2);
+
+ &.tag-primary, &.tag-purple {
+ background: var(--primary-color-light-background);
+ color: var(--primary-color);
+ }
+
+ &.tag-danger {
+ background: var(--danger-color-light-background);
+ color: var(--danger-color);
+ }
+
+ + .tag {
+ margin-left: var(--base-gutter);
+ }
+
+ @each $color, $_ in variables.$colors {
+ &.tag-#{$color} {
+ background: variables.color($color, 'background');
+ color: variables.color($color, 'dark');
+ font: {
+ weight: 500;
+ }
+ }
+ }
+}
diff --git a/src/style/index.scss b/src/style/index.scss
index 0a57069..e98512b 100644
--- a/src/style/index.scss
+++ b/src/style/index.scss
@@ -14,6 +14,7 @@
@use "components/card";
@use "components/icons";
@use "components/forms";
+@use "components/tags";
/**
* 3. Layout
diff --git a/www/src/index.tsx b/www/src/index.tsx
index 32fb8f4..f425b8f 100644
--- a/www/src/index.tsx
+++ b/www/src/index.tsx
@@ -1,13 +1,13 @@
import * as React from 'react';
+import { useState } from 'react';
import * as ReactDom from 'react-dom';
import '../../src/style/index.scss';
-import { Button, Card, Col, Grid, Icon, Page, Row, SelectField, TextField, Variant } from '../../src';
+import { Button, Card, Col, Grid, Icon, Page, Row, SelectField, Tag, TextField, Variant } from '../../src';
import Container from '../../src/components/Container/Container';
import FormGroup from '../../src/components/Form/Group';
import FormLabel from '../../src/components/Form/Label';
import FormMessage from '../../src/components/Form/Message';
-import { useState } from 'react';
const TestControllable = () => {
const [value, setValue] = useState('');
@@ -227,6 +227,31 @@ ReactDom.render(
+
+
+
+ test text
+ Primary
+ Danger
+ Rood
+ Roze
+ Paars
+ Diep-paars
+ Indigo
+ Blauw
+ Lichtblauw
+ Teal
+ Groen
+ Lichtgroen
+ Limoen
+ Geel
+ Amber
+ Oranje
+ Bruin
+ Grijs
+ Blauwgrijs
+
+