@automattic/vip-design-system 0.18.4-0 → 0.19.1
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/build/system/BlankState/BlankState.stories.js +1 -1
- package/build/system/ConfirmationDialog/ConfirmationDialog.stories.js +1 -1
- package/build/system/Dialog/Dialog.stories.js +1 -1
- package/build/system/Dropdown/Dropdown.stories.js +2 -1
- package/build/system/Form/Input.js +5 -3
- package/build/system/Link/Link.js +8 -6
- package/build/system/NewConfirmationDialog/NewConfirmationDialog.js +10 -15
- package/build/system/NewDialog/DialogClose.js +1 -1
- package/build/system/NewDialog/NewDialog.js +17 -51
- package/build/system/NewDialog/NewDialog.stories.js +1 -1
- package/build/system/NewForm/Form.js +34 -0
- package/build/system/NewForm/FormSelect.js +117 -0
- package/build/system/NewForm/FormSelect.stories.js +120 -0
- package/build/system/NewForm/FormSelect.test.js +71 -0
- package/build/system/NewForm/FormSelectArrow.js +39 -0
- package/build/system/NewForm/FormSelectContent.js +55 -0
- package/build/system/NewForm/FormSelectInline.js +33 -0
- package/build/system/NewForm/index.js +18 -0
- package/build/system/Notice/Notice.js +0 -1
- package/build/system/OptionRow/OptionRow.js +2 -2
- package/build/system/ResourceList/ResourceList.js +1 -1
- package/build/system/Table/TableCell.js +1 -1
- package/build/system/Tabs/TabItem.js +3 -2
- package/build/system/Wizard/Wizard.js +10 -6
- package/build/system/Wizard/Wizard.stories.js +24 -2
- package/build/system/Wizard/WizardStep.js +18 -12
- package/build/system/Wizard/WizardStepHorizontal.js +8 -5
- package/build/system/index.js +5 -1
- package/build/system/theme/index.js +17 -4
- package/package.json +1 -1
- package/src/system/BlankState/BlankState.stories.jsx +1 -1
- package/src/system/ConfirmationDialog/ConfirmationDialog.stories.jsx +1 -1
- package/src/system/Dialog/Dialog.stories.jsx +1 -1
- package/src/system/Dropdown/Dropdown.stories.jsx +1 -1
- package/src/system/Form/Input.js +2 -4
- package/src/system/Link/Link.js +8 -6
- package/src/system/NewConfirmationDialog/NewConfirmationDialog.js +3 -6
- package/src/system/NewDialog/DialogClose.js +1 -1
- package/src/system/NewDialog/NewDialog.js +7 -37
- package/src/system/NewDialog/NewDialog.stories.jsx +1 -1
- package/src/system/NewForm/Form.js +19 -0
- package/src/system/NewForm/FormSelect.js +91 -0
- package/src/system/NewForm/FormSelect.stories.jsx +96 -0
- package/src/system/NewForm/FormSelect.test.js +34 -0
- package/src/system/NewForm/FormSelectArrow.js +27 -0
- package/src/system/NewForm/FormSelectContent.js +37 -0
- package/src/system/NewForm/FormSelectInline.js +31 -0
- package/src/system/NewForm/index.js +13 -0
- package/src/system/Notice/Notice.js +0 -1
- package/src/system/OptionRow/OptionRow.js +2 -2
- package/src/system/ResourceList/ResourceList.js +1 -1
- package/src/system/Table/TableCell.js +1 -1
- package/src/system/Tabs/TabItem.js +2 -1
- package/src/system/Wizard/Wizard.js +8 -6
- package/src/system/Wizard/Wizard.stories.jsx +19 -0
- package/src/system/Wizard/WizardStep.js +22 -11
- package/src/system/Wizard/WizardStepHorizontal.js +5 -4
- package/src/system/index.js +3 -0
- package/src/system/theme/index.js +21 -5
|
@@ -153,7 +153,8 @@ var WithDialog = function WithDialog() {
|
|
|
153
153
|
|
|
154
154
|
var _React$useState5 = _react["default"].useState(false),
|
|
155
155
|
menuOpen = _React$useState5[0],
|
|
156
|
-
setMenuOpen = _React$useState5[1];
|
|
156
|
+
setMenuOpen = _React$useState5[1]; // eslint-disable-next-line react/prop-types
|
|
157
|
+
|
|
157
158
|
|
|
158
159
|
var AreYouSureDialog = function AreYouSureDialog(_ref) {
|
|
159
160
|
var onConfirm = _ref.onConfirm,
|
|
@@ -48,9 +48,11 @@ var Input = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
|
|
|
48
48
|
color: 'text',
|
|
49
49
|
display: 'block',
|
|
50
50
|
width: '100%',
|
|
51
|
-
'&:focus': {
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
'&:focus': function focus(theme) {
|
|
52
|
+
return theme.outline;
|
|
53
|
+
},
|
|
54
|
+
'&:focus-visible': function focusVisible(theme) {
|
|
55
|
+
return theme.outline;
|
|
54
56
|
},
|
|
55
57
|
'&:disabled': {
|
|
56
58
|
bg: 'backgroundSecondary'
|
|
@@ -24,15 +24,17 @@ var Link = function Link(_ref) {
|
|
|
24
24
|
props = (0, _objectWithoutPropertiesLoose2["default"])(_ref, _excluded);
|
|
25
25
|
return (0, _jsxRuntime.jsx)(_themeUi.Link, (0, _extends2["default"])({}, props, {
|
|
26
26
|
sx: (0, _extends2["default"])({
|
|
27
|
-
color: active ? '
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
borderBottomColor: 'border',
|
|
27
|
+
color: active ? 'links.active' : 'link',
|
|
28
|
+
textDdecorationThickness: '0.1em',
|
|
29
|
+
textUnderlineOffset: '0.1em',
|
|
31
30
|
'&:visited': {
|
|
32
|
-
color: '
|
|
31
|
+
color: 'links.visited'
|
|
32
|
+
},
|
|
33
|
+
'&:active': {
|
|
34
|
+
color: 'links.active'
|
|
33
35
|
},
|
|
34
36
|
'&:hover, &:focus': {
|
|
35
|
-
color: '
|
|
37
|
+
color: 'links.hover'
|
|
36
38
|
},
|
|
37
39
|
'&:focus': function focus(theme) {
|
|
38
40
|
return theme.outline;
|
|
@@ -79,10 +79,6 @@ var NewConfirmationDialog = function NewConfirmationDialog(_ref2) {
|
|
|
79
79
|
body = _ref2$body === void 0 ? '' : _ref2$body,
|
|
80
80
|
props = (0, _objectWithoutPropertiesLoose2["default"])(_ref2, _excluded);
|
|
81
81
|
|
|
82
|
-
var _React$useState = _react["default"].useState(false),
|
|
83
|
-
open = _React$useState[0],
|
|
84
|
-
setOpen = _React$useState[1];
|
|
85
|
-
|
|
86
82
|
var directTrigger = /*#__PURE__*/_react["default"].cloneElement(trigger, {
|
|
87
83
|
onClick: onConfirm
|
|
88
84
|
});
|
|
@@ -92,22 +88,21 @@ var NewConfirmationDialog = function NewConfirmationDialog(_ref2) {
|
|
|
92
88
|
}
|
|
93
89
|
|
|
94
90
|
return (0, _jsxRuntime.jsx)(_.NewDialog.Root, (0, _extends2["default"])({
|
|
95
|
-
open: open,
|
|
96
|
-
onOpenChange: setOpen,
|
|
97
91
|
sx: {
|
|
98
92
|
maxWidth: 680
|
|
99
93
|
},
|
|
100
94
|
title: title,
|
|
101
95
|
description: body,
|
|
102
|
-
content: (
|
|
103
|
-
onClose
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
96
|
+
content: function content(_ref3) {
|
|
97
|
+
var onClose = _ref3.onClose;
|
|
98
|
+
return (0, _jsxRuntime.jsx)(NewConfirmationDialogContent, {
|
|
99
|
+
onClose: onClose,
|
|
100
|
+
onConfirm: onConfirm,
|
|
101
|
+
body: body,
|
|
102
|
+
label: label,
|
|
103
|
+
buttonVariant: buttonVariant
|
|
104
|
+
});
|
|
105
|
+
},
|
|
111
106
|
trigger: trigger
|
|
112
107
|
}, props));
|
|
113
108
|
};
|
|
@@ -68,7 +68,7 @@ var DialogCloseDefault = /*#__PURE__*/_react["default"].forwardRef(function (pro
|
|
|
68
68
|
top: 10,
|
|
69
69
|
right: 10,
|
|
70
70
|
'&:hover': {
|
|
71
|
-
backgroundColor: '
|
|
71
|
+
backgroundColor: 'borders.2',
|
|
72
72
|
outlineStyle: 'solid',
|
|
73
73
|
outlineColor: 'primary',
|
|
74
74
|
outlineWidth: '2px'
|
|
@@ -7,6 +7,8 @@ exports.NewDialog = 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
|
|
|
12
14
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
@@ -25,19 +27,12 @@ var _DialogContent = require("./DialogContent");
|
|
|
25
27
|
|
|
26
28
|
var _jsxRuntime = require("theme-ui/jsx-runtime");
|
|
27
29
|
|
|
30
|
+
var _excluded = ["trigger", "description", "title", "content", "showHeading", "disabled", "style", "contentProps", "portalProps"];
|
|
31
|
+
|
|
28
32
|
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); }
|
|
29
33
|
|
|
30
34
|
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; }
|
|
31
35
|
|
|
32
|
-
/** @jsxImportSource theme-ui */
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* External dependencies
|
|
36
|
-
*/
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Internal dependencies
|
|
40
|
-
*/
|
|
41
36
|
var NewDialog = function NewDialog(_ref) {
|
|
42
37
|
var _ref$trigger = _ref.trigger,
|
|
43
38
|
trigger = _ref$trigger === void 0 ? null : _ref$trigger,
|
|
@@ -54,20 +49,9 @@ var NewDialog = function NewDialog(_ref) {
|
|
|
54
49
|
contentProps = _ref$contentProps === void 0 ? {} : _ref$contentProps,
|
|
55
50
|
_ref$portalProps = _ref.portalProps,
|
|
56
51
|
portalProps = _ref$portalProps === void 0 ? {} : _ref$portalProps,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
allowPinchZoom = _ref$allowPinchZoom === void 0 ? false : _ref$allowPinchZoom,
|
|
61
|
-
_ref$onOpenChange = _ref.onOpenChange,
|
|
62
|
-
onOpenChange = _ref$onOpenChange === void 0 ? undefined : _ref$onOpenChange,
|
|
63
|
-
_ref$open = _ref.open,
|
|
64
|
-
open = _ref$open === void 0 ? undefined : _ref$open,
|
|
65
|
-
_ref$id = _ref.id,
|
|
66
|
-
id = _ref$id === void 0 ? undefined : _ref$id;
|
|
67
|
-
|
|
68
|
-
var _React$useState = _react["default"].useState(open || defaultOpen),
|
|
69
|
-
isOpen = _React$useState[0],
|
|
70
|
-
setIsOpen = _React$useState[1];
|
|
52
|
+
props = (0, _objectWithoutPropertiesLoose2["default"])(_ref, _excluded);
|
|
53
|
+
|
|
54
|
+
var closeRef = _react["default"].useRef(null);
|
|
71
55
|
|
|
72
56
|
if (disabled) {
|
|
73
57
|
return;
|
|
@@ -76,24 +60,13 @@ var NewDialog = function NewDialog(_ref) {
|
|
|
76
60
|
|
|
77
61
|
var isContentFunction = typeof content === 'function';
|
|
78
62
|
|
|
79
|
-
var
|
|
80
|
-
|
|
63
|
+
var onClose = function onClose() {
|
|
64
|
+
var _closeRef$current;
|
|
81
65
|
|
|
82
|
-
|
|
83
|
-
onOpenChange(status);
|
|
84
|
-
}
|
|
66
|
+
closeRef == null ? void 0 : (_closeRef$current = closeRef.current) == null ? void 0 : _closeRef$current.click();
|
|
85
67
|
};
|
|
86
68
|
|
|
87
|
-
|
|
88
|
-
handleOnOpenChange(open);
|
|
89
|
-
}, [open]);
|
|
90
|
-
|
|
91
|
-
return (0, _jsxRuntime.jsxs)(DialogPrimitive.Root, {
|
|
92
|
-
id: id,
|
|
93
|
-
open: isOpen,
|
|
94
|
-
onOpenChange: handleOnOpenChange,
|
|
95
|
-
defaultOpen: defaultOpen,
|
|
96
|
-
allowPinchZoom: allowPinchZoom,
|
|
69
|
+
return (0, _jsxRuntime.jsxs)(DialogPrimitive.Root, (0, _extends2["default"])({}, props, {
|
|
97
70
|
children: [trigger && (0, _jsxRuntime.jsx)(DialogPrimitive.Trigger, {
|
|
98
71
|
asChild: true,
|
|
99
72
|
children: trigger
|
|
@@ -102,7 +75,9 @@ var NewDialog = function NewDialog(_ref) {
|
|
|
102
75
|
className: "vip-dialog-component",
|
|
103
76
|
sx: (0, _extends2["default"])({}, _DialogContent.contentStyles, extraStyles)
|
|
104
77
|
}, contentProps, {
|
|
105
|
-
children: [(0, _jsxRuntime.jsx)(_DialogClose.DialogCloseDefault, {
|
|
78
|
+
children: [(0, _jsxRuntime.jsx)(_DialogClose.DialogCloseDefault, {
|
|
79
|
+
ref: closeRef
|
|
80
|
+
}), (0, _jsxRuntime.jsx)(_DialogTitle.DialogTitle, {
|
|
106
81
|
title: title,
|
|
107
82
|
hidden: !showHeading
|
|
108
83
|
}), (0, _jsxRuntime.jsx)(_DialogDescription.DialogDescription, {
|
|
@@ -111,14 +86,12 @@ var NewDialog = function NewDialog(_ref) {
|
|
|
111
86
|
}), (0, _jsxRuntime.jsx)("div", {
|
|
112
87
|
role: "document",
|
|
113
88
|
children: isContentFunction ? content({
|
|
114
|
-
onClose:
|
|
115
|
-
return setIsOpen(false);
|
|
116
|
-
}
|
|
89
|
+
onClose: onClose
|
|
117
90
|
}) : content
|
|
118
91
|
})]
|
|
119
92
|
}))]
|
|
120
93
|
}))]
|
|
121
|
-
});
|
|
94
|
+
}));
|
|
122
95
|
};
|
|
123
96
|
|
|
124
97
|
exports.NewDialog = NewDialog;
|
|
@@ -133,12 +106,5 @@ NewDialog.propTypes = {
|
|
|
133
106
|
// Content props in: https://www.radix-ui.com/docs/primitives/components/dialog#content
|
|
134
107
|
contentProps: _propTypes["default"].any,
|
|
135
108
|
// Portal props in: https://www.radix-ui.com/docs/primitives/components/dialog#portal
|
|
136
|
-
portalProps: _propTypes["default"].any
|
|
137
|
-
// Radix DialogPrimitive.Root properties
|
|
138
|
-
// https://www.radix-ui.com/docs/primitives/components/dialog#root
|
|
139
|
-
id: _propTypes["default"].string,
|
|
140
|
-
open: _propTypes["default"].bool,
|
|
141
|
-
defaultOpen: _propTypes["default"].bool,
|
|
142
|
-
allowPinchZoom: _propTypes["default"].bool,
|
|
143
|
-
onOpenChange: _propTypes["default"].func
|
|
109
|
+
portalProps: _propTypes["default"].any
|
|
144
110
|
};
|
|
@@ -225,7 +225,7 @@ var CustomStateManagement = function CustomStateManagement() {
|
|
|
225
225
|
onOpenChange: function onOpenChange(status) {
|
|
226
226
|
// eslint-disable-next-line no-console
|
|
227
227
|
console.log('New status changed', status);
|
|
228
|
-
setOpen(
|
|
228
|
+
setOpen(!open);
|
|
229
229
|
},
|
|
230
230
|
trigger: (0, _jsxRuntime.jsx)(_system.Button, {
|
|
231
231
|
children: "Trigger Dialog"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.Form = void 0;
|
|
7
|
+
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
|
|
10
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireDefault(require("react"));
|
|
13
|
+
|
|
14
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
15
|
+
|
|
16
|
+
var _jsxRuntime = require("theme-ui/jsx-runtime");
|
|
17
|
+
|
|
18
|
+
var _excluded = ["children"];
|
|
19
|
+
|
|
20
|
+
var Form = /*#__PURE__*/_react["default"].forwardRef(function (_ref, forwardRef) {
|
|
21
|
+
var children = _ref.children,
|
|
22
|
+
props = (0, _objectWithoutPropertiesLoose2["default"])(_ref, _excluded);
|
|
23
|
+
return (0, _jsxRuntime.jsx)("form", (0, _extends2["default"])({
|
|
24
|
+
ref: forwardRef
|
|
25
|
+
}, props, {
|
|
26
|
+
children: children
|
|
27
|
+
}));
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
exports.Form = Form;
|
|
31
|
+
Form.propTypes = {
|
|
32
|
+
children: _propTypes["default"].any
|
|
33
|
+
};
|
|
34
|
+
Form.displayName = 'Form';
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.FormSelect = void 0;
|
|
7
|
+
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
|
|
10
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireDefault(require("react"));
|
|
13
|
+
|
|
14
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
15
|
+
|
|
16
|
+
var _Label = require("../Form/Label");
|
|
17
|
+
|
|
18
|
+
var _FormSelectArrow = require("./FormSelectArrow");
|
|
19
|
+
|
|
20
|
+
var _FormSelectContent = require("./FormSelectContent");
|
|
21
|
+
|
|
22
|
+
var _jsxRuntime = require("theme-ui/jsx-runtime");
|
|
23
|
+
|
|
24
|
+
var _excluded = ["isInline", "placeholder", "forLabel", "options", "label"];
|
|
25
|
+
var MAX_SUGGESTED_OPTIONS = 15;
|
|
26
|
+
var isDev = process.env.NODE_ENV !== 'production';
|
|
27
|
+
var defaultStyles = {
|
|
28
|
+
width: '100%',
|
|
29
|
+
paddingLeft: 3,
|
|
30
|
+
paddingRight: 40,
|
|
31
|
+
// 40px for the icon
|
|
32
|
+
py: 0,
|
|
33
|
+
borderColor: 'border',
|
|
34
|
+
borderRadius: 1,
|
|
35
|
+
appearance: 'none',
|
|
36
|
+
minHeight: '36px',
|
|
37
|
+
'&:focus': function focus(theme) {
|
|
38
|
+
return theme.outline;
|
|
39
|
+
},
|
|
40
|
+
'&:focus-visible': function focusVisible(theme) {
|
|
41
|
+
return theme.outline;
|
|
42
|
+
},
|
|
43
|
+
'&:focus-within': function focusWithin(theme) {
|
|
44
|
+
return theme.outline;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
var renderOption = function renderOption(label, value) {
|
|
49
|
+
return (0, _jsxRuntime.jsx)("option", {
|
|
50
|
+
value: value,
|
|
51
|
+
children: label
|
|
52
|
+
}, value);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
var renderGroup = function renderGroup(groupLabel, groupOptions) {
|
|
56
|
+
return (0, _jsxRuntime.jsx)("optgroup", {
|
|
57
|
+
label: groupLabel,
|
|
58
|
+
children: groupOptions.map(function (_ref) {
|
|
59
|
+
var label = _ref.label,
|
|
60
|
+
value = _ref.value;
|
|
61
|
+
return renderOption(label, value);
|
|
62
|
+
})
|
|
63
|
+
}, groupLabel);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
var FormSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref2, forwardRef) {
|
|
67
|
+
var isInline = _ref2.isInline,
|
|
68
|
+
placeholder = _ref2.placeholder,
|
|
69
|
+
forLabel = _ref2.forLabel,
|
|
70
|
+
options = _ref2.options,
|
|
71
|
+
label = _ref2.label,
|
|
72
|
+
props = (0, _objectWithoutPropertiesLoose2["default"])(_ref2, _excluded);
|
|
73
|
+
|
|
74
|
+
if (isDev && options.length > MAX_SUGGESTED_OPTIONS) {
|
|
75
|
+
// eslint-disable-next-line no-console
|
|
76
|
+
console.info('For 16 or more items, consider using another component with a typeahead capability.');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
var SelectLabel = function SelectLabel() {
|
|
80
|
+
return (0, _jsxRuntime.jsx)(_Label.Label, {
|
|
81
|
+
htmlFor: forLabel || props.id,
|
|
82
|
+
children: label
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
var inlineLabel = !!(isInline && label);
|
|
87
|
+
return (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
88
|
+
children: [label && !isInline && (0, _jsxRuntime.jsx)(SelectLabel, {}), (0, _jsxRuntime.jsxs)(_FormSelectContent.FormSelectContent, {
|
|
89
|
+
isInline: inlineLabel,
|
|
90
|
+
label: inlineLabel ? (0, _jsxRuntime.jsx)(SelectLabel, {}) : null,
|
|
91
|
+
children: [(0, _jsxRuntime.jsxs)("select", (0, _extends2["default"])({
|
|
92
|
+
ref: forwardRef,
|
|
93
|
+
sx: defaultStyles
|
|
94
|
+
}, props, {
|
|
95
|
+
children: [placeholder && (0, _jsxRuntime.jsx)("option", {
|
|
96
|
+
children: placeholder
|
|
97
|
+
}), options.map(function (_ref3) {
|
|
98
|
+
var optionLabel = _ref3.label,
|
|
99
|
+
value = _ref3.value,
|
|
100
|
+
groupOptions = _ref3.options;
|
|
101
|
+
return value ? renderOption(optionLabel, value) : renderGroup(optionLabel, groupOptions);
|
|
102
|
+
})]
|
|
103
|
+
})), (0, _jsxRuntime.jsx)(_FormSelectArrow.FormSelectArrow, {})]
|
|
104
|
+
})]
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
exports.FormSelect = FormSelect;
|
|
109
|
+
FormSelect.propTypes = {
|
|
110
|
+
id: _propTypes["default"].string,
|
|
111
|
+
isInline: _propTypes["default"].bool,
|
|
112
|
+
forLabel: _propTypes["default"].string,
|
|
113
|
+
placeholder: _propTypes["default"].string,
|
|
114
|
+
label: _propTypes["default"].string,
|
|
115
|
+
options: _propTypes["default"].array
|
|
116
|
+
};
|
|
117
|
+
FormSelect.displayName = 'FormSelect';
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports["default"] = exports.WithGroup = exports.IsInline = exports.Default = void 0;
|
|
7
|
+
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
|
|
10
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
11
|
+
|
|
12
|
+
var Form = _interopRequireWildcard(require("."));
|
|
13
|
+
|
|
14
|
+
var _jsxRuntime = require("theme-ui/jsx-runtime");
|
|
15
|
+
|
|
16
|
+
var _excluded = ["label", "width"];
|
|
17
|
+
|
|
18
|
+
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
|
+
|
|
20
|
+
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
|
+
|
|
22
|
+
var _default = {
|
|
23
|
+
title: 'Form/Select',
|
|
24
|
+
argTypes: {
|
|
25
|
+
placeholder: {
|
|
26
|
+
type: {
|
|
27
|
+
name: 'string',
|
|
28
|
+
required: false
|
|
29
|
+
},
|
|
30
|
+
control: {
|
|
31
|
+
type: 'text'
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
label: {
|
|
35
|
+
type: {
|
|
36
|
+
name: 'string',
|
|
37
|
+
required: false
|
|
38
|
+
},
|
|
39
|
+
control: {
|
|
40
|
+
type: 'text'
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
exports["default"] = _default;
|
|
46
|
+
var options = [{
|
|
47
|
+
value: 'chocolate',
|
|
48
|
+
label: 'Chocolate'
|
|
49
|
+
}, {
|
|
50
|
+
value: 'strawberry',
|
|
51
|
+
label: 'Strawberry Chocolate Vanilla Chocolate Vanilla'
|
|
52
|
+
}, {
|
|
53
|
+
value: 'vanilla',
|
|
54
|
+
label: 'Vanilla'
|
|
55
|
+
}]; // eslint-disable-next-line react/prop-types
|
|
56
|
+
|
|
57
|
+
var DefaultComponent = function DefaultComponent(_ref) {
|
|
58
|
+
var _ref$label = _ref.label,
|
|
59
|
+
label = _ref$label === void 0 ? 'Label' : _ref$label,
|
|
60
|
+
_ref$width = _ref.width,
|
|
61
|
+
width = _ref$width === void 0 ? 250 : _ref$width,
|
|
62
|
+
rest = (0, _objectWithoutPropertiesLoose2["default"])(_ref, _excluded);
|
|
63
|
+
return (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
64
|
+
children: [(0, _jsxRuntime.jsxs)("p", {
|
|
65
|
+
children: ["This is a simple wrapper at the top of a browser default select component. This component should be used for situations where you have up to ", (0, _jsxRuntime.jsx)("strong", {
|
|
66
|
+
children: "15 options"
|
|
67
|
+
}), ". If you need to use a auto-complete, searchable solution, please use another component with a typeahead capability."]
|
|
68
|
+
}), (0, _jsxRuntime.jsxs)("p", {
|
|
69
|
+
children: ["This component was heavily inspired by the", ' ', (0, _jsxRuntime.jsxs)("a", {
|
|
70
|
+
href: "https://designsystem.digital.gov/components/select/",
|
|
71
|
+
target: "_blank",
|
|
72
|
+
rel: "noreferrer",
|
|
73
|
+
children: [' ', "U.S. Web Design System (USWDS) Select component"]
|
|
74
|
+
}), "."]
|
|
75
|
+
}), (0, _jsxRuntime.jsx)(Form.Root, {
|
|
76
|
+
children: (0, _jsxRuntime.jsx)("div", {
|
|
77
|
+
sx: {
|
|
78
|
+
width: width
|
|
79
|
+
},
|
|
80
|
+
children: (0, _jsxRuntime.jsx)(Form.Select, (0, _extends2["default"])({
|
|
81
|
+
id: "form-select",
|
|
82
|
+
label: label
|
|
83
|
+
}, rest))
|
|
84
|
+
})
|
|
85
|
+
})]
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
var Default = DefaultComponent.bind({});
|
|
90
|
+
exports.Default = Default;
|
|
91
|
+
Default.args = {
|
|
92
|
+
placeholder: '- Select -',
|
|
93
|
+
options: options
|
|
94
|
+
};
|
|
95
|
+
var WithGroup = DefaultComponent.bind({});
|
|
96
|
+
exports.WithGroup = WithGroup;
|
|
97
|
+
WithGroup.args = {
|
|
98
|
+
label: 'Group Label',
|
|
99
|
+
options: [{
|
|
100
|
+
label: 'Group name',
|
|
101
|
+
options: options
|
|
102
|
+
}, {
|
|
103
|
+
label: 'Another Group name',
|
|
104
|
+
options: options
|
|
105
|
+
}]
|
|
106
|
+
};
|
|
107
|
+
var IsInline = DefaultComponent.bind({});
|
|
108
|
+
exports.IsInline = IsInline;
|
|
109
|
+
IsInline.args = {
|
|
110
|
+
label: 'Inline Select',
|
|
111
|
+
isInline: true,
|
|
112
|
+
width: '100%',
|
|
113
|
+
options: [{
|
|
114
|
+
label: 'Group name',
|
|
115
|
+
options: options
|
|
116
|
+
}, {
|
|
117
|
+
label: 'Another Group name',
|
|
118
|
+
options: options
|
|
119
|
+
}]
|
|
120
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
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 _FormSelect = require("./FormSelect");
|
|
16
|
+
|
|
17
|
+
var _jsxRuntime = require("theme-ui/jsx-runtime");
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* External dependencies
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Internal dependencies
|
|
25
|
+
*/
|
|
26
|
+
var options = [{
|
|
27
|
+
value: 'chocolate',
|
|
28
|
+
label: 'Chocolate'
|
|
29
|
+
}, {
|
|
30
|
+
value: 'strawberry',
|
|
31
|
+
label: 'Strawberry Chocolate Vanilla Chocolate Vanilla'
|
|
32
|
+
}, {
|
|
33
|
+
value: 'vanilla',
|
|
34
|
+
label: 'Vanilla'
|
|
35
|
+
}];
|
|
36
|
+
var defaultProps = {
|
|
37
|
+
label: 'This is a label',
|
|
38
|
+
forLabel: 'my_desert_list',
|
|
39
|
+
options: options
|
|
40
|
+
};
|
|
41
|
+
describe('<FormSelect />', function () {
|
|
42
|
+
it('renders the FormSelect component', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
43
|
+
var _render, container;
|
|
44
|
+
|
|
45
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
46
|
+
while (1) {
|
|
47
|
+
switch (_context.prev = _context.next) {
|
|
48
|
+
case 0:
|
|
49
|
+
_render = (0, _react.render)((0, _jsxRuntime.jsx)(_FormSelect.FormSelect, (0, _extends2["default"])({
|
|
50
|
+
id: "my_desert_list"
|
|
51
|
+
}, defaultProps))), container = _render.container;
|
|
52
|
+
expect(_react.screen.getByLabelText(defaultProps.label)).toBeInTheDocument();
|
|
53
|
+
expect(_react.screen.getByRole('combobox')).toBeInTheDocument(); // Check for accessibility issues
|
|
54
|
+
|
|
55
|
+
_context.t0 = expect;
|
|
56
|
+
_context.next = 6;
|
|
57
|
+
return (0, _jestAxe.axe)(container);
|
|
58
|
+
|
|
59
|
+
case 6:
|
|
60
|
+
_context.t1 = _context.sent;
|
|
61
|
+
_context.next = 9;
|
|
62
|
+
return (0, _context.t0)(_context.t1).toHaveNoViolations();
|
|
63
|
+
|
|
64
|
+
case 9:
|
|
65
|
+
case "end":
|
|
66
|
+
return _context.stop();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}, _callee);
|
|
70
|
+
})));
|
|
71
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.FormSelectArrow = void 0;
|
|
7
|
+
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _md = require("react-icons/md");
|
|
13
|
+
|
|
14
|
+
var _jsxRuntime = require("theme-ui/jsx-runtime");
|
|
15
|
+
|
|
16
|
+
/** @jsxImportSource theme-ui */
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* External dependencies
|
|
20
|
+
*/
|
|
21
|
+
var FormSelectArrow = /*#__PURE__*/_react["default"].forwardRef(function (props, forwardRef) {
|
|
22
|
+
return (0, _jsxRuntime.jsx)(_md.MdExpandMore, (0, _extends2["default"])({
|
|
23
|
+
ref: forwardRef,
|
|
24
|
+
"aria-hidden": "true",
|
|
25
|
+
size: 24,
|
|
26
|
+
sx: {
|
|
27
|
+
paddingLeft: 2,
|
|
28
|
+
borderLeftWidth: '1px',
|
|
29
|
+
borderLeftStyle: 'solid',
|
|
30
|
+
borderLeftColor: 'border',
|
|
31
|
+
position: 'relative',
|
|
32
|
+
right: 34,
|
|
33
|
+
pointerEvents: 'none'
|
|
34
|
+
}
|
|
35
|
+
}, props));
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
exports.FormSelectArrow = FormSelectArrow;
|
|
39
|
+
FormSelectArrow.displayName = 'FormSelectArrow';
|