@goodhood-web/ui 0.0.6 → 1.0.0-development.1

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 (293) hide show
  1. package/{src/index.ts → index.d.ts} +1 -24
  2. package/index.js +48 -0
  3. package/index.mjs +2341 -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 +12 -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} +12 -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 +3 -2
  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 -95
  62. package/release.config.js +0 -30
  63. package/src/lib/BaseButton/BaseButton.module.scss +0 -11
  64. package/src/lib/BaseButton/BaseButton.spec.tsx +0 -12
  65. package/src/lib/BaseButton/BaseButton.stories.tsx +0 -26
  66. package/src/lib/BaseButton/BaseButton.tsx +0 -39
  67. package/src/lib/Card/Card.module.scss +0 -15
  68. package/src/lib/Card/Card.spec.tsx +0 -15
  69. package/src/lib/Card/Card.stories.tsx +0 -159
  70. package/src/lib/Card/Card.tsx +0 -31
  71. package/src/lib/Card/Card.types.ts +0 -12
  72. package/src/lib/Card/Card.utils.spec.tsx +0 -51
  73. package/src/lib/Card/Card.utils.ts +0 -23
  74. package/src/lib/Card/CardBody/CardBody.module.scss +0 -4
  75. package/src/lib/Card/CardBody/CardBody.spec.tsx +0 -15
  76. package/src/lib/Card/CardBody/CardBody.stories.tsx +0 -108
  77. package/src/lib/Card/CardBody/CardBody.tsx +0 -9
  78. package/src/lib/Card/CardBody/CardBody.types.ts +0 -4
  79. package/src/lib/Card/CardHeader/CardHeader.module.scss +0 -12
  80. package/src/lib/Card/CardHeader/CardHeader.spec.tsx +0 -72
  81. package/src/lib/Card/CardHeader/CardHeader.stories.tsx +0 -77
  82. package/src/lib/Card/CardHeader/CardHeader.tsx +0 -29
  83. package/src/lib/Card/CardHeader/CardHeader.type.ts +0 -14
  84. package/src/lib/ContentCreatorButton/ContentCreatorButton.module.scss +0 -14
  85. package/src/lib/ContentCreatorButton/ContentCreatorButton.spec.tsx +0 -14
  86. package/src/lib/ContentCreatorButton/ContentCreatorButton.stories.tsx +0 -29
  87. package/src/lib/ContentCreatorButton/ContentCreatorButton.tsx +0 -35
  88. package/src/lib/Divider/Divider.module.scss +0 -10
  89. package/src/lib/Divider/Divider.spec.tsx +0 -46
  90. package/src/lib/Divider/Divider.stories.tsx +0 -35
  91. package/src/lib/Divider/Divider.tsx +0 -17
  92. package/src/lib/Divider/Divider.types.ts +0 -6
  93. package/src/lib/Fieldset/Fieldset.module.scss +0 -3
  94. package/src/lib/Fieldset/Fieldset.spec.tsx +0 -68
  95. package/src/lib/Fieldset/Fieldset.stories.tsx +0 -60
  96. package/src/lib/Fieldset/Fieldset.tsx +0 -28
  97. package/src/lib/Fieldset/Fieldset.types.ts +0 -7
  98. package/src/lib/Form/Form.spec.tsx +0 -15
  99. package/src/lib/Form/Form.stories.tsx +0 -53
  100. package/src/lib/Form/Form.tsx +0 -14
  101. package/src/lib/Form/Form.types.ts +0 -11
  102. package/src/lib/Icon/Icon.module.scss +0 -7
  103. package/src/lib/Icon/Icon.spec.tsx +0 -33
  104. package/src/lib/Icon/Icon.stories.tsx +0 -88
  105. package/src/lib/Icon/Icon.tsx +0 -29
  106. package/src/lib/Icon/Icon.types.ts +0 -23
  107. package/src/lib/Icon/icons/24x24/index.ts +0 -89
  108. package/src/lib/Icon/icons/24x24/svg/arrow_left.svg +0 -1
  109. package/src/lib/Icon/icons/24x24/svg/arrow_right.svg +0 -1
  110. package/src/lib/Icon/icons/24x24/svg/bookmark.svg +0 -1
  111. package/src/lib/Icon/icons/24x24/svg/bookmarked.svg +0 -1
  112. package/src/lib/Icon/icons/24x24/svg/burger_menu.svg +0 -1
  113. package/src/lib/Icon/icons/24x24/svg/camera.svg +0 -1
  114. package/src/lib/Icon/icons/24x24/svg/checkmark.svg +0 -1
  115. package/src/lib/Icon/icons/24x24/svg/checkmark_circle.svg +0 -1
  116. package/src/lib/Icon/icons/24x24/svg/chevron_down.svg +0 -1
  117. package/src/lib/Icon/icons/24x24/svg/chevron_left.svg +0 -1
  118. package/src/lib/Icon/icons/24x24/svg/chevron_right.svg +0 -1
  119. package/src/lib/Icon/icons/24x24/svg/chevron_up.svg +0 -1
  120. package/src/lib/Icon/icons/24x24/svg/comment_bubble.svg +0 -1
  121. package/src/lib/Icon/icons/24x24/svg/cross.svg +0 -1
  122. package/src/lib/Icon/icons/24x24/svg/cross_circle.svg +0 -1
  123. package/src/lib/Icon/icons/24x24/svg/envelope.svg +0 -1
  124. package/src/lib/Icon/icons/24x24/svg/event_calendar.svg +0 -1
  125. package/src/lib/Icon/icons/24x24/svg/external_link.svg +0 -1
  126. package/src/lib/Icon/icons/24x24/svg/eye.svg +0 -1
  127. package/src/lib/Icon/icons/24x24/svg/eye_crossed.svg +0 -1
  128. package/src/lib/Icon/icons/24x24/svg/filter.svg +0 -1
  129. package/src/lib/Icon/icons/24x24/svg/globe.svg +0 -1
  130. package/src/lib/Icon/icons/24x24/svg/heart.svg +0 -1
  131. package/src/lib/Icon/icons/24x24/svg/image.svg +0 -1
  132. package/src/lib/Icon/icons/24x24/svg/loudspeaker.svg +0 -1
  133. package/src/lib/Icon/icons/24x24/svg/marketplace.svg +0 -1
  134. package/src/lib/Icon/icons/24x24/svg/more_dots.svg +0 -1
  135. package/src/lib/Icon/icons/24x24/svg/more_dots_alt.svg +0 -1
  136. package/src/lib/Icon/icons/24x24/svg/mute.svg +0 -1
  137. package/src/lib/Icon/icons/24x24/svg/notification_bell.svg +0 -1
  138. package/src/lib/Icon/icons/24x24/svg/paperclip.svg +0 -1
  139. package/src/lib/Icon/icons/24x24/svg/pencil.svg +0 -1
  140. package/src/lib/Icon/icons/24x24/svg/pin.svg +0 -1
  141. package/src/lib/Icon/icons/24x24/svg/plus.svg +0 -1
  142. package/src/lib/Icon/icons/24x24/svg/plus_circle.svg +0 -1
  143. package/src/lib/Icon/icons/24x24/svg/privacy_lock.svg +0 -1
  144. package/src/lib/Icon/icons/24x24/svg/search.svg +0 -1
  145. package/src/lib/Icon/icons/24x24/svg/share_arrow.svg +0 -1
  146. package/src/lib/Icon/icons/24x24/svg/share_arrow_outline.svg +0 -1
  147. package/src/lib/Icon/icons/24x24/svg/sort.svg +0 -1
  148. package/src/lib/Icon/icons/24x24/svg/thanks.svg +0 -1
  149. package/src/lib/Icon/icons/24x24/svg/trash_can.svg +0 -1
  150. package/src/lib/Icon/icons/32x32/index.ts +0 -179
  151. package/src/lib/Icon/icons/32x32/svg/address_book.svg +0 -1
  152. package/src/lib/Icon/icons/32x32/svg/baby_toy.svg +0 -1
  153. package/src/lib/Icon/icons/32x32/svg/bicycle.svg +0 -1
  154. package/src/lib/Icon/icons/32x32/svg/bookmark.svg +0 -1
  155. package/src/lib/Icon/icons/32x32/svg/books.svg +0 -1
  156. package/src/lib/Icon/icons/32x32/svg/bubble_heart_filled.svg +0 -1
  157. package/src/lib/Icon/icons/32x32/svg/bubble_heart_outline.svg +0 -1
  158. package/src/lib/Icon/icons/32x32/svg/buildings.svg +0 -1
  159. package/src/lib/Icon/icons/32x32/svg/burger_menu.svg +0 -1
  160. package/src/lib/Icon/icons/32x32/svg/business.svg +0 -1
  161. package/src/lib/Icon/icons/32x32/svg/business_profile.svg +0 -1
  162. package/src/lib/Icon/icons/32x32/svg/camera.svg +0 -1
  163. package/src/lib/Icon/icons/32x32/svg/camera_crossed.svg +0 -1
  164. package/src/lib/Icon/icons/32x32/svg/car.svg +0 -1
  165. package/src/lib/Icon/icons/32x32/svg/carrot.svg +0 -1
  166. package/src/lib/Icon/icons/32x32/svg/chat.svg +0 -1
  167. package/src/lib/Icon/icons/32x32/svg/checkmark_circle.svg +0 -1
  168. package/src/lib/Icon/icons/32x32/svg/christmas_tree.svg +0 -1
  169. package/src/lib/Icon/icons/32x32/svg/clipboard.svg +0 -1
  170. package/src/lib/Icon/icons/32x32/svg/clothing.svg +0 -1
  171. package/src/lib/Icon/icons/32x32/svg/cocktail.svg +0 -1
  172. package/src/lib/Icon/icons/32x32/svg/comment_bubble.svg +0 -1
  173. package/src/lib/Icon/icons/32x32/svg/compass.svg +0 -1
  174. package/src/lib/Icon/icons/32x32/svg/computer.svg +0 -1
  175. package/src/lib/Icon/icons/32x32/svg/couch.svg +0 -1
  176. package/src/lib/Icon/icons/32x32/svg/credit_card.svg +0 -1
  177. package/src/lib/Icon/icons/32x32/svg/cross_circle.svg +0 -1
  178. package/src/lib/Icon/icons/32x32/svg/cutlery.svg +0 -1
  179. package/src/lib/Icon/icons/32x32/svg/drill_tool.svg +0 -1
  180. package/src/lib/Icon/icons/32x32/svg/email.svg +0 -1
  181. package/src/lib/Icon/icons/32x32/svg/envelope.svg +0 -1
  182. package/src/lib/Icon/icons/32x32/svg/event_calendar_check.svg +0 -1
  183. package/src/lib/Icon/icons/32x32/svg/event_calendar_date.svg +0 -1
  184. package/src/lib/Icon/icons/32x32/svg/event_calendar_plus.svg +0 -1
  185. package/src/lib/Icon/icons/32x32/svg/exchange.svg +0 -1
  186. package/src/lib/Icon/icons/32x32/svg/eye.svg +0 -1
  187. package/src/lib/Icon/icons/32x32/svg/eye_crossed.svg +0 -1
  188. package/src/lib/Icon/icons/32x32/svg/gift.svg +0 -1
  189. package/src/lib/Icon/icons/32x32/svg/group.svg +0 -1
  190. package/src/lib/Icon/icons/32x32/svg/healthcare.svg +0 -1
  191. package/src/lib/Icon/icons/32x32/svg/heart.svg +0 -1
  192. package/src/lib/Icon/icons/32x32/svg/house.svg +0 -1
  193. package/src/lib/Icon/icons/32x32/svg/image.svg +0 -1
  194. package/src/lib/Icon/icons/32x32/svg/info.svg +0 -1
  195. package/src/lib/Icon/icons/32x32/svg/invite_neighbour.svg +0 -1
  196. package/src/lib/Icon/icons/32x32/svg/key.svg +0 -1
  197. package/src/lib/Icon/icons/32x32/svg/kitchen_pot.svg +0 -1
  198. package/src/lib/Icon/icons/32x32/svg/list.svg +0 -1
  199. package/src/lib/Icon/icons/32x32/svg/log_out.svg +0 -1
  200. package/src/lib/Icon/icons/32x32/svg/loudspeaker.svg +0 -1
  201. package/src/lib/Icon/icons/32x32/svg/map.svg +0 -1
  202. package/src/lib/Icon/icons/32x32/svg/marketplace.svg +0 -1
  203. package/src/lib/Icon/icons/32x32/svg/miscellaneous_other.svg +0 -1
  204. package/src/lib/Icon/icons/32x32/svg/more_dots.svg +0 -1
  205. package/src/lib/Icon/icons/32x32/svg/more_dots_alt.svg +0 -1
  206. package/src/lib/Icon/icons/32x32/svg/music.svg +0 -1
  207. package/src/lib/Icon/icons/32x32/svg/nebenan.de.svg +0 -1
  208. package/src/lib/Icon/icons/32x32/svg/neighbour.svg +0 -1
  209. package/src/lib/Icon/icons/32x32/svg/notification_bell.svg +0 -1
  210. package/src/lib/Icon/icons/32x32/svg/organisation.svg +0 -1
  211. package/src/lib/Icon/icons/32x32/svg/paper_form_empty.svg +0 -1
  212. package/src/lib/Icon/icons/32x32/svg/paper_form_filled.svg +0 -1
  213. package/src/lib/Icon/icons/32x32/svg/paperclip.svg +0 -1
  214. package/src/lib/Icon/icons/32x32/svg/paw.svg +0 -1
  215. package/src/lib/Icon/icons/32x32/svg/pencil.svg +0 -1
  216. package/src/lib/Icon/icons/32x32/svg/pin.svg +0 -1
  217. package/src/lib/Icon/icons/32x32/svg/pins.svg +0 -1
  218. package/src/lib/Icon/icons/32x32/svg/plant.svg +0 -1
  219. package/src/lib/Icon/icons/32x32/svg/plus.svg +0 -1
  220. package/src/lib/Icon/icons/32x32/svg/plus_circle.svg +0 -1
  221. package/src/lib/Icon/icons/32x32/svg/post.svg +0 -1
  222. package/src/lib/Icon/icons/32x32/svg/privacy_lock.svg +0 -1
  223. package/src/lib/Icon/icons/32x32/svg/qr_code.svg +0 -1
  224. package/src/lib/Icon/icons/32x32/svg/search.svg +0 -1
  225. package/src/lib/Icon/icons/32x32/svg/settings_cog.svg +0 -1
  226. package/src/lib/Icon/icons/32x32/svg/shopping_bag.svg +0 -1
  227. package/src/lib/Icon/icons/32x32/svg/shopping_cart.svg +0 -1
  228. package/src/lib/Icon/icons/32x32/svg/special_place.svg +0 -1
  229. package/src/lib/Icon/icons/32x32/svg/suitcase.svg +0 -1
  230. package/src/lib/Icon/icons/32x32/svg/supporter.svg +0 -1
  231. package/src/lib/Icon/icons/32x32/svg/tennis_ball.svg +0 -1
  232. package/src/lib/Icon/icons/32x32/svg/thanks.svg +0 -1
  233. package/src/lib/Icon/icons/32x32/svg/trash_can.svg +0 -1
  234. package/src/lib/Icon/icons/32x32/svg/truck.svg +0 -1
  235. package/src/lib/Icon/icons/32x32/svg/user.svg +0 -1
  236. package/src/lib/Icon/icons/32x32/svg/user_profile.svg +0 -1
  237. package/src/lib/Icon/icons/32x32/svg/wellness.svg +0 -1
  238. package/src/lib/Icon/icons/index.ts +0 -9
  239. package/src/lib/IconButton/IconButton.module.scss +0 -37
  240. package/src/lib/IconButton/IconButton.spec.tsx +0 -56
  241. package/src/lib/IconButton/IconButton.stories.tsx +0 -36
  242. package/src/lib/IconButton/IconButton.tsx +0 -25
  243. package/src/lib/IconButton/utils.ts +0 -6
  244. package/src/lib/Image/Image.spec.tsx +0 -10
  245. package/src/lib/Image/Image.tsx +0 -7
  246. package/src/lib/Image/Image.type.tsx +0 -5
  247. package/src/lib/LabelPill/LabelPill.module.scss +0 -33
  248. package/src/lib/LabelPill/LabelPill.spec.tsx +0 -23
  249. package/src/lib/LabelPill/LabelPill.stories.tsx +0 -31
  250. package/src/lib/LabelPill/LabelPill.tsx +0 -16
  251. package/src/lib/LabelPill/LabelPill.types.ts +0 -4
  252. package/src/lib/Legend/Legend.module.scss +0 -9
  253. package/src/lib/Legend/Legend.spec.tsx +0 -35
  254. package/src/lib/Legend/Legend.stories.ts +0 -39
  255. package/src/lib/Legend/Legend.tsx +0 -19
  256. package/src/lib/Legend/Legend.types.ts +0 -5
  257. package/src/lib/MenuItem/MenuItem.module.scss +0 -73
  258. package/src/lib/MenuItem/MenuItem.spec.tsx +0 -47
  259. package/src/lib/MenuItem/MenuItem.stories.tsx +0 -97
  260. package/src/lib/MenuItem/MenuItem.tsx +0 -34
  261. package/src/lib/MenuItem/MenuItem.types.ts +0 -10
  262. package/src/lib/NotificationBubble/NotificationBubble.module.scss +0 -30
  263. package/src/lib/NotificationBubble/NotificationBubble.spec.tsx +0 -36
  264. package/src/lib/NotificationBubble/NotificationBubble.stories.tsx +0 -56
  265. package/src/lib/NotificationBubble/NotificationBubble.tsx +0 -34
  266. package/src/lib/Thumbnail/Thumbnail.module.scss +0 -68
  267. package/src/lib/Thumbnail/Thumbnail.spec.tsx +0 -51
  268. package/src/lib/Thumbnail/Thumbnail.stories.tsx +0 -242
  269. package/src/lib/Thumbnail/Thumbnail.tsx +0 -28
  270. package/src/lib/Toggle/Toggle.module.scss +0 -53
  271. package/src/lib/Toggle/Toggle.spec.tsx +0 -23
  272. package/src/lib/Toggle/Toggle.stories.tsx +0 -38
  273. package/src/lib/Toggle/Toggle.tsx +0 -32
  274. package/src/lib/ToggleInput/ToggleInput.module.scss +0 -32
  275. package/src/lib/ToggleInput/ToggleInput.spec.tsx +0 -45
  276. package/src/lib/ToggleInput/ToggleInput.stories.tsx +0 -62
  277. package/src/lib/ToggleInput/ToggleInput.tsx +0 -40
  278. package/src/lib/Typography/Typography.module.scss +0 -61
  279. package/src/lib/Typography/Typography.spec.tsx +0 -60
  280. package/src/lib/Typography/Typography.stories.tsx +0 -45
  281. package/src/lib/Typography/Typography.tsx +0 -26
  282. package/src/lib/Typography/Typography.types.ts +0 -28
  283. package/src/styles/_design-tokens.scss +0 -1
  284. package/src/styles/_fonts.scss +0 -0
  285. package/src/styles/_functions.scss +0 -17
  286. package/src/styles/_mixins.scss +0 -33
  287. package/src/styles/index.scss +0 -3
  288. package/src/styles/reset.scss +0 -67
  289. package/tsconfig.json +0 -24
  290. package/tsconfig.lib.json +0 -35
  291. package/tsconfig.spec.json +0 -20
  292. package/tsconfig.storybook.json +0 -31
  293. package/vite.config.ts +0 -57
