imbric-theme 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (245) hide show
  1. package/.babelrc.json +3 -0
  2. package/.commitlintrc.json +3 -0
  3. package/.editorconfig +13 -0
  4. package/.eslintcache +1 -0
  5. package/.eslintrc.json +36 -0
  6. package/.huskyrc.json +6 -0
  7. package/.lintstagedrc.json +5 -0
  8. package/.nvmrc +1 -0
  9. package/.prettierrc.json +4 -0
  10. package/.releaserc.json +13 -0
  11. package/.storybook/main.js +9 -0
  12. package/.storybook/preview-head.html +2 -0
  13. package/.storybook/preview.js +32 -0
  14. package/.stylelintrc.json +14 -0
  15. package/.vscode/launch.json +15 -0
  16. package/CHANGELOG.md +0 -0
  17. package/README.md +69 -0
  18. package/atoms/Avatar/Avatar.js +36 -0
  19. package/atoms/Avatar/Avatar.module.css +3 -0
  20. package/atoms/Avatar/Avatar.stories.js +29 -0
  21. package/atoms/Avatar/__snapshots__/Avatar.stories.js.snap +105 -0
  22. package/atoms/Avatar/constants.js +3 -0
  23. package/atoms/Avatar/helpers.js +7 -0
  24. package/atoms/Avatar/index.js +3 -0
  25. package/atoms/Button/Button.js +68 -0
  26. package/atoms/Button/Button.module.css +63 -0
  27. package/atoms/Button/Button.stories.js +47 -0
  28. package/atoms/Button/Button.test.js +60 -0
  29. package/atoms/Button/__snapshots__/Button.stories.js.snap +191 -0
  30. package/atoms/Button/constants.js +3 -0
  31. package/atoms/Button/index.js +3 -0
  32. package/atoms/Card/Card.js +48 -0
  33. package/atoms/Card/Card.module.css +52 -0
  34. package/atoms/Card/Card.stories.js +41 -0
  35. package/atoms/Card/__snapshots__/Card.stories.js.snap +136 -0
  36. package/atoms/Card/constants.js +4 -0
  37. package/atoms/Card/index.js +3 -0
  38. package/atoms/Check/Check.js +26 -0
  39. package/atoms/Check/Check.module.css +11 -0
  40. package/atoms/Check/Check.stories.js +15 -0
  41. package/atoms/Check/__snapshots__/Check.stories.js.snap +67 -0
  42. package/atoms/Check/index.js +2 -0
  43. package/atoms/Divider/Divider.js +19 -0
  44. package/atoms/Divider/Divider.module.css +5 -0
  45. package/atoms/Divider/Divider.stories.js +12 -0
  46. package/atoms/Divider/__snapshots__/Divider.stories.js.snap +22 -0
  47. package/atoms/Divider/index.js +2 -0
  48. package/atoms/Heading/Heading.js +37 -0
  49. package/atoms/Heading/Heading.module.css +66 -0
  50. package/atoms/Heading/Heading.stories.js +46 -0
  51. package/atoms/Heading/__snapshots__/Heading.stories.js.snap +189 -0
  52. package/atoms/Heading/constants.js +5 -0
  53. package/atoms/Heading/index.js +3 -0
  54. package/atoms/Icon/Icon.js +66 -0
  55. package/atoms/Icon/Icon.module.css +112 -0
  56. package/atoms/Icon/Icon.stories.js +48 -0
  57. package/atoms/Icon/__snapshots__/Icon.stories.js.snap +1311 -0
  58. package/atoms/Icon/constants.js +486 -0
  59. package/atoms/Icon/helpers.js +9 -0
  60. package/atoms/Icon/index.js +3 -0
  61. package/atoms/Input/Input.js +49 -0
  62. package/atoms/Input/Input.module.css +27 -0
  63. package/atoms/Input/Input.stories.js +32 -0
  64. package/atoms/Input/__snapshots__/Input.stories.js.snap +101 -0
  65. package/atoms/Input/constants.js +3 -0
  66. package/atoms/Input/index.js +3 -0
  67. package/atoms/Link/Link.js +33 -0
  68. package/atoms/Link/Link.module.css +14 -0
  69. package/atoms/Link/Link.stories.js +30 -0
  70. package/atoms/Link/__snapshots__/Link.stories.js.snap +118 -0
  71. package/atoms/Link/constants.js +5 -0
  72. package/atoms/Link/index.js +3 -0
  73. package/atoms/Loading/Loading.js +30 -0
  74. package/atoms/Loading/Loading.module.css +51 -0
  75. package/atoms/Loading/Loading.stories.js +17 -0
  76. package/atoms/Loading/__snapshots__/Loading.stories.js.snap +26 -0
  77. package/atoms/Loading/index.js +2 -0
  78. package/atoms/Modal/Modal.js +98 -0
  79. package/atoms/Modal/Modal.module.css +85 -0
  80. package/atoms/Modal/Modal.stories.js +43 -0
  81. package/atoms/Modal/__snapshots__/Modal.stories.js.snap +239 -0
  82. package/atoms/Modal/constants.js +1 -0
  83. package/atoms/Modal/index.js +3 -0
  84. package/atoms/Paragraph/Paragraph.js +56 -0
  85. package/atoms/Paragraph/Paragraph.module.css +68 -0
  86. package/atoms/Paragraph/Paragraph.stories.js +52 -0
  87. package/atoms/Paragraph/__snapshots__/Paragraph.stories.js.snap +230 -0
  88. package/atoms/Paragraph/constants.js +5 -0
  89. package/atoms/Paragraph/index.js +3 -0
  90. package/atoms/Picture/Picture.js +40 -0
  91. package/atoms/Picture/Picture.module.css +16 -0
  92. package/atoms/Picture/Picture.stories.js +32 -0
  93. package/atoms/Picture/__snapshots__/Picture.stories.js.snap +156 -0
  94. package/atoms/Picture/index.js +2 -0
  95. package/atoms/Textarea/Textarea.js +46 -0
  96. package/atoms/Textarea/Textarea.module.css +25 -0
  97. package/atoms/Textarea/Textarea.stories.js +16 -0
  98. package/atoms/Textarea/__snapshots__/Textarea.stories.js.snap +25 -0
  99. package/atoms/Textarea/index.js +2 -0
  100. package/codecov.yml +2 -0
  101. package/helpers/storybook.js +29 -0
  102. package/helpers/storybook.test.js +40 -0
  103. package/helpers/styles.js +37 -0
  104. package/helpers/styles.test.js +222 -0
  105. package/hocs/withStyles.js +17 -0
  106. package/hook/useMedia.js +22 -0
  107. package/index.js +31 -0
  108. package/jest.config.js +23 -0
  109. package/jest.setup.js +13 -0
  110. package/layout/CenteredContent/CenteredContent.js +30 -0
  111. package/layout/CenteredContent/CenteredContent.module.css +12 -0
  112. package/layout/CenteredContent/CenteredContent.stories.js +22 -0
  113. package/layout/CenteredContent/__snapshots__/CenteredContent.stories.js.snap +27 -0
  114. package/layout/CenteredContent/index.js +2 -0
  115. package/layout/Container/Container.js +29 -0
  116. package/layout/Container/Container.module.css +14 -0
  117. package/layout/Container/Container.stories.js +22 -0
  118. package/layout/Container/__snapshots__/Container.stories.js.snap +27 -0
  119. package/layout/Container/index.js +2 -0
  120. package/layout/FullHeightContent/FullHeightContent.js +40 -0
  121. package/layout/FullHeightContent/FullHeightContent.module.css +21 -0
  122. package/layout/FullHeightContent/FullHeightContent.stories.js +22 -0
  123. package/layout/FullHeightContent/__snapshots__/FullHeightContent.stories.js.snap +41 -0
  124. package/layout/FullHeightContent/index.js +2 -0
  125. package/layout/Spacer/Spacer.js +40 -0
  126. package/layout/Spacer/Spacer.module.css +12 -0
  127. package/layout/Spacer/Spacer.stories.js +25 -0
  128. package/layout/Spacer/__snapshots__/Spacer.stories.js.snap +97 -0
  129. package/layout/Spacer/components/Horizontal/Horizontal.js +43 -0
  130. package/layout/Spacer/components/Horizontal/Horizontal.stories.js +32 -0
  131. package/layout/Spacer/components/Horizontal/__snapshots__/Horizontal.stories.js.snap +97 -0
  132. package/layout/Spacer/components/Horizontal/index.js +1 -0
  133. package/layout/Spacer/components/Vertical/Vertical.js +31 -0
  134. package/layout/Spacer/components/Vertical/Vertical.stories.js +25 -0
  135. package/layout/Spacer/components/Vertical/__snapshots__/Vertical.stories.js.snap +85 -0
  136. package/layout/Spacer/components/Vertical/index.js +1 -0
  137. package/layout/Spacer/components/index.js +2 -0
  138. package/layout/Spacer/constants.js +5 -0
  139. package/layout/Spacer/helpers.js +3 -0
  140. package/layout/Spacer/index.js +3 -0
  141. package/molecules/Accordion/Accordion.js +70 -0
  142. package/molecules/Accordion/Accordion.module.css +12 -0
  143. package/molecules/Accordion/Accordion.stories.js +31 -0
  144. package/molecules/Accordion/__snapshots__/Accordion.stories.js.snap +228 -0
  145. package/molecules/Accordion/index.js +2 -0
  146. package/molecules/AddButton/AddButton.js +137 -0
  147. package/molecules/AddButton/AddButton.module.css +128 -0
  148. package/molecules/AddButton/AddButton.stories.js +47 -0
  149. package/molecules/AddButton/__snapshots__/AddButton.stories.js.snap +326 -0
  150. package/molecules/AddButton/constants.js +6 -0
  151. package/molecules/AddButton/handlers.js +58 -0
  152. package/molecules/AddButton/handlers.test.js +19 -0
  153. package/molecules/AddButton/helpers.js +6 -0
  154. package/molecules/AddButton/helpers.test.js +41 -0
  155. package/molecules/AddButton/hooks.js +14 -0
  156. package/molecules/AddButton/index.js +3 -0
  157. package/molecules/ButtonIcon/ButtonIcon.js +41 -0
  158. package/molecules/ButtonIcon/ButtonIcon.stories.js +27 -0
  159. package/molecules/ButtonIcon/__snapshots__/ButtonIcon.stories.js.snap +178 -0
  160. package/molecules/ButtonIcon/constants.js +6 -0
  161. package/molecules/ButtonIcon/index.js +2 -0
  162. package/molecules/Dropdown/Dropdown.js +59 -0
  163. package/molecules/Dropdown/Dropdown.module.css +34 -0
  164. package/molecules/Dropdown/Dropdown.stories.js +41 -0
  165. package/molecules/Dropdown/__snapshots__/Dropdown.stories.js.snap +181 -0
  166. package/molecules/Dropdown/index.js +2 -0
  167. package/molecules/Error/Error.js +35 -0
  168. package/molecules/Error/Error.module.css +11 -0
  169. package/molecules/Error/Error.stories.js +18 -0
  170. package/molecules/Error/__snapshots__/Error.stories.js.snap +134 -0
  171. package/molecules/Error/index.js +2 -0
  172. package/molecules/IconLabel/IconLabel.js +83 -0
  173. package/molecules/IconLabel/IconLabel.module.css +16 -0
  174. package/molecules/IconLabel/IconLabel.stories.js +25 -0
  175. package/molecules/IconLabel/__snapshots__/IconLabel.stories.js.snap +211 -0
  176. package/molecules/IconLabel/constants.js +6 -0
  177. package/molecules/IconLabel/index.js +3 -0
  178. package/molecules/LoadingError/LoadingError.js +31 -0
  179. package/molecules/LoadingError/LoadingError.stories.js +24 -0
  180. package/molecules/LoadingError/__snapshots__/LoadingError.stories.js.snap +109 -0
  181. package/molecules/LoadingError/index.js +1 -0
  182. package/molecules/Score/Score.js +61 -0
  183. package/molecules/Score/Score.module.css +11 -0
  184. package/molecules/Score/Score.stories.js +13 -0
  185. package/molecules/Score/__snapshots__/Score.stories.js.snap +100 -0
  186. package/molecules/Score/faces/happy.svg +7 -0
  187. package/molecules/Score/faces/normal.svg +6 -0
  188. package/molecules/Score/faces/sad.svg +6 -0
  189. package/molecules/Score/index.js +2 -0
  190. package/molecules/Task/Task.js +114 -0
  191. package/molecules/Task/Task.module.css +47 -0
  192. package/molecules/Task/Task.stories.js +47 -0
  193. package/molecules/Task/__snapshots__/Task.stories.js.snap +953 -0
  194. package/molecules/Task/constants.js +1 -0
  195. package/molecules/Task/index.js +3 -0
  196. package/molecules/TaskCounter/TaskCounter.js +74 -0
  197. package/molecules/TaskCounter/TaskCounter.module.css +11 -0
  198. package/molecules/TaskCounter/TaskCounter.stories.js +26 -0
  199. package/molecules/TaskCounter/__snapshots__/TaskCounter.stories.js.snap +177 -0
  200. package/molecules/TaskCounter/index.js +2 -0
  201. package/package.json +102 -0
  202. package/scripts/build-tokens.js +40 -0
  203. package/scripts/create-component.js +127 -0
  204. package/storybook.test.js +13 -0
  205. package/styles/globals.css +10 -0
  206. package/styles/tokens.css +390 -0
  207. package/templates/component/Component.js +22 -0
  208. package/templates/component/Component.module.css +3 -0
  209. package/templates/component/Component.stories.js +23 -0
  210. package/templates/component/constants.js +1 -0
  211. package/templates/component/index.js +3 -0
  212. package/tokens/Token/Helper.js +30 -0
  213. package/tokens/Token/Token.js +13 -0
  214. package/tokens/Token/Token.module.css +64 -0
  215. package/tokens/Token/components/Color.js +21 -0
  216. package/tokens/Token/components/Color.stories.js +126 -0
  217. package/tokens/Token/components/FontFamily.js +24 -0
  218. package/tokens/Token/components/FontFamily.stories.js +32 -0
  219. package/tokens/Token/components/FontSize.js +24 -0
  220. package/tokens/Token/components/FontSize.stories.js +31 -0
  221. package/tokens/Token/components/FontWeight.js +24 -0
  222. package/tokens/Token/components/FontWeight.stories.js +31 -0
  223. package/tokens/Token/components/Spacing.js +24 -0
  224. package/tokens/Token/components/Spacing.stories.js +29 -0
  225. package/tokens/Token/components/__snapshots__/Color.stories.js.snap +7169 -0
  226. package/tokens/Token/components/__snapshots__/FontFamily.stories.js.snap +133 -0
  227. package/tokens/Token/components/__snapshots__/FontSize.stories.js.snap +261 -0
  228. package/tokens/Token/components/__snapshots__/FontWeight.stories.js.snap +317 -0
  229. package/tokens/Token/components/__snapshots__/Spacing.stories.js.snap +229 -0
  230. package/tokens/Token/components/index.js +5 -0
  231. package/tokens/Token/helpers.js +17 -0
  232. package/tokens/Token/index.js +1 -0
  233. package/tokens/index.js +471 -0
  234. package/utils/isEmpty.js +28 -0
  235. package/utils/isEmpty.test.js +125 -0
  236. package/utils/isObject.js +4 -0
  237. package/utils/keyboardCodes.js +6 -0
  238. package/utils/testUtils/matchMediaMock.js +14 -0
  239. package/utils/testUtils/svgrMock.js +2 -0
  240. package/utils/toCapitalize.js +4 -0
  241. package/utils/toKebabCase.js +8 -0
  242. package/utils/toPascalCase.js +20 -0
  243. package/webpack/cssModules.js +30 -0
  244. package/webpack/loadConfigs.js +6 -0
  245. package/webpack/reactInlineSvg.js +22 -0
