@goodhood-web/ui 0.0.4 → 0.0.5

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 (292) hide show
  1. package/{src/index.ts → index.d.ts} +1 -24
  2. package/index.js +48 -0
  3. package/index.mjs +2331 -0
  4. package/lib/BaseButton/BaseButton.d.ts +11 -0
  5. package/lib/Card/Card.d.ts +3 -0
  6. package/lib/Card/Card.types.d.ts +10 -0
  7. package/lib/Card/Card.utils.d.ts +3 -0
  8. package/lib/Card/CardBody/CardBody.d.ts +3 -0
  9. package/lib/Card/CardBody/CardBody.types.d.ts +5 -0
  10. package/lib/Card/CardHeader/CardHeader.d.ts +3 -0
  11. package/lib/Card/CardHeader/CardHeader.type.d.ts +10 -0
  12. package/lib/ContentCreatorButton/ContentCreatorButton.d.ts +3 -0
  13. package/{src/lib/ContentCreatorButton/ContentCreatorButton.types.ts → lib/ContentCreatorButton/ContentCreatorButton.types.d.ts} +2 -3
  14. package/lib/Divider/Divider.d.ts +3 -0
  15. package/lib/Divider/Divider.types.d.ts +6 -0
  16. package/lib/Fieldset/Fieldset.d.ts +3 -0
  17. package/lib/Fieldset/Fieldset.types.d.ts +8 -0
  18. package/lib/Form/Form.d.ts +3 -0
  19. package/lib/Form/Form.types.d.ts +10 -0
  20. package/lib/Icon/Icon.d.ts +4 -0
  21. package/lib/Icon/Icon.types.d.ts +18 -0
  22. package/lib/Icon/icons/24x24/index.d.ts +130 -0
  23. package/lib/Icon/icons/32x32/index.d.ts +265 -0
  24. package/lib/Icon/icons/index.d.ts +395 -0
  25. package/lib/IconButton/IconButton.d.ts +3 -0
  26. package/{src/lib/IconButton/IconButton.types.ts → lib/IconButton/IconButton.types.d.ts} +10 -10
  27. package/lib/IconButton/utils.d.ts +3 -0
  28. package/lib/Image/Image.d.ts +3 -0
  29. package/lib/Image/Image.type.d.ts +5 -0
  30. package/lib/LabelPill/LabelPill.d.ts +3 -0
  31. package/lib/LabelPill/LabelPill.types.d.ts +4 -0
  32. package/lib/Legend/Legend.d.ts +3 -0
  33. package/lib/Legend/Legend.types.d.ts +5 -0
  34. package/lib/MenuItem/MenuItem.d.ts +3 -0
  35. package/lib/MenuItem/MenuItem.types.d.ts +9 -0
  36. package/lib/NotificationBubble/NotificationBubble.d.ts +3 -0
  37. package/{src/lib/NotificationBubble/NotificationBubble.types.tsx → lib/NotificationBubble/NotificationBubble.types.d.ts} +2 -3
  38. package/lib/Thumbnail/Thumbnail.d.ts +3 -0
  39. package/{src/lib/Thumbnail/Thumbnail.type.tsx → lib/Thumbnail/Thumbnail.type.d.ts} +6 -9
  40. package/lib/Toggle/Toggle.d.ts +3 -0
  41. package/{src/lib/Toggle/Toggle.types.ts → lib/Toggle/Toggle.types.d.ts} +2 -3
  42. package/lib/ToggleInput/ToggleInput.d.ts +3 -0
  43. package/{src/lib/ToggleInput/ToggleInput.types.ts → lib/ToggleInput/ToggleInput.types.d.ts} +3 -5
  44. package/lib/Typography/Typography.d.ts +3 -0
  45. package/lib/Typography/Typography.types.d.ts +8 -0
  46. package/package.json +1 -1
  47. package/style.css +1 -0
  48. package/.babelrc +0 -12
  49. package/.eslintrc.json +0 -25
  50. package/.storybook/main.ts +0 -31
  51. package/.storybook/manager-head.html +0 -1
  52. package/.storybook/manager.ts +0 -7
  53. package/.storybook/nebenanTheme.ts +0 -17
  54. package/.storybook/preview.ts +0 -9
  55. package/.stylelintrc.json +0 -14
  56. package/README.md +0 -7
  57. package/__mocks__/svg.js +0 -2
  58. package/images/favicon.ico +0 -0
  59. package/images/logo.svg +0 -11
  60. package/jest.config.ts +0 -16
  61. package/project.json +0 -88
  62. package/src/lib/BaseButton/BaseButton.module.scss +0 -11
  63. package/src/lib/BaseButton/BaseButton.spec.tsx +0 -12
  64. package/src/lib/BaseButton/BaseButton.stories.tsx +0 -26
  65. package/src/lib/BaseButton/BaseButton.tsx +0 -39
  66. package/src/lib/Card/Card.module.scss +0 -15
  67. package/src/lib/Card/Card.spec.tsx +0 -15
  68. package/src/lib/Card/Card.stories.tsx +0 -159
  69. package/src/lib/Card/Card.tsx +0 -31
  70. package/src/lib/Card/Card.types.ts +0 -12
  71. package/src/lib/Card/Card.utils.spec.tsx +0 -51
  72. package/src/lib/Card/Card.utils.ts +0 -23
  73. package/src/lib/Card/CardBody/CardBody.module.scss +0 -4
  74. package/src/lib/Card/CardBody/CardBody.spec.tsx +0 -15
  75. package/src/lib/Card/CardBody/CardBody.stories.tsx +0 -108
  76. package/src/lib/Card/CardBody/CardBody.tsx +0 -9
  77. package/src/lib/Card/CardBody/CardBody.types.ts +0 -4
  78. package/src/lib/Card/CardHeader/CardHeader.module.scss +0 -12
  79. package/src/lib/Card/CardHeader/CardHeader.spec.tsx +0 -72
  80. package/src/lib/Card/CardHeader/CardHeader.stories.tsx +0 -77
  81. package/src/lib/Card/CardHeader/CardHeader.tsx +0 -29
  82. package/src/lib/Card/CardHeader/CardHeader.type.ts +0 -14
  83. package/src/lib/ContentCreatorButton/ContentCreatorButton.module.scss +0 -13
  84. package/src/lib/ContentCreatorButton/ContentCreatorButton.spec.tsx +0 -14
  85. package/src/lib/ContentCreatorButton/ContentCreatorButton.stories.tsx +0 -29
  86. package/src/lib/ContentCreatorButton/ContentCreatorButton.tsx +0 -35
  87. package/src/lib/Divider/Divider.module.scss +0 -10
  88. package/src/lib/Divider/Divider.spec.tsx +0 -46
  89. package/src/lib/Divider/Divider.stories.tsx +0 -35
  90. package/src/lib/Divider/Divider.tsx +0 -17
  91. package/src/lib/Divider/Divider.types.ts +0 -6
  92. package/src/lib/Fieldset/Fieldset.module.scss +0 -3
  93. package/src/lib/Fieldset/Fieldset.spec.tsx +0 -68
  94. package/src/lib/Fieldset/Fieldset.stories.tsx +0 -60
  95. package/src/lib/Fieldset/Fieldset.tsx +0 -28
  96. package/src/lib/Fieldset/Fieldset.types.ts +0 -7
  97. package/src/lib/Form/Form.spec.tsx +0 -15
  98. package/src/lib/Form/Form.stories.tsx +0 -53
  99. package/src/lib/Form/Form.tsx +0 -14
  100. package/src/lib/Form/Form.types.ts +0 -11
  101. package/src/lib/Icon/Icon.module.scss +0 -7
  102. package/src/lib/Icon/Icon.spec.tsx +0 -28
  103. package/src/lib/Icon/Icon.stories.tsx +0 -88
  104. package/src/lib/Icon/Icon.tsx +0 -29
  105. package/src/lib/Icon/Icon.types.ts +0 -23
  106. package/src/lib/Icon/icons/24x24/index.ts +0 -89
  107. package/src/lib/Icon/icons/24x24/svg/arrow_left.svg +0 -1
  108. package/src/lib/Icon/icons/24x24/svg/arrow_right.svg +0 -1
  109. package/src/lib/Icon/icons/24x24/svg/bookmark.svg +0 -1
  110. package/src/lib/Icon/icons/24x24/svg/bookmarked.svg +0 -1
  111. package/src/lib/Icon/icons/24x24/svg/burger_menu.svg +0 -1
  112. package/src/lib/Icon/icons/24x24/svg/camera.svg +0 -1
  113. package/src/lib/Icon/icons/24x24/svg/checkmark.svg +0 -1
  114. package/src/lib/Icon/icons/24x24/svg/checkmark_circle.svg +0 -1
  115. package/src/lib/Icon/icons/24x24/svg/chevron_down.svg +0 -1
  116. package/src/lib/Icon/icons/24x24/svg/chevron_left.svg +0 -1
  117. package/src/lib/Icon/icons/24x24/svg/chevron_right.svg +0 -1
  118. package/src/lib/Icon/icons/24x24/svg/chevron_up.svg +0 -1
  119. package/src/lib/Icon/icons/24x24/svg/comment_bubble.svg +0 -1
  120. package/src/lib/Icon/icons/24x24/svg/cross.svg +0 -1
  121. package/src/lib/Icon/icons/24x24/svg/cross_circle.svg +0 -1
  122. package/src/lib/Icon/icons/24x24/svg/envelope.svg +0 -1
  123. package/src/lib/Icon/icons/24x24/svg/event_calendar.svg +0 -1
  124. package/src/lib/Icon/icons/24x24/svg/external_link.svg +0 -1
  125. package/src/lib/Icon/icons/24x24/svg/eye.svg +0 -1
  126. package/src/lib/Icon/icons/24x24/svg/eye_crossed.svg +0 -1
  127. package/src/lib/Icon/icons/24x24/svg/filter.svg +0 -1
  128. package/src/lib/Icon/icons/24x24/svg/globe.svg +0 -1
  129. package/src/lib/Icon/icons/24x24/svg/heart.svg +0 -1
  130. package/src/lib/Icon/icons/24x24/svg/image.svg +0 -1
  131. package/src/lib/Icon/icons/24x24/svg/loudspeaker.svg +0 -1
  132. package/src/lib/Icon/icons/24x24/svg/marketplace.svg +0 -1
  133. package/src/lib/Icon/icons/24x24/svg/more_dots.svg +0 -1
  134. package/src/lib/Icon/icons/24x24/svg/more_dots_alt.svg +0 -1
  135. package/src/lib/Icon/icons/24x24/svg/mute.svg +0 -1
  136. package/src/lib/Icon/icons/24x24/svg/notification_bell.svg +0 -1
  137. package/src/lib/Icon/icons/24x24/svg/paperclip.svg +0 -1
  138. package/src/lib/Icon/icons/24x24/svg/pencil.svg +0 -1
  139. package/src/lib/Icon/icons/24x24/svg/pin.svg +0 -1
  140. package/src/lib/Icon/icons/24x24/svg/plus.svg +0 -1
  141. package/src/lib/Icon/icons/24x24/svg/plus_circle.svg +0 -1
  142. package/src/lib/Icon/icons/24x24/svg/privacy_lock.svg +0 -1
  143. package/src/lib/Icon/icons/24x24/svg/search.svg +0 -1
  144. package/src/lib/Icon/icons/24x24/svg/share_arrow.svg +0 -1
  145. package/src/lib/Icon/icons/24x24/svg/share_arrow_outline.svg +0 -1
  146. package/src/lib/Icon/icons/24x24/svg/sort.svg +0 -1
  147. package/src/lib/Icon/icons/24x24/svg/thanks.svg +0 -1
  148. package/src/lib/Icon/icons/24x24/svg/trash_can.svg +0 -1
  149. package/src/lib/Icon/icons/32x32/index.ts +0 -179
  150. package/src/lib/Icon/icons/32x32/svg/address_book.svg +0 -1
  151. package/src/lib/Icon/icons/32x32/svg/baby_toy.svg +0 -1
  152. package/src/lib/Icon/icons/32x32/svg/bicycle.svg +0 -1
  153. package/src/lib/Icon/icons/32x32/svg/bookmark.svg +0 -1
  154. package/src/lib/Icon/icons/32x32/svg/books.svg +0 -1
  155. package/src/lib/Icon/icons/32x32/svg/bubble_heart_filled.svg +0 -1
  156. package/src/lib/Icon/icons/32x32/svg/bubble_heart_outline.svg +0 -1
  157. package/src/lib/Icon/icons/32x32/svg/buildings.svg +0 -1
  158. package/src/lib/Icon/icons/32x32/svg/burger_menu.svg +0 -1
  159. package/src/lib/Icon/icons/32x32/svg/business.svg +0 -1
  160. package/src/lib/Icon/icons/32x32/svg/business_profile.svg +0 -1
  161. package/src/lib/Icon/icons/32x32/svg/camera.svg +0 -1
  162. package/src/lib/Icon/icons/32x32/svg/camera_crossed.svg +0 -1
  163. package/src/lib/Icon/icons/32x32/svg/car.svg +0 -1
  164. package/src/lib/Icon/icons/32x32/svg/carrot.svg +0 -1
  165. package/src/lib/Icon/icons/32x32/svg/chat.svg +0 -1
  166. package/src/lib/Icon/icons/32x32/svg/checkmark_circle.svg +0 -1
  167. package/src/lib/Icon/icons/32x32/svg/christmas_tree.svg +0 -1
  168. package/src/lib/Icon/icons/32x32/svg/clipboard.svg +0 -1
  169. package/src/lib/Icon/icons/32x32/svg/clothing.svg +0 -1
  170. package/src/lib/Icon/icons/32x32/svg/cocktail.svg +0 -1
  171. package/src/lib/Icon/icons/32x32/svg/comment_bubble.svg +0 -1
  172. package/src/lib/Icon/icons/32x32/svg/compass.svg +0 -1
  173. package/src/lib/Icon/icons/32x32/svg/computer.svg +0 -1
  174. package/src/lib/Icon/icons/32x32/svg/couch.svg +0 -1
  175. package/src/lib/Icon/icons/32x32/svg/credit_card.svg +0 -1
  176. package/src/lib/Icon/icons/32x32/svg/cross_circle.svg +0 -1
  177. package/src/lib/Icon/icons/32x32/svg/cutlery.svg +0 -1
  178. package/src/lib/Icon/icons/32x32/svg/drill_tool.svg +0 -1
  179. package/src/lib/Icon/icons/32x32/svg/email.svg +0 -1
  180. package/src/lib/Icon/icons/32x32/svg/envelope.svg +0 -1
  181. package/src/lib/Icon/icons/32x32/svg/event_calendar_check.svg +0 -1
  182. package/src/lib/Icon/icons/32x32/svg/event_calendar_date.svg +0 -1
  183. package/src/lib/Icon/icons/32x32/svg/event_calendar_plus.svg +0 -1
  184. package/src/lib/Icon/icons/32x32/svg/exchange.svg +0 -1
  185. package/src/lib/Icon/icons/32x32/svg/eye.svg +0 -1
  186. package/src/lib/Icon/icons/32x32/svg/eye_crossed.svg +0 -1
  187. package/src/lib/Icon/icons/32x32/svg/gift.svg +0 -1
  188. package/src/lib/Icon/icons/32x32/svg/group.svg +0 -1
  189. package/src/lib/Icon/icons/32x32/svg/healthcare.svg +0 -1
  190. package/src/lib/Icon/icons/32x32/svg/heart.svg +0 -1
  191. package/src/lib/Icon/icons/32x32/svg/house.svg +0 -1
  192. package/src/lib/Icon/icons/32x32/svg/image.svg +0 -1
  193. package/src/lib/Icon/icons/32x32/svg/info.svg +0 -1
  194. package/src/lib/Icon/icons/32x32/svg/invite_neighbour.svg +0 -1
  195. package/src/lib/Icon/icons/32x32/svg/key.svg +0 -1
  196. package/src/lib/Icon/icons/32x32/svg/kitchen_pot.svg +0 -1
  197. package/src/lib/Icon/icons/32x32/svg/list.svg +0 -1
  198. package/src/lib/Icon/icons/32x32/svg/log_out.svg +0 -1
  199. package/src/lib/Icon/icons/32x32/svg/loudspeaker.svg +0 -1
  200. package/src/lib/Icon/icons/32x32/svg/map.svg +0 -1
  201. package/src/lib/Icon/icons/32x32/svg/marketplace.svg +0 -1
  202. package/src/lib/Icon/icons/32x32/svg/miscellaneous_other.svg +0 -1
  203. package/src/lib/Icon/icons/32x32/svg/more_dots.svg +0 -1
  204. package/src/lib/Icon/icons/32x32/svg/more_dots_alt.svg +0 -1
  205. package/src/lib/Icon/icons/32x32/svg/music.svg +0 -1
  206. package/src/lib/Icon/icons/32x32/svg/nebenan.de.svg +0 -1
  207. package/src/lib/Icon/icons/32x32/svg/neighbour.svg +0 -1
  208. package/src/lib/Icon/icons/32x32/svg/notification_bell.svg +0 -1
  209. package/src/lib/Icon/icons/32x32/svg/organisation.svg +0 -1
  210. package/src/lib/Icon/icons/32x32/svg/paper_form_empty.svg +0 -1
  211. package/src/lib/Icon/icons/32x32/svg/paper_form_filled.svg +0 -1
  212. package/src/lib/Icon/icons/32x32/svg/paperclip.svg +0 -1
  213. package/src/lib/Icon/icons/32x32/svg/paw.svg +0 -1
  214. package/src/lib/Icon/icons/32x32/svg/pencil.svg +0 -1
  215. package/src/lib/Icon/icons/32x32/svg/pin.svg +0 -1
  216. package/src/lib/Icon/icons/32x32/svg/pins.svg +0 -1
  217. package/src/lib/Icon/icons/32x32/svg/plant.svg +0 -1
  218. package/src/lib/Icon/icons/32x32/svg/plus.svg +0 -1
  219. package/src/lib/Icon/icons/32x32/svg/plus_circle.svg +0 -1
  220. package/src/lib/Icon/icons/32x32/svg/post.svg +0 -1
  221. package/src/lib/Icon/icons/32x32/svg/privacy_lock.svg +0 -1
  222. package/src/lib/Icon/icons/32x32/svg/qr_code.svg +0 -1
  223. package/src/lib/Icon/icons/32x32/svg/search.svg +0 -1
  224. package/src/lib/Icon/icons/32x32/svg/settings_cog.svg +0 -1
  225. package/src/lib/Icon/icons/32x32/svg/shopping_bag.svg +0 -1
  226. package/src/lib/Icon/icons/32x32/svg/shopping_cart.svg +0 -1
  227. package/src/lib/Icon/icons/32x32/svg/special_place.svg +0 -1
  228. package/src/lib/Icon/icons/32x32/svg/suitcase.svg +0 -1
  229. package/src/lib/Icon/icons/32x32/svg/supporter.svg +0 -1
  230. package/src/lib/Icon/icons/32x32/svg/tennis_ball.svg +0 -1
  231. package/src/lib/Icon/icons/32x32/svg/thanks.svg +0 -1
  232. package/src/lib/Icon/icons/32x32/svg/trash_can.svg +0 -1
  233. package/src/lib/Icon/icons/32x32/svg/truck.svg +0 -1
  234. package/src/lib/Icon/icons/32x32/svg/user.svg +0 -1
  235. package/src/lib/Icon/icons/32x32/svg/user_profile.svg +0 -1
  236. package/src/lib/Icon/icons/32x32/svg/wellness.svg +0 -1
  237. package/src/lib/Icon/icons/index.ts +0 -9
  238. package/src/lib/IconButton/IconButton.module.scss +0 -36
  239. package/src/lib/IconButton/IconButton.spec.tsx +0 -56
  240. package/src/lib/IconButton/IconButton.stories.tsx +0 -36
  241. package/src/lib/IconButton/IconButton.tsx +0 -25
  242. package/src/lib/IconButton/utils.ts +0 -6
  243. package/src/lib/Image/Image.spec.tsx +0 -10
  244. package/src/lib/Image/Image.tsx +0 -7
  245. package/src/lib/Image/Image.type.tsx +0 -5
  246. package/src/lib/LabelPill/LabelPill.module.scss +0 -33
  247. package/src/lib/LabelPill/LabelPill.spec.tsx +0 -23
  248. package/src/lib/LabelPill/LabelPill.stories.tsx +0 -31
  249. package/src/lib/LabelPill/LabelPill.tsx +0 -16
  250. package/src/lib/LabelPill/LabelPill.types.ts +0 -4
  251. package/src/lib/Legend/Legend.module.scss +0 -9
  252. package/src/lib/Legend/Legend.spec.tsx +0 -39
  253. package/src/lib/Legend/Legend.stories.ts +0 -39
  254. package/src/lib/Legend/Legend.tsx +0 -19
  255. package/src/lib/Legend/Legend.types.ts +0 -5
  256. package/src/lib/MenuItem/MenuItem.module.scss +0 -70
  257. package/src/lib/MenuItem/MenuItem.spec.tsx +0 -47
  258. package/src/lib/MenuItem/MenuItem.stories.tsx +0 -97
  259. package/src/lib/MenuItem/MenuItem.tsx +0 -34
  260. package/src/lib/MenuItem/MenuItem.types.ts +0 -10
  261. package/src/lib/NotificationBubble/NotificationBubble.module.scss +0 -30
  262. package/src/lib/NotificationBubble/NotificationBubble.spec.tsx +0 -36
  263. package/src/lib/NotificationBubble/NotificationBubble.stories.tsx +0 -56
  264. package/src/lib/NotificationBubble/NotificationBubble.tsx +0 -34
  265. package/src/lib/Thumbnail/Thumbnail.module.scss +0 -67
  266. package/src/lib/Thumbnail/Thumbnail.spec.tsx +0 -51
  267. package/src/lib/Thumbnail/Thumbnail.stories.tsx +0 -242
  268. package/src/lib/Thumbnail/Thumbnail.tsx +0 -28
  269. package/src/lib/Toggle/Toggle.module.scss +0 -53
  270. package/src/lib/Toggle/Toggle.spec.tsx +0 -23
  271. package/src/lib/Toggle/Toggle.stories.tsx +0 -38
  272. package/src/lib/Toggle/Toggle.tsx +0 -32
  273. package/src/lib/ToggleInput/ToggleInput.module.scss +0 -33
  274. package/src/lib/ToggleInput/ToggleInput.spec.tsx +0 -45
  275. package/src/lib/ToggleInput/ToggleInput.stories.tsx +0 -62
  276. package/src/lib/ToggleInput/ToggleInput.tsx +0 -40
  277. package/src/lib/Typography/Typography.module.scss +0 -61
  278. package/src/lib/Typography/Typography.spec.tsx +0 -60
  279. package/src/lib/Typography/Typography.stories.tsx +0 -45
  280. package/src/lib/Typography/Typography.tsx +0 -26
  281. package/src/lib/Typography/Typography.types.ts +0 -28
  282. package/src/styles/_design-tokens.scss +0 -1
  283. package/src/styles/_fonts.scss +0 -0
  284. package/src/styles/_functions.scss +0 -17
  285. package/src/styles/_mixins.scss +0 -33
  286. package/src/styles/index.scss +0 -3
  287. package/src/styles/reset.scss +0 -65
  288. package/tsconfig.json +0 -24
  289. package/tsconfig.lib.json +0 -35
  290. package/tsconfig.spec.json +0 -20
  291. package/tsconfig.storybook.json +0 -31
  292. package/vite.config.ts +0 -57