@@ -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
- {labelPillText && <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
- }
@@ -1,30 +0,0 @@
1
- .bubbleContent {
2
- position: relative;
3
- display: inline-block;
4
- }
5
-
6
- .bubble {
7
- position: absolute;
8
- z-index: auto;
9
- top: 6px;
10
- right: 6px;
11
- display: flex;
12
- width: 20px;
13
- height: 20px;
14
- align-items: center;
15
- justify-content: center;
16
- border-radius: 50%;
17
- background-color: getSemanticColor(highlight, highlight);
18
- color: getSemanticColor(highlight, onHighlight);
19
- font-size: 12px;
20
- font-weight: bold;
21
- text-align: center;
22
- transform: translate(50%, -50%);
23
- transform-origin: 100% 0;
24
- white-space: nowrap;
25
-
26
- &--empty {
27
- width: 12px;
28
- height: 12px;
29
- }
30
- }
@@ -1,36 +0,0 @@
1
- import '@testing-library/jest-dom';
2
- import { render, screen } from '@testing-library/react';
3
- import React from 'react';
4
-
5
- import NotificationBubble from './NotificationBubble';
6
- import { NotificationBubbleProps } from './NotificationBubble.types';
7
-
8
- describe('NotificationBubble', () => {
9
- it('renders the bubble with a value', () => {
10
- const props: NotificationBubbleProps = {
11
- ariaLabel: 'Notification Bubble',
12
- value: 5,
13
- };
14
-
15
- render(<NotificationBubble {...props}>Content</NotificationBubble>);
16
-
17
- const bubble = screen.getByRole('status', { name: 'Notification Bubble' });
18
- const badge = screen.getByText('5');
19
- expect(bubble).toBeInTheDocument();
20
- expect(badge).toBeInTheDocument();
21
- });
22
-
23
- it('renders the bubble without a value', () => {
24
- const props: NotificationBubbleProps = {
25
- ariaLabel: 'Notification Bubble',
26
- value: undefined,
27
- };
28
-
29
- render(<NotificationBubble {...props}>Content</NotificationBubble>);
30
-
31
- const bubble = screen.getByRole('status', { name: 'Notification Bubble' });
32
- const badge = screen.queryByText('0'); // Modify this to match the expected behavior
33
- expect(bubble).toBeInTheDocument();
34
- expect(badge).toBeNull(); // Check that badge is not present
35
- });
36
- });
@@ -1,56 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
-
3
- import BaseButton from '../BaseButton/BaseButton';
4
- import Icon from '../Icon/Icon';
5
-
6
- import NotificationBubble from './NotificationBubble';
7
-
8
- const meta: Meta<typeof NotificationBubble> = {
9
- argTypes: {
10
- children: {
11
- control: { type: 'select' },
12
- mapping: {
13
- Button: (
14
- <BaseButton
15
- onClick={() => {
16
- // do nothing
17
- }}
18
- >
19
- Button
20
- </BaseButton>
21
- ),
22
- Icon: <Icon name="envelope" size="32" />,
23
- },
24
- // TODO replace with actual use case from our new design system (Icon etc)
25
- options: ['Icon', 'Button'],
26
- },
27
- },
28
- args: {
29
- children: 'Icon',
30
- },
31
- component: NotificationBubble,
32
- parameters: {
33
- design: {
34
- type: 'figma',
35
- url: 'https://www.figma.com/file/hN7xJ3rRAemUJT9T0uEfUS/Product-Design-System?type=design&node-id=237-3029&mode=design',
36
- },
37
- },
38
- title: 'Components/NotificationBubble',
39
- };
40
-
41
- export default meta;
42
-
43
- type Story = StoryObj<typeof NotificationBubble>;
44
-
45
- export const Primary: Story = {
46
- args: {
47
- ariaLabel: '5 new messages',
48
- value: 5,
49
- },
50
- };
51
-
52
- export const Empty: Story = {
53
- args: {
54
- ariaLabel: 'Messages',
55
- },
56
- };
@@ -1,34 +0,0 @@
1
- import { Badge } from '@mui/base';
2
- import clsx from 'clsx';
3
-
4
- import styles from './NotificationBubble.module.scss';
5
- import { NotificationBubbleProps } from './NotificationBubble.types';
6
-
7
- const MAX_COUNT = 9;
8
-
9
- const NotificationBubble = (props: NotificationBubbleProps) => {
10
- const { ariaLabel, children, value } = props;
11
-
12
- const displayValue = value && value < 0 ? 0 : value;
13
- const classes = clsx(
14
- {
15
- [styles['bubble--empty']]: displayValue === undefined,
16
- },
17
- styles.bubble,
18
- );
19
-
20
- return (
21
- <Badge
22
- badgeContent={displayValue}
23
- className={styles.bubbleContent}
24
- max={MAX_COUNT}
25
- slotProps={{ badge: { className: classes } }}
26
- aria-label={ariaLabel}
27
- role="status"
28
- >
29
- {children}
30
- </Badge>
31
- );
32
- };
33
-
34
- export default NotificationBubble;
@@ -1,68 +0,0 @@
1
- /*
2
- * Replace this with your own classes
3
- *
4
- * e.g.
5
- * .container {
6
- * }
7
- */
8
-
9
- @mixin setSizes {
10
- $sizes: (24, 28, 32, 40, 48, 56, 64, 80, 120, 280);
11
-
12
- @each $size in $sizes {
13
- &--#{$size} {
14
- width: #{$size}px;
15
- height: #{$size}px;
16
- }
17
- }
18
- }
19
-
20
- .root {
21
- @include setSizes;
22
- position: relative;
23
- overflow: hidden;
24
- flex-shrink: 0;
25
- border: solid 1px getSemanticColor('outline', 'outlineVariant');
26
- background-color: getSemanticColor('outline', 'outlineVariant');
27
-
28
- &--square {
29
- &.root--24,
30
- &.root--32 {
31
- border-radius: getBorderRadius('xs');
32
- }
33
- &.root--40,
34
- &.root--48 {
35
- border-radius: getBorderRadius('sm');
36
- }
37
- &.root--56,
38
- &.root--64 {
39
- border-radius: getBorderRadius('md');
40
- }
41
- &.root--80,
42
- &.root--120 {
43
- border-radius: getBorderRadius('lg');
44
- }
45
- }
46
-
47
- &--circular {
48
- border-radius: 50%;
49
- }
50
-
51
- &--isPlaceholder {
52
- &::before {
53
- position: absolute;
54
- z-index: 1;
55
- width: 100%;
56
- height: 100%;
57
- background-color: getSemanticColor('outline', 'outlineVariant');
58
- content: '';
59
- opacity: 0.4;
60
- }
61
- }
62
-
63
- img {
64
- width: 100%;
65
- height: 100%;
66
- object-fit: cover;
67
- }
68
- }
@@ -1,51 +0,0 @@
1
- import '@testing-library/jest-dom';
2
- import { render } from '@testing-library/react';
3
-
4
- import Thumbnail from './Thumbnail';
5
- import { ThumbnailCircularProps, ThumbnailSquareProps } from './Thumbnail.type';
6
-
7
- describe('Thumbnail component', () => {
8
- it('renders a valid circular thumbnail', () => {
9
- const circularProps = {
10
- alt: 'Test Image',
11
- shape: 'circular',
12
- size: '40',
13
- src: 'test.jpg',
14
- };
15
- const { container } = render(
16
- <Thumbnail {...(circularProps as ThumbnailCircularProps)} />,
17
- );
18
-
19
- const thumbnail = container.querySelector('.root--circular');
20
- expect(thumbnail).toBeInTheDocument();
21
- });
22
-
23
- it('renders a valid square thumbnail', () => {
24
- const squareProps = {
25
- alt: 'Test Image',
26
- shape: 'square',
27
- size: '40',
28
- src: 'test.jpg',
29
- };
30
- const { container } = render(
31
- <Thumbnail {...(squareProps as ThumbnailSquareProps)} />,
32
- );
33
- const thumbnail = container.querySelector('.root--square');
34
- expect(thumbnail).toBeInTheDocument();
35
- });
36
-
37
- it('does not display image when src is not provided', () => {
38
- const circularEmptySrcProps = {
39
- alt: 'Test Image',
40
- shape: 'circular',
41
- size: '24',
42
- src: '',
43
- };
44
- const { queryByAltText } = render(
45
- <Thumbnail {...(circularEmptySrcProps as ThumbnailSquareProps)} />,
46
- );
47
- expect(queryByAltText('Test Image')).not.toBeInTheDocument();
48
- });
49
-
50
- // Add more test cases for different scenarios
51
- });
@@ -1,242 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
-
3
- import Thumbnail from './Thumbnail';
4
- import { TCircularSize, TSquareSize } from './Thumbnail.type';
5
-
6
- const circularSizes = ['28', '32', '40', '48', '56', '80', '120', '280'];
7
- const squareSizes = ['24', '32', '40', '48', '56', '64', '80', '120'];
8
- const imgSrc = 'https://placekitten.com/640/360';
9
- const meta: Meta<typeof Thumbnail> = {
10
- component: Thumbnail,
11
- title: 'Components/Thumbnail',
12
- };
13
- export default meta;
14
-
15
- type Story = StoryObj<typeof Thumbnail>;
16
-
17
- export const Primary: Story = {
18
- argTypes: {
19
- alt: {
20
- description:
21
- 'The "alt" attribute provides descriptive text for an image, ensuring accessibility by offering an alternative description.',
22
- },
23
- isPlaceholder: {
24
- active: { control: 'boolean' },
25
- defaultValue: { summary: false },
26
- description:
27
- 'The isPlaceholder property is used to add a background color overlay to the component, indicating they are temporary.',
28
- },
29
- shape: {
30
- control: { type: 'radio' },
31
- description:
32
- 'The "shape" property defines the component\'s visual form, with options "circular" or "square."',
33
- options: ['circular', 'square'],
34
- },
35
- size: {
36
- control: {
37
- readonly: true,
38
- type: 'string',
39
- },
40
- description:
41
- 'To view the available sizes, please refer to the individual stories that showcase the shape variations.',
42
- },
43
- src: {
44
- description:
45
- 'The "src" attribute specifies the image source, indicating the location from which the image is loaded.',
46
- },
47
- },
48
- args: {
49
- alt: 'component image',
50
- isPlaceholder: false,
51
- shape: 'circular',
52
- size: '80',
53
- src: imgSrc,
54
- },
55
- parameters: {
56
- design: {
57
- type: 'figma',
58
- url: 'https://www.figma.com/file/hN7xJ3rRAemUJT9T0uEfUS/Product-Design-System?type=design&node-id=116-2637&mode=design&t=0zWTONm1DR992lT9-0',
59
- },
60
- },
61
- };
62
-
63
- export const Circular: Story = {
64
- argTypes: {
65
- alt: {
66
- control: { readonly: true, type: 'string' },
67
- },
68
- isPlaceholder: {
69
- control: { readonly: true, type: 'string' },
70
- },
71
- shape: {
72
- control: { readonly: true, type: 'string' },
73
- description: 'circular',
74
- },
75
- size: {
76
- control: {
77
- type: 'select',
78
- },
79
- description: `The size property allows you to choose from predefined options like
80
- "28", "32", "40", "48", "56", "80", "120" or "280" to specify the element's dimensions or scale in pixels (px).`,
81
- options: circularSizes,
82
- },
83
- src: {
84
- control: { readonly: true, type: 'string' },
85
- },
86
- },
87
- args: {
88
- shape: 'circular',
89
- size: '48',
90
- src: imgSrc,
91
- },
92
- parameters: {
93
- a11y: {
94
- disable: true,
95
- },
96
- actions: {
97
- disable: true,
98
- },
99
- design: {
100
- type: 'figma',
101
- url: 'https://www.figma.com/file/hN7xJ3rRAemUJT9T0uEfUS/Product-Design-System?node-id=116%3A2649&mode=dev',
102
- },
103
- },
104
- render: (args) => (
105
- <div
106
- style={{
107
- display: 'flex',
108
- flexWrap: 'wrap',
109
- gap: '32px',
110
- justifyContent: 'space-between',
111
- }}
112
- >
113
- <div style={{ display: 'flex', height: '280px', width: '280px' }}>
114
- <Thumbnail
115
- shape="circular"
116
- src={imgSrc}
117
- size={args?.size as TCircularSize}
118
- alt=""
119
- />
120
- </div>
121
- <div
122
- style={{
123
- alignItems: 'start',
124
- display: 'flex',
125
- flexWrap: 'wrap',
126
- gap: '16px',
127
- justifyContent: 'center',
128
- }}
129
- >
130
- {circularSizes.map((size) => {
131
- return (
132
- <div
133
- key={size}
134
- style={{
135
- alignItems: 'center',
136
- display: 'flex',
137
- flexDirection: 'column',
138
- justifyContent: 'center',
139
- }}
140
- >
141
- <h2>{size}</h2>
142
- <Thumbnail
143
- shape="circular"
144
- src={imgSrc}
145
- size={`${size}` as TCircularSize}
146
- alt={size}
147
- />
148
- </div>
149
- );
150
- })}
151
- </div>
152
- </div>
153
- ),
154
- };
155
-
156
- export const Square: Story = {
157
- argTypes: {
158
- alt: {
159
- control: { readonly: true, type: 'string' },
160
- },
161
- isPlaceholder: {
162
- control: { readonly: true, type: 'string' },
163
- },
164
- shape: {
165
- control: { readonly: true, type: 'string' },
166
- description: 'square',
167
- },
168
- size: {
169
- control: {
170
- type: 'select',
171
- },
172
- description: `The size property allows you to choose from predefined options like
173
- "24", "32", "40", "48", "56", "64", "80" or "120" to specify the element's dimensions or scale in pixels (px).`,
174
- options: squareSizes,
175
- },
176
- src: {
177
- control: { readonly: true, type: 'string' },
178
- },
179
- },
180
- args: {
181
- shape: 'square',
182
- size: '48',
183
- src: imgSrc,
184
- },
185
- parameters: {
186
- a11y: {
187
- disable: true,
188
- },
189
- actions: {
190
- disable: true,
191
- },
192
- design: {
193
- type: 'figma',
194
- url: 'https://www.figma.com/file/hN7xJ3rRAemUJT9T0uEfUS/Product-Design-System?type=design&node-id=119-2453&mode=design&t=tRDkebYkaf8rn7Vz-0',
195
- },
196
- },
197
- render: (args) => (
198
- <div
199
- style={{
200
- display: 'flex',
201
- flexWrap: 'wrap',
202
- gap: '32px',
203
- justifyContent: 'space-between',
204
- }}
205
- >
206
- <div style={{ display: 'flex', height: '120px', width: '120px' }}>
207
- <Thumbnail shape="square" src={imgSrc} size={args?.size as TSquareSize} alt="" />
208
- </div>
209
- <div
210
- style={{
211
- alignItems: 'start',
212
- display: 'flex',
213
- flexWrap: 'wrap',
214
- gap: '16px',
215
- justifyContent: 'center',
216
- }}
217
- >
218
- {squareSizes.map((size) => {
219
- return (
220
- <div
221
- key={size}
222
- style={{
223
- alignItems: 'center',
224
- display: 'flex',
225
- flexDirection: 'column',
226
- justifyContent: 'center',
227
- }}
228
- >
229
- <h2>{size}</h2>
230
- <Thumbnail
231
- shape="square"
232
- src={imgSrc}
233
- size={`${size}` as TSquareSize}
234
- alt={size}
235
- />
236
- </div>
237
- );
238
- })}
239
- </div>
240
- </div>
241
- ),
242
- };
@@ -1,28 +0,0 @@
1
- import clsx from 'clsx';
2
-
3
- import Image from '../Image/Image';
4
-
5
- import styles from './Thumbnail.module.scss';
6
- import { ThumbnailCircularProps, ThumbnailSquareProps } from './Thumbnail.type';
7
-
8
- const Thumbnail = ({
9
- alt,
10
- isPlaceholder,
11
- shape,
12
- size,
13
- src,
14
- }: ThumbnailCircularProps | ThumbnailSquareProps) => {
15
- const thumbnailIsPlaceholder = styles['root--isPlaceholder'];
16
-
17
- return (
18
- <div
19
- className={clsx(styles.root, styles[`root--${size}`], styles[`root--${shape}`], {
20
- [thumbnailIsPlaceholder]: isPlaceholder,
21
- })}
22
- >
23
- {src && <Image src={src} alt={alt} />}
24
- </div>
25
- );
26
- };
27
-
28
- export default Thumbnail;
@@ -1,53 +0,0 @@
1
- .switch {
2
- position: relative;
3
- display: inline-block;
4
- width: 48px;
5
- height: 28px;
6
-
7
- input {
8
- position: absolute;
9
- z-index: 2;
10
- width: 48px;
11
- height: 28px;
12
- cursor: pointer;
13
- opacity: 0;
14
- }
15
-
16
- .slider {
17
- z-index: 1;
18
- display: block;
19
- width: 100%;
20
- height: 100%;
21
- border-radius: 34px;
22
- background-color: getSemanticColor('surface', 'surfaceDim');
23
- box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2) inset;
24
- cursor: pointer;
25
- transition: 0.4s;
26
-
27
- &:before {
28
- position: absolute;
29
- right: 3px;
30
- bottom: 2px;
31
- width: 24px;
32
- height: 24px;
33
- border-radius: 50%;
34
- background-color: getSemanticColor('surface', 'surface');
35
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
36
- content: '';
37
- transform: translateX(-18px);
38
- transition: 0.4s;
39
- }
40
-
41
- &.focusVisible {
42
- box-shadow: 0 0 0 3px getSemanticColor('primary', 'primary');
43
- }
44
- }
45
-
46
- input:checked + .slider {
47
- background-color: getSemanticColor('primary', 'primaryVariant');
48
- }
49
-
50
- input:checked + .slider:before {
51
- transform: translateX(0px);
52
- }
53
- }
@@ -1,23 +0,0 @@
1
- import { render, fireEvent } from '@testing-library/react';
2
-
3
- import Toggle from './Toggle';
4
-
5
- describe('Toggle', () => {
6
- it('renders correctly', () => {
7
- const { getByRole } = render(<Toggle />);
8
- const switchElement = getByRole('switch');
9
-
10
- expect(switchElement).toBeInTheDocument();
11
- });
12
-
13
- it('changes state when clicked', () => {
14
- const { getByRole } = render(<Toggle />);
15
- const switchElement = getByRole('switch');
16
-
17
- expect(switchElement).not.toBeChecked();
18
-
19
- fireEvent.click(switchElement);
20
-
21
- expect(switchElement).toBeChecked();
22
- });
23
- });