@marigold/components 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/index.d.ts +364 -32
  3. package/dist/index.js +1421 -5
  4. package/dist/index.mjs +1369 -0
  5. package/package.json +29 -10
  6. package/dist/ActionGroup/ActionGroup.d.ts +0 -8
  7. package/dist/ActionGroup/ActionGroup.stories.d.ts +0 -5
  8. package/dist/ActionGroup/index.d.ts +0 -1
  9. package/dist/Alert/Alert.d.ts +0 -27
  10. package/dist/Alert/Alert.stories.d.ts +0 -5
  11. package/dist/Alert/index.d.ts +0 -1
  12. package/dist/Badge/Badge.d.ts +0 -13
  13. package/dist/Badge/Badge.stories.d.ts +0 -5
  14. package/dist/Badge/index.d.ts +0 -1
  15. package/dist/Box.d.ts +0 -2
  16. package/dist/Button/Button.d.ts +0 -9
  17. package/dist/Button/Button.stories.d.ts +0 -5
  18. package/dist/Button/index.d.ts +0 -1
  19. package/dist/Card/Card.d.ts +0 -14
  20. package/dist/Card/Card.stories.d.ts +0 -5
  21. package/dist/Card/index.d.ts +0 -1
  22. package/dist/Checkbox/Checkbox.d.ts +0 -20
  23. package/dist/Checkbox/Checkbox.stories.d.ts +0 -5
  24. package/dist/Checkbox/CheckboxIcons.d.ts +0 -9
  25. package/dist/Checkbox/index.d.ts +0 -1
  26. package/dist/Column/Column.d.ts +0 -8
  27. package/dist/Column/Column.stories.d.ts +0 -5
  28. package/dist/Column/index.d.ts +0 -1
  29. package/dist/Columns/Columns.d.ts +0 -10
  30. package/dist/Columns/Columns.stories.d.ts +0 -5
  31. package/dist/Columns/index.d.ts +0 -1
  32. package/dist/Container/Container.d.ts +0 -6
  33. package/dist/Container/Container.stories.d.ts +0 -5
  34. package/dist/Container/index.d.ts +0 -1
  35. package/dist/Dialog/Dialog.d.ts +0 -17
  36. package/dist/Dialog/Dialog.stories.d.ts +0 -5
  37. package/dist/Dialog/ModalDialog.d.ts +0 -8
  38. package/dist/Dialog/index.d.ts +0 -1
  39. package/dist/Divider/Divider.d.ts +0 -11
  40. package/dist/Divider/Divider.stories.d.ts +0 -5
  41. package/dist/Divider/index.d.ts +0 -1
  42. package/dist/Field/Field.d.ts +0 -13
  43. package/dist/Field/Field.stories.d.ts +0 -5
  44. package/dist/Field/index.d.ts +0 -1
  45. package/dist/Image/Image.d.ts +0 -12
  46. package/dist/Image/Image.stories.d.ts +0 -5
  47. package/dist/Image/index.d.ts +0 -1
  48. package/dist/Inline/Inline.d.ts +0 -7
  49. package/dist/Inline/Inline.stories.d.ts +0 -5
  50. package/dist/Inline/index.d.ts +0 -1
  51. package/dist/Input/Input.d.ts +0 -11
  52. package/dist/Input/Input.stories.d.ts +0 -5
  53. package/dist/Input/index.d.ts +0 -1
  54. package/dist/Label/Label.d.ts +0 -19
  55. package/dist/Label/Label.stories.d.ts +0 -5
  56. package/dist/Label/index.d.ts +0 -1
  57. package/dist/Link/Link.d.ts +0 -10
  58. package/dist/Link/Link.stories.d.ts +0 -5
  59. package/dist/Link/index.d.ts +0 -1
  60. package/dist/Menu/Menu.d.ts +0 -15
  61. package/dist/Menu/Menu.stories.d.ts +0 -5
  62. package/dist/Menu/index.d.ts +0 -1
  63. package/dist/MenuItem/MenuItem.d.ts +0 -12
  64. package/dist/MenuItem/MenuItem.stories.d.ts +0 -5
  65. package/dist/MenuItem/index.d.ts +0 -1
  66. package/dist/Message/Message.d.ts +0 -12
  67. package/dist/Message/Message.stories.d.ts +0 -5
  68. package/dist/Message/index.d.ts +0 -1
  69. package/dist/Provider/MarigoldProvider.d.ts +0 -11
  70. package/dist/Provider/index.d.ts +0 -3
  71. package/dist/Radio/Radio.d.ts +0 -19
  72. package/dist/Radio/Radio.stories.d.ts +0 -5
  73. package/dist/Radio/RadioIcon.d.ts +0 -9
  74. package/dist/Radio/index.d.ts +0 -1
  75. package/dist/Select/ListBox.d.ts +0 -9
  76. package/dist/Select/ListBoxSection.d.ts +0 -9
  77. package/dist/Select/Option.d.ts +0 -9
  78. package/dist/Select/Popover.d.ts +0 -9
  79. package/dist/Select/Select.d.ts +0 -27
  80. package/dist/Select/Select.stories.d.ts +0 -5
  81. package/dist/Select/index.d.ts +0 -1
  82. package/dist/Slider/Slider.d.ts +0 -11
  83. package/dist/Slider/Slider.stories.d.ts +0 -5
  84. package/dist/Slider/index.d.ts +0 -1
  85. package/dist/Stack/Stack.d.ts +0 -7
  86. package/dist/Stack/Stack.stories.d.ts +0 -5
  87. package/dist/Stack/index.d.ts +0 -1
  88. package/dist/Text/Text.d.ts +0 -17
  89. package/dist/Text/Text.stories.d.ts +0 -5
  90. package/dist/Text/index.d.ts +0 -1
  91. package/dist/Textarea/Textarea.d.ts +0 -16
  92. package/dist/Textarea/Textarea.stories.d.ts +0 -5
  93. package/dist/Textarea/index.d.ts +0 -1
  94. package/dist/ValidationMessage/ValidationMessage.d.ts +0 -11
  95. package/dist/ValidationMessage/ValidationMessage.stories.d.ts +0 -5
  96. package/dist/ValidationMessage/index.d.ts +0 -1
  97. package/dist/VisuallyHidden/VisuallyHidden.d.ts +0 -1
  98. package/dist/VisuallyHidden/VisuallyHidden.stories.d.ts +0 -5
  99. package/dist/VisuallyHidden/index.d.ts +0 -1
  100. package/dist/components.cjs.development.js +0 -1394
  101. package/dist/components.cjs.development.js.map +0 -1
  102. package/dist/components.cjs.production.min.js +0 -2
  103. package/dist/components.cjs.production.min.js.map +0 -1
  104. package/dist/components.esm.js +0 -1320
  105. package/dist/components.esm.js.map +0 -1
  106. package/dist/theme.d.ts +0 -23
  107. package/src/ActionGroup/ActionGroup.stories.tsx +0 -47
  108. package/src/ActionGroup/ActionGroup.test.tsx +0 -83
  109. package/src/ActionGroup/ActionGroup.tsx +0 -32
  110. package/src/ActionGroup/index.ts +0 -1
  111. package/src/Alert/Alert.stories.tsx +0 -32
  112. package/src/Alert/Alert.test.tsx +0 -82
  113. package/src/Alert/Alert.tsx +0 -52
  114. package/src/Alert/index.ts +0 -1
  115. package/src/Badge/Badge.stories.tsx +0 -38
  116. package/src/Badge/Badge.test.tsx +0 -65
  117. package/src/Badge/Badge.tsx +0 -37
  118. package/src/Badge/index.ts +0 -1
  119. package/src/Box.ts +0 -2
  120. package/src/Button/Button.stories.tsx +0 -57
  121. package/src/Button/Button.test.tsx +0 -149
  122. package/src/Button/Button.tsx +0 -64
  123. package/src/Button/index.ts +0 -1
  124. package/src/Card/Card.stories.tsx +0 -41
  125. package/src/Card/Card.test.tsx +0 -71
  126. package/src/Card/Card.tsx +0 -48
  127. package/src/Card/index.ts +0 -1
  128. package/src/Checkbox/Checkbox.stories.tsx +0 -78
  129. package/src/Checkbox/Checkbox.test.tsx +0 -166
  130. package/src/Checkbox/Checkbox.tsx +0 -101
  131. package/src/Checkbox/CheckboxIcons.tsx +0 -59
  132. package/src/Checkbox/index.ts +0 -1
  133. package/src/Column/Column.stories.tsx +0 -33
  134. package/src/Column/Column.test.tsx +0 -32
  135. package/src/Column/Column.tsx +0 -27
  136. package/src/Column/index.ts +0 -1
  137. package/src/Columns/Columns.stories.tsx +0 -75
  138. package/src/Columns/Columns.test.tsx +0 -113
  139. package/src/Columns/Columns.tsx +0 -69
  140. package/src/Columns/index.ts +0 -1
  141. package/src/Container/Container.stories.tsx +0 -14
  142. package/src/Container/Container.test.tsx +0 -26
  143. package/src/Container/Container.tsx +0 -13
  144. package/src/Container/index.ts +0 -1
  145. package/src/Dialog/Dialog.stories.tsx +0 -88
  146. package/src/Dialog/Dialog.test.tsx +0 -158
  147. package/src/Dialog/Dialog.tsx +0 -130
  148. package/src/Dialog/ModalDialog.tsx +0 -76
  149. package/src/Dialog/index.ts +0 -1
  150. package/src/Divider/Divider.stories.tsx +0 -30
  151. package/src/Divider/Divider.test.tsx +0 -72
  152. package/src/Divider/Divider.tsx +0 -33
  153. package/src/Divider/index.ts +0 -1
  154. package/src/Field/Field.stories.tsx +0 -110
  155. package/src/Field/Field.test.tsx +0 -130
  156. package/src/Field/Field.tsx +0 -56
  157. package/src/Field/index.ts +0 -1
  158. package/src/Image/Image.stories.tsx +0 -34
  159. package/src/Image/Image.test.tsx +0 -73
  160. package/src/Image/Image.tsx +0 -25
  161. package/src/Image/index.ts +0 -1
  162. package/src/Inline/Inline.stories.tsx +0 -39
  163. package/src/Inline/Inline.test.tsx +0 -99
  164. package/src/Inline/Inline.tsx +0 -38
  165. package/src/Inline/index.ts +0 -1
  166. package/src/Input/Input.stories.tsx +0 -54
  167. package/src/Input/Input.test.tsx +0 -74
  168. package/src/Input/Input.tsx +0 -25
  169. package/src/Input/index.ts +0 -1
  170. package/src/Label/Label.stories.tsx +0 -41
  171. package/src/Label/Label.test.tsx +0 -109
  172. package/src/Label/Label.tsx +0 -64
  173. package/src/Label/index.ts +0 -1
  174. package/src/Link/Link.stories.tsx +0 -35
  175. package/src/Link/Link.test.tsx +0 -97
  176. package/src/Link/Link.tsx +0 -43
  177. package/src/Link/index.ts +0 -1
  178. package/src/Menu/Menu.stories.tsx +0 -62
  179. package/src/Menu/Menu.test.tsx +0 -84
  180. package/src/Menu/Menu.tsx +0 -51
  181. package/src/Menu/index.ts +0 -1
  182. package/src/MenuItem/MenuItem.stories.tsx +0 -30
  183. package/src/MenuItem/MenuItem.test.tsx +0 -68
  184. package/src/MenuItem/MenuItem.tsx +0 -35
  185. package/src/MenuItem/index.ts +0 -1
  186. package/src/Message/Message.stories.tsx +0 -30
  187. package/src/Message/Message.test.tsx +0 -90
  188. package/src/Message/Message.tsx +0 -55
  189. package/src/Message/index.ts +0 -1
  190. package/src/Provider/MarigoldProvider.test.tsx +0 -136
  191. package/src/Provider/MarigoldProvider.tsx +0 -47
  192. package/src/Provider/index.ts +0 -4
  193. package/src/Radio/Radio.stories.tsx +0 -78
  194. package/src/Radio/Radio.test.tsx +0 -154
  195. package/src/Radio/Radio.tsx +0 -88
  196. package/src/Radio/RadioIcon.tsx +0 -49
  197. package/src/Radio/index.ts +0 -1
  198. package/src/Select/ListBox.tsx +0 -40
  199. package/src/Select/ListBoxSection.tsx +0 -40
  200. package/src/Select/Option.tsx +0 -48
  201. package/src/Select/Popover.tsx +0 -50
  202. package/src/Select/Select.stories.tsx +0 -81
  203. package/src/Select/Select.test.tsx +0 -349
  204. package/src/Select/Select.tsx +0 -174
  205. package/src/Select/index.ts +0 -1
  206. package/src/Slider/Slider.stories.tsx +0 -24
  207. package/src/Slider/Slider.test.tsx +0 -63
  208. package/src/Slider/Slider.tsx +0 -35
  209. package/src/Slider/index.ts +0 -1
  210. package/src/Stack/Stack.stories.tsx +0 -57
  211. package/src/Stack/Stack.test.tsx +0 -138
  212. package/src/Stack/Stack.tsx +0 -39
  213. package/src/Stack/index.ts +0 -1
  214. package/src/Text/Text.stories.tsx +0 -61
  215. package/src/Text/Text.test.tsx +0 -99
  216. package/src/Text/Text.tsx +0 -60
  217. package/src/Text/index.ts +0 -1
  218. package/src/Textarea/Textarea.stories.tsx +0 -64
  219. package/src/Textarea/Textarea.test.tsx +0 -95
  220. package/src/Textarea/Textarea.tsx +0 -62
  221. package/src/Textarea/index.ts +0 -1
  222. package/src/ValidationMessage/ValidationMessage.stories.tsx +0 -27
  223. package/src/ValidationMessage/ValidationMessage.test.tsx +0 -68
  224. package/src/ValidationMessage/ValidationMessage.tsx +0 -40
  225. package/src/ValidationMessage/index.ts +0 -1
  226. package/src/VisuallyHidden/VisuallyHidden.stories.tsx +0 -19
  227. package/src/VisuallyHidden/VisuallyHidden.test.tsx +0 -10
  228. package/src/VisuallyHidden/VisuallyHidden.tsx +0 -1
  229. package/src/VisuallyHidden/index.ts +0 -1
  230. package/src/index.ts +0 -34
  231. package/src/theme.ts +0 -50
  232. package/tsconfig.build.json +0 -3
