@marigold/components 0.3.0 → 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 +66 -161
  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 +31 -11
  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 -18
  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 -12
  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 -21
  72. package/dist/Radio/RadioIcons.d.ts +0 -10
  73. package/dist/Radio/index.d.ts +0 -1
  74. package/dist/Select/ListBox.d.ts +0 -9
  75. package/dist/Select/ListBoxSection.d.ts +0 -9
  76. package/dist/Select/Option.d.ts +0 -9
  77. package/dist/Select/Popover.d.ts +0 -9
  78. package/dist/Select/Select.d.ts +0 -27
  79. package/dist/Select/Select.stories.d.ts +0 -5
  80. package/dist/Select/index.d.ts +0 -1
  81. package/dist/Slider/Slider.d.ts +0 -11
  82. package/dist/Slider/Slider.stories.d.ts +0 -5
  83. package/dist/Slider/index.d.ts +0 -1
  84. package/dist/Stack/Stack.d.ts +0 -7
  85. package/dist/Stack/Stack.stories.d.ts +0 -5
  86. package/dist/Stack/index.d.ts +0 -1
  87. package/dist/Text/Text.d.ts +0 -17
  88. package/dist/Text/Text.stories.d.ts +0 -5
  89. package/dist/Text/index.d.ts +0 -1
  90. package/dist/Textarea/Textarea.d.ts +0 -16
  91. package/dist/Textarea/Textarea.stories.d.ts +0 -5
  92. package/dist/Textarea/index.d.ts +0 -1
  93. package/dist/ValidationMessage/ValidationMessage.d.ts +0 -11
  94. package/dist/ValidationMessage/ValidationMessage.stories.d.ts +0 -5
  95. package/dist/ValidationMessage/index.d.ts +0 -1
  96. package/dist/VisuallyHidden/VisuallyHidden.d.ts +0 -1
  97. package/dist/VisuallyHidden/VisuallyHidden.stories.d.ts +0 -5
  98. package/dist/VisuallyHidden/index.d.ts +0 -1
  99. package/dist/components.cjs.development.js +0 -1422
  100. package/dist/components.cjs.development.js.map +0 -1
  101. package/dist/components.cjs.production.min.js +0 -2
  102. package/dist/components.cjs.production.min.js.map +0 -1
  103. package/dist/components.esm.js +0 -1348
  104. package/dist/components.esm.js.map +0 -1
  105. package/dist/theme.d.ts +0 -23
  106. package/src/ActionGroup/ActionGroup.stories.tsx +0 -47
  107. package/src/ActionGroup/ActionGroup.test.tsx +0 -83
  108. package/src/ActionGroup/ActionGroup.tsx +0 -32
  109. package/src/ActionGroup/index.ts +0 -1
  110. package/src/Alert/Alert.stories.tsx +0 -32
  111. package/src/Alert/Alert.test.tsx +0 -82
  112. package/src/Alert/Alert.tsx +0 -52
  113. package/src/Alert/index.ts +0 -1
  114. package/src/Badge/Badge.stories.tsx +0 -38
  115. package/src/Badge/Badge.test.tsx +0 -65
  116. package/src/Badge/Badge.tsx +0 -37
  117. package/src/Badge/index.ts +0 -1
  118. package/src/Box.ts +0 -2
  119. package/src/Button/Button.stories.tsx +0 -57
  120. package/src/Button/Button.test.tsx +0 -149
  121. package/src/Button/Button.tsx +0 -64
  122. package/src/Button/index.ts +0 -1
  123. package/src/Card/Card.stories.tsx +0 -41
  124. package/src/Card/Card.test.tsx +0 -71
  125. package/src/Card/Card.tsx +0 -48
  126. package/src/Card/index.ts +0 -1
  127. package/src/Checkbox/Checkbox.stories.mdx +0 -97
  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 -71
  152. package/src/Divider/Divider.tsx +0 -25
  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 -42
  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.mdx +0 -97
  194. package/src/Radio/Radio.test.tsx +0 -119
  195. package/src/Radio/Radio.tsx +0 -128
  196. package/src/Radio/RadioIcons.tsx +0 -39
  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,97 +0,0 @@
1
- import { ArgsTable, Canvas, Meta, Story } from '@storybook/addon-docs';
2
- import { Radio } from './Radio';
3
- import { useState } from 'react';
4
-
5
- <Meta
6
- title="Components/Radio"
7
- parameters={{
8
- actions: {
9
- handles: ['click'],
10
- },
11
- }}
12
- argTypes={{
13
- id: {
14
- control: {
15
- type: 'text',
16
- },
17
- type: { required: true },
18
- description: 'Unique ID',
19
- },
20
- variant: {
21
- control: {
22
- type: 'text',
23
- },
24
- description: 'Radio variant',
25
- table: {
26
- defaultValue: {
27
- summary: 'default',
28
- },
29
- },
30
- },
31
- labelVariant: {
32
- control: {
33
- type: 'text',
34
- },
35
- description: 'Radio label variant',
36
- table: {
37
- defaultValue: {
38
- summary: 'inline',
39
- },
40
- },
41
- },
42
- label: {
43
- control: {
44
- type: 'text',
45
- },
46
- description: 'Label',
47
- },
48
- required: {
49
- control: {
50
- type: 'boolean',
51
- },
52
- description: 'Require',
53
- table: {
54
- defaultValue: {
55
- summary: false,
56
- },
57
- },
58
- },
59
- error: {
60
- control: {
61
- type: 'boolean',
62
- },
63
- description: 'Error',
64
- table: {
65
- defaultValue: {
66
- summary: false,
67
- },
68
- },
69
- },
70
- errorMessage: {
71
- control: {
72
- type: 'text',
73
- },
74
- description: 'Error Message',
75
- },
76
- }}
77
- />
78
-
79
- # Radio
80
-
81
- export const Template = ({ onChange, checked, ...args }) => {
82
- const [isChecked, setChecked] = useState(false);
83
- return (
84
- <Radio
85
- onChange={() => setChecked(!isChecked)}
86
- checked={isChecked}
87
- label="Radio Label"
88
- {...args}
89
- />
90
- );
91
- };
92
-
93
- <Canvas>
94
- <Story name="Default">{Template.bind({})}</Story>
95
- </Canvas>
96
-
97
- <ArgsTable story="Default" />