@automattic/vip-design-system 2.5.0 → 2.7.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 (83) hide show
  1. package/build/system/Card/Card.d.ts +9 -1
  2. package/build/system/Card/Card.js +25 -4
  3. package/build/system/Card/Card.stories.d.ts +5 -0
  4. package/build/system/Card/Card.stories.js +34 -2
  5. package/build/system/Card/Card.test.js +25 -0
  6. package/build/system/Dropdown/Dropdown.d.ts +25 -36
  7. package/build/system/Dropdown/Dropdown.js +60 -99
  8. package/build/system/Dropdown/Dropdown.stories.d.ts +1 -26
  9. package/build/system/Dropdown/Dropdown.test.js +51 -28
  10. package/build/system/Dropdown/DropdownContent.d.ts +14 -10
  11. package/build/system/Dropdown/DropdownContent.js +43 -47
  12. package/build/system/Dropdown/DropdownItem.d.ts +20 -32
  13. package/build/system/Dropdown/DropdownItem.js +86 -103
  14. package/build/system/Dropdown/DropdownLabel.d.ts +11 -7
  15. package/build/system/Dropdown/DropdownLabel.js +29 -29
  16. package/build/system/Dropdown/DropdownSeparator.d.ts +10 -6
  17. package/build/system/Dropdown/DropdownSeparator.js +28 -28
  18. package/build/system/Dropdown/index.d.ts +17 -39
  19. package/build/system/Dropdown/index.js +23 -50
  20. package/build/system/FilterDropdown/FilterDropdown.d.ts +27 -0
  21. package/build/system/FilterDropdown/FilterDropdown.js +75 -0
  22. package/build/system/FilterDropdown/FilterDropdown.stories.d.ts +18 -0
  23. package/build/system/FilterDropdown/FilterDropdown.stories.js +46 -0
  24. package/build/system/FilterDropdown/FilterDropdown.test.d.ts +1 -0
  25. package/build/system/FilterDropdown/FilterDropdown.test.js +53 -0
  26. package/build/system/Hr/Hr.d.ts +7 -0
  27. package/build/system/Hr/Hr.js +22 -0
  28. package/build/system/Hr/Hr.stories.d.ts +23 -0
  29. package/build/system/Hr/Hr.stories.js +30 -0
  30. package/build/system/Hr/Hr.test.d.ts +1 -0
  31. package/build/system/Hr/Hr.test.js +41 -0
  32. package/build/system/Page/Page.d.ts +2 -0
  33. package/build/system/Page/Page.js +10 -0
  34. package/build/system/Page/Page.test.d.ts +1 -0
  35. package/build/system/Page/Page.test.js +41 -0
  36. package/build/system/index.d.ts +3 -1
  37. package/build/system/index.js +4 -0
  38. package/build/system/theme/index.d.ts +84 -33
  39. package/build/system/theme/index.js +32 -5
  40. package/package.json +1 -1
  41. package/src/system/Card/Card.stories.tsx +19 -1
  42. package/src/system/Card/Card.test.tsx +11 -0
  43. package/src/system/Card/Card.tsx +43 -14
  44. package/src/system/Dropdown/{Dropdown.test.js → Dropdown.test.tsx} +2 -1
  45. package/src/system/Dropdown/Dropdown.tsx +72 -0
  46. package/src/system/Dropdown/DropdownContent.tsx +46 -0
  47. package/src/system/Dropdown/DropdownItem.tsx +112 -0
  48. package/src/system/Dropdown/DropdownLabel.tsx +29 -0
  49. package/src/system/Dropdown/DropdownSeparator.tsx +28 -0
  50. package/src/system/Dropdown/{index.js → index.ts} +1 -3
  51. package/src/system/FilterDropdown/FilterDropdown.stories.tsx +57 -0
  52. package/src/system/FilterDropdown/FilterDropdown.test.tsx +52 -0
  53. package/src/system/FilterDropdown/FilterDropdown.tsx +92 -0
  54. package/src/system/Hr/Hr.stories.tsx +48 -0
  55. package/src/system/Hr/Hr.test.tsx +22 -0
  56. package/src/system/Hr/Hr.tsx +11 -0
  57. package/src/system/Page/Page.test.tsx +22 -0
  58. package/src/system/Page/Page.tsx +3 -0
  59. package/src/system/index.js +4 -0
  60. package/src/system/theme/index.js +32 -5
  61. package/tokens/valet-core/$metadata.json +1 -17
  62. package/tokens/valet-core/$themes.json +0 -2586
  63. package/src/system/Dropdown/Dropdown.js +0 -101
  64. package/src/system/Dropdown/DropdownContent.js +0 -50
  65. package/src/system/Dropdown/DropdownItem.js +0 -108
  66. package/src/system/Dropdown/DropdownLabel.js +0 -31
  67. package/src/system/Dropdown/DropdownSeparator.js +0 -30
  68. package/tokens/valet-core/figma-parsely-web-type.json +0 -1217
  69. package/tokens/valet-core/figma-valet-web-type.json +0 -1217
  70. package/tokens/valet-core/figma-wpvip-services-web-type.json +0 -1267
  71. package/tokens/valet-core/figma-wpvip-web-type.json +0 -1213
  72. package/tokens/valet-core/parsely-web-color.json +0 -729
  73. package/tokens/valet-core/parsely-web-core.json +0 -172
  74. package/tokens/valet-core/parsely-web-type.json +0 -362
  75. package/tokens/valet-core/valet-web-color.json +0 -677
  76. package/tokens/valet-core/valet-web-core.json +0 -172
  77. package/tokens/valet-core/wpvip-services-web-color.json +0 -730
  78. package/tokens/valet-core/wpvip-services-web-core.json +0 -172
  79. package/tokens/valet-core/wpvip-services-web-type.json +0 -412
  80. package/tokens/valet-core/wpvip-web-color-dark.json +0 -735
  81. package/tokens/valet-core/wpvip-web-color.json +0 -730
  82. package/tokens/valet-core/wpvip-web-type.json +0 -412
  83. package/tokens/valet-core/wpvip-web.json +0 -1310