@@ -1,36 +0,0 @@
1
- @mixin iconButtonSize($size) {
2
- width: $size;
3
- height: $size;
4
- }
5
-
6
- .iconButton {
7
- display: flex;
8
- align-items: center;
9
- justify-content: center;
10
- border-radius: 50%;
11
- background: getSemanticColor('primary', 'primary');
12
-
13
- &:disabled {
14
- background: getSemanticColor('surface', 'surface');
15
- }
16
-
17
- &:hover {
18
- background: getSemanticColor('primary', 'primaryVariant');
19
- }
20
-
21
- &:active {
22
- background: getSemanticColor('primary', 'primary');
23
- }
24
-
25
- &--small {
26
- @include iconButtonSize(40px);
27
- }
28
-
29
- &--medium {
30
- @include iconButtonSize(48px);
31
- }
32
-
33
- &--large {
34
- @include iconButtonSize(56px);
35
- }
36
- }
@@ -1,56 +0,0 @@
1
- import { render } from '@testing-library/react';
2
- import userEvent from '@testing-library/user-event';
3
-
4
- import IconButton from './IconButton';
5
-
6
- describe('IconButton', () => {
7
- it('should render a medium sized icon button by default', () => {
8
- const { baseElement } = render(
9
- <IconButton
10
- icon="pencil"
11
- ariaLabel="create post"
12
- onClick={() => {
13
- // empty body
14
- }}
15
- />,
16
- );
17
- const iconButtonEl = baseElement.querySelector('[type=button]');
18
-
19
- expect(iconButtonEl).toBeInTheDocument();
20
- expect(iconButtonEl).not.toBeEmptyDOMElement();
21
- });
22
-
23
- it('should render a empty button if icon and size are incompatible', () => {
24
- const { baseElement } = render(
25
- // @ts-expect-error no small icon for address_book
26
- <IconButton
27
- size="small"
28
- icon="address_book"
29
- onClick={() => {
30
- // empty body
31
- }}
32
- />,
33
- );
34
- const iconButtonEl = baseElement.querySelector('[type=button]');
35
-
36
- expect(iconButtonEl).toBeInTheDocument();
37
- expect(iconButtonEl).toBeEmptyDOMElement();
38
- });
39
-
40
- it('should handle button click', async () => {
41
- const handleClick = jest.fn();
42
-
43
- const { baseElement } = render(
44
- <IconButton
45
- icon="pencil"
46
- size="medium"
47
- onClick={handleClick}
48
- ariaLabel="create new post"
49
- />,
50
- );
51
- const iconButtonEl = baseElement.querySelector('[type=button]');
52
-
53
- await userEvent.click(iconButtonEl as HTMLButtonElement);
54
- expect(handleClick).toHaveBeenCalled();
55
- });
56
- });
@@ -1,36 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
-
3
- import Icons24 from '../Icon/icons/24x24';
4
- import Icons32 from '../Icon/icons/32x32';
5
-
6
- import IconButton from './IconButton';
7
-
8
- const iconNames24 = Object.keys(Icons24);
9
- const iconName32 = Object.keys(Icons32);
10
- const allIconNames = Array.from(new Set([...iconNames24, ...iconName32]));
11
-
12
- const meta: Meta<typeof IconButton> = {
13
- argTypes: {
14
- icon: {
15
- control: { type: 'select' },
16
- options: allIconNames,
17
- },
18
- },
19
- component: IconButton,
20
- title: 'Components/IconButton',
21
- };
22
-
23
- export default meta;
24
- type Story = StoryObj<typeof IconButton>;
25
-
26
- export const Primary: Story = {
27
- args: {
28
- icon: 'pencil',
29
- },
30
- parameters: {
31
- design: {
32
- type: 'figma',
33
- url: 'https://www.figma.com/file/hN7xJ3rRAemUJT9T0uEfUS/Product-Design-System?type=design&node-id=6952-1150&mode=design&t=3J2DmPvWcXt6Hs2q-4',
34
- },
35
- },
36
- };
@@ -1,25 +0,0 @@
1
- import clsx from 'clsx';
2
- import React from 'react';
3
-
4
- import BaseButton from '../BaseButton/BaseButton';
5
- import Icon from '../Icon/Icon';
6
-
7
- import styles from './IconButton.module.scss';
8
- import { IconButtonProps } from './IconButton.types';
9
- import { getIconSize } from './utils';
10
-
11
- const IconButton = ({ icon, size = 'medium', ...baseButtonProps }: IconButtonProps) => {
12
- const iconSize = getIconSize(size);
13
-
14
- return (
15
- <BaseButton
16
- {...baseButtonProps}
17
- className={clsx(styles.iconButton, styles[`iconButton--${size}`])}
18
- >
19
- {/* @ts-expect-error Icon validates props */}
20
- <Icon size={iconSize} name={icon} />
21
- </BaseButton>
22
- );
23
- };
24
-
25
- export default IconButton;
@@ -1,6 +0,0 @@
1
- type IconButtonSize = 'large' | 'medium' | 'small';
2
-
3
- export const getIconSize = (size: IconButtonSize) => {
4
- if (size === 'small') return '24';
5
- return '32';
6
- };
@@ -1,10 +0,0 @@
1
- import { render } from '@testing-library/react';
2
-
3
- import Image from './Image';
4
-
5
- describe('Image', () => {
6
- it('should render successfully', () => {
7
- const { baseElement } = render(<Image src="" alt="" />);
8
- expect(baseElement).toBeTruthy();
9
- });
10
- });
@@ -1,7 +0,0 @@
1
- import { ImageProps } from './Image.type';
2
-
3
- const Image = ({ alt, className, src }: ImageProps) => (
4
- <img className={className} src={src} alt={alt} />
5
- );
6
-
7
- export default Image;
@@ -1,5 +0,0 @@
1
- export interface ImageProps {
2
- alt: string;
3
- className?: string;
4
- src: string;
5
- }
@@ -1,33 +0,0 @@
1
- .labelPill {
2
- display: inline-flex;
3
- align-items: center;
4
- justify-content: center;
5
- border-radius: mapGet($tokens, borderRadius, lg);
6
- background: getSemanticColor('secondary2', 'secondary2');
7
-
8
- span {
9
- color: getSemanticColor('secondary2', 'onSecondary2');
10
- line-height: mapGet($tokens, lineHeight, sm);
11
- text-align: center;
12
- }
13
-
14
- &--small {
15
- height: 20px;
16
- padding: 0px 8px;
17
-
18
- span {
19
- font-size: 10px;
20
- font-weight: 800;
21
- text-transform: uppercase;
22
- }
23
- }
24
-
25
- &--medium {
26
- padding: 4px 8px;
27
-
28
- span {
29
- font-size: 12px;
30
- font-weight: 700;
31
- }
32
- }
33
- }
@@ -1,23 +0,0 @@
1
- import { render } from '@testing-library/react';
2
-
3
- import LabelPill from './LabelPill';
4
-
5
- describe('LabelPill', () => {
6
- it('should render with "small" size', () => {
7
- const { baseElement } = render(<LabelPill label="New" size="small" />);
8
- const spanElement = baseElement.querySelector('span.labelPill span');
9
-
10
- expect(spanElement?.innerHTML).toBe('New');
11
-
12
- const elementWithClassName = baseElement.querySelector('.labelPill--small');
13
-
14
- expect(elementWithClassName).not.toBeNull();
15
- });
16
-
17
- it('should renders with "medium" size', () => {
18
- const { baseElement } = render(<LabelPill label="New" size="medium" />);
19
- const elementWithClassName = baseElement.querySelector('.labelPill--medium');
20
-
21
- expect(elementWithClassName).not.toBeNull();
22
- });
23
- });
@@ -1,31 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
-
3
- import LabelPill from './LabelPill';
4
-
5
- const meta: Meta<typeof LabelPill> = {
6
- argTypes: {
7
- size: {
8
- control: { type: 'select' },
9
- options: ['small', 'medium'],
10
- },
11
- },
12
- component: LabelPill,
13
- title: 'Components/LabelPill',
14
- };
15
-
16
- export default meta;
17
-
18
- type Story = StoryObj<typeof LabelPill>;
19
-
20
- export const Primary: Story = {
21
- args: {
22
- label: 'new',
23
- size: 'small',
24
- },
25
- parameters: {
26
- design: {
27
- type: 'figma',
28
- url: 'https://www.figma.com/file/hN7xJ3rRAemUJT9T0uEfUS/Product-Design-System?node-id=1680%3A6106&mode=dev',
29
- },
30
- },
31
- };
@@ -1,16 +0,0 @@
1
- import clsx from 'clsx';
2
-
3
- import styles from './LabelPill.module.scss';
4
- import { LabelPillProps } from './LabelPill.types';
5
-
6
- const LabelPill = ({ label, size }: LabelPillProps) => {
7
- const pillClass = styles[`labelPill--${size}`];
8
-
9
- return (
10
- <span className={clsx(styles.labelPill, pillClass)}>
11
- <span>{label}</span>
12
- </span>
13
- );
14
- };
15
-
16
- export default LabelPill;
@@ -1,4 +0,0 @@
1
- export interface LabelPillProps {
2
- label: string;
3
- size: 'small' | 'medium';
4
- }
@@ -1,9 +0,0 @@
1
- .legend {
2
- display: flex;
3
- flex-direction: column;
4
- padding-bottom: getSpacing('md');
5
- gap: getSpacing('sm');
6
- .text {
7
- color: getSemanticColor('surface', 'onSurfaceVariant');
8
- }
9
- }
@@ -1,39 +0,0 @@
1
- import { render } from '@testing-library/react';
2
-
3
- import Legend from './Legend';
4
-
5
- describe('Legend', () => {
6
- it('should render with a headline', () => {
7
- const { getByText } = render(<Legend headline="Example Headline" />);
8
- const headlineElement = getByText('Example Headline');
9
-
10
- expect(headlineElement).toBeInTheDocument();
11
- });
12
-
13
- it('should render with optional text when provided', () => {
14
- const testText = 'Additional information';
15
- const { getByText } = render(
16
- <Legend headline="Headline" text={testText} />,
17
- );
18
- const textElement = getByText(testText);
19
-
20
- expect(textElement).toBeInTheDocument();
21
- });
22
-
23
- it('should not render optional text when not provided', () => {
24
- const { queryByText } = render(<Legend headline="Headline" />);
25
- const textElement = queryByText('Additional information');
26
-
27
- expect(textElement).toBeNull();
28
- });
29
-
30
- it('should apply custom className if provided', () => {
31
- const customClass = 'custom-legend-class';
32
- const { container } = render(
33
- <Legend headline="Headline" className={customClass} />,
34
- );
35
- const legendElement = container.firstChild;
36
-
37
- expect(legendElement).toHaveClass(customClass);
38
- });
39
- });
@@ -1,39 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
-
3
- import Legend from './Legend';
4
-
5
- const meta: Meta<typeof Legend> = {
6
- argTypes: {
7
- className: {
8
- control: { type: 'text' },
9
- description: 'Additional CSS class name',
10
- },
11
- headline: {
12
- control: { type: 'text' },
13
- description: 'Headline of the legend',
14
- },
15
- text: {
16
- control: { type: 'text' },
17
- description: 'Text of the legend',
18
- },
19
- },
20
- component: Legend,
21
- title: 'Components/Legend',
22
- };
23
-
24
- export default meta;
25
-
26
- type Story = StoryObj<typeof Legend>;
27
-
28
- export const Primary: Story = {
29
- args: {
30
- headline: 'Test Headline',
31
- text: 'Test Text',
32
- },
33
- parameters: {
34
- design: {
35
- type: 'figma',
36
- url: 'https://www.figma.com/file/Q0LB4cf1uDAOQlRv79mj2W/User-Settings?type=design&node-id=5534-27808&mode=design&t=twDm2lPGITVsLdiy-0',
37
- },
38
- },
39
- };
@@ -1,19 +0,0 @@
1
- import clsx from 'clsx';
2
-
3
- import { Typography } from '@goodhood-web/ui';
4
-
5
- import styles from './Legend.module.scss';
6
- import { LegendProps } from './Legend.types';
7
-
8
- const Legend = ({ className, headline, text }: LegendProps) => (
9
- <legend className={clsx(styles.legend, className)}>
10
- <Typography type="h5">{headline}</Typography>
11
- {text && (
12
- <Typography className={styles.text} type="body-regular" as="p">
13
- {text}
14
- </Typography>
15
- )}
16
- </legend>
17
- );
18
-
19
- export default Legend;
@@ -1,5 +0,0 @@
1
- export type LegendProps = {
2
- className?: string;
3
- headline: string;
4
- text?: string;
5
- };
@@ -1,70 +0,0 @@
1
- $color-surface: getSemanticColor('surface', 'surface');
2
- $color-on-surface: getSemanticColor('surface', 'onSurface');
3
- $color-on-surface-variant: getSemanticColor('surface', 'onSurfaceVariant');
4
- $color-surface-container: getSemanticColor('surface', 'surfaceContainer');
5
-
6
- $color-primary: getSemanticColor('primary', 'primary');
7
- $color-on-primary-container: getSemanticColor('primary', 'onPrimaryContainer');
8
- $color-primary-container: getSemanticColor('primary', 'primaryContainer');
9
-
10
- $border-radius-sm: mapGet($tokens, borderRadius, sm);
11
-
12
- $spacing-sm: getSpacing('sm');
13
-
14
- .menuItem {
15
- display: flex;
16
- width: 280px;
17
- flex-shrink: 0;
18
- align-items: center;
19
- padding: 0 $spacing-sm;
20
- background-color: $color-surface;
21
- color: $color-on-surface;
22
- gap: $spacing-sm;
23
- text-decoration: none;
24
-
25
- .highlightFrame {
26
- display: flex;
27
- flex: 1;
28
- align-items: center;
29
- padding: $spacing-sm;
30
- border-radius: $border-radius-sm;
31
- gap: $spacing-sm;
32
- }
33
-
34
- .rightIcon {
35
- display: inherit;
36
- margin-left: auto;
37
-
38
- svg path {
39
- stroke: $color-on-surface-variant !important;
40
- }
41
- }
42
- &--selected {
43
- .highlightFrame {
44
- background-color: $color-primary-container;
45
-
46
- svg path {
47
- stroke: $color-on-primary-container;
48
- }
49
- }
50
- &:hover {
51
- color: $color-on-primary-container;
52
- }
53
- }
54
- &:not(&--selected) {
55
- &:active {
56
- background-color: $color-surface-container;
57
- }
58
- &:hover {
59
- color: $color-on-surface-variant;
60
-
61
- svg path {
62
- stroke: $color-on-surface-variant;
63
- }
64
-
65
- .highlightFrame {
66
- background-color: $color-surface-container;
67
- }
68
- }
69
- }
70
- }
@@ -1,47 +0,0 @@
1
- import { fireEvent, render, screen } from '@testing-library/react';
2
-
3
- import MenuItem from './MenuItem';
4
- import { MenuItemProps } from './MenuItem.types';
5
-
6
- describe('MenuItem Component', () => {
7
- const defaultProps: MenuItemProps = {
8
- labelPillText: 'Label',
9
- leftIcon: null,
10
- onClick: jest.fn(),
11
- rightIcon: null,
12
- text: 'Test Menu Item',
13
- };
14
-
15
- it('renders with the correct props', () => {
16
- render(<MenuItem {...defaultProps} />);
17
-
18
- const textElement = screen.getByText(defaultProps.text);
19
- const labelPillElement = screen.getByText(defaultProps.labelPillText);
20
-
21
- expect(textElement).toBeInTheDocument();
22
- expect(labelPillElement).toBeInTheDocument();
23
- expect(textElement.textContent).toBe(defaultProps.text);
24
- expect(labelPillElement.textContent).toBe(defaultProps.labelPillText);
25
- });
26
-
27
- it('renders left and right icons when provided', () => {
28
- const mockLeftIcon = <span>Left Icon</span>;
29
- const mockRightIcon = <span>Right Icon</span>;
30
- render(
31
- <MenuItem {...defaultProps} leftIcon={mockLeftIcon} rightIcon={mockRightIcon} />,
32
- );
33
-
34
- expect(screen.getByText('Left Icon')).toBeInTheDocument();
35
- expect(screen.getByText('Right Icon')).toBeInTheDocument();
36
- });
37
-
38
- it('calls onClick when clicked', () => {
39
- render(<MenuItem {...defaultProps} />);
40
-
41
- const menuItem = screen.getByRole('button');
42
-
43
- fireEvent.click(menuItem);
44
-
45
- expect(defaultProps.onClick).toHaveBeenCalledTimes(1);
46
- });
47
- });
@@ -1,97 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { BrowserRouter } from 'react-router-dom';
3
-
4
- import Icon from '../Icon/Icon';
5
- import NotificationBubble from '../NotificationBubble/NotificationBubble';
6
-
7
- import MenuItem from './MenuItem';
8
-
9
- const meta: Meta<typeof MenuItem> = {
10
- argTypes: {
11
- labelPillText: {
12
- control: {
13
- type: 'text',
14
- },
15
- description: 'This will be text of the label pill',
16
- },
17
- leftIcon: {
18
- control: false,
19
- description: 'This will be left icon of the menu item',
20
- },
21
- onBlur: {
22
- action: 'blurred',
23
- description: 'On blur event callback',
24
- },
25
- onClick: { action: 'clicked', description: 'On click event callback' },
26
- referrerPolicy: {
27
- control: {
28
- type: 'select',
29
- },
30
- defaultValue: 'no-referrer',
31
- description: 'Referrer policy for the link',
32
- options: ['no-referrer', 'origin', 'unsafe-url'],
33
- },
34
- rightIcon: {
35
- control: false,
36
- description: 'This will be right icon of the menu item',
37
- },
38
-
39
- target: {
40
- control: {
41
- type: 'select',
42
- },
43
- defaultValue: '_self',
44
- description:
45
- "Target attribute for the link '_blank' | '_self' | '_parent' | '_top'",
46
- options: ['_blank', '_self', '_parent', '_top'],
47
- },
48
-
49
- text: {
50
- control: {
51
- type: 'text',
52
- },
53
- defaultValue: 'Home',
54
- description: 'This will be text of the menu item',
55
- },
56
-
57
- to: {
58
- control: {
59
- type: 'text',
60
- },
61
- description: 'This will be the link of the menu item',
62
- },
63
- },
64
- component: MenuItem,
65
- decorators: [
66
- (Story) => (
67
- <BrowserRouter>
68
- <Story />
69
- </BrowserRouter>
70
- ),
71
- ],
72
- title: 'Components/MenuItem',
73
- };
74
-
75
- export default meta;
76
-
77
- type Story = StoryObj<typeof MenuItem>;
78
-
79
- export const Primary: Story = {
80
- args: {
81
- labelPillText: 'New',
82
- leftIcon: (
83
- <NotificationBubble ariaLabel="Notifications">
84
- <Icon name="nebenan_de" size="32" />
85
- </NotificationBubble>
86
- ),
87
- rightIcon: <Icon name="chevron_down" size="24" />,
88
- text: 'Home',
89
- to: '/',
90
- },
91
- parameters: {
92
- design: {
93
- type: 'figma',
94
- url: 'https://www.figma.com/file/hN7xJ3rRAemUJT9T0uEfUS/Product-Design-System?type=design&node-id=3709-7139&mode=design&t=ugANsqRffu1KkyuR-0',
95
- },
96
- },
97
- };
@@ -1,34 +0,0 @@
1
- 'use client';
2
- import clsx from 'clsx';
3
-
4
- import { BaseButton, LabelPill, Typography } from '@goodhood-web/ui';
5
-
6
- import styles from './MenuItem.module.scss';
7
- import { MenuItemProps } from './MenuItem.types';
8
-
9
- const MenuItem = ({
10
- isSelected,
11
- labelPillText,
12
- leftIcon,
13
- onClick,
14
- rightIcon,
15
- text,
16
- }: MenuItemProps) => (
17
- <BaseButton
18
- onClick={onClick}
19
- className={clsx(styles.menuItem, {
20
- [styles['menuItem--selected']]: isSelected,
21
- })}
22
- >
23
- <span className={clsx(styles.highlightFrame)}>
24
- {leftIcon}
25
- <Typography type="body-large" as="span">
26
- {text}
27
- </Typography>
28
- <LabelPill label={labelPillText} size="small" />
29
- <span className={styles.rightIcon}>{rightIcon}</span>
30
- </span>
31
- </BaseButton>
32
- );
33
-
34
- export default MenuItem;
@@ -1,10 +0,0 @@
1
- import { ReactNode } from 'react';
2
-
3
- export interface MenuItemProps {
4
- isSelected?: boolean;
5
- labelPillText: string;
6
- leftIcon: ReactNode;
7
- onClick: () => void;
8
- rightIcon: ReactNode;
9
- text: string;
10
- }