@automattic/vip-design-system 0.14.2 → 0.17.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 (44) hide show
  1. package/.prettierignore +1 -0
  2. package/README.md +26 -0
  3. package/build/system/Button/Button.js +9 -4
  4. package/build/system/NewConfirmationDialog/NewConfirmationDialog.js +120 -0
  5. package/build/system/NewConfirmationDialog/NewConfirmationDialog.stories.js +52 -0
  6. package/build/system/NewConfirmationDialog/NewConfirmationDialog.test.js +82 -0
  7. package/build/system/NewConfirmationDialog/index.js +7 -0
  8. package/build/system/NewDialog/DialogClose.js +26 -11
  9. package/build/system/NewDialog/DialogClose.test.js +1 -1
  10. package/build/system/NewDialog/DialogDescription.js +1 -1
  11. package/build/system/NewDialog/DialogTitle.js +1 -1
  12. package/build/system/NewDialog/NewDialog.js +13 -23
  13. package/build/system/NewDialog/NewDialog.stories.js +80 -9
  14. package/build/system/NewDialog/index.js +14 -1
  15. package/build/system/Notification/Notification.js +1 -1
  16. package/build/system/ScreenReaderText/ScreenReader.test.js +2 -2
  17. package/build/system/ScreenReaderText/ScreenReaderText.js +9 -4
  18. package/build/system/ScreenReaderText/index.js +8 -1
  19. package/build/system/index.js +12 -3
  20. package/build/system/theme/generated/valet-theme.json +2429 -0
  21. package/build/system/theme/getColor.js +3 -21
  22. package/build/system/theme/index.js +1 -1
  23. package/package.json +8 -5
  24. package/src/system/Button/Button.js +7 -3
  25. package/src/system/NewConfirmationDialog/NewConfirmationDialog.js +93 -0
  26. package/src/system/NewConfirmationDialog/NewConfirmationDialog.stories.jsx +32 -0
  27. package/src/system/NewConfirmationDialog/NewConfirmationDialog.test.js +39 -0
  28. package/src/system/NewConfirmationDialog/index.js +6 -0
  29. package/src/system/NewDialog/DialogClose.js +18 -4
  30. package/src/system/NewDialog/DialogClose.test.js +1 -1
  31. package/src/system/NewDialog/DialogDescription.js +1 -1
  32. package/src/system/NewDialog/DialogTitle.js +1 -1
  33. package/src/system/NewDialog/NewDialog.js +14 -20
  34. package/src/system/NewDialog/NewDialog.stories.jsx +55 -7
  35. package/src/system/NewDialog/index.js +7 -1
  36. package/src/system/Notification/Notification.js +1 -1
  37. package/src/system/ScreenReaderText/ScreenReader.test.js +1 -1
  38. package/src/system/ScreenReaderText/ScreenReaderText.js +24 -22
  39. package/src/system/ScreenReaderText/index.js +2 -0
  40. package/src/system/index.js +3 -1
  41. package/src/system/theme/generated/valet-theme.json +2429 -0
  42. package/src/system/theme/getColor.js +3 -19
  43. package/src/system/theme/index.js +1 -1
  44. package/tokens/valet-color.json +0 -6164
@@ -0,0 +1 @@
1
+ src/system/theme/generated
package/README.md CHANGED
@@ -41,6 +41,32 @@ For components that include storybooks, we can run `npm run storybook` to view t
41
41
 
42
42
  Note: it's super useful to run `npm run watch` in another process, so any changes will be almost immediately available / testable.
43
43
 