@@ -33,29 +33,72 @@ declare namespace _default {
33
33
  }
34
34
  export namespace cards {
35
35
  namespace primary {
36
- let padding: number;
37
36
  let borderRadius: number;
38
37
  let backgroundColor: string;
39
38
  let boxShadow: string;
39
+ namespace header {
40
+ let backgroundColor_1: string;
41
+ export { backgroundColor_1 as backgroundColor };
42
+ export let borderTopLeftRadius: number;
43
+ export let borderTopRightRadius: number;
44
+ export let p: number;
45
+ export let fontWeight: string;
46
+ export let display: string;
47
+ }
48
+ namespace children {
49
+ let p_1: number;
50
+ export { p_1 as p };
51
+ }
40
52
  }
41
53
  namespace secondary {
42
54
  let borderRadius_1: number;
43
55
  export { borderRadius_1 as borderRadius };
44
- export let p: number;
45
56
  let boxShadow_1: string;
46
57
  export { boxShadow_1 as boxShadow };
47
58
  export let border: string;
48
59
  export let borderColor: string;
60
+ export namespace header_1 {
61
+ let backgroundColor_2: string;
62
+ export { backgroundColor_2 as backgroundColor };
63
+ let borderTopLeftRadius_1: number;
64
+ export { borderTopLeftRadius_1 as borderTopLeftRadius };
65
+ let borderTopRightRadius_1: number;
66
+ export { borderTopRightRadius_1 as borderTopRightRadius };
67
+ let p_2: number;
68
+ export { p_2 as p };
69
+ let fontWeight_1: string;
70
+ export { fontWeight_1 as fontWeight };
71
+ let display_1: string;
72
+ export { display_1 as display };
73
+ }
74
+ export { header_1 as header };
75
+ export namespace children_1 {
76
+ let p_3: number;
77
+ export { p_3 as p };
78
+ }
79
+ export { children_1 as children };
49
80
  }
50
81
  namespace indent {
51
82
  let borderRadius_2: number;
52
83
  export { borderRadius_2 as borderRadius };
53
- let p_1: number;
54
- export { p_1 as p };
55
84
  let boxShadow_2: string;
56
85
  export { boxShadow_2 as boxShadow };
57
- let backgroundColor_1: string;
58
- export { backgroundColor_1 as backgroundColor };
86
+ let backgroundColor_3: string;
87
+ export { backgroundColor_3 as backgroundColor };
88
+ export namespace header_2 {
89
+ let display_2: string;
90
+ export { display_2 as display };
91
+ let fontWeight_2: string;
92
+ export { fontWeight_2 as fontWeight };
93
+ let p_4: number;
94
+ export { p_4 as p };
95
+ }
96
+ export { header_2 as header };
97
+ export namespace children_2 {
98
+ let p_5: number;
99
+ export { p_5 as p };
100
+ }
101
+ export { children_2 as children };
59
102
  }
60
103
  }
