@dktunited-techoff/techoff-suite-ui 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/README.md +1 -0
  2. package/esm/assets/fonts/Montserrat-Medium.ttf +0 -0
  3. package/esm/components/Button/Button.css +93 -0
  4. package/esm/components/Button/Button.d.ts +5 -0
  5. package/esm/components/Button/Button.js +17 -0
  6. package/esm/components/Button/Button.js.map +1 -0
  7. package/esm/components/Button/Button.types.d.ts +9 -0
  8. package/esm/components/Button/Button.types.js +2 -0
  9. package/esm/components/Button/Button.types.js.map +1 -0
  10. package/esm/components/Button/__stories__/Button.stories.mdx +74 -0
  11. package/esm/components/Checkbox/Checkbox.css +61 -0
  12. package/esm/components/Checkbox/Checkbox.d.ts +7 -0
  13. package/esm/components/Checkbox/Checkbox.js +21 -0
  14. package/esm/components/Checkbox/Checkbox.js.map +1 -0
  15. package/esm/components/Checkbox/Checkbox.types.d.ts +4 -0
  16. package/esm/components/Checkbox/Checkbox.types.js +2 -0
  17. package/esm/components/Checkbox/Checkbox.types.js.map +1 -0
  18. package/esm/components/Checkbox/__stories__/Checkbox.stories.mdx +43 -0
  19. package/esm/components/Icon/Icon.css +26 -0
  20. package/esm/components/Icon/Icon.d.ts +4 -0
  21. package/esm/components/Icon/Icon.js +12 -0
  22. package/esm/components/Icon/Icon.js.map +1 -0
  23. package/esm/components/Icon/Icon.types.d.ts +4 -0
  24. package/esm/components/Icon/Icon.types.js +2 -0
  25. package/esm/components/Icon/Icon.types.js.map +1 -0
  26. package/esm/components/Icon/__stories__/Icon.stories.mdx +86 -0
  27. package/esm/components/Icon/icons/check.svg +4 -0
  28. package/esm/components/Icon/icons/chevron-down.svg +4 -0
  29. package/esm/components/Icon/icons/chevron-left.svg +4 -0
  30. package/esm/components/Icon/icons/chevron-right.svg +4 -0
  31. package/esm/components/Icon/icons/chevron-up.svg +4 -0
  32. package/esm/components/Icon/icons/heart-filled.svg +4 -0
  33. package/esm/components/Icon/icons/heart.svg +4 -0
  34. package/esm/components/Icon/icons/home.svg +6 -0
  35. package/esm/components/Icon/icons/index.d.ts +3 -0
  36. package/esm/components/Icon/icons/index.js +16 -0
  37. package/esm/components/Icon/icons/index.js.map +1 -0
  38. package/esm/components/Icon/icons/index.ts +15 -0
  39. package/esm/components/Icon/icons/plus.svg +5 -0
  40. package/esm/components/Icon/icons/search.svg +5 -0
  41. package/esm/components/Icon/icons/square-check-filled.svg +1 -0
  42. package/esm/components/Icon/icons/square.svg +1 -0
  43. package/esm/components/Icon/icons/user.svg +5 -0
  44. package/esm/components/Inputs/BooleanInput/BooleanInput.css +51 -0
  45. package/esm/components/Inputs/BooleanInput/BooleanInput.d.ts +4 -0
  46. package/esm/components/Inputs/BooleanInput/BooleanInput.js +13 -0
  47. package/esm/components/Inputs/BooleanInput/BooleanInput.js.map +1 -0
  48. package/esm/components/Inputs/BooleanInput/BooleanInput.tsx +24 -0
  49. package/esm/components/Inputs/BooleanInput/BooleanInput.types.d.ts +7 -0
  50. package/esm/components/Inputs/BooleanInput/BooleanInput.types.js +2 -0
  51. package/esm/components/Inputs/BooleanInput/BooleanInput.types.js.map +1 -0
  52. package/esm/components/Inputs/BooleanInput/BooleanInput.types.ts +7 -0
  53. package/esm/components/Inputs/BooleanInput/__stories__/BooleanInput.stories.mdx +44 -0
  54. package/esm/components/Inputs/TextInput/TextInput.css +42 -0
  55. package/esm/components/Inputs/TextInput/TextInput.d.ts +4 -0
  56. package/esm/components/Inputs/TextInput/TextInput.js +16 -0
  57. package/esm/components/Inputs/TextInput/TextInput.js.map +1 -0
  58. package/esm/components/Inputs/TextInput/TextInput.tsx +24 -0
  59. package/esm/components/Inputs/TextInput/TextInput.types.d.ts +8 -0
  60. package/esm/components/Inputs/TextInput/TextInput.types.js +2 -0
  61. package/esm/components/Inputs/TextInput/TextInput.types.js.map +1 -0
  62. package/esm/components/Inputs/TextInput/TextInput.types.ts +8 -0
  63. package/esm/components/Inputs/TextInput/__stories__/TextInput.stories.mdx +55 -0
  64. package/esm/components/Loader/Loader.css +42 -0
  65. package/esm/components/Loader/Loader.d.ts +4 -0
  66. package/esm/components/Loader/Loader.js +6 -0
  67. package/esm/components/Loader/Loader.js.map +1 -0
  68. package/esm/components/Loader/Loader.types.d.ts +3 -0
  69. package/esm/components/Loader/Loader.types.js +2 -0
  70. package/esm/components/Loader/Loader.types.js.map +1 -0
  71. package/esm/components/Loader/__stories__/Loader.stories.mdx +30 -0
  72. package/esm/index.d.ts +9 -0
  73. package/esm/index.js +10 -0
  74. package/esm/index.js.map +1 -0
  75. package/esm/layouts/Header/Header.css +83 -0
  76. package/esm/layouts/Header/Header.d.ts +4 -0
  77. package/esm/layouts/Header/Header.js +14 -0
  78. package/esm/layouts/Header/Header.js.map +1 -0
  79. package/esm/layouts/Header/Header.types.d.ts +4 -0
  80. package/esm/layouts/Header/Header.types.js +2 -0
  81. package/esm/layouts/Header/Header.types.js.map +1 -0
  82. package/esm/layouts/Header/HeaderActions.d.ts +3 -0
  83. package/esm/layouts/Header/HeaderActions.js +7 -0
  84. package/esm/layouts/Header/HeaderActions.js.map +1 -0
  85. package/esm/layouts/Header/HeaderProfile.d.ts +3 -0
  86. package/esm/layouts/Header/HeaderProfile.js +16 -0
  87. package/esm/layouts/Header/HeaderProfile.js.map +1 -0
  88. package/esm/layouts/Header/HeaderTitle.d.ts +3 -0
  89. package/esm/layouts/Header/HeaderTitle.js +11 -0
  90. package/esm/layouts/Header/HeaderTitle.js.map +1 -0
  91. package/esm/layouts/Header/__stories__/Header.stories.mdx +36 -0
  92. package/esm/layouts/Navigation/Navigation.css +74 -0
  93. package/esm/layouts/Navigation/Navigation.d.ts +4 -0
  94. package/esm/layouts/Navigation/Navigation.js +15 -0
  95. package/esm/layouts/Navigation/Navigation.js.map +1 -0
  96. package/esm/layouts/Navigation/Navigation.types.d.ts +5 -0
  97. package/esm/layouts/Navigation/Navigation.types.js +2 -0
  98. package/esm/layouts/Navigation/Navigation.types.js.map +1 -0
  99. package/esm/layouts/Navigation/NavigationActions.d.ts +4 -0
  100. package/esm/layouts/Navigation/NavigationActions.js +4 -0
  101. package/esm/layouts/Navigation/NavigationActions.js.map +1 -0
  102. package/esm/layouts/Navigation/NavigationBreadcrumb.d.ts +6 -0
  103. package/esm/layouts/Navigation/NavigationBreadcrumb.js +26 -0
  104. package/esm/layouts/Navigation/NavigationBreadcrumb.js.map +1 -0
  105. package/esm/layouts/Navigation/__stories__/Navigation.stories.mdx +46 -0
  106. package/esm/utils/string.utils.d.ts +1 -0
  107. package/esm/utils/string.utils.js +2 -0
  108. package/esm/utils/string.utils.js.map +1 -0
  109. package/esm/utils/validator.utils.d.ts +2 -0
  110. package/esm/utils/validator.utils.js +5 -0
  111. package/esm/utils/validator.utils.js.map +1 -0
  112. package/lib/assets/fonts/Montserrat-Medium.ttf +0 -0
  113. package/lib/components/Button/Button.css +93 -0
  114. package/lib/components/Button/Button.d.ts +5 -0
  115. package/lib/components/Button/Button.js +21 -0
  116. package/lib/components/Button/Button.js.map +1 -0
  117. package/lib/components/Button/Button.types.d.ts +9 -0
  118. package/lib/components/Button/Button.types.js +3 -0
  119. package/lib/components/Button/Button.types.js.map +1 -0
  120. package/lib/components/Button/__stories__/Button.stories.mdx +74 -0
  121. package/lib/components/Checkbox/Checkbox.css +61 -0
  122. package/lib/components/Checkbox/Checkbox.d.ts +7 -0
  123. package/lib/components/Checkbox/Checkbox.js +27 -0
  124. package/lib/components/Checkbox/Checkbox.js.map +1 -0
  125. package/lib/components/Checkbox/Checkbox.types.d.ts +4 -0
  126. package/lib/components/Checkbox/Checkbox.types.js +3 -0
  127. package/lib/components/Checkbox/Checkbox.types.js.map +1 -0
  128. package/lib/components/Checkbox/__stories__/Checkbox.stories.mdx +43 -0
  129. package/lib/components/Icon/Icon.css +26 -0
  130. package/lib/components/Icon/Icon.d.ts +4 -0
  131. package/lib/components/Icon/Icon.js +16 -0
  132. package/lib/components/Icon/Icon.js.map +1 -0
  133. package/lib/components/Icon/Icon.types.d.ts +4 -0
  134. package/lib/components/Icon/Icon.types.js +3 -0
  135. package/lib/components/Icon/Icon.types.js.map +1 -0
  136. package/lib/components/Icon/__stories__/Icon.stories.mdx +86 -0
  137. package/lib/components/Icon/icons/check.svg +4 -0
  138. package/lib/components/Icon/icons/chevron-down.svg +4 -0
  139. package/lib/components/Icon/icons/chevron-left.svg +4 -0
  140. package/lib/components/Icon/icons/chevron-right.svg +4 -0
  141. package/lib/components/Icon/icons/chevron-up.svg +4 -0
  142. package/lib/components/Icon/icons/heart-filled.svg +4 -0
  143. package/lib/components/Icon/icons/heart.svg +4 -0
  144. package/lib/components/Icon/icons/home.svg +6 -0
  145. package/lib/components/Icon/icons/index.d.ts +3 -0
  146. package/lib/components/Icon/icons/index.js +19 -0
  147. package/lib/components/Icon/icons/index.js.map +1 -0
  148. package/lib/components/Icon/icons/index.ts +15 -0
  149. package/lib/components/Icon/icons/plus.svg +5 -0
  150. package/lib/components/Icon/icons/search.svg +5 -0
  151. package/lib/components/Icon/icons/square-check-filled.svg +1 -0
  152. package/lib/components/Icon/icons/square.svg +1 -0
  153. package/lib/components/Icon/icons/user.svg +5 -0
  154. package/lib/components/Inputs/BooleanInput/BooleanInput.css +51 -0
  155. package/lib/components/Inputs/BooleanInput/BooleanInput.d.ts +4 -0
  156. package/lib/components/Inputs/BooleanInput/BooleanInput.js +17 -0
  157. package/lib/components/Inputs/BooleanInput/BooleanInput.js.map +1 -0
  158. package/lib/components/Inputs/BooleanInput/BooleanInput.tsx +24 -0
  159. package/lib/components/Inputs/BooleanInput/BooleanInput.types.d.ts +7 -0
  160. package/lib/components/Inputs/BooleanInput/BooleanInput.types.js +3 -0
  161. package/lib/components/Inputs/BooleanInput/BooleanInput.types.js.map +1 -0
  162. package/lib/components/Inputs/BooleanInput/BooleanInput.types.ts +7 -0
  163. package/lib/components/Inputs/BooleanInput/__stories__/BooleanInput.stories.mdx +44 -0
  164. package/lib/components/Inputs/TextInput/TextInput.css +42 -0
  165. package/lib/components/Inputs/TextInput/TextInput.d.ts +4 -0
  166. package/lib/components/Inputs/TextInput/TextInput.js +20 -0
  167. package/lib/components/Inputs/TextInput/TextInput.js.map +1 -0
  168. package/lib/components/Inputs/TextInput/TextInput.tsx +24 -0
  169. package/lib/components/Inputs/TextInput/TextInput.types.d.ts +8 -0
  170. package/lib/components/Inputs/TextInput/TextInput.types.js +3 -0
  171. package/lib/components/Inputs/TextInput/TextInput.types.js.map +1 -0
  172. package/lib/components/Inputs/TextInput/TextInput.types.ts +8 -0
  173. package/lib/components/Inputs/TextInput/__stories__/TextInput.stories.mdx +55 -0
  174. package/lib/components/Loader/Loader.css +42 -0
  175. package/lib/components/Loader/Loader.d.ts +4 -0
  176. package/lib/components/Loader/Loader.js +10 -0
  177. package/lib/components/Loader/Loader.js.map +1 -0
  178. package/lib/components/Loader/Loader.types.d.ts +3 -0
  179. package/lib/components/Loader/Loader.types.js +3 -0
  180. package/lib/components/Loader/Loader.types.js.map +1 -0
  181. package/lib/components/Loader/__stories__/Loader.stories.mdx +30 -0
  182. package/lib/index.d.ts +9 -0
  183. package/lib/index.js +26 -0
  184. package/lib/index.js.map +1 -0
  185. package/lib/layouts/Header/Header.css +83 -0
  186. package/lib/layouts/Header/Header.d.ts +4 -0
  187. package/lib/layouts/Header/Header.js +18 -0
  188. package/lib/layouts/Header/Header.js.map +1 -0
  189. package/lib/layouts/Header/Header.types.d.ts +4 -0
  190. package/lib/layouts/Header/Header.types.js +3 -0
  191. package/lib/layouts/Header/Header.types.js.map +1 -0
  192. package/lib/layouts/Header/HeaderActions.d.ts +3 -0
  193. package/lib/layouts/Header/HeaderActions.js +11 -0
  194. package/lib/layouts/Header/HeaderActions.js.map +1 -0
  195. package/lib/layouts/Header/HeaderProfile.d.ts +3 -0
  196. package/lib/layouts/Header/HeaderProfile.js +20 -0
  197. package/lib/layouts/Header/HeaderProfile.js.map +1 -0
  198. package/lib/layouts/Header/HeaderTitle.d.ts +3 -0
  199. package/lib/layouts/Header/HeaderTitle.js +15 -0
  200. package/lib/layouts/Header/HeaderTitle.js.map +1 -0
  201. package/lib/layouts/Header/__stories__/Header.stories.mdx +36 -0
  202. package/lib/layouts/Navigation/Navigation.css +74 -0
  203. package/lib/layouts/Navigation/Navigation.d.ts +4 -0
  204. package/lib/layouts/Navigation/Navigation.js +19 -0
  205. package/lib/layouts/Navigation/Navigation.js.map +1 -0
  206. package/lib/layouts/Navigation/Navigation.types.d.ts +5 -0
  207. package/lib/layouts/Navigation/Navigation.types.js +3 -0
  208. package/lib/layouts/Navigation/Navigation.types.js.map +1 -0
  209. package/lib/layouts/Navigation/NavigationActions.d.ts +4 -0
  210. package/lib/layouts/Navigation/NavigationActions.js +8 -0
  211. package/lib/layouts/Navigation/NavigationActions.js.map +1 -0
  212. package/lib/layouts/Navigation/NavigationBreadcrumb.d.ts +6 -0
  213. package/lib/layouts/Navigation/NavigationBreadcrumb.js +31 -0
  214. package/lib/layouts/Navigation/NavigationBreadcrumb.js.map +1 -0
  215. package/lib/layouts/Navigation/__stories__/Navigation.stories.mdx +46 -0
  216. package/lib/utils/string.utils.d.ts +1 -0
  217. package/lib/utils/string.utils.js +6 -0
  218. package/lib/utils/string.utils.js.map +1 -0
  219. package/lib/utils/validator.utils.d.ts +2 -0
  220. package/lib/utils/validator.utils.js +9 -0
  221. package/lib/utils/validator.utils.js.map +1 -0
  222. package/package.json +51 -0
  223. package/src/assets/fonts/Montserrat-Medium.ttf +0 -0
  224. package/src/components/Button/Button.css +93 -0
  225. package/src/components/Button/Button.tsx +34 -0
  226. package/src/components/Button/Button.types.ts +9 -0
  227. package/src/components/Button/__stories__/Button.stories.mdx +74 -0
  228. package/src/components/Checkbox/Checkbox.css +61 -0
  229. package/src/components/Checkbox/Checkbox.tsx +30 -0
  230. package/src/components/Checkbox/Checkbox.types.ts +1 -0
  231. package/src/components/Checkbox/__stories__/Checkbox.stories.mdx +43 -0
  232. package/src/components/Icon/Icon.css +26 -0
  233. package/src/components/Icon/Icon.tsx +13 -0
  234. package/src/components/Icon/Icon.types.ts +1 -0
  235. package/src/components/Icon/__stories__/Icon.stories.mdx +86 -0
  236. package/src/components/Icon/icons/check.svg +4 -0
  237. package/src/components/Icon/icons/chevron-down.svg +4 -0
  238. package/src/components/Icon/icons/chevron-left.svg +4 -0
  239. package/src/components/Icon/icons/chevron-right.svg +4 -0
  240. package/src/components/Icon/icons/chevron-up.svg +4 -0
  241. package/src/components/Icon/icons/heart-filled.svg +4 -0
  242. package/src/components/Icon/icons/heart.svg +4 -0
  243. package/src/components/Icon/icons/home.svg +6 -0
  244. package/src/components/Icon/icons/index.ts +15 -0
  245. package/src/components/Icon/icons/plus.svg +5 -0
  246. package/src/components/Icon/icons/search.svg +5 -0
  247. package/src/components/Icon/icons/square-check-filled.svg +1 -0
  248. package/src/components/Icon/icons/square.svg +1 -0
  249. package/src/components/Icon/icons/user.svg +5 -0
  250. package/src/components/Inputs/BooleanInput/BooleanInput.css +51 -0
  251. package/src/components/Inputs/BooleanInput/BooleanInput.tsx +24 -0
  252. package/src/components/Inputs/BooleanInput/BooleanInput.types.ts +7 -0
  253. package/src/components/Inputs/BooleanInput/__stories__/BooleanInput.stories.mdx +44 -0
  254. package/src/components/Inputs/TextInput/TextInput.css +42 -0
  255. package/src/components/Inputs/TextInput/TextInput.tsx +24 -0
  256. package/src/components/Inputs/TextInput/TextInput.types.ts +8 -0
  257. package/src/components/Inputs/TextInput/__stories__/TextInput.stories.mdx +55 -0
  258. package/src/components/Loader/Loader.css +42 -0
  259. package/src/components/Loader/Loader.tsx +7 -0
  260. package/src/components/Loader/Loader.types.ts +1 -0
  261. package/src/components/Loader/__stories__/Loader.stories.mdx +30 -0
  262. package/src/index.ts +10 -0
  263. package/src/layouts/Header/Header.css +83 -0
  264. package/src/layouts/Header/Header.tsx +18 -0
  265. package/src/layouts/Header/Header.types.ts +1 -0
  266. package/src/layouts/Header/HeaderActions.tsx +8 -0
  267. package/src/layouts/Header/HeaderProfile.tsx +20 -0
  268. package/src/layouts/Header/HeaderTitle.tsx +17 -0
  269. package/src/layouts/Header/__stories__/Header.stories.mdx +36 -0
  270. package/src/layouts/Navigation/Navigation.css +74 -0
  271. package/src/layouts/Navigation/Navigation.tsx +19 -0
  272. package/src/layouts/Navigation/Navigation.types.ts +1 -0
  273. package/src/layouts/Navigation/NavigationActions.tsx +7 -0
  274. package/src/layouts/Navigation/NavigationBreadcrumb.tsx +55 -0
  275. package/src/layouts/Navigation/__stories__/Navigation.stories.mdx +46 -0
  276. package/src/utils/string.utils.ts +1 -0
  277. package/src/utils/validator.utils.ts +8 -0
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import { ArgsTable, Canvas, Meta, Story } from '@storybook/blocks';
3
+ import { Checkbox, CheckboxLabel, CheckboxCaption } from '../Checkbox';
4
+
5
+ <Meta title="Components/Checkbox" />
6
+
7
+ export const checkboxArgTypes = {
8
+ checked: {
9
+ control: 'boolean',
10
+ description: 'State of the checkbox.',
11
+ table: { defaultValue: { summary: 'false' } },
12
+ },
13
+ };
14
+
15
+ # Checkbox
16
+
17
+ The checkboxes are applied when users can select all, several, or none of the options from a given list.
18
+
19
+ ## Overview
20
+
21
+ <Canvas>
22
+ <Story
23
+ name="Overview"
24
+ args={{
25
+ children: [
26
+ <CheckboxLabel>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</CheckboxLabel>,
27
+ <CheckboxCaption>
28
+ auctor nisl justo, sed posuere est dignissim nec. Integer ultricies, metus ac imperdiet ullamcorper, est justo
29
+ viverra nisl, in posuere dui urna eget quam.
30
+ </CheckboxCaption>,
31
+ ],
32
+ checked: false,
33
+ onChange: () => {},
34
+ }}
35
+ argTypes={checkboxArgTypes}
36
+ >
37
+ {args => <Checkbox {...args}>{args.children}</Checkbox>}
38
+ </Story>
39
+ </Canvas>
40
+
41
+ ## Props
42
+
43
+ <ArgsTable story="Overview" of={Checkbox} />
@@ -0,0 +1,26 @@
1
+ .icon--16 {
2
+ width: 16px;
3
+ height: 16px;
4
+ }
5
+ .icon--20 {
6
+ width: 20px;
7
+ height: 20px;
8
+ }
9
+ .icon--24 {
10
+ width: 24px;
11
+ height: 24px;
12
+ }
13
+ .icon svg {
14
+ width: 100%;
15
+ height: 100%;
16
+ }
17
+
18
+ /* ######### */
19
+ /* GLOBALS */
20
+ * {
21
+ font-size: 14px;
22
+ outline: none;
23
+ box-sizing: border-box;
24
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans',
25
+ 'Helvetica Neue', sans-serif;
26
+ }
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import { IconProps } from './Icon.types';
3
+ import { icons } from './icons';
4
+ import './Icon.css';
5
+
6
+ export const Icon = ({ name, size = '20' }: IconProps) => {
7
+ const icon = icons[name];
8
+
9
+ // #########
10
+ // Rendering
11
+ if (!icon) return <></>;
12
+ return <div className={`icon icon--${size}`} dangerouslySetInnerHTML={{ __html: icon }} />;
13
+ };
@@ -0,0 +1 @@
1
+ export type IconProps = { name: string; size?: '16' | '20' | '24' };
@@ -0,0 +1,86 @@
1
+ import React from 'react';
2
+ import { ArgsTable, Canvas, Meta, Story } from '@storybook/blocks';
3
+ import { Icon } from '../Icon';
4
+ import { icons } from '../icons';
5
+
6
+ <Meta title="Guidelines/Iconography" />
7
+
8
+ <style>
9
+ {`
10
+ .icons {
11
+ display: flex;
12
+ flex-wrap: wrap;
13
+ margin-top: 20px;
14
+ }
15
+ .icon-container {
16
+ display: flex;
17
+ flex-direction: column;
18
+ width: 140px;
19
+ height: 110px;
20
+ margin: 0 10px 10px 0;
21
+ box-shadow: rgba(0, 0, 0, 0.10) 0 1px 3px 0;
22
+ border: 1px solid hsla(203, 50%, 30%, 0.15);
23
+ border-radius: 5px;
24
+ color: #27272a;
25
+ overflow: hidden;
26
+ }
27
+ .icon {
28
+ display: flex;
29
+ flex: 1;
30
+ align-items: center;
31
+ justify-content: center;
32
+ }
33
+ .icon-label {
34
+ display: flex;
35
+ align-items: center;
36
+ justify-content: center;
37
+ height: 30px;
38
+ border-top: 1px solid hsla(203, 50%, 30%, 0.15);
39
+ background: #fafafa;
40
+ font-size: 13px;
41
+ }
42
+ `}
43
+ </style>
44
+
45
+ export const iconArgTypes = {
46
+ name: {
47
+ control: 'select',
48
+ options: Object.keys(icons),
49
+ description: 'Name of an icon.',
50
+ },
51
+ size: {
52
+ control: 'inline-radio',
53
+ options: ['16', '20', '24'],
54
+ description: 'Define the size of an icon.',
55
+ table: { defaultValue: { summary: '20' } },
56
+ },
57
+ };
58
+
59
+ # Iconography
60
+
61
+ Icons are visual symbols used to represent ideas, objects or actions. They communicate messages at a glance, allow interactivity and draw attention to important information.
62
+
63
+ ## Overview
64
+
65
+ <Canvas>
66
+ <Story name="Overview" args={{ name: 'heart', size: '20' }} argTypes={iconArgTypes}>
67
+ {args => <Icon {...args} />}
68
+ </Story>
69
+ </Canvas>
70
+
71
+ ## Props
72
+
73
+ <ArgsTable story="Overview" of={Icon} />
74
+
75
+ ## Icons
76
+
77
+ <div className="icons">
78
+ {Object.keys(icons).map(icon => (
79
+ <div className="icon-container" key={icon}>
80
+ <div className="icon">
81
+ <Icon name={icon} />
82
+ </div>
83
+ <div className="icon-label">{icon}</div>
84
+ </div>
85
+ ))}
86
+ </div>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-check" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
3
+ <path d="M5 12l5 5l10 -10"></path>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-down" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
3
+ <path d="M6 9l6 6l6 -6"></path>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-left" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
3
+ <path d="M15 6l-6 6l6 6"></path>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-right" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
3
+ <path d="M9 6l6 6l-6 6"></path>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-up" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
3
+ <path d="M6 15l6 -6l6 6"></path>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-filled" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
3
+ <path d="M6.979 3.074a6 6 0 0 1 4.988 1.425l.037 .033l.034 -.03a6 6 0 0 1 4.733 -1.44l.246 .036a6 6 0 0 1 3.364 10.008l-.18 .185l-.048 .041l-7.45 7.379a1 1 0 0 1 -1.313 .082l-.094 -.082l-7.493 -7.422a6 6 0 0 1 3.176 -10.215z" stroke-width="0" fill="currentColor"></path>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
3
+ <path d="M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
4
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-home" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
3
+ <path d="M5 12l-2 0l9 -9l9 9l-2 0"></path>
4
+ <path d="M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7"></path>
5
+ <path d="M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6"></path>
6
+ </svg>
@@ -0,0 +1,15 @@
1
+ export const icons: { [k: string]: string } = {
2
+ 'check': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-check" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M5 12l5 5l10 -10"></path></svg>',
3
+ 'chevron-down': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-down" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M6 9l6 6l6 -6"></path></svg>',
4
+ 'chevron-left': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-left" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M15 6l-6 6l6 6"></path></svg>',
5
+ 'chevron-right': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-right" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M9 6l6 6l-6 6"></path></svg>',
6
+ 'chevron-up': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-up" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M6 15l6 -6l6 6"></path></svg>',
7
+ 'heart-filled': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-filled" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M6.979 3.074a6 6 0 0 1 4.988 1.425l.037 .033l.034 -.03a6 6 0 0 1 4.733 -1.44l.246 .036a6 6 0 0 1 3.364 10.008l-.18 .185l-.048 .041l-7.45 7.379a1 1 0 0 1 -1.313 .082l-.094 -.082l-7.493 -7.422a6 6 0 0 1 3.176 -10.215z" stroke-width="0" fill="currentColor"></path></svg>',
8
+ 'heart': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path></svg>',
9
+ 'home': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-home" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M5 12l-2 0l9 -9l9 9l-2 0"></path> <path d="M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7"></path> <path d="M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6"></path></svg>',
10
+ 'plus': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-plus" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M12 5l0 14"></path> <path d="M5 12l14 0"></path></svg>',
11
+ 'search': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-search" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0"></path> <path d="M21 21l-6 -6"></path></svg>',
12
+ 'square-check-filled': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-square-check-filled" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.666c0 1.96 -1.537 3.56 -3.472 3.662l-.195 .005h-12.666a3.667 3.667 0 0 1 -3.662 -3.472l-.005 -.195v-12.666c0 -1.96 1.537 -3.56 3.472 -3.662l.195 -.005h12.666zm-2.626 7.293a1 1 0 0 0 -1.414 0l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.32 1.497l2 2l.094 .083a1 1 0 0 0 1.32 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z" stroke-width="0" fill="currentColor" /></svg>',
13
+ 'square': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-square" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z" /></svg>',
14
+ 'user': '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-user" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0"></path> <path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2"></path></svg>',
15
+ };
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-plus" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
3
+ <path d="M12 5l0 14"></path>
4
+ <path d="M5 12l14 0"></path>
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-search" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
3
+ <path d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0"></path>
4
+ <path d="M21 21l-6 -6"></path>
5
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-square-check-filled" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.666c0 1.96 -1.537 3.56 -3.472 3.662l-.195 .005h-12.666a3.667 3.667 0 0 1 -3.662 -3.472l-.005 -.195v-12.666c0 -1.96 1.537 -3.56 3.472 -3.662l.195 -.005h12.666zm-2.626 7.293a1 1 0 0 0 -1.414 0l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.32 1.497l2 2l.094 .083a1 1 0 0 0 1.32 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z" stroke-width="0" fill="currentColor" /></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-square" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z" /></svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-user" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
3
+ <path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0"></path>
4
+ <path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2"></path>
5
+ </svg>
@@ -0,0 +1,51 @@
1
+ .boolean-input {
2
+ display: flex;
3
+ flex-direction: column;
4
+ }
5
+ .boolean-input > label {
6
+ display: block;
7
+ margin-bottom: 4px;
8
+ color: #012b49;
9
+ font-weight: 700;
10
+ }
11
+ .boolean-input-container {
12
+ display: flex;
13
+ }
14
+
15
+ /* ######## */
16
+ /* INPUTS */
17
+ .boolean-input-content {
18
+ display: flex;
19
+ height: 32px;
20
+ border-radius: 6px;
21
+ overflow: hidden;
22
+ }
23
+ .boolean-input-content > div {
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ min-width: 44px;
28
+ padding: 12px;
29
+ background: #e7f3f9;
30
+ color: #007dbc;
31
+ font-weight: 700;
32
+ cursor: pointer;
33
+ transition: all ease 0.3s;
34
+ }
35
+ .boolean-input-content > div:first-child {
36
+ border-right: 1px solid #007dbc;
37
+ }
38
+ .boolean-input-content > .boolean-input--selected {
39
+ background: #007dbc;
40
+ color: #ffffff;
41
+ }
42
+
43
+ /* ######### */
44
+ /* GLOBALS */
45
+ * {
46
+ font-size: 14px;
47
+ outline: none;
48
+ box-sizing: border-box;
49
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans',
50
+ 'Helvetica Neue', sans-serif;
51
+ }
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import { BooleanInputProps } from './BooleanInput.types';
3
+ import './BooleanInput.css';
4
+
5
+ export const BooleanInput = ({ label, labelFalse, labelTrue, value, onChange }: BooleanInputProps) => {
6
+ // #########
7
+ // Rendering
8
+ return (
9
+ <div className="boolean-input">
10
+ {label && <label>{label}</label>}
11
+
12
+ <div className="boolean-input-container">
13
+ <div className="boolean-input-content">
14
+ <div className={value === true ? 'boolean-input--selected' : ''} onClick={() => onChange(true)}>
15
+ {labelTrue ?? 'Yes'}
16
+ </div>
17
+ <div className={value === false ? 'boolean-input--selected' : ''} onClick={() => onChange(false)}>
18
+ {labelFalse ?? 'No'}
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ );
24
+ };
@@ -0,0 +1,7 @@
1
+ export type BooleanInputProps = {
2
+ label?: string;
3
+ labelFalse?: string;
4
+ labelTrue?: string;
5
+ value?: boolean;
6
+ onChange: (value: boolean) => void;
7
+ };
@@ -0,0 +1,44 @@
1
+ import React from 'react';
2
+ import { ArgsTable, Canvas, Meta, Story } from '@storybook/blocks';
3
+ import { BooleanInput } from '../BooleanInput';
4
+
5
+ <Meta title="Components/Inputs/BooleanInput" />
6
+
7
+ export const inputArgType = {
8
+ label: {
9
+ control: 'text',
10
+ description: 'Label of the input.',
11
+ },
12
+ labelFalse: {
13
+ control: 'text',
14
+ description: 'Label of the FALSE value.',
15
+ },
16
+ labelTrue: {
17
+ control: 'text',
18
+ description: 'Label of the TRUE value.',
19
+ },
20
+ value: {
21
+ control: 'boolean',
22
+ description: 'Value of the input (can be undefined).',
23
+ },
24
+ onChange: {
25
+ control: 'function',
26
+ description: 'The handler called when clicking on input.',
27
+ },
28
+ };
29
+
30
+ # Boolean Input
31
+
32
+ The Boolean input is used to quickly switch between two possible states. It is commonly used for "yes/no" switches. The input can in some cases have a 3rd state, EMPTY.
33
+
34
+ ## Overview
35
+
36
+ <Canvas>
37
+ <Story name="Overview" args={{ label: 'Label', onChange: () => {} }} argTypes={inputArgType}>
38
+ {args => <BooleanInput {...args} />}
39
+ </Story>
40
+ </Canvas>
41
+
42
+ ## Props
43
+
44
+ <ArgsTable story="Overview" of={BooleanInput} />
@@ -0,0 +1,42 @@
1
+ .text-input {
2
+ display: flex;
3
+ flex-direction: column;
4
+ }
5
+ .text-input > label {
6
+ display: block;
7
+ margin-bottom: 4px;
8
+ color: #012b49;
9
+ font-weight: 700;
10
+ }
11
+ .text-input-container {
12
+ position: relative;
13
+ }
14
+ .text-input-container > input {
15
+ width: 100%;
16
+ height: 32px;
17
+ padding: 0 40px 0 12px;
18
+ border: 1px solid #d4d4d4;
19
+ border-radius: 6px;
20
+ color: #007dbc;
21
+ font-weight: 700;
22
+ }
23
+ .text-input-container > input::placeholder {
24
+ font-weight: 400;
25
+ }
26
+ .text-input-container > .icon {
27
+ position: absolute;
28
+ top: 50%;
29
+ right: 12px;
30
+ color: #4e5d6b;
31
+ transform: translateY(-50%);
32
+ }
33
+
34
+ /* ######### */
35
+ /* GLOBALS */
36
+ * {
37
+ font-size: 14px;
38
+ outline: none;
39
+ box-sizing: border-box;
40
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans',
41
+ 'Helvetica Neue', sans-serif;
42
+ }
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import { ChangeEvent } from 'react';
3
+ import { Icon } from '../../Icon/Icon';
4
+ import { TextInputProps } from './TextInput.types';
5
+ import './TextInput.css';
6
+
7
+ export const TextInput = ({ icon, label, placeholder, value, autofocus, onChange }: TextInputProps) => {
8
+ // ########
9
+ // Handlers
10
+ const handleChange = (e: ChangeEvent<HTMLInputElement>) => onChange(e.target.value);
11
+
12
+ // #########
13
+ // Rendering
14
+ return (
15
+ <div className="text-input">
16
+ {label && <label>{label}</label>}
17
+
18
+ <div className="text-input-container">
19
+ <input type="text" placeholder={placeholder} value={value} autoFocus={autofocus} onChange={handleChange} />
20
+ {icon && <Icon name={icon} size="16" />}
21
+ </div>
22
+ </div>
23
+ );
24
+ };
@@ -0,0 +1,8 @@
1
+ export type TextInputProps = {
2
+ icon?: string;
3
+ label?: string;
4
+ placeholder?: string;
5
+ value: string;
6
+ autofocus?: boolean;
7
+ onChange: (value: string) => void;
8
+ };
@@ -0,0 +1,55 @@
1
+ import React from 'react';
2
+ import { ArgsTable, Canvas, Meta, Story } from '@storybook/blocks';
3
+ import { TextInput } from '../TextInput';
4
+ import { icons } from '../../../Icon/icons';
5
+
6
+ <Meta title="Components/Inputs/TextInput" />
7
+
8
+ export const inputArgTypes = {
9
+ icon: {
10
+ control: 'select',
11
+ options: Object.keys(icons),
12
+ description: 'Name of an icon.',
13
+ },
14
+ label: {
15
+ control: 'text',
16
+ description: 'Label of the input.',
17
+ },
18
+ placeholder: {
19
+ control: 'text',
20
+ description: 'Placeholder displayed when the input is empty.',
21
+ },
22
+ value: {
23
+ control: 'text',
24
+ description: 'Value of the input.',
25
+ },
26
+ autofocus: {
27
+ control: 'boolean',
28
+ description: 'Auto focus the input once mounted',
29
+ table: { defaultValue: { summary: 'false' } },
30
+ },
31
+ onChange: {
32
+ control: 'function',
33
+ description: 'The handler called when the value of the input changes.',
34
+ },
35
+ };
36
+
37
+ # Text Input
38
+
39
+ Text input allows the user to enter content and data when the expected user input is a single line of text.
40
+
41
+ ## Overview
42
+
43
+ <Canvas>
44
+ <Story
45
+ name="Overview"
46
+ args={{ label: 'Label', placeholder: 'This is a placeholder', autofocus: false, onChange: () => {} }}
47
+ argTypes={inputArgTypes}
48
+ >
49
+ {args => <TextInput {...args} />}
50
+ </Story>
51
+ </Canvas>
52
+
53
+ ## Props
54
+
55
+ <ArgsTable story="Overview" of={TextInput} />
@@ -0,0 +1,42 @@
1
+ @keyframes rotation {
2
+ 0% {
3
+ transform: rotate(0deg);
4
+ }
5
+ 100% {
6
+ transform: rotate(360deg);
7
+ }
8
+ }
9
+
10
+ .loader {
11
+ border: 2px solid;
12
+ border-color: #00689d transparent;
13
+ border-radius: 50%;
14
+ display: inline-block;
15
+ box-sizing: border-box;
16
+ animation: rotation 1.5s linear infinite;
17
+ }
18
+
19
+ /* ####### */
20
+ /* SIZES */
21
+ .loader--sm {
22
+ width: 24px;
23
+ height: 24px;
24
+ }
25
+ .loader--md {
26
+ width: 32px;
27
+ height: 32px;
28
+ }
29
+ .loader--lg {
30
+ width: 44px;
31
+ height: 44px;
32
+ }
33
+
34
+ /* ######### */
35
+ /* GLOBALS */
36
+ * {
37
+ font-size: 14px;
38
+ outline: none;
39
+ box-sizing: border-box;
40
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans',
41
+ 'Helvetica Neue', sans-serif;
42
+ }
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ import { LoaderProps } from './Loader.types';
3
+ import './Loader.css';
4
+
5
+ export const Loader = ({ size = 'md' }: LoaderProps) => {
6
+ return <div className={`loader loader--${size}`} />;
7
+ };
@@ -0,0 +1 @@
1
+ export type LoaderProps = { size?: 'sm' | 'md' | 'lg' };
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import { ArgsTable, Canvas, Meta, Story } from '@storybook/blocks';
3
+ import { Loader } from '../Loader';
4
+
5
+ <Meta title="Components/Loader" />
6
+
7
+ export const loaderArgTypes = {
8
+ size: {
9
+ control: 'inline-radio',
10
+ options: ['sm', 'md', 'lg'],
11
+ description: 'Define the size of the loader.',
12
+ table: { defaultValue: { summary: 'md' } },
13
+ },
14
+ };
15
+
16
+ # Loader
17
+
18
+ Loader express to user that an action is occuring.
19
+
20
+ ## Overview
21
+
22
+ <Canvas>
23
+ <Story name="Overview" args={{ size: 'md' }} argTypes={loaderArgTypes}>
24
+ {args => <Loader {...args}>{args.children}</Loader>}
25
+ </Story>
26
+ </Canvas>
27
+
28
+ ## Props
29
+
30
+ <ArgsTable story="Overview" of={Loader} />
package/src/index.ts ADDED
@@ -0,0 +1,10 @@
1
+ export * from './components/Button/Button';
2
+ export * from './components/Icon/Icon';
3
+
4
+ export * from './layouts/Header/Header';
5
+ export * from './layouts/Header/HeaderActions';
6
+ export * from './layouts/Header/HeaderProfile';
7
+ export * from './layouts/Header/HeaderTitle';
8
+ export * from './layouts/Navigation/Navigation';
9
+ export * from './layouts/Navigation/NavigationActions';
10
+ export * from './layouts/Navigation/NavigationBreadcrumb';