@@ -1,30 +0,0 @@
1
- import React from 'react';
2
- import type { Meta, ComponentStory } from '@storybook/react';
3
- import { MenuItem } from './MenuItem';
4
-
5
- export default {
6
- title: 'Components/MenuItem',
7
- parameters: {
8
- actions: {
9
- handles: ['click'],
10
- },
11
- },
12
- argTypes: {
13
- variant: {
14
- control: {
15
- type: 'text',
16
- },
17
- table: {
18
- defaultValue: {
19
- summary: 'default',
20
- },
21
- },
22
- },
23
- },
24
- } as Meta;
25
-
26
- export const Basic: ComponentStory<typeof MenuItem> = args => (
27
- <MenuItem href="#" {...args}>
28
- Home
29
- </MenuItem>
30
- );
@@ -1,68 +0,0 @@
1
- import React from 'react';
2
- import { render, screen } from '@testing-library/react';
3
- import { ThemeProvider } from '@marigold/system';
4
- import { MenuItem } from './MenuItem';
5
-
6
- const theme = {
7
- space: {
8
- none: 0,
9
- small: 4,
10
- medium: 8,
11
- },
12
- menuItem: {
13
- default: {
14
- padding: 'small',
15
- },
16
- item: {
17
- padding: 'medium',
18
- },
19
- },
20
- };
21
-
22
- test('supports default variant', () => {
23
- render(
24
- <ThemeProvider theme={theme}>
25
- <MenuItem title="menuItem">Item</MenuItem>
26
- </ThemeProvider>
27
- );
28
- const menuItem = screen.getByTitle(/menuItem/);
29
-
30
- expect(menuItem.parentElement).toHaveStyle(`padding: 4px`);
31
- });
32
-
33
- test('accepts other variant than default', () => {
34
- render(
35
- <ThemeProvider theme={theme}>
36
- <MenuItem title="menuItem" variant="item">
37
- Item
38
- </MenuItem>
39
- </ThemeProvider>
40
- );
41
- const menuItem = screen.getByTitle(/menuItem/);
42
-
43
- expect(menuItem.parentElement).toHaveStyle(`padding: 8px`);
44
- });
45
-
46
- test('renders correct HTML element', () => {
47
- render(
48
- <ThemeProvider theme={theme}>
49
- <MenuItem title="menuItem">Item</MenuItem>
50
- </ThemeProvider>
51
- );
52
- const menuItem = screen.getByTitle(/menuItem/);
53
-
54
- expect(menuItem instanceof HTMLAnchorElement).toBeTruthy();
55
- });
56
-
57
- test('accepts custom styles prop className', () => {
58
- render(
59
- <ThemeProvider theme={theme}>
60
- <MenuItem title="menuItem" className="custom-class-name">
61
- Item
62
- </MenuItem>
63
- </ThemeProvider>
64
- );
65
- const menuItem = screen.getByText(/Item/).parentElement;
66
-
67
- expect(menuItem).toHaveClass('custom-class-name');
68
- });
@@ -1,35 +0,0 @@
1
- import React from 'react';
2
- import { ComponentProps } from '@marigold/types';
3
- import { Link } from '../Link';
4
- import { Box } from '../Box';
5
-
6
- // Theme Extension
7
- // ---------------
8
- export interface MenuItemThemeExtension<Value> {
9
- menuItem?: {
10
- [key: string]: Value;
11
- };
12
- }
13
-
14
- // Props
15
- // ---------------
16
- export type MenuItemProps = {
17
- variant?: string;
18
- } & ComponentProps<typeof Link>;
19
-
20
- // Component
21
- // ---------------
22
- export const MenuItem: React.FC<MenuItemProps> = ({
23
- variant = 'default',
24
- className,
25
- children,
26
- ...props
27
- }) => {
28
- return (
29
- <Box variant={`menuItem.${variant}`} className={className}>
30
- <Link variant="menuItemLink" {...props}>
31
- {children}
32
- </Link>
33
- </Box>
34
- );
35
- };
@@ -1 +0,0 @@
1
- export * from './MenuItem';
@@ -1,30 +0,0 @@
1
- import React from 'react';
2
- import type { Meta, ComponentStory } from '@storybook/react';
3
- import { Message } from './Message';
4
- import { Text } from '../Text';
5
-
6
- export default {
7
- title: 'Components/Message',
8
- argTypes: {
9
- variant: {
10
- control: {
11
- type: 'select',
12
- },
13
- options: ['warning', 'error', 'info'],
14
- description: 'Messaging in different colors and icons',
15
- },
16
- messageTitle: {
17
- control: {
18
- type: 'text',
19
- },
20
- description: 'Content',
21
- defaultValue: 'Danger Zone!',
22
- },
23
- },
24
- } as Meta;
25
-
26
- export const Basic: ComponentStory<typeof Message> = args => (
27
- <Message {...args}>
28
- <Text>Hello, I am a simple message.</Text>
29
- </Message>
30
- );
@@ -1,90 +0,0 @@
1
- import React from 'react';
2
- import { render, screen } from '@testing-library/react';
3
- import { ThemeProvider } from '@marigold/system';
4
- import { Message } from './Message';
5
-
6
- const theme = {
7
- colors: {
8
- primary: 'hotpink',
9
- },
10
- message: {
11
- info: {
12
- alignItems: 'center',
13
- },
14
- warning: {
15
- alignItems: 'right',
16
- },
17
- error: {
18
- alignItems: 'left',
19
- },
20
- },
21
- };
22
-
23
- test('supports default variant and themeSection', () => {
24
- render(
25
- <ThemeProvider theme={theme}>
26
- <Message data-testid="messages" messageTitle="Default">
27
- Default
28
- </Message>
29
- </ThemeProvider>
30
- );
31
- const message = screen.getByTestId(/messages/);
32
-
33
- expect(message).toHaveStyle(`align-items: center`);
34
- });
35
-
36
- test('accepts other variant than default', () => {
37
- render(
38
- <ThemeProvider theme={theme}>
39
- <Message data-testid="messages" messageTitle="info" variant="warning">
40
- Danger
41
- </Message>
42
- </ThemeProvider>
43
- );
44
- const message = screen.getByTestId(/messages/);
45
-
46
- expect(message).toHaveStyle(`align-items: right`);
47
- });
48
-
49
- test('accepts other third variant than default', () => {
50
- render(
51
- <ThemeProvider theme={theme}>
52
- <Message data-testid="messages" messageTitle="error" variant="error">
53
- error
54
- </Message>
55
- </ThemeProvider>
56
- );
57
- const message = screen.getByTestId(/messages/);
58
-
59
- expect(message).toHaveStyle(`align-items: left`);
60
- });
61
-
62
- test('renders correct HTML element', () => {
63
- render(
64
- <ThemeProvider theme={theme}>
65
- <Message data-testid="messages" messageTitle="messages">
66
- Default
67
- </Message>
68
- </ThemeProvider>
69
- );
70
- const message = screen.getByTestId(/messages/);
71
-
72
- expect(message instanceof HTMLDivElement).toBeTruthy();
73
- });
74
-
75
- test('accepts custom styles prop className', () => {
76
- render(
77
- <ThemeProvider theme={theme}>
78
- <Message
79
- className="custom-class-name"
80
- data-testid="message"
81
- messageTitle="message"
82
- >
83
- message
84
- </Message>
85
- </ThemeProvider>
86
- );
87
- const message = screen.getByTestId(/message/);
88
-
89
- expect(message.className).toMatch('custom-class-name');
90
- });
@@ -1,55 +0,0 @@
1
- import React from 'react';
2
- import { Exclamation, Info, Notification } from '@marigold/icons';
3
- import { ComponentProps } from '@marigold/types';
4
- import { Box } from '../Box';
5
- import { Text } from '../Text';
6
-
7
- // Theme Extension
8
- // ---------------
9
- export interface MessageThemeExtension<Value> {
10
- message?: {
11
- [key: string]: Value;
12
- };
13
- }
14
-
15
- // Props
16
- // ---------------
17
- export type MessageProps = {
18
- messageTitle: string;
19
- variant?: string;
20
- } & ComponentProps<'div'>;
21
-
22
- // Component
23
- // ---------------
24
- export const Message: React.FC<MessageProps> = ({
25
- messageTitle,
26
- variant = 'info',
27
- className,
28
- children,
29
- ...props
30
- }) => {
31
- var icon = <Info />;
32
- if (variant === 'warning') {
33
- icon = <Notification />;
34
- }
35
- if (variant === 'error') {
36
- icon = <Exclamation />;
37
- }
38
-
39
- return (
40
- <Box
41
- display="inline-block"
42
- variant={`message.${variant}`}
43
- className={className}
44
- {...props}
45
- >
46
- <Box display="flex" alignItems="center" variant="message.title">
47
- {icon}
48
- <Text as="h4" variant="headline4">
49
- {messageTitle}
50
- </Text>
51
- </Box>
52
- <Box css={{ color: 'black' }}>{children}</Box>
53
- </Box>
54
- );
55
- };
@@ -1 +0,0 @@
1
- export * from './Message';
@@ -1,136 +0,0 @@
1
- import React from 'react';
2
- import { useTheme } from '@marigold/system';
3
- import { render, screen } from '@testing-library/react';
4
-
5
- import { MarigoldProvider } from './MarigoldProvider';
6
-
7
- // Setup
8
- // ---------------
9
- const theme = {
10
- colors: {
11
- black: '#000',
12
- },
13
- fontSizes: {
14
- body: 16,
15
- heading: 32,
16
- },
17
- text: {
18
- body: {
19
- fontSize: 'body',
20
- color: 'black',
21
- },
22
- },
23
- };
24
-
25
- test('themes can be cascaded', () => {
26
- const outerTheme = {
27
- colors: {
28
- primary: 'coral',
29
- },
30
- };
31
-
32
- const innerTheme = {
33
- colors: {
34
- primary: 'gainsboro',
35
- },
36
- };
37
-
38
- const Theme = ({ testId }: { testId: string }) => {
39
- const { theme } = useTheme();
40
- return <div data-testid={testId}>{JSON.stringify(theme, null, 2)}</div>;
41
- };
42
-
43
- render(
44
- <MarigoldProvider theme={outerTheme}>
45
- <>
46
- <Theme testId="outer" />
47
- <MarigoldProvider theme={innerTheme}>
48
- <Theme testId="inner" />
49
- </MarigoldProvider>
50
- </>
51
- </MarigoldProvider>
52
- );
53
-
54
- const outer = screen.getByTestId('outer');
55
- const inner = screen.getByTestId('inner');
56
-
57
- expect(outer.innerHTML).toMatchInlineSnapshot(`
58
- "{
59
- \\"colors\\": {
60
- \\"primary\\": \\"coral\\"
61
- }
62
- }"
63
- `);
64
- expect(inner.innerHTML).toMatchInlineSnapshot(`
65
- "{
66
- \\"colors\\": {
67
- \\"primary\\": \\"gainsboro\\"
68
- }
69
- }"
70
- `);
71
- });
72
-
73
- test('OverlayProvider is added', () => {
74
- const { container } = render(
75
- <MarigoldProvider theme={theme}>Test</MarigoldProvider>
76
- );
77
-
78
- expect(
79
- container.querySelector(`div[data-overlay-container="true"]`)
80
- ).toBeDefined();
81
- });
82
-
83
- test('OverlayProvider is added only once', () => {
84
- const innerTheme = { colors: { primary: 'red' } };
85
- const { container } = render(
86
- <MarigoldProvider theme={theme}>
87
- <MarigoldProvider theme={innerTheme}>Test</MarigoldProvider>
88
- </MarigoldProvider>
89
- );
90
-
91
- expect(
92
- container.querySelectorAll(`div[data-overlay-container="true"]`).length
93
- ).toEqual(1);
94
- });
95
-
96
- test('applies global styles for body and html based on `theme.root`', () => {
97
- const theme = {
98
- fonts: {
99
- body: 'Inter',
100
- html: 'Roboto',
101
- },
102
- lineHeights: {
103
- body: 2.5,
104
- },
105
- fontWeights: {
106
- body: 500,
107
- html: 700,
108
- },
109
- root: {
110
- body: {
111
- fontFamily: 'body',
112
- lineHeight: 'body',
113
- fontWeight: 'body',
114
- },
115
- html: {
116
- fontFamily: 'html',
117
- fontWeight: 'html',
118
- },
119
- },
120
- };
121
-
122
- const root = render(
123
- <MarigoldProvider theme={theme}>
124
- <h1>Hello</h1>
125
- </MarigoldProvider>
126
- );
127
-
128
- const html = root.baseElement.parentElement;
129
- expect(html).toHaveStyle(`font-family: ${theme.fonts.html}`);
130
- expect(html).toHaveStyle(`font-weight: ${theme.fontWeights.html}`);
131
-
132
- const body = root.baseElement;
133
- expect(body).toHaveStyle(`font-family: ${theme.fonts.body}`);
134
- expect(body).toHaveStyle(`font-weight: ${theme.fontWeights.body}`);
135
- expect(body).toHaveStyle(`line-height: ${theme.lineHeights.body}`);
136
- });
@@ -1,47 +0,0 @@
1
- import React from 'react';
2
- import { OverlayProvider } from '@react-aria/overlays';
3
- import {
4
- Theme,
5
- Global,
6
- ThemeProvider,
7
- ThemeProviderProps,
8
- useTheme,
9
- __defaultTheme,
10
- } from '@marigold/system';
11
-
12
- // Theme Extension
13
- // ---------------
14
- export interface RootThemeExtension<Value> {
15
- root?: {
16
- body?: Value;
17
- html?: Value;
18
- };
19
- }
20
-
21
- // Props
22
- // ---------------
23
- export interface MarigoldProviderProps<T extends Theme>
24
- extends ThemeProviderProps<T> {}
25
-
26
- // Provider
27
- // ---------------
28
- export function MarigoldProvider<T extends Theme>({
29
- theme,
30
- children,
31
- }: MarigoldProviderProps<T>) {
32
- const outer = useTheme();
33
- const isTopLevel = outer.theme === __defaultTheme;
34
-
35
- return (
36
- <ThemeProvider theme={theme}>
37
- {isTopLevel ? (
38
- <>
39
- <Global />
40
- <OverlayProvider>{children}</OverlayProvider>
41
- </>
42
- ) : (
43
- children
44
- )}
45
- </ThemeProvider>
46
- );
47
- }
@@ -1,4 +0,0 @@
1
- export { useTheme, ThemeProvider } from '@marigold/system';
2
- export { SSRProvider } from '@react-aria/ssr';
3
-
4
- export * from './MarigoldProvider';
@@ -1,78 +0,0 @@
1
- import React, { useState } from 'react';
2
- import type { Meta, ComponentStory } from '@storybook/react';
3
-
4
- import { Radio } from './Radio';
5
-
6
- export default {
7
- title: 'Components/Radio',
8
- parameters: {
9
- actions: {
10
- handles: ['click'],
11
- },
12
- },
13
- argTypes: {
14
- variant: {
15
- control: {
16
- type: 'text',
17
- },
18
- description: 'Radio variant',
19
- defaultValue: '__default',
20
- },
21
- labelVariant: {
22
- control: {
23
- type: 'text',
24
- },
25
- description: 'Radio label variant',
26
- defaultValue: 'inline',
27
- },
28
- label: {
29
- control: {
30
- type: 'text',
31
- },
32
- description: 'Label',
33
- defaultValue: 'Radio Label',
34
- },
35
- required: {
36
- control: {
37
- type: 'boolean',
38
- },
39
- description: 'Required',
40
- defaultValue: false,
41
- },
42
- disabled: {
43
- control: {
44
- type: 'boolean',
45
- },
46
- description: 'Disabled',
47
- defaultValue: false,
48
- },
49
- error: {
50
- control: {
51
- type: 'boolean',
52
- },
53
- description: 'Error',
54
- defaultValue: false,
55
- },
56
- errorMessage: {
57
- control: {
58
- type: 'text',
59
- },
60
- description: 'Error Message',
61
- },
62
- },
63
- } as Meta;
64
-
65
- export const Basic: ComponentStory<typeof Radio> = ({
66
- onChange,
67
- checked,
68
- ...args
69
- }) => {
70
- const [isChecked, setChecked] = useState(false);
71
- return (
72
- <Radio
73
- onChange={() => setChecked(!isChecked)}
74
- checked={isChecked}
75
- {...args}
76
- />
77
- );
78
- };