61
104
  export namespace buttons {
@@ -112,7 +155,7 @@ declare namespace _default {
112
155
  borderColor: string;
113
156
  };
114
157
  };
115
- export let display: {
158
+ let display_3: {
116
159
  variant: string;
117
160
  color: string;
118
161
  bg: string;
@@ -125,6 +168,7 @@ declare namespace _default {
125
168
  borderColor: string;
126
169
  };
127
170
  };
171
+ export { display_3 as display };
128
172
  export let ghost: {
129
173
  variant: string;
130
174
  color: string;
@@ -1081,8 +1125,8 @@ declare namespace _default {
1081
1125
  export let top: string;
1082
1126
  export let left: string;
1083
1127
  export let maxWidth: string;
1084
- let backgroundColor_2: string;
1085
- export { backgroundColor_2 as backgroundColor };
1128
+ let backgroundColor_4: string;
1129
+ export { backgroundColor_4 as backgroundColor };
1086
1130
  let boxShadow_3: string;
1087
1131
  export { boxShadow_3 as boxShadow };
1088
1132
  }
@@ -1100,15 +1144,15 @@ declare namespace _default {
1100
1144
  export { borderRadius_3 as borderRadius };
1101
1145
  let boxShadow_4: string;
1102
1146
  export { boxShadow_4 as boxShadow };
1103
- let backgroundColor_3: string;
1104
- export { backgroundColor_3 as backgroundColor };
1147
+ let backgroundColor_5: string;
1148
+ export { backgroundColor_5 as backgroundColor };
1105
1149
  }
1106
1150
  export { sidebar_1 as sidebar };
1107
1151
  export namespace cover {
1108
1152
  let position_2: string;
1109
1153
  export { position_2 as position };
1110
- let backgroundColor_4: string;
1111
- export { backgroundColor_4 as backgroundColor };
1154
+ let backgroundColor_6: string;
1155
+ export { backgroundColor_6 as backgroundColor };
1112
1156
  export let width: string;
1113
1157
  let left_2: number;
1114
1158
  export { left_2 as left };
@@ -1168,32 +1212,39 @@ declare namespace _default {
1168
1212
  };
1169
1213
  };
1170
1214
  export namespace styles {
1171
- let root: {
1172
- fontFamily: string;
1173
- lineHeight: string;
1174
- fontWeight: string;
1175
- color: string;
1176
- backgroundColor: string;
1177
- '-webkit-font-smoothing': string;
1178
- '-moz-osx-font-smoothing': string;
1179
- a: {
1215
+ namespace root {
1216
+ export let fontFamily: string;
1217
+ export let lineHeight: string;
1218
+ let fontWeight_3: string;
1219
+ export { fontWeight_3 as fontWeight };
1220
+ let color_1: string;
1221
+ export { color_1 as color };
1222
+ let backgroundColor_7: string;
1223
+ export { backgroundColor_7 as backgroundColor };
1224
+ export let webkitFontSmoothing: string;
1225
+ export let mozOsxFontmoothing: string;
1226
+ export let a: {
1180
1227
  '&:hover': {
1181
1228
  textDecorationLine: string;
1182
1229
  textDecorationThickness: string;
1183
1230
  textUnderlineOffset: string;
1184
1231
  };
1185
1232
  };
1186
- svg: {
1187
- fill: string;
1188
- display: string;
1189
- };
1190
- pre: {
1191
- fontFamily: string;
1192
- };
1193
- p: {
1194
- color: string;
1195
- };
1196
- };
1233
+ export namespace svg {
1234
+ export let fill: string;
1235
+ let display_4: string;
1236
+ export { display_4 as display };
1237
+ }
1238
+ export namespace pre {
1239
+ let fontFamily_1: string;
1240
+ export { fontFamily_1 as fontFamily };
1241
+ }
1242
+ export namespace p_6 {
1243
+ let color_2: string;
1244
+ export { color_2 as color };
1245
+ }
1246
+ export { p_6 as p };
1247
+ }
1197
1248
  }
1198
1249
  }
1199
1250
  export default _default;
@@ -250,23 +250,50 @@ export default {
250
250
 
251
251
  cards: {
252
252
  primary: {
253
- padding: 3,
254
253
  borderRadius: 2,
255
254
  backgroundColor: 'layer.2',
256
255
  boxShadow: 'low',
256
+ header: {
257
+ backgroundColor: 'layer.1',
258
+ borderTopLeftRadius: 2,
259
+ borderTopRightRadius: 2,
260
+ p: 3,
261
+ fontWeight: 'bold',
262
+ display: 'flex',
263
+ },
264
+ children: {
265
+ p: 3,
266
+ },
257
267
  },
258
268
  secondary: {
259
269
  borderRadius: 2,
260
- p: 3,
261
270
  boxShadow: 'none',
262
271
  border: '1px solid',
263
272
  borderColor: 'borders.2',
273
+ header: {
274
+ backgroundColor: 'layer.1',
275
+ borderTopLeftRadius: 2,
276
+ borderTopRightRadius: 2,
277
+ p: 3,
278
+ fontWeight: 'bold',
279
+ display: 'flex',
280
+ },
281
+ children: {
282
+ p: 3,
283
+ },
264
284
  },
265
285
  indent: {
266
286
  borderRadius: 2,
267
- p: 3,
268
287
  boxShadow: 'none',
269
288
  backgroundColor: 'backgroundMuted',
289
+ header: {
290
+ display: 'flex',
291
+ fontWeight: 'bold',
292
+ p: 3,
293
+ },
294
+ children: {
295
+ p: 3,
296
+ },
270
297
  },
271
298
  },
272
299
 
@@ -525,8 +552,8 @@ export default {
525
552
  fontWeight: 'body',
526
553
  color: 'text',
527
554
  backgroundColor: 'backgrounds.primary',
528
- '-webkit-font-smoothing': 'antialiased',
529
- '-moz-osx-font-smoothing': 'grayscale',
555
+ webkitFontSmoothing: 'antialiased',
556
+ mozOsxFontmoothing: 'grayscale',
530
557
  a: {
531
558
  '&:hover': {
532
559
  textDecorationLine: 'underline',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automattic/vip-design-system",
3
- "version": "2.5.0",
3
+ "version": "2.7.0",
4
4
  "main": "build/system/index.js",
5
5
  "scripts": {
6
6
  "build-storybook": "storybook build",
@@ -8,4 +8,22 @@ export default {
8
8
  component: Card,
9
9
  };
10
10
 
11
- export const Default = () => <Card> Hello </Card>;
11
+ export const Default = () => <Card>Hello</Card>;
12
+
13
+ export const WithHeader = () => <Card header="Header">This is a card with a header.</Card>;
14
+
15
+ export const DefaultSecondary = () => <Card variant="secondary">Hello</Card>;
16
+
17
+ export const WithHeaderSecondary = () => (
18
+ <Card header="Header" variant="secondary">
19
+ This is a card with a header.
20
+ </Card>
21
+ );
22
+
23
+ export const DefaultIndent = () => <Card variant="indent">Hello</Card>;
24
+
25
+ export const WithHeaderIndent = () => (
26
+ <Card header="Header" variant="indent">
27
+ This is a card with a header.
28
+ </Card>
29
+ );
@@ -29,4 +29,15 @@ describe( '<Card />', () => {
29
29
  // Check for accessibility issues
30
30
  expect( await axe( container ) ).toHaveNoViolations();
31
31
  } );
32
+
33
+ it( 'renders the Card component with a header', async () => {
34
+ const { container } = render( <Card header="Card Header">Card text</Card> );
35
+
36
+ expect( screen.getByText( 'Card Header' ) ).toBeInTheDocument();
37
+
38
+ expect( screen.getByText( 'Card text' ) ).toBeInTheDocument();
39
+
40
+ // Check for accessibility issues
41
+ expect( await axe( container ) ).toHaveNoViolations();
42
+ } );
32
43
  } );
@@ -1,3 +1,5 @@
1
+ /** @jsxImportSource theme-ui */
2
+
1
3
  /**
2
4
  * External dependencies
3
5
  */
@@ -10,30 +12,57 @@ import { BoxProps } from 'theme-ui';
10
12
  */
11
13
  import { Box } from '..';
12
14
 
15
+ export enum CardVariant {
16
+ 'primary',
17
+ 'secondary',
18
+ 'indent',
19
+ }
20
+
13
21
  export interface CardProps {
14
- variant?: string;
22
+ variant?: keyof typeof CardVariant;
15
23
  sx?: BoxProps[ 'sx' ];
16
24
  className?: Argument;
25
+ header?: React.ReactNode;
26
+ children?: React.ReactNode;
17
27
  }
18
28
 
19
29
  type CardBoxProps = CardProps & BoxProps;
20
30
 
21
31
  export const Card = forwardRef< HTMLElement, CardBoxProps >(
22
32
  (
23
- { variant = 'primary', sx = {}, className, ...props }: CardBoxProps,
33
+ { variant = 'primary', header, sx = {}, className, children, ...props }: CardProps,
24
34
  ref: Ref< HTMLElement >
25
- ) => (
26
- <Box
27
- ref={ ref }
28
- sx={ {
29
- // pass variant prop to sx
30
- variant: `cards.${ variant }`,
31
- ...sx,
32
- } }
33
- className={ classNames( 'vip-card-component', className ) }
34
- { ...props }
35
- />
36
- )
35
+ ) => {
36
+ return (
37
+ <Box
38
+ ref={ ref }
39
+ sx={ {
40
+ // pass variant prop to sx
41
+ variant: `cards.${ variant }`,
42
+ ...sx,
43
+ } }
44
+ className={ classNames( 'vip-card-component', className ) }
45
+ { ...props }
46
+ >
47
+ { header && (
48
+ <div
49
+ sx={ {
50
+ variant: `cards.${ variant }.header`,
51
+ } }
52
+ >
53
+ { header }
54
+ </div>
55
+ ) }
56
+ <div
57
+ sx={ {
58
+ variant: `cards.${ variant }.children`,
59
+ } }
60
+ >
61
+ { children }
62
+ </div>
63
+ </Box>
64
+ );
65
+ }
37
66
  );
38
67
 
39
68
  Card.displayName = 'Card';
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { fireEvent, render, screen } from '@testing-library/react';
5
5
  import { axe } from 'jest-axe';
6
+ import React from 'react';
6
7
 
7
8
  /**
8
9
  * Internal dependencies
@@ -28,6 +29,6 @@ describe( '<Dropdown />', () => {
28
29
  fireEvent.click( getButton() );
29
30
 
30
31
  // Check for accessibility issues
31
- await expect( await axe( container ) ).toHaveNoViolations();
32
+ expect( await axe( container ) ).toHaveNoViolations();
32
33
  } );
33
34
  } );
@@ -0,0 +1,72 @@
1
+ /** @jsxImportSource theme-ui */
2
+
3
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
4
+ import React, { ReactNode } from 'react';
5
+
6
+ import { DropdownContent, DropdownContentProps } from './DropdownContent';
7
+
8
+ const DropdownMenu = DropdownMenuPrimitive.Root;
9
+ const DropdownTrigger = DropdownMenuPrimitive.Trigger;
10
+ const DropdownRadioGroup = DropdownMenuPrimitive.RadioGroup;
11
+ const DropdownItemIndicator = DropdownMenuPrimitive.DropdownMenuItemIndicator;
12
+ const DropdownLabel = DropdownMenuPrimitive.DropdownMenuLabel;
13
+ const DropdownSeparator = DropdownMenuPrimitive.DropdownMenuSeparator;
14
+ const DropdownSub = DropdownMenuPrimitive.DropdownMenuSub;
15
+ const DropdownSubTrigger = DropdownMenuPrimitive.DropdownMenuSubTrigger;
16
+ const DropdownSubContent = DropdownMenuPrimitive.DropdownMenuSubContent;
17
+
18
+ export interface DropdownProps {
19
+ trigger: ReactNode;
20
+ children: ReactNode;
21
+ open?: boolean;
22
+ defaultOpen?: boolean;
23
+ onOpenChange?: ( open: boolean ) => void;
24
+ modal?: boolean;
25
+ dir?: 'ltr' | 'rtl';
26
+ contentProps?: DropdownContentProps;
27
+ portalProps?: object;
28
+ className?: string;
29
+ }
30
+
31
+ export const Dropdown: React.FC< DropdownProps > = ( {
32
+ trigger,
33
+ children,
34
+ open = undefined,
35
+ defaultOpen = false,
36
+ onOpenChange = undefined,
37
+ modal = true,
38
+ dir = 'ltr',
39
+ contentProps = {},
40
+ portalProps = {},
41
+ } ) => (
42
+ <DropdownMenu
43
+ open={ open }
44
+ defaultOpen={ defaultOpen }
45
+ onOpenChange={ onOpenChange }
46
+ modal={ modal }
47
+ dir={ dir }
48
+ >
49
+ <DropdownTrigger className="vip-dropdown-trigger" asChild>
50
+ { trigger }
51
+ </DropdownTrigger>
52
+
53
+ <DropdownMenuPrimitive.Portal { ...portalProps }>
54
+ <DropdownContent { ...contentProps }>
55
+ { children }
56
+ <DropdownMenuPrimitive.Arrow sx={ { fill: 'background', boxShadow: 'high' } } />
57
+ </DropdownContent>
58
+ </DropdownMenuPrimitive.Portal>
59
+ </DropdownMenu>
60
+ );
61
+
62
+ // Exports
63
+ export {
64
+ DropdownTrigger,
65
+ DropdownRadioGroup,
66
+ DropdownItemIndicator,
67
+ DropdownLabel,
68
+ DropdownSeparator,
69
+ DropdownSub,
70
+ DropdownSubTrigger,
71
+ DropdownSubContent,
72
+ };
@@ -0,0 +1,46 @@
1
+ /** @jsxImportSource theme-ui */
2
+
3
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
4
+ import classNames from 'classnames';
5
+ import React from 'react';
6
+
7
+ export interface DropdownContentProps {
8
+ className?: string;
9
+ }
10
+
11
+ export const styles = {
12
+ minWidth: 220,
13
+ borderRadius: 2,
14
+ backgroundColor: 'background',
15
+ boxShadow: 'high',
16
+ px: 2,
17
+ py: 1,
18
+ };
19
+
20
+ export const DropdownContent = React.forwardRef< HTMLDivElement, DropdownContentProps >(
21
+ ( { className, ...props }, forwardRef ) => (
22
+ <DropdownMenuPrimitive.DropdownMenuContent
23
+ className={ classNames( 'vip-dropdown-menu-content', className ) }
24
+ ref={ forwardRef }
25
+ sx={ styles }
26
+ { ...props }
27
+ />
28
+ )
29
+ );
30
+
31
+ DropdownContent.displayName = 'DropdownContent';
32
+
33
+ export const DropdownSubContent = React.forwardRef< HTMLDivElement, DropdownContentProps >(
34
+ ( { className, ...props }, forwardRef ) => (
35
+ <DropdownMenuPrimitive.Portal>
36
+ <DropdownMenuPrimitive.DropdownMenuSubContent
37
+ className={ classNames( 'vip-dropdown-menu-sub-content', className ) }
38
+ ref={ forwardRef }
39
+ sx={ styles }
40
+ { ...props }
41
+ />
42
+ </DropdownMenuPrimitive.Portal>
43
+ )
44
+ );
45
+
46
+ DropdownSubContent.displayName = 'DropdownSubContent';
@@ -0,0 +1,112 @@
1
+ /** @jsxImportSource theme-ui */
2
+
3
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
4
+ import classNames from 'classnames';
5
+ import React from 'react';
6
+ import { ThemeUIStyleObject } from 'theme-ui';
7
+
8
+ export interface DropdownItemProps extends DropdownMenuPrimitive.MenuItemProps {
9
+ className?: string;
10
+ }
11
+
12
+ export interface DropdownRadioItemProps extends DropdownMenuPrimitive.MenuRadioItemProps {
13
+ className?: string;
14
+ }
15
+
16
+ export interface DropdownCheckboxItemProps extends DropdownMenuPrimitive.MenuCheckboxItemProps {
17
+ className?: string;
18
+ }
19
+
20
+ export interface DropdownSubTriggerItemProps
21
+ extends DropdownMenuPrimitive.DropdownMenuSubTriggerProps {
22
+ className?: string;
23
+ }
24
+
25
+ export const styles: ThemeUIStyleObject = {
26
+ unset: 'all',
27
+ cursor: 'pointer',
28
+ display: 'flex',
29
+ alignItems: 'center',
30
+ flexDirection: 'row',
31
+ textAlign: 'left',
32
+ height: 25,
33
+ textDecoration: 'none',
34
+ position: 'relative',
35
+ m: 0,
36
+ color: 'heading',
37
+ px: 2,
38
+ paddingLeft: 3,
39
+ py: 1,
40
+ '&:hover, &:focus': {
41
+ backgroundColor: 'hover',
42
+ textDecoration: 'none',
43
+ },
44
+ '&[data-disabled]': {
45
+ color: 'muted',
46
+ pointerEvents: 'none',
47
+ },
48
+ '&[data-highlighted]': {
49
+ backgroundColor: 'hover',
50
+ color: 'link',
51
+ },
52
+ };
53
+
54
+ export const DropdownItem = React.forwardRef< HTMLDivElement, DropdownItemProps >(
55
+ ( { className, ...props }, forwardRef ) => (
56
+ <DropdownMenuPrimitive.DropdownMenuItem
57
+ className={ classNames( 'vip-dropdown-menu-item', className ) }
58
+ ref={ forwardRef }
59
+ sx={ styles }
60
+ { ...props }
61
+ />
62
+ )
63
+ );
64
+
65
+ DropdownItem.displayName = 'DropdownItem';
66
+
67
+ export const DropdownCheckboxItem = React.forwardRef< HTMLDivElement, DropdownCheckboxItemProps >(
68
+ ( { className, ...props }, forwardRef ) => (
69
+ <DropdownMenuPrimitive.CheckboxItem
70
+ className={ classNames( 'vip-dropdown-checkbox-item', className ) }
71
+ ref={ forwardRef }
72
+ sx={ styles }
73
+ { ...props }
74
+ />
75
+ )
76
+ );
77
+
78
+ DropdownCheckboxItem.displayName = 'DropdownCheckboxItem';
79
+
80
+ export const DropdownRadioItem = React.forwardRef< HTMLDivElement, DropdownRadioItemProps >(
81
+ ( { className, ...props }, forwardRef ) => (
82
+ <DropdownMenuPrimitive.RadioItem
83
+ className={ classNames( 'vip-dropdown-radio-item', className ) }
84
+ ref={ forwardRef }
85
+ sx={ styles }
86
+ { ...props }
87
+ />
88
+ )
89
+ );
90
+
91
+ DropdownRadioItem.displayName = 'DropdownRadioItem';
92
+
93
+ export const DropdownSubTrigger = React.forwardRef< HTMLDivElement, DropdownSubTriggerItemProps >(
94
+ ( { className, ...props }, forwardRef ) => (
95
+ <DropdownMenuPrimitive.SubTrigger
96
+ className={ classNames( 'vip-dropdown-sub-trigger', className ) }
97
+ ref={ forwardRef }
98
+ sx={ {
99
+ ...styles,
100
+ ...{
101
+ '&[data-state="open"]': {
102
+ background: 'highlight',
103
+ color: 'primary',
104
+ },
105
+ },
106
+ } }
107
+ { ...props }
108
+ />
109
+ )
110
+ );
111
+
112
+ DropdownSubTrigger.displayName = 'DropdownSubTrigger';
@@ -0,0 +1,29 @@
1
+ /** @jsxImportSource theme-ui */
2
+
3
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
4
+ import classNames from 'classnames';
5
+ import React from 'react';
6
+
7
+ export interface DropdownLabelProps {
8
+ className?: string;
9
+ }
10
+
11
+ export const styles = {
12
+ paddingLeft: 3,
13
+ fontSize: 12,
14
+ lineHeight: '25px',
15
+ color: 'muted',
16
+ };
17
+
18
+ export const DropdownLabel = React.forwardRef< HTMLDivElement, DropdownLabelProps >(
19
+ ( { className, ...props }, forwardRef ) => (
20
+ <DropdownMenuPrimitive.DropdownMenuLabel
21
+ className={ classNames( 'vip-dropdown-menu-label', className ) }
22
+ ref={ forwardRef }
23
+ sx={ styles }
24
+ { ...props }
25
+ />
26
+ )
27
+ );
28
+
29
+ DropdownLabel.displayName = 'DropdownLabel';
@@ -0,0 +1,28 @@
1
+ /** @jsxImportSource theme-ui */
2
+
3
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
4
+ import classNames from 'classnames';
5
+ import React from 'react';
6
+
7
+ export interface DropdownSeparatorProps {
8
+ className?: string;
9
+ }
10
+
11
+ export const styles = {
12
+ height: '1px',
13
+ backgroundColor: 'borders.2',
14
+ my: '5px',
15
+ };
16
+
17
+ export const DropdownSeparator = React.forwardRef< HTMLDivElement, DropdownSeparatorProps >(
18
+ ( { className, ...props }, forwardRef ) => (
19
+ <DropdownMenuPrimitive.DropdownMenuSeparator
20
+ className={ classNames( 'vip-dropdown-menu-separator', className ) }
21
+ ref={ forwardRef }
22
+ sx={ styles }
23
+ { ...props }
24
+ />
25
+ )
26
+ );
27
+
28
+ DropdownSeparator.displayName = 'DropdownSeparator';
@@ -1,7 +1,5 @@
1
1
  /** @jsxImportSource theme-ui */
2
- /**
3
- * Internal dependencies
4
- */
2
+
5
3
  import {
6
4
  Dropdown,
7
5
  DropdownTrigger,