@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.
- package/.prettierignore +1 -0
- package/README.md +26 -0
- package/build/system/Button/Button.js +9 -4
- package/build/system/NewConfirmationDialog/NewConfirmationDialog.js +120 -0
- package/build/system/NewConfirmationDialog/NewConfirmationDialog.stories.js +52 -0
- package/build/system/NewConfirmationDialog/NewConfirmationDialog.test.js +82 -0
- package/build/system/NewConfirmationDialog/index.js +7 -0
- package/build/system/NewDialog/DialogClose.js +26 -11
- package/build/system/NewDialog/DialogClose.test.js +1 -1
- package/build/system/NewDialog/DialogDescription.js +1 -1
- package/build/system/NewDialog/DialogTitle.js +1 -1
- package/build/system/NewDialog/NewDialog.js +13 -23
- package/build/system/NewDialog/NewDialog.stories.js +80 -9
- package/build/system/NewDialog/index.js +14 -1
- package/build/system/Notification/Notification.js +1 -1
- package/build/system/ScreenReaderText/ScreenReader.test.js +2 -2
- package/build/system/ScreenReaderText/ScreenReaderText.js +9 -4
- package/build/system/ScreenReaderText/index.js +8 -1
- package/build/system/index.js +12 -3
- package/build/system/theme/generated/valet-theme.json +2429 -0
- package/build/system/theme/getColor.js +3 -21
- package/build/system/theme/index.js +1 -1
- package/package.json +8 -5
- package/src/system/Button/Button.js +7 -3
- package/src/system/NewConfirmationDialog/NewConfirmationDialog.js +93 -0
- package/src/system/NewConfirmationDialog/NewConfirmationDialog.stories.jsx +32 -0
- package/src/system/NewConfirmationDialog/NewConfirmationDialog.test.js +39 -0
- package/src/system/NewConfirmationDialog/index.js +6 -0
- package/src/system/NewDialog/DialogClose.js +18 -4
- package/src/system/NewDialog/DialogClose.test.js +1 -1
- package/src/system/NewDialog/DialogDescription.js +1 -1
- package/src/system/NewDialog/DialogTitle.js +1 -1
- package/src/system/NewDialog/NewDialog.js +14 -20
- package/src/system/NewDialog/NewDialog.stories.jsx +55 -7
- package/src/system/NewDialog/index.js +7 -1
- package/src/system/Notification/Notification.js +1 -1
- package/src/system/ScreenReaderText/ScreenReader.test.js +1 -1
- package/src/system/ScreenReaderText/ScreenReaderText.js +24 -22
- package/src/system/ScreenReaderText/index.js +2 -0
- package/src/system/index.js +3 -1
- package/src/system/theme/generated/valet-theme.json +2429 -0
- package/src/system/theme/getColor.js +3 -19
- package/src/system/theme/index.js +1 -1
- package/tokens/valet-color.json +0 -6164
package/.prettierignore
ADDED
|
@@ -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
|
|
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
|
|
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
|
+
});
|
|
@@ -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 (
|
|
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
|
-
},
|
|
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.
|
|
76
|
-
|
|
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.
|
|
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
|
|
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
|
|
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$
|
|
56
|
-
|
|
57
|
-
_ref$
|
|
58
|
-
|
|
59
|
-
_ref$
|
|
60
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
14
|
+
var _ScreenReaderText = _interopRequireDefault(require("../ScreenReaderText"));
|
|
13
15
|
|
|
14
|
-
var
|
|
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:
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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;
|