44
+ ### Updating the Theme with VIP Design System Tokens
45
+
46
+ You need to update the tokens once the VIP Design System updates the core files.
47
+
48
+ #### How the theming works
49
+
50
+ We use the VIP Design System Tokens as our base theme structure. All colors, spaces, types should come from a dynamic token system provided by the VIP Design team, currently using Figma as the design software. When the design system is updated by the Design team, they push a file to the root of this repository: `tokens/valet-core.json`.
51
+
52
+ By using the [Token Transformer](https://docs.tokens.studio/sync/github#7-how-to-use-tokens-stored-in-github-in-development) and a custom npm script, we parse this file getting only the VIP Dashboard theme we need for the react components. The theme is called: `productive-color-wpvip`.
53
+
54
+ Once the new file is updated, we need to generate a custom theme file in `src/generated/valet-theme.json`. This operation generates a small json file with the colors we need already filled in.
55
+
56
+ Once the theme is updated, the file `src/system/theme/index.js` reads the colors and apply to all components.
57
+
58
+ Use the section below to run the script and update the theme.
59
+
60
+ _Important:_ If you change the `generated/valet-theme.json`, make it sure to open a new pull request with these changes and release a new version if needed.
61
+
62
+ #### Update theme script
63
+
64
+ Run this command to update the VIP Valet Theme with the latest `tokens/valet-core.json`.
65
+
66
+ ```bash
67
+ npm run theme-update
68
+ ```
69
+
44
70
  ### Publish NPM Package Instructions
45
71
 
46
72
  Once all the changes needed are merged to trunk, and you are ready to release a new version, follow these steps:
@@ -9,17 +9,19 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
9
 
10
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
11
 
12
- var _themeUi = require("theme-ui");
12
+ var _react = _interopRequireDefault(require("react"));
13
13
 
14
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
 
16
16
  var _classnames = _interopRequireDefault(require("classnames"));
17
17
 
18
+ var _themeUi = require("theme-ui");
19
+
18
20
  var _jsxRuntime = require("theme-ui/jsx-runtime");
19
21
 
20
22
  var _excluded = ["sx"];
21
23
 
22
- var Button = function Button(_ref) {
24
+ var Button = /*#__PURE__*/_react["default"].forwardRef(function (_ref, forwardRef) {
23
25
  var sx = _ref.sx,
24
26
  props = (0, _objectWithoutPropertiesLoose2["default"])(_ref, _excluded);
25
27
  return (0, _jsxRuntime.jsx)(_themeUi.Button, (0, _extends2["default"])({
@@ -43,10 +45,13 @@ var Button = function Button(_ref) {
43
45
  }
44
46
  }, sx),
45
47
  className: (0, _classnames["default"])('vip-button-component', props.className)
46
- }, props));
47
- };
48
+ }, props, {
49
+ ref: forwardRef
50
+ }));
51
+ });
48
52
 
49
53
  exports.Button = Button;