@@ -0,0 +1,35 @@
1
+ import React from 'react'
2
+ import PropTypes from 'prop-types'
3
+
4
+ import styles from './Error.module.css'
5
+ import withStyles from '../../hocs/withStyles'
6
+
7
+ import Spacer from '../../layout/Spacer'
8
+ import Paragraph from '../../atoms/Paragraph'
9
+ import Heading from '../../atoms/Heading'
10
+ import Icon from '../../atoms/Icon'
11
+
12
+ export const Error = ({ title, children, getStyles }) => {
13
+ return (
14
+ <div className={getStyles('error')}>
15
+ <Icon className="icon-warning" name="warning" size="md" />
16
+ <Spacer.Horizontal size="sm" />
17
+ <div>
18
+ {title && <Heading>{title}</Heading>}
19
+ <Paragraph>{children}</Paragraph>
20
+ </div>
21
+ </div>
22
+ )
23
+ }
24
+
25
+ Error.propTypes = {
26
+ children: PropTypes.node.isRequired,
27
+ getStyles: PropTypes.func.isRequired,
28
+ title: PropTypes.string,
29
+ }
30
+
31
+ Error.defaultProps = {
32
+ getStyles: () => {},
33
+ }
34
+
35
+ export default withStyles(styles)(Error)
@@ -0,0 +1,11 @@
1
+ .error {
2
+ display: flex;
3
+ padding: 10px 20px;
4
+ border-top: 4px solid var(--color-red-500);
5
+ background: var(--color-red-200);
6
+ color: var(--color-red-800);
7
+ }
8
+
9
+ .error :global(.icon-warning) {
10
+ margin-top: -4px;
11
+ }
@@ -0,0 +1,18 @@
1
+ import { Error, styles } from '.'
2
+
3
+ import { getTemplate } from '../../helpers/storybook'
4
+
5
+ const Template = getTemplate(Error, styles)
6
+
7
+ export default {
8
+ title: 'Molecules/Error',
9
+ component: Error,
10
+ args: {
11
+ children:
12
+ "Meets counts consumed 200 Meriadoc tombs rabble noble crash thread. Another kind Imladris. Dump each Kingdom mere other's by blame ugly sending bestow mist adventure.",
13
+ },
14
+ }
15
+
16
+ export const Default = Template.bind({})
17
+ export const Title = Template.bind({})
18
+ Title.args = { title: 'Lindir glowers saw 111th utter.' }
@@ -0,0 +1,134 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Storyshots Molecules/Error Default 1`] = `
4
+ <div
5
+ style={
6
+ Object {
7
+ "alignContent": "flex-start",
8
+ "display": "flex",
9
+ "flexDirection": "column",
10
+ "flexWrap": "wrap",
11
+ "gap": "10px 30px",
12
+ "height": "100%",
13
+ "justifyContent": "flex-start",
14
+ "maxHeight": "auto",
15
+ }
16
+ }
17
+ >
18
+ <div
19
+ className="error"
20
+ >
21
+ <div
22
+ className="icon-warning icon color-base size-md background-transparent"
23
+ style={
24
+ Object {
25
+ "height": 35,
26
+ "width": 35,
27
+ }
28
+ }
29
+ >
30
+ <svg
31
+ height={35}
32
+ viewBox="0 0 20 20"
33
+ width={35}
34
+ xmlns="http://www.w3.org/2000/svg"
35
+ >
36
+ <path
37
+ clipRule="evenodd"
38
+ d="M10 20C4.48612 20 0 15.5139 0 10C0 4.48612 4.48612 0 10 0C15.5139 0 20 4.48612 20 10C20 15.5139 15.5139 20 10 20ZM10 1.09864C5.09155 1.09864 1.09864 5.09155 1.09864 10C1.09864 14.9084 5.09155 18.9014 10 18.9014C14.9084 18.9014 18.9014 14.9084 18.9014 10C18.9014 5.09155 14.9084 1.09864 10 1.09864Z"
39
+ fillRule="evenodd"
40
+ />
41
+ <path
42
+ d="M10.7837 11.8579H9.25293L9.08447 4.33594H10.9595L10.7837 11.8579ZM9.0332 14.1577C9.0332 13.8794 9.12354 13.6499 9.3042 13.4692C9.48486 13.2837 9.73145 13.1909 10.0439 13.1909C10.3564 13.1909 10.603 13.2837 10.7837 13.4692C10.9644 13.6499 11.0547 13.8794 11.0547 14.1577C11.0547 14.4263 10.9668 14.6509 10.791 14.8315C10.6152 15.0122 10.3662 15.1025 10.0439 15.1025C9.72168 15.1025 9.47266 15.0122 9.29688 14.8315C9.12109 14.6509 9.0332 14.4263 9.0332 14.1577Z"
43
+ />
44
+ </svg>
45
+ </div>
46
+ <div
47
+ className="spacer horizontal"
48
+ style={
49
+ Object {
50
+ "height": "100%",
51
+ "maxHeight": "auto",
52
+ "width": 15,
53
+ }
54
+ }
55
+ />
56
+ <div>
57
+ <p
58
+ className="paragraph color-base size-md weight-normal"
59
+ >
60
+ Meets counts consumed 200 Meriadoc tombs rabble noble crash thread. Another kind Imladris. Dump each Kingdom mere other's by blame ugly sending bestow mist adventure.
61
+ </p>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ `;
66
+
67
+ exports[`Storyshots Molecules/Error Title 1`] = `
68
+ <div
69
+ style={
70
+ Object {
71
+ "alignContent": "flex-start",
72
+ "display": "flex",
73
+ "flexDirection": "column",
74
+ "flexWrap": "wrap",
75
+ "gap": "10px 30px",
76
+ "height": "100%",
77
+ "justifyContent": "flex-start",
78
+ "maxHeight": "auto",
79
+ }
80
+ }
81
+ >
82
+ <div
83
+ className="error"
84
+ >
85
+ <div
86
+ className="icon-warning icon color-base size-md background-transparent"
87
+ style={
88
+ Object {
89
+ "height": 35,
90
+ "width": 35,
91
+ }
92
+ }
93
+ >
94
+ <svg
95
+ height={35}
96
+ viewBox="0 0 20 20"
97
+ width={35}
98
+ xmlns="http://www.w3.org/2000/svg"
99
+ >
100
+ <path
101
+ clipRule="evenodd"
102
+ d="M10 20C4.48612 20 0 15.5139 0 10C0 4.48612 4.48612 0 10 0C15.5139 0 20 4.48612 20 10C20 15.5139 15.5139 20 10 20ZM10 1.09864C5.09155 1.09864 1.09864 5.09155 1.09864 10C1.09864 14.9084 5.09155 18.9014 10 18.9014C14.9084 18.9014 18.9014 14.9084 18.9014 10C18.9014 5.09155 14.9084 1.09864 10 1.09864Z"
103
+ fillRule="evenodd"
104
+ />
105
+ <path
106
+ d="M10.7837 11.8579H9.25293L9.08447 4.33594H10.9595L10.7837 11.8579ZM9.0332 14.1577C9.0332 13.8794 9.12354 13.6499 9.3042 13.4692C9.48486 13.2837 9.73145 13.1909 10.0439 13.1909C10.3564 13.1909 10.603 13.2837 10.7837 13.4692C10.9644 13.6499 11.0547 13.8794 11.0547 14.1577C11.0547 14.4263 10.9668 14.6509 10.791 14.8315C10.6152 15.0122 10.3662 15.1025 10.0439 15.1025C9.72168 15.1025 9.47266 15.0122 9.29688 14.8315C9.12109 14.6509 9.0332 14.4263 9.0332 14.1577Z"
107
+ />
108
+ </svg>
109
+ </div>
110
+ <div
111
+ className="spacer horizontal"
112
+ style={
113
+ Object {
114
+ "height": "100%",
115
+ "maxHeight": "auto",
116
+ "width": 15,
117
+ }
118
+ }
119
+ />
120
+ <div>
121
+ <h1
122
+ className="heading color-base size-md weight-bold"
123
+ >
124
+ Lindir glowers saw 111th utter.
125
+ </h1>
126
+ <p
127
+ className="paragraph color-base size-md weight-normal"
128
+ >
129
+ Meets counts consumed 200 Meriadoc tombs rabble noble crash thread. Another kind Imladris. Dump each Kingdom mere other's by blame ugly sending bestow mist adventure.
130
+ </p>
131
+ </div>
132
+ </div>
133
+ </div>
134
+ `;
@@ -0,0 +1,2 @@
1
+ export { default, Error } from './Error'
2
+ export { default as styles } from './Error.module.css'
@@ -0,0 +1,83 @@
1
+ import React from 'react'
2
+ import PropTypes from 'prop-types'
3
+
4
+ import styles from './IconLabel.module.css'
5
+ import withStyles from '../../hocs/withStyles'
6
+
7
+ import Icon from '../../atoms/Icon'
8
+ import Paragraph from '../../atoms/Paragraph'
9
+
10
+ import { options } from './constants'
11
+ import Spacer from '../../layout/Spacer'
12
+
13
+ const handleClick = ({ onClick }) => (event) => {
14
+ onClick(event)
15
+ }
16
+
17
+ const sizesMap = {
18
+ sm: {
19
+ icon: 'sm',
20
+ paragraph: 'xs',
21
+ },
22
+ md: {
23
+ icon: 'md',
24
+ paragraph: 'sm',
25
+ },
26
+ }
27
+
28
+ export const IconLabel = ({
29
+ getStyles,
30
+ icon,
31
+ label,
32
+ onClick,
33
+ isClickable,
34
+ direction,
35
+ isActive,
36
+ size,
37
+ }) => {
38
+ return (
39
+ <div
40
+ className={getStyles('icon-label', {
41
+ 'is-clickable': isClickable || !!onClick,
42
+ [`direction-${direction}`]: direction,
43
+ })}
44
+ onClick={onClick && handleClick({ onClick })}
45
+ >
46
+ <Icon
47
+ name={icon}
48
+ color={isActive ? 'primary' : 'base'}
49
+ background={isActive ? 'highlight' : 'transparent'}
50
+ size={sizesMap[size].icon}
51
+ ></Icon>
52
+ {direction === 'horizontal' && <Spacer.Horizontal size="xs" />}
53
+ <Paragraph
54
+ size={sizesMap[size].paragraph}
55
+ color={isActive ? 'primary' : 'base'}
56
+ isInline
57
+ >
58
+ {label}
59
+ </Paragraph>
60
+ </div>
61
+ )
62
+ }
63
+
64
+ IconLabel.propTypes = {
65
+ getStyles: PropTypes.func.isRequired,
66
+ icon: PropTypes.oneOf(options.icons).isRequired,
67
+ label: PropTypes.string.isRequired,
68
+ direction: PropTypes.oneOf(['vertical', 'horizontal']),
69
+ isClickable: PropTypes.bool,
70
+ onClick: PropTypes.func,
71
+ isActive: PropTypes.bool,
72
+ size: PropTypes.oneOf(options.sizes),
73
+ }
74
+
75
+ IconLabel.defaultProps = {
76
+ direction: 'vertical',
77
+ size: 'sm',
78
+ isActive: false,
79
+ getStyles: () => {},
80
+ onClick: () => {},
81
+ }
82
+
83
+ export default withStyles(styles)(IconLabel)
@@ -0,0 +1,16 @@
1
+ .icon-label {
2
+ display: flex;
3
+ align-items: center;
4
+ }
5
+
6
+ .direction-vertical {
7
+ flex-direction: column;
8
+ }
9
+
10
+ .direction-horizontal {
11
+ flex-direction: row;
12
+ }
13
+
14
+ .is-clickable {
15
+ cursor: pointer;
16
+ }
@@ -0,0 +1,25 @@
1
+ import { IconLabel, styles, options } from '.'
2
+
3
+ import { getTemplate, getOptionsArgTypes } from '../../helpers/storybook'
4
+
5
+ const Template = getTemplate(IconLabel, styles)
6
+
7
+ export default {
8
+ title: 'Molecules/IconLabel',
9
+ component: IconLabel,
10
+ args: { icon: 'user', label: 'User' },
11
+ argTypes: {
12
+ icon: getOptionsArgTypes(options.icons),
13
+ },
14
+ }
15
+
16
+ export const Default = Template.bind({})
17
+
18
+ export const Clickable = Template.bind({})
19
+ Clickable.args = { isClickable: true }
20
+
21
+ export const Active = Template.bind({})
22
+ Active.args = { isActive: true }
23
+
24
+ export const Horizontal = Template.bind({})
25
+ Horizontal.args = { direction: 'horizontal' }
@@ -0,0 +1,211 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Storyshots Molecules/IconLabel Active 1`] = `
4
+ <div
5
+ style={
6
+ Object {
7
+ "alignContent": "flex-start",
8
+ "display": "flex",
9
+ "flexDirection": "column",
10
+ "flexWrap": "wrap",
11
+ "gap": "10px 30px",
12
+ "height": "100%",
13
+ "justifyContent": "flex-start",
14
+ "maxHeight": "auto",
15
+ }
16
+ }
17
+ >
18
+ <div
19
+ className="icon-label is-clickable direction-vertical"
20
+ onClick={[Function]}
21
+ >
22
+ <div
23
+ className="icon color-primary size-sm background-highlight"
24
+ style={
25
+ Object {
26
+ "height": 25,
27
+ "width": 25,
28
+ }
29
+ }
30
+ >
31
+ <svg
32
+ height={25}
33
+ viewBox="0 0 14 15"
34
+ width={25}
35
+ xmlns="http://www.w3.org/2000/svg"
36
+ >
37
+ <path
38
+ clipRule="evenodd"
39
+ d="M1.01693 15L0 14.5538C0.308723 13.8561 1.22056 13.4481 2.2775 12.975C3.29682 12.5187 4.56575 11.9509 4.56575 11.2777V10.3614C4.20448 10.0594 3.59241 9.41 3.49627 8.43355C3.20367 8.15831 2.71819 7.59711 2.71819 6.90245C2.71819 6.48066 2.88539 6.14048 3.03229 5.92422C2.94272 5.47204 2.77432 4.52538 2.77432 3.83073C2.77432 1.50369 4.39855 0 6.91192 0C7.63327 0 8.50928 0.193026 8.99714 0.714314C10.1365 0.914489 11.0501 2.26031 11.0501 3.83073C11.0501 4.83815 10.8728 5.66685 10.7659 6.07673C10.8847 6.2775 11.0131 6.57538 11.0131 6.92092C11.0131 7.70196 10.6178 8.20716 10.2488 8.47704C10.1443 9.43979 9.59429 10.0606 9.25869 10.3549V11.2777C9.25869 11.8502 10.2989 12.2351 11.3051 12.6074C12.4492 13.0304 13.6328 13.4683 14 14.4257L12.9616 14.8213C12.7753 14.3328 11.7888 13.9681 10.9187 13.6464C9.62056 13.1657 8.1486 12.6211 8.1486 11.2777V9.77997L8.40776 9.61732C8.43404 9.60005 9.15598 9.11629 9.15598 8.14997V7.77524L9.50471 7.63583C9.56323 7.60902 9.90241 7.43089 9.90241 6.92092C9.90241 6.76483 9.78298 6.59028 9.74118 6.54142L9.53875 6.30431L9.63191 6.00226C9.63489 5.99273 9.94003 5.0562 9.94003 3.83073C9.94003 2.78517 9.33931 1.79681 8.70335 1.79681H8.38447L8.22384 1.52216C8.10621 1.32139 7.607 1.10811 6.91192 1.10811C5.01659 1.10811 3.88441 2.12567 3.88441 3.83073C3.88441 4.63619 4.16746 5.93316 4.17044 5.94626L4.23613 6.24653L4.01638 6.461C4.01638 6.461 3.82828 6.65939 3.82828 6.90245C3.82828 7.20927 4.19731 7.59115 4.37586 7.72818L4.59202 7.89439L4.59382 8.16844C4.59382 9.08114 5.38324 9.59588 5.41727 9.61732L5.67285 9.78056L5.67584 11.2777C5.67584 12.6688 4.11192 13.3688 2.73133 13.986C2.06492 14.2839 1.15308 14.6926 1.01693 15Z"
40
+ fillRule="evenodd"
41
+ />
42
+ </svg>
43
+ </div>
44
+ <p
45
+ className="paragraph color-primary size-xs weight-normal is-inline"
46
+ >
47
+ User
48
+ </p>
49
+ </div>
50
+ </div>
51
+ `;
52
+
53
+ exports[`Storyshots Molecules/IconLabel Clickable 1`] = `
54
+ <div
55
+ style={
56
+ Object {
57
+ "alignContent": "flex-start",
58
+ "display": "flex",
59
+ "flexDirection": "column",
60
+ "flexWrap": "wrap",
61
+ "gap": "10px 30px",
62
+ "height": "100%",
63
+ "justifyContent": "flex-start",
64
+ "maxHeight": "auto",
65
+ }
66
+ }
67
+ >
68
+ <div
69
+ className="icon-label is-clickable direction-vertical"
70
+ onClick={[Function]}
71
+ >
72
+ <div
73
+ className="icon color-base size-sm background-transparent"
74
+ style={
75
+ Object {
76
+ "height": 25,
77
+ "width": 25,
78
+ }
79
+ }
80
+ >
81
+ <svg
82
+ height={25}
83
+ viewBox="0 0 14 15"
84
+ width={25}
85
+ xmlns="http://www.w3.org/2000/svg"
86
+ >
87
+ <path
88
+ clipRule="evenodd"
89
+ d="M1.01693 15L0 14.5538C0.308723 13.8561 1.22056 13.4481 2.2775 12.975C3.29682 12.5187 4.56575 11.9509 4.56575 11.2777V10.3614C4.20448 10.0594 3.59241 9.41 3.49627 8.43355C3.20367 8.15831 2.71819 7.59711 2.71819 6.90245C2.71819 6.48066 2.88539 6.14048 3.03229 5.92422C2.94272 5.47204 2.77432 4.52538 2.77432 3.83073C2.77432 1.50369 4.39855 0 6.91192 0C7.63327 0 8.50928 0.193026 8.99714 0.714314C10.1365 0.914489 11.0501 2.26031 11.0501 3.83073C11.0501 4.83815 10.8728 5.66685 10.7659 6.07673C10.8847 6.2775 11.0131 6.57538 11.0131 6.92092C11.0131 7.70196 10.6178 8.20716 10.2488 8.47704C10.1443 9.43979 9.59429 10.0606 9.25869 10.3549V11.2777C9.25869 11.8502 10.2989 12.2351 11.3051 12.6074C12.4492 13.0304 13.6328 13.4683 14 14.4257L12.9616 14.8213C12.7753 14.3328 11.7888 13.9681 10.9187 13.6464C9.62056 13.1657 8.1486 12.6211 8.1486 11.2777V9.77997L8.40776 9.61732C8.43404 9.60005 9.15598 9.11629 9.15598 8.14997V7.77524L9.50471 7.63583C9.56323 7.60902 9.90241 7.43089 9.90241 6.92092C9.90241 6.76483 9.78298 6.59028 9.74118 6.54142L9.53875 6.30431L9.63191 6.00226C9.63489 5.99273 9.94003 5.0562 9.94003 3.83073C9.94003 2.78517 9.33931 1.79681 8.70335 1.79681H8.38447L8.22384 1.52216C8.10621 1.32139 7.607 1.10811 6.91192 1.10811C5.01659 1.10811 3.88441 2.12567 3.88441 3.83073C3.88441 4.63619 4.16746 5.93316 4.17044 5.94626L4.23613 6.24653L4.01638 6.461C4.01638 6.461 3.82828 6.65939 3.82828 6.90245C3.82828 7.20927 4.19731 7.59115 4.37586 7.72818L4.59202 7.89439L4.59382 8.16844C4.59382 9.08114 5.38324 9.59588 5.41727 9.61732L5.67285 9.78056L5.67584 11.2777C5.67584 12.6688 4.11192 13.3688 2.73133 13.986C2.06492 14.2839 1.15308 14.6926 1.01693 15Z"
90
+ fillRule="evenodd"
91
+ />
92
+ </svg>
93
+ </div>
94
+ <p
95
+ className="paragraph color-base size-xs weight-normal is-inline"
96
+ >
97
+ User
98
+ </p>
99
+ </div>
100
+ </div>
101
+ `;
102
+
103
+ exports[`Storyshots Molecules/IconLabel Default 1`] = `
104
+ <div
105
+ style={
106
+ Object {
107
+ "alignContent": "flex-start",
108
+ "display": "flex",
109
+ "flexDirection": "column",
110
+ "flexWrap": "wrap",
111
+ "gap": "10px 30px",
112
+ "height": "100%",
113
+ "justifyContent": "flex-start",
114
+ "maxHeight": "auto",
115
+ }
116
+ }
117
+ >
118
+ <div
119
+ className="icon-label is-clickable direction-vertical"
120
+ onClick={[Function]}
121
+ >
122
+ <div
123
+ className="icon color-base size-sm background-transparent"
124
+ style={
125
+ Object {
126
+ "height": 25,
127
+ "width": 25,
128
+ }
129
+ }
130
+ >
131
+ <svg
132
+ height={25}
133
+ viewBox="0 0 14 15"
134
+ width={25}
135
+ xmlns="http://www.w3.org/2000/svg"
136
+ >
137
+ <path
138
+ clipRule="evenodd"
139
+ d="M1.01693 15L0 14.5538C0.308723 13.8561 1.22056 13.4481 2.2775 12.975C3.29682 12.5187 4.56575 11.9509 4.56575 11.2777V10.3614C4.20448 10.0594 3.59241 9.41 3.49627 8.43355C3.20367 8.15831 2.71819 7.59711 2.71819 6.90245C2.71819 6.48066 2.88539 6.14048 3.03229 5.92422C2.94272 5.47204 2.77432 4.52538 2.77432 3.83073C2.77432 1.50369 4.39855 0 6.91192 0C7.63327 0 8.50928 0.193026 8.99714 0.714314C10.1365 0.914489 11.0501 2.26031 11.0501 3.83073C11.0501 4.83815 10.8728 5.66685 10.7659 6.07673C10.8847 6.2775 11.0131 6.57538 11.0131 6.92092C11.0131 7.70196 10.6178 8.20716 10.2488 8.47704C10.1443 9.43979 9.59429 10.0606 9.25869 10.3549V11.2777C9.25869 11.8502 10.2989 12.2351 11.3051 12.6074C12.4492 13.0304 13.6328 13.4683 14 14.4257L12.9616 14.8213C12.7753 14.3328 11.7888 13.9681 10.9187 13.6464C9.62056 13.1657 8.1486 12.6211 8.1486 11.2777V9.77997L8.40776 9.61732C8.43404 9.60005 9.15598 9.11629 9.15598 8.14997V7.77524L9.50471 7.63583C9.56323 7.60902 9.90241 7.43089 9.90241 6.92092C9.90241 6.76483 9.78298 6.59028 9.74118 6.54142L9.53875 6.30431L9.63191 6.00226C9.63489 5.99273 9.94003 5.0562 9.94003 3.83073C9.94003 2.78517 9.33931 1.79681 8.70335 1.79681H8.38447L8.22384 1.52216C8.10621 1.32139 7.607 1.10811 6.91192 1.10811C5.01659 1.10811 3.88441 2.12567 3.88441 3.83073C3.88441 4.63619 4.16746 5.93316 4.17044 5.94626L4.23613 6.24653L4.01638 6.461C4.01638 6.461 3.82828 6.65939 3.82828 6.90245C3.82828 7.20927 4.19731 7.59115 4.37586 7.72818L4.59202 7.89439L4.59382 8.16844C4.59382 9.08114 5.38324 9.59588 5.41727 9.61732L5.67285 9.78056L5.67584 11.2777C5.67584 12.6688 4.11192 13.3688 2.73133 13.986C2.06492 14.2839 1.15308 14.6926 1.01693 15Z"
140
+ fillRule="evenodd"
141
+ />
142
+ </svg>
143
+ </div>
144
+ <p
145
+ className="paragraph color-base size-xs weight-normal is-inline"
146
+ >
147
+ User
148
+ </p>
149
+ </div>
150
+ </div>
151
+ `;
152
+
153
+ exports[`Storyshots Molecules/IconLabel Horizontal 1`] = `
154
+ <div
155
+ style={
156
+ Object {
157
+ "alignContent": "flex-start",
158
+ "display": "flex",
159
+ "flexDirection": "column",
160
+ "flexWrap": "wrap",
161
+ "gap": "10px 30px",
162
+ "height": "100%",
163
+ "justifyContent": "flex-start",
164
+ "maxHeight": "auto",
165
+ }
166
+ }
167
+ >
168
+ <div
169
+ className="icon-label is-clickable direction-horizontal"
170
+ onClick={[Function]}
171
+ >
172
+ <div
173
+ className="icon color-base size-sm background-transparent"
174
+ style={
175
+ Object {
176
+ "height": 25,
177
+ "width": 25,
178
+ }
179
+ }
180
+ >
181
+ <svg
182
+ height={25}
183
+ viewBox="0 0 14 15"
184
+ width={25}
185
+ xmlns="http://www.w3.org/2000/svg"
186
+ >
187
+ <path
188
+ clipRule="evenodd"
189
+ d="M1.01693 15L0 14.5538C0.308723 13.8561 1.22056 13.4481 2.2775 12.975C3.29682 12.5187 4.56575 11.9509 4.56575 11.2777V10.3614C4.20448 10.0594 3.59241 9.41 3.49627 8.43355C3.20367 8.15831 2.71819 7.59711 2.71819 6.90245C2.71819 6.48066 2.88539 6.14048 3.03229 5.92422C2.94272 5.47204 2.77432 4.52538 2.77432 3.83073C2.77432 1.50369 4.39855 0 6.91192 0C7.63327 0 8.50928 0.193026 8.99714 0.714314C10.1365 0.914489 11.0501 2.26031 11.0501 3.83073C11.0501 4.83815 10.8728 5.66685 10.7659 6.07673C10.8847 6.2775 11.0131 6.57538 11.0131 6.92092C11.0131 7.70196 10.6178 8.20716 10.2488 8.47704C10.1443 9.43979 9.59429 10.0606 9.25869 10.3549V11.2777C9.25869 11.8502 10.2989 12.2351 11.3051 12.6074C12.4492 13.0304 13.6328 13.4683 14 14.4257L12.9616 14.8213C12.7753 14.3328 11.7888 13.9681 10.9187 13.6464C9.62056 13.1657 8.1486 12.6211 8.1486 11.2777V9.77997L8.40776 9.61732C8.43404 9.60005 9.15598 9.11629 9.15598 8.14997V7.77524L9.50471 7.63583C9.56323 7.60902 9.90241 7.43089 9.90241 6.92092C9.90241 6.76483 9.78298 6.59028 9.74118 6.54142L9.53875 6.30431L9.63191 6.00226C9.63489 5.99273 9.94003 5.0562 9.94003 3.83073C9.94003 2.78517 9.33931 1.79681 8.70335 1.79681H8.38447L8.22384 1.52216C8.10621 1.32139 7.607 1.10811 6.91192 1.10811C5.01659 1.10811 3.88441 2.12567 3.88441 3.83073C3.88441 4.63619 4.16746 5.93316 4.17044 5.94626L4.23613 6.24653L4.01638 6.461C4.01638 6.461 3.82828 6.65939 3.82828 6.90245C3.82828 7.20927 4.19731 7.59115 4.37586 7.72818L4.59202 7.89439L4.59382 8.16844C4.59382 9.08114 5.38324 9.59588 5.41727 9.61732L5.67285 9.78056L5.67584 11.2777C5.67584 12.6688 4.11192 13.3688 2.73133 13.986C2.06492 14.2839 1.15308 14.6926 1.01693 15Z"
190
+ fillRule="evenodd"
191
+ />
192
+ </svg>
193
+ </div>
194
+ <div
195
+ className="spacer horizontal"
196
+ style={
197
+ Object {
198
+ "height": "100%",
199
+ "maxHeight": "auto",
200
+ "width": 5,
201
+ }
202
+ }
203
+ />
204
+ <p
205
+ className="paragraph color-base size-xs weight-normal is-inline"
206
+ >
207
+ User
208
+ </p>
209
+ </div>
210
+ </div>
211
+ `;
@@ -0,0 +1,6 @@
1
+ import { options as iconOptions } from '../../atoms/Icon/constants'
2
+
3
+ export const options = {
4
+ icons: iconOptions.names,
5
+ sizes: ['sm', 'md'],
6
+ }
@@ -0,0 +1,3 @@
1
+ export { default, IconLabel } from './IconLabel'
2
+ export { options } from './constants'
3
+ export { default as styles } from './IconLabel.module.css'
@@ -0,0 +1,31 @@
1
+ import React from 'react'
2
+ import PropTypes from 'prop-types'
3
+
4
+ import Loading from '../../atoms/Loading'
5
+ import Error from '../Error'
6
+
7
+ export const LoadingError = ({
8
+ children,
9
+ isLoading,
10
+ errorMessage,
11
+ errorTitle,
12
+ }) => {
13
+ if (isLoading) {
14
+ return <Loading isShown={isLoading} />
15
+ }
16
+
17
+ if (errorMessage) {
18
+ return <Error title={errorTitle}>{errorMessage}</Error>
19
+ }
20
+
21
+ return <>{children}</>
22
+ }
23
+
24
+ LoadingError.propTypes = {
25
+ children: PropTypes.node.isRequired,
26
+ isLoading: PropTypes.bool,
27
+ errorMessage: PropTypes.string,
28
+ errorTitle: PropTypes.string,
29
+ }
30
+
31
+ export default LoadingError
@@ -0,0 +1,24 @@
1
+ import { LoadingError } from '.'
2
+
3
+ import { getTemplate } from '../../helpers/storybook'
4
+
5
+ const Template = getTemplate(LoadingError)
6
+
7
+ export default {
8
+ title: 'Molecules/LoadingError',
9
+ component: LoadingError,
10
+ args: {
11
+ children:
12
+ "Exile ruins brook Angmar inn wars retaken. Swiftly attacks Grma merely! Opinion Eorlingas inquisitive windlance? You are full of surprises, Master Baggins. Houses warning garden noble innocent silver charm numerous thirsty came Treebeard's warm.",
13
+ },
14
+ }
15
+
16
+ export const Default = Template.bind({})
17
+
18
+ export const Loading = Template.bind({})
19
+ Loading.args = { isLoading: true }
20
+
21
+ export const Error = Template.bind({})
22
+ Error.args = {
23
+ errorMessage: 'ext Grimbold sneak-thief cheekbones myth overfond task',
24
+ }