54
+ Button.displayName = 'Button';
50
55
  Button.propTypes = {
51
56
  sx: _propTypes["default"].object,
52
57
  className: _propTypes["default"].any
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.NewConfirmationDialog = void 0;
7
+
8
+ var _classnames = _interopRequireDefault(require("classnames"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _ = require("..");
15
+
16
+ var _jsxRuntime = require("theme-ui/jsx-runtime");
17
+
18
+ /** @jsxImportSource theme-ui */
19
+
20
+ /**
21
+ * External dependencies
22
+ */
23
+
24
+ /**
25
+ * Internal dependencies
26
+ */
27
+ var NewConfirmationDialogContent = function NewConfirmationDialogContent(_ref) {
28
+ var _ref$label = _ref.label,
29
+ label = _ref$label === void 0 ? 'Confirm' : _ref$label,
30
+ onConfirm = _ref.onConfirm,
31
+ onClose = _ref.onClose,
32
+ _ref$className = _ref.className,
33
+ className = _ref$className === void 0 ? null : _ref$className;
34
+ return (0, _jsxRuntime.jsx)(_.Box, {
35
+ className: (0, _classnames["default"])('vip-confirmation-dialog-component', className),
36
+ children: (0, _jsxRuntime.jsxs)(_.Flex, {
37
+ sx: {
38
+ justifyContent: 'flex-end',
39
+ mt: 4
40
+ },
41
+ children: [(0, _jsxRuntime.jsx)(_.Button, {
42
+ variant: "secondary",
43
+ sx: {
44
+ mr: 2
45
+ },
46
+ onClick: onClose,
47
+ children: "Cancel"
48
+ }), (0, _jsxRuntime.jsx)(_.NewDialog.Close, {
49
+ children: (0, _jsxRuntime.jsx)(_.Button, {
50
+ variant: "danger",
51
+ onClick: function onClick() {
52
+ onConfirm();
53
+ onClose();
54
+ },
55
+ children: label
56
+ })
57
+ })]
58
+ })
59
+ });
60
+ };
61
+
62
+ NewConfirmationDialogContent.propTypes = {
63
+ body: _propTypes["default"].node,
64
+ label: _propTypes["default"].string,
65
+ onClose: _propTypes["default"].func,
66
+ onConfirm: _propTypes["default"].func,
67
+ className: _propTypes["default"].any
68
+ };
69
+
70
+ var NewConfirmationDialog = function NewConfirmationDialog(_ref2) {
71
+ var trigger = _ref2.trigger,
72
+ onConfirm = _ref2.onConfirm,
73
+ _ref2$needsConfirm = _ref2.needsConfirm,
74
+ needsConfirm = _ref2$needsConfirm === void 0 ? true : _ref2$needsConfirm,
75
+ label = _ref2.label,
76
+ title = _ref2.title,
77
+ _ref2$body = _ref2.body,
78
+ body = _ref2$body === void 0 ? '' : _ref2$body;
79
+
80
+ var _React$useState = _react["default"].useState(false),
81
+ open = _React$useState[0],
82
+ setOpen = _React$useState[1];
83
+
84
+ var directTrigger = /*#__PURE__*/_react["default"].cloneElement(trigger, {
85
+ onClick: onConfirm
86
+ });
87
+
88
+ if (!needsConfirm) {
89
+ return directTrigger;
90
+ }
91
+
92
+ return (0, _jsxRuntime.jsx)(_.NewDialog.Root, {
93
+ open: open,
94
+ onOpenChange: setOpen,
95
+ sx: {
96
+ maxWidth: 680
97
+ },
98
+ title: title,
99
+ description: body,
100
+ content: (0, _jsxRuntime.jsx)(NewConfirmationDialogContent, {
101
+ onClose: function onClose() {
102
+ return setOpen(false);
103
+ },
104
+ onConfirm: onConfirm,
105
+ body: body,
106
+ label: label
107
+ }),
108
+ trigger: trigger
109
+ });
110
+ };
111
+
112
+ exports.NewConfirmationDialog = NewConfirmationDialog;
113
+ NewConfirmationDialog.propTypes = {
114
+ needsConfirm: _propTypes["default"].bool,
115
+ trigger: _propTypes["default"].node,
116
+ onConfirm: _propTypes["default"].func,
117
+ title: _propTypes["default"].node,
118
+ body: _propTypes["default"].node,
119
+ label: _propTypes["default"].node
120
+ };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports["default"] = exports.Default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _ = require("..");
11
+
12
+ var _jsxRuntime = require("theme-ui/jsx-runtime");
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ var _default = {
18
+ title: 'NewConfirmationDialog',
19
+ component: _.NewConfirmationDialog
20
+ };
21
+ exports["default"] = _default;
22
+ var ConfirmationTrigger = (0, _jsxRuntime.jsx)(_.Button, {
23
+ sx: {
24
+ mr: 3
25
+ },
26
+ children: "Click to answer"
27
+ });
28
+
29
+ var Default = function Default() {
30
+ var _React$useState = _react["default"].useState('🤔'),
31
+ answer = _React$useState[0],
32
+ setAnswer = _React$useState[1];
33
+
34
+ return (0, _jsxRuntime.jsxs)(_.Box, {
35
+ children: [(0, _jsxRuntime.jsx)("p", {
36
+ children: "Confirm that your name is John doe?"
37
+ }), (0, _jsxRuntime.jsx)(_.NewConfirmationDialog, {
38
+ title: 'Are you John Doe?',
39
+ description: 'Please confirm that your name is John Doe.',
40
+ trigger: ConfirmationTrigger,
41
+ body: "A modal is used to perform more detailed actions that don\u2018t necessarily need the context behind.",
42
+ onConfirm: function onConfirm() {
43
+ return setAnswer('👍');
44
+ },
45
+ needsConfirm: true
46
+ }), (0, _jsxRuntime.jsxs)("p", {
47
+ children: ["Answer: ", answer]
48
+ })]
49
+ });
50
+ };
51
+
52
+ exports.Default = Default;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
+
7
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
+
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+
11
+ var _react = require("@testing-library/react");
12
+
13
+ var _jestAxe = require("jest-axe");
14
+
15
+ var _NewConfirmationDialog = require("./NewConfirmationDialog");
16
+
17
+ var _jsxRuntime = require("theme-ui/jsx-runtime");
18
+
19
+ /**
20
+ * External dependencies
21
+ */
22
+
23
+ /**
24
+ * Internal dependencies
25
+ */
26
+ var defaultProps = {
27
+ needsConfirm: true,
28
+ title: 'My Custom Title',
29
+ body: 'My Custom Text',
30
+ label: 'Submit this!',
31
+ trigger: (0, _jsxRuntime.jsx)("button", {
32
+ children: "Trigger"
33
+ })
34
+ };
35
+
36
+ var getButton = function getButton() {
37
+ return _react.screen.getByText('Trigger');
38
+ };
39
+
40
+ var getConfirmButton = function getConfirmButton() {
41
+ return _react.screen.getByText(defaultProps.label);
42
+ };
43
+
44
+ var getTitle = function getTitle() {
45
+ return _react.screen.getByRole('heading', {
46
+ level: 2
47
+ });
48
+ };
49
+
50
+ describe('<NewConfirmationDialog />', function () {
51
+ it('renders the NewConfirmationDialog component', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
52
+ var _render, container;
53
+
54
+ return _regenerator["default"].wrap(function _callee$(_context) {
55
+ while (1) {
56
+ switch (_context.prev = _context.next) {
57
+ case 0:
58
+ _render = (0, _react.render)((0, _jsxRuntime.jsx)(_NewConfirmationDialog.NewConfirmationDialog, (0, _extends2["default"])({}, defaultProps))), container = _render.container;
59
+ expect(getButton()).toBeInTheDocument();
60
+
61
+ _react.fireEvent.click(getButton());
62
+
63
+ expect(getTitle()).toHaveTextContent(defaultProps.title);
64
+ expect(getConfirmButton()).toBeInTheDocument(); // Check for accessibility issues
65
+
66
+ _context.t0 = expect;
67
+ _context.next = 8;
68
+ return (0, _jestAxe.axe)(container);
69
+
70
+ case 8:
71
+ _context.t1 = _context.sent;
72
+ _context.next = 11;
73
+ return (0, _context.t0)(_context.t1).toHaveNoViolations();
74
+
75
+ case 11:
76
+ case "end":
77
+ return _context.stop();
78
+ }
79
+ }
80
+ }, _callee);
81
+ })));
82
+ });
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+
5
+ var _NewConfirmationDialog = require("./NewConfirmationDialog");
6
+
7
+ exports.NewConfirmationDialog = _NewConfirmationDialog.NewConfirmationDialog;
@@ -3,35 +3,50 @@
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
5
  exports.__esModule = true;
6
- exports.DialogClose = void 0;
6
+ exports.DialogCloseDefault = exports.DialogClose = void 0;
7
7
 
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
 
10
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
+
10
12
  var _react = _interopRequireDefault(require("react"));
11
13
 
14
+ var _propTypes = _interopRequireDefault(require("prop-types"));
15
+
12
16
  var DialogPrimitive = _interopRequireWildcard(require("@radix-ui/react-dialog"));
13
17
 
14
18
  var _io = require("react-icons/io5");
15
19
 
16
20
  var _jsxRuntime = require("theme-ui/jsx-runtime");
17
21
 
22
+ var _excluded = ["children"];
23
+
18
24
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
25
 
20
26
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
27
 
22
- /** @jsxImportSource theme-ui */
23
-
24
- /**
25
- * External dependencies
26
- */
27
-
28
28
  /**
29
29
  * Internal dependencies
30
30
  */
31
- var DialogClose = /*#__PURE__*/_react["default"].forwardRef(function (props, forwardedRef) {
31
+ var DialogClose = /*#__PURE__*/_react["default"].forwardRef(function (_ref, forwardedRef) {
32
+ var children = _ref.children,
33
+ rest = (0, _objectWithoutPropertiesLoose2["default"])(_ref, _excluded);
32
34
  return (0, _jsxRuntime.jsx)(DialogPrimitive.Close, (0, _extends2["default"])({
33
35
  asChild: true
34
- }, props, {
36
+ }, rest, {
37
+ ref: forwardedRef,
38
+ children: children
39
+ }));
40
+ });
41
+
42
+ exports.DialogClose = DialogClose;
43
+ DialogClose.propTypes = {
44
+ children: _propTypes["default"].node
45
+ };
46
+ DialogClose.displayName = 'DialogClose';
47
+
48
+ var DialogCloseDefault = /*#__PURE__*/_react["default"].forwardRef(function (props, forwardedRef) {
49
+ return (0, _jsxRuntime.jsx)(DialogClose, (0, _extends2["default"])({}, props, {
35
50
  ref: forwardedRef,
36
51
  children: (0, _jsxRuntime.jsx)("button", {
37
52
  "aria-label": "Close",
@@ -72,5 +87,5 @@ var DialogClose = /*#__PURE__*/_react["default"].forwardRef(function (props, for
72
87
  }));
73
88
  });
74
89
 
75
- exports.DialogClose = DialogClose;
76
- DialogClose.displayName = 'DialogClose';
90
+ exports.DialogCloseDefault = DialogCloseDefault;
91
+ DialogCloseDefault.displayName = 'DialogCloseDefault';
@@ -44,7 +44,7 @@ describe('<DialogClose />', function () {
44
44
  switch (_context.prev = _context.next) {
45
45
  case 0:
46
46
  _render = (0, _react.render)((0, _jsxRuntime.jsx)(Wrapper, {
47
- children: (0, _jsxRuntime.jsx)(_DialogClose.DialogClose, (0, _extends2["default"])({}, defaultProps))
47
+ children: (0, _jsxRuntime.jsx)(_DialogClose.DialogCloseDefault, (0, _extends2["default"])({}, defaultProps))
48
48
  })), container = _render.container;
49
49
  expect(_react.screen.getByLabelText('Close')).toBeInTheDocument(); // Check for accessibility issues
50
50
 
@@ -15,7 +15,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
 
16
16
  var DialogPrimitive = _interopRequireWildcard(require("@radix-ui/react-dialog"));
17
17
 
18
- var _ScreenReaderText = _interopRequireDefault(require("../ScreenReaderText/ScreenReaderText"));
18
+ var _ScreenReaderText = _interopRequireDefault(require("../ScreenReaderText"));
19
19
 
20
20
  var _jsxRuntime = require("theme-ui/jsx-runtime");
21
21
 
@@ -9,7 +9,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
 
10
10
  var DialogPrimitive = _interopRequireWildcard(require("@radix-ui/react-dialog"));
11
11
 
12
- var _ScreenReaderText = _interopRequireDefault(require("../ScreenReaderText/ScreenReaderText"));
12
+ var _ScreenReaderText = _interopRequireDefault(require("../ScreenReaderText"));
13
13
 
14
14
  var _jsxRuntime = require("theme-ui/jsx-runtime");
15
15
 
@@ -52,22 +52,21 @@ var NewDialog = function NewDialog(_ref) {
52
52
  defaultOpen = _ref$defaultOpen === void 0 ? false : _ref$defaultOpen,
53
53
  _ref$allowPinchZoom = _ref.allowPinchZoom,
54
54
  allowPinchZoom = _ref$allowPinchZoom === void 0 ? false : _ref$allowPinchZoom,
55
- _ref$onOpenAutoFocus = _ref.onOpenAutoFocus,
56
- onOpenAutoFocus = _ref$onOpenAutoFocus === void 0 ? null : _ref$onOpenAutoFocus,
57
- _ref$onCloseAutoFocus = _ref.onCloseAutoFocus,
58
- onCloseAutoFocus = _ref$onCloseAutoFocus === void 0 ? null : _ref$onCloseAutoFocus,
59
- _ref$onEscapeKeyDown = _ref.onEscapeKeyDown,
60
- onEscapeKeyDown = _ref$onEscapeKeyDown === void 0 ? null : _ref$onEscapeKeyDown,
61
- _ref$onPointerDownOut = _ref.onPointerDownOutside,
62
- onPointerDownOutside = _ref$onPointerDownOut === void 0 ? null : _ref$onPointerDownOut,
63
- _ref$onInteractOutsid = _ref.onInteractOutside,
64
- onInteractOutside = _ref$onInteractOutsid === void 0 ? null : _ref$onInteractOutsid;
55
+ _ref$onOpenChange = _ref.onOpenChange,
56
+ onOpenChange = _ref$onOpenChange === void 0 ? undefined : _ref$onOpenChange,
57
+ _ref$open = _ref.open,
58
+ open = _ref$open === void 0 ? undefined : _ref$open,
59
+ _ref$id = _ref.id,
60
+ id = _ref$id === void 0 ? undefined : _ref$id;
65
61
 
66
62
  if (disabled) {
67
63
  return;
68
64
  }
69
65
 
70
66
  return (0, _jsxRuntime.jsxs)(DialogPrimitive.Root, {
67
+ id: id,
68
+ open: open,
69
+ onOpenChange: onOpenChange,
71
70
  defaultOpen: defaultOpen,
72
71
  allowPinchZoom: allowPinchZoom,
73
72
  children: [trigger && (0, _jsxRuntime.jsx)(DialogPrimitive.Trigger, {
@@ -77,12 +76,7 @@ var NewDialog = function NewDialog(_ref) {
77
76
  children: [(0, _jsxRuntime.jsx)(_DialogOverlay.DialogOverlay, {}), (0, _jsxRuntime.jsxs)(DialogPrimitive.Content, {
78
77
  className: "vip-dialog-component",
79
78
  sx: (0, _extends2["default"])({}, _DialogContent.contentStyles, extraStyles),
80
- onOpenAutoFocus: onOpenAutoFocus,
81
- onCloseAutoFocus: onCloseAutoFocus,
82
- onEscapeKeyDown: onEscapeKeyDown,
83
- onPointerDownOutside: onPointerDownOutside,
84
- onInteractOutside: onInteractOutside,
85
- children: [(0, _jsxRuntime.jsx)(_DialogClose.DialogClose, {}), (0, _jsxRuntime.jsx)(_DialogTitle.DialogTitle, {
79
+ children: [(0, _jsxRuntime.jsx)(_DialogClose.DialogCloseDefault, {}), (0, _jsxRuntime.jsx)(_DialogTitle.DialogTitle, {
86
80
  title: title,
87
81
  hidden: !showHeading
88
82
  }), (0, _jsxRuntime.jsx)(_DialogDescription.DialogDescription, {
@@ -108,13 +102,9 @@ NewDialog.propTypes = {
108
102
  style: _propTypes["default"].oneOfType([_propTypes["default"].object, _propTypes["default"].func]),
109
103
  // Radix DialogPrimitive.Root properties
110
104
  // https://www.radix-ui.com/docs/primitives/components/dialog#root
105
+ id: _propTypes["default"].string,
106
+ open: _propTypes["default"].bool,
111
107
  defaultOpen: _propTypes["default"].bool,
112
108
  allowPinchZoom: _propTypes["default"].bool,
113
- // Radix DialogPrimitive.Content properties
114
- // https://www.radix-ui.com/docs/primitives/components/dialog#content
115
- onOpenAutoFocus: _propTypes["default"].func,
116
- onCloseAutoFocus: _propTypes["default"].func,
117
- onEscapeKeyDown: _propTypes["default"].func,
118
- onPointerDownOutside: _propTypes["default"].func,
119
- onInteractOutside: _propTypes["default"].func
109
+ onOpenChange: _propTypes["default"].func
120
110
  };
@@ -3,27 +3,37 @@
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
5
  exports.__esModule = true;
6
- exports["default"] = exports.HiddenHeadings = exports.Default = exports.CustomStyling = exports.AutoOpen = void 0;
6
+ exports["default"] = exports.HiddenHeadings = exports.Default = exports.CustomStyling = exports.CustomStateManagement = exports.CustomClose = exports.AutoOpen = void 0;
7
7
 
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
 
10
+ var _react = require("react");
11
+
10
12
  var _system = require("../../system");
11
13
 
12
- var _ScreenReaderText = _interopRequireDefault(require("../ScreenReaderText/ScreenReaderText"));
14
+ var _ScreenReaderText = _interopRequireDefault(require("../ScreenReaderText"));
13
15
 
14
- var _NewDialog = require("./NewDialog");
16
+ var NewDialog = _interopRequireWildcard(require("."));
15
17
 
16
18
  var _jsxRuntime = require("theme-ui/jsx-runtime");
17
19
 
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
18
24
  /** @jsxImportSource theme-ui */
19
25
 
26
+ /**
27
+ * External dependencies
28
+ */
29
+
20
30
  /**
21
31
  /**
22
32
  * Internal dependencies
23
33
  */
24
34
  var _default = {
25
35
  title: 'NewDialog',
26
- component: _NewDialog.NewDialog
36
+ component: NewDialog.Root
27
37
  };
28
38
  exports["default"] = _default;
29
39
  var defaultProps = {
@@ -39,7 +49,7 @@ var Default = function Default() {
39
49
  mb: 3
40
50
  },
41
51
  children: "Regular Dialog where the title and description are built-in and the content is provided by the user."
42
- }), (0, _jsxRuntime.jsx)(_NewDialog.NewDialog, (0, _extends2["default"])({}, defaultProps, {
52
+ }), (0, _jsxRuntime.jsx)(NewDialog.Root, (0, _extends2["default"])({}, defaultProps, {
43
53
  trigger: (0, _jsxRuntime.jsx)(_system.Button, {
44
54
  children: "Trigger Dialog"
45
55
  })
@@ -57,7 +67,7 @@ var AutoOpen = function AutoOpen() {
57
67
  mb: 3
58
68
  },
59
69
  children: "Auto Opens when rendered. Press escape to close it."
60
- }), (0, _jsxRuntime.jsx)(_NewDialog.NewDialog, (0, _extends2["default"])({}, defaultProps, {
70
+ }), (0, _jsxRuntime.jsx)(NewDialog.Root, (0, _extends2["default"])({}, defaultProps, {
61
71
  defaultOpen: true,
62
72
  content: (0, _jsxRuntime.jsxs)("div", {
63
73
  children: [(0, _jsxRuntime.jsx)("h3", {
@@ -83,7 +93,7 @@ var HiddenHeadings = function HiddenHeadings() {
83
93
  mb: 3
84
94
  },
85
95
  children: "Title and description are hidden, but still announced using a screen reader. Activate VoiceOver or any similar screen reader to listen to: Custom dialog title, Description of the dialog content."
86
- }), (0, _jsxRuntime.jsx)(_NewDialog.NewDialog, (0, _extends2["default"])({}, defaultProps, {
96
+ }), (0, _jsxRuntime.jsx)(NewDialog.Root, (0, _extends2["default"])({}, defaultProps, {
87
97
  trigger: (0, _jsxRuntime.jsx)(_system.Button, {
88
98
  children: "Trigger Dialog"
89
99
  }),
@@ -124,7 +134,7 @@ var CustomStyling = function CustomStyling() {
124
134
  mb: 3
125
135
  },
126
136
  children: "Custom Styling on Dialog Content"
127
- }), (0, _jsxRuntime.jsx)(_NewDialog.NewDialog, (0, _extends2["default"])({}, defaultProps, {
137
+ }), (0, _jsxRuntime.jsx)(NewDialog.Root, (0, _extends2["default"])({}, defaultProps, {
128
138
  defaultOpen: true,
129
139
  trigger: (0, _jsxRuntime.jsx)(_system.Button, {
130
140
  children: "Trigger Dialog"
@@ -167,4 +177,65 @@ var CustomStyling = function CustomStyling() {
167
177
  });
168
178
  };
169
179
 
170
- exports.CustomStyling = CustomStyling;
180
+ exports.CustomStyling = CustomStyling;
181
+
182
+ var CustomClose = function CustomClose() {
183
+ return (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
184
+ children: [(0, _jsxRuntime.jsx)(_system.Text, {
185
+ sx: {
186
+ fontSize: 3,
187
+ mb: 3
188
+ },
189
+ children: "This example shows how you can create a custom Close trigger to your dialog"
190
+ }), (0, _jsxRuntime.jsx)(NewDialog.Root, (0, _extends2["default"])({}, defaultProps, {
191
+ trigger: (0, _jsxRuntime.jsx)(_system.Button, {
192
+ children: "Trigger Dialog"
193
+ }),
194
+ content: (0, _jsxRuntime.jsx)("div", {
195
+ children: (0, _jsxRuntime.jsx)(NewDialog.Close, {
196
+ children: (0, _jsxRuntime.jsx)(_system.Button, {
197
+ children: "Close here instead"
198
+ })
199
+ })
200
+ })
201
+ }))]
202
+ });
203
+ };
204
+
205
+ exports.CustomClose = CustomClose;
206
+
207
+ var CustomStateManagement = function CustomStateManagement() {
208
+ var _useState = (0, _react.useState)(false),
209
+ open = _useState[0],
210
+ setOpen = _useState[1];
211
+
212
+ return (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
213
+ children: [(0, _jsxRuntime.jsxs)(_system.Text, {
214
+ sx: {
215
+ fontSize: 3,
216
+ mb: 3
217
+ },
218
+ children: ["This example shows how you can create a custom state management. To achieve accessibility, you need to control the ", (0, _jsxRuntime.jsx)("strong", {
219
+ children: "open"
220
+ }), " state, but also keep consistency using the", ' ', (0, _jsxRuntime.jsx)("strong", {
221
+ children: "onOpenChange"
222
+ }), " attribute."]
223
+ }), (0, _jsxRuntime.jsx)(NewDialog.Root, (0, _extends2["default"])({}, defaultProps, {
224
+ open: open,
225
+ onOpenChange: setOpen,
226
+ trigger: (0, _jsxRuntime.jsx)(_system.Button, {
227
+ children: "Trigger Dialog"
228
+ }),
229
+ content: (0, _jsxRuntime.jsx)("div", {
230
+ children: (0, _jsxRuntime.jsx)(_system.Button, {
231
+ onClick: function onClick() {
232
+ return setOpen(false);
233
+ },
234
+ children: "Close here instead"
235
+ })
236
+ })
237
+ }))]
238
+ });
239
+ };
240
+
241
+ exports.CustomStateManagement = CustomStateManagement;
@@ -1,7 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
+ exports["default"] = exports.Root = exports.Close = void 0;
5
+
6
+ var _DialogClose = require("./DialogClose");
4
7
 
5
8
  var _NewDialog = require("./NewDialog");
6
9
 
7
- exports.NewDialog = _NewDialog.NewDialog;
10
+ exports.NewDialog = _NewDialog.NewDialog;
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ var Root = _NewDialog.NewDialog;
16
+ exports.Root = Root;
17
+ var Close = _DialogClose.DialogClose;
18
+ exports.Close = Close;
19
+ var _default = _NewDialog.NewDialog;
20
+ exports["default"] = _default;