@canonical/react-components 0.31.0 → 0.32.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/dist/components/AccordionSection/AccordionSection.js +8 -12
- package/dist/components/CheckableInput/CheckableInput.d.ts +9 -1
- package/dist/components/CheckableInput/CheckableInput.js +8 -7
- package/dist/components/ContextualMenu/ContextualMenu.js +5 -5
- package/dist/components/Input/Input.js +16 -12
- package/dist/components/MainTable/MainTable.d.ts +4 -0
- package/dist/components/MainTable/MainTable.js +9 -2
- package/dist/components/Modal/Modal.js +8 -8
- package/dist/components/Spinner/Spinner.d.ts +9 -1
- package/dist/components/Spinner/Spinner.js +12 -4
- package/dist/components/Switch/Switch.d.ts +14 -0
- package/dist/components/Switch/Switch.js +42 -0
- package/dist/components/Switch/index.d.ts +2 -0
- package/dist/components/Switch/index.js +15 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +9 -1
- package/dist/hooks/useId.d.ts +6 -0
- package/dist/hooks/useId.js +21 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +40 -0
- package/package.json +8 -5
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
8
6
|
exports.default = void 0;
|
|
9
7
|
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
13
9
|
|
|
14
|
-
|
|
10
|
+
var _useId = require("../../hooks/useId");
|
|
15
11
|
|
|
16
|
-
function
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
13
|
|
|
18
14
|
var AccordionSection = function AccordionSection(_ref) {
|
|
19
15
|
var content = _ref.content,
|
|
@@ -25,8 +21,8 @@ var AccordionSection = function AccordionSection(_ref) {
|
|
|
25
21
|
titleElement = _ref.titleElement,
|
|
26
22
|
_ref$headingLevel = _ref.headingLevel,
|
|
27
23
|
headingLevel = _ref$headingLevel === void 0 ? 3 : _ref$headingLevel;
|
|
28
|
-
var sectionId = (0,
|
|
29
|
-
var key = sectionKey || sectionId
|
|
24
|
+
var sectionId = (0, _useId.useId)();
|
|
25
|
+
var key = sectionKey || sectionId;
|
|
30
26
|
var isExpanded = expanded === key;
|
|
31
27
|
var Title = titleElement || "div";
|
|
32
28
|
return /*#__PURE__*/_react.default.createElement("li", {
|
|
@@ -36,7 +32,7 @@ var AccordionSection = function AccordionSection(_ref) {
|
|
|
36
32
|
"aria-level": titleElement ? null : headingLevel,
|
|
37
33
|
className: "p-accordion__heading"
|
|
38
34
|
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
39
|
-
"aria-controls": "#".concat(sectionId
|
|
35
|
+
"aria-controls": "#".concat(sectionId),
|
|
40
36
|
"aria-expanded": isExpanded ? "true" : "false",
|
|
41
37
|
className: "p-accordion__tab",
|
|
42
38
|
onClick: function onClick() {
|
|
@@ -52,9 +48,9 @@ var AccordionSection = function AccordionSection(_ref) {
|
|
|
52
48
|
type: "button"
|
|
53
49
|
}, title)), /*#__PURE__*/_react.default.createElement("section", {
|
|
54
50
|
"aria-hidden": isExpanded ? "false" : "true",
|
|
55
|
-
"aria-labelledby": sectionId
|
|
51
|
+
"aria-labelledby": sectionId,
|
|
56
52
|
className: "p-accordion__panel",
|
|
57
|
-
id: sectionId
|
|
53
|
+
id: sectionId,
|
|
58
54
|
role: "tabpanel"
|
|
59
55
|
}, content));
|
|
60
56
|
};
|
|
@@ -10,10 +10,18 @@ export declare type Props = PropsWithSpread<{
|
|
|
10
10
|
* The label for the input element.
|
|
11
11
|
*/
|
|
12
12
|
label: ReactNode;
|
|
13
|
+
/**
|
|
14
|
+
* Optional class(es) to pass to the label element.
|
|
15
|
+
*/
|
|
16
|
+
labelClassName?: string;
|
|
13
17
|
/**
|
|
14
18
|
* Whether the input element should display in indeterminate state.
|
|
15
19
|
*/
|
|
16
20
|
indeterminate?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Ensures the input and the label text are properly aligned with other inline text.
|
|
23
|
+
*/
|
|
24
|
+
inline?: boolean;
|
|
17
25
|
}, Omit<HTMLProps<HTMLInputElement>, "type">>;
|
|
18
|
-
declare const CheckableInput: ({ inputType, label, indeterminate, ...checkboxProps }: Props) => JSX.Element;
|
|
26
|
+
declare const CheckableInput: ({ inputType, label, labelClassName, indeterminate, ...checkboxProps }: Props) => JSX.Element;
|
|
19
27
|
export default CheckableInput;
|
|
@@ -9,11 +9,11 @@ exports.default = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
11
11
|
|
|
12
|
-
var _nanoid = require("nanoid");
|
|
13
|
-
|
|
14
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
13
|
|
|
16
|
-
var
|
|
14
|
+
var _useId = require("../../hooks/useId");
|
|
15
|
+
|
|
16
|
+
var _excluded = ["inputType", "label", "labelClassName", "indeterminate"];
|
|
17
17
|
|
|
18
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
19
|
|
|
@@ -30,27 +30,28 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
|
|
|
30
30
|
var CheckableInput = function CheckableInput(_ref) {
|
|
31
31
|
var inputType = _ref.inputType,
|
|
32
32
|
label = _ref.label,
|
|
33
|
+
labelClassName = _ref.labelClassName,
|
|
33
34
|
_ref$indeterminate = _ref.indeterminate,
|
|
34
35
|
indeterminate = _ref$indeterminate === void 0 ? false : _ref$indeterminate,
|
|
35
36
|
checkboxProps = _objectWithoutProperties(_ref, _excluded);
|
|
36
37
|
|
|
37
|
-
var inputId = (0,
|
|
38
|
+
var inputId = (0, _useId.useId)();
|
|
38
39
|
var inputRef = (0, _react.useRef)(null);
|
|
39
40
|
(0, _react.useEffect)(function () {
|
|
40
41
|
inputRef.current.indeterminate = indeterminate;
|
|
41
42
|
}, [indeterminate]);
|
|
42
43
|
return /*#__PURE__*/_react.default.createElement("label", {
|
|
43
|
-
className: (0, _classnames.default)("p-".concat(inputType), {
|
|
44
|
+
className: (0, _classnames.default)(labelClassName, "p-".concat(inputType).concat(checkboxProps.inline ? "--inline" : ""), {
|
|
44
45
|
"is-required": checkboxProps.required
|
|
45
46
|
})
|
|
46
47
|
}, /*#__PURE__*/_react.default.createElement("input", _extends({
|
|
47
|
-
"aria-labelledby": inputId
|
|
48
|
+
"aria-labelledby": inputId,
|
|
48
49
|
className: "p-".concat(inputType, "__input"),
|
|
49
50
|
ref: inputRef,
|
|
50
51
|
type: inputType
|
|
51
52
|
}, checkboxProps)), /*#__PURE__*/_react.default.createElement("span", {
|
|
52
53
|
className: "p-".concat(inputType, "__label"),
|
|
53
|
-
id: inputId
|
|
54
|
+
id: inputId
|
|
54
55
|
}, label));
|
|
55
56
|
};
|
|
56
57
|
|
|
@@ -7,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
|
|
10
|
-
var _nanoid = require("nanoid");
|
|
11
|
-
|
|
12
10
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
11
|
|
|
14
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -21,6 +19,8 @@ var _Button = _interopRequireDefault(require("../Button"));
|
|
|
21
19
|
|
|
22
20
|
var _ContextualMenuDropdown = _interopRequireDefault(require("./ContextualMenuDropdown"));
|
|
23
21
|
|
|
22
|
+
var _useId = require("../../hooks/useId");
|
|
23
|
+
|
|
24
24
|
var _excluded = ["autoAdjust", "children", "className", "closeOnEsc", "closeOnOutsideClick", "constrainPanelWidth", "dropdownClassName", "dropdownProps", "hasToggleIcon", "links", "onToggleMenu", "position", "positionNode", "toggleAppearance", "toggleClassName", "toggleDisabled", "toggleLabel", "toggleLabelFirst", "toggleProps", "visible"];
|
|
25
25
|
|
|
26
26
|
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); }
|
|
@@ -129,7 +129,7 @@ var ContextualMenu = function ContextualMenu(_ref) {
|
|
|
129
129
|
visible = _ref$visible === void 0 ? false : _ref$visible,
|
|
130
130
|
wrapperProps = _objectWithoutProperties(_ref, _excluded);
|
|
131
131
|
|
|
132
|
-
var id = (0,
|
|
132
|
+
var id = (0, _useId.useId)();
|
|
133
133
|
var wrapper = (0, _react.useRef)();
|
|
134
134
|
|
|
135
135
|
var _useState = (0, _react.useState)(),
|
|
@@ -223,7 +223,7 @@ var ContextualMenu = function ContextualMenu(_ref) {
|
|
|
223
223
|
}
|
|
224
224
|
}, wrapperProps), hasToggle ? /*#__PURE__*/_react.default.createElement(_Button.default, _extends({
|
|
225
225
|
appearance: toggleAppearance,
|
|
226
|
-
"aria-controls": id
|
|
226
|
+
"aria-controls": id,
|
|
227
227
|
"aria-expanded": isOpen ? "true" : "false",
|
|
228
228
|
"aria-pressed": isOpen ? "true" : "false",
|
|
229
229
|
"aria-haspopup": "true",
|
|
@@ -254,7 +254,7 @@ var ContextualMenu = function ContextualMenu(_ref) {
|
|
|
254
254
|
constrainPanelWidth: constrainPanelWidth,
|
|
255
255
|
dropdownClassName: dropdownClassName,
|
|
256
256
|
dropdownContent: children,
|
|
257
|
-
id: id
|
|
257
|
+
id: id,
|
|
258
258
|
isOpen: isOpen,
|
|
259
259
|
links: links,
|
|
260
260
|
position: position,
|
|
@@ -49,31 +49,35 @@ var Input = function Input(_ref) {
|
|
|
49
49
|
|
|
50
50
|
var inputRef = (0, _react.useRef)(null);
|
|
51
51
|
var fieldLabel = !["checkbox", "radio"].includes(type) ? label : "";
|
|
52
|
-
|
|
53
|
-
var input = /*#__PURE__*/_react.default.createElement("input", _extends({
|
|
54
|
-
className: (0, _classnames.default)("p-form-validation__input", className),
|
|
55
|
-
id: id,
|
|
56
|
-
ref: inputRef,
|
|
57
|
-
required: required,
|
|
58
|
-
type: type,
|
|
59
|
-
"aria-invalid": !!error
|
|
60
|
-
}, inputProps));
|
|
61
|
-
|
|
62
52
|
(0, _react.useEffect)(function () {
|
|
63
53
|
if (takeFocus) {
|
|
64
54
|
inputRef.current.focus();
|
|
65
55
|
}
|
|
66
56
|
}, [takeFocus]);
|
|
57
|
+
var input;
|
|
67
58
|
|
|
68
59
|
if (type === "checkbox") {
|
|
69
60
|
input = /*#__PURE__*/_react.default.createElement(_CheckboxInput.default, _extends({
|
|
61
|
+
id: id,
|
|
70
62
|
label: label,
|
|
71
|
-
|
|
63
|
+
labelClassName: labelClassName,
|
|
64
|
+
required: required
|
|
72
65
|
}, inputProps));
|
|
73
66
|
} else if (type === "radio") {
|
|
74
67
|
input = /*#__PURE__*/_react.default.createElement(_RadioInput.default, _extends({
|
|
68
|
+
id: id,
|
|
75
69
|
label: label,
|
|
76
|
-
|
|
70
|
+
labelClassName: labelClassName,
|
|
71
|
+
required: required
|
|
72
|
+
}, inputProps));
|
|
73
|
+
} else {
|
|
74
|
+
input = /*#__PURE__*/_react.default.createElement("input", _extends({
|
|
75
|
+
className: (0, _classnames.default)("p-form-validation__input", className),
|
|
76
|
+
id: id,
|
|
77
|
+
ref: inputRef,
|
|
78
|
+
required: required,
|
|
79
|
+
type: type,
|
|
80
|
+
"aria-invalid": !!error
|
|
77
81
|
}, inputProps));
|
|
78
82
|
}
|
|
79
83
|
|
|
@@ -15,6 +15,10 @@ export declare type MainTableHeader = PropsWithSpread<{
|
|
|
15
15
|
* A key to sort the rows by. It should match a key given to the row `sortData`.
|
|
16
16
|
*/
|
|
17
17
|
sortKey?: string | null;
|
|
18
|
+
/**
|
|
19
|
+
* Replacement value for data-heading if content is not a string.
|
|
20
|
+
*/
|
|
21
|
+
heading?: string;
|
|
18
22
|
}, HTMLProps<HTMLTableHeaderCellElement>>;
|
|
19
23
|
export declare type MainTableCell = PropsWithSpread<{
|
|
20
24
|
/**
|
|
@@ -102,7 +102,7 @@ var generateHeaders = function generateHeaders(currentSortKey, currentSortDirect
|
|
|
102
102
|
})));
|
|
103
103
|
};
|
|
104
104
|
|
|
105
|
-
var generateRows = function generateRows(currentSortDirection, currentSortKey, emptyStateMsg, expanding, paginate, rows, currentPage, setCurrentPage, sortable, sortFunction) {
|
|
105
|
+
var generateRows = function generateRows(currentSortDirection, currentSortKey, emptyStateMsg, expanding, responsive, headers, paginate, rows, currentPage, setCurrentPage, sortable, sortFunction) {
|
|
106
106
|
// If the table has no rows, return empty state message
|
|
107
107
|
if (Object.entries(rows).length === 0 && emptyStateMsg) {
|
|
108
108
|
return /*#__PURE__*/_react.default.createElement("caption", null, emptyStateMsg);
|
|
@@ -159,6 +159,13 @@ var generateRows = function generateRows(currentSortDirection, currentSortKey, e
|
|
|
159
159
|
var content = _ref3.content,
|
|
160
160
|
cellProps = _objectWithoutProperties(_ref3, _excluded3);
|
|
161
161
|
|
|
162
|
+
var headerContent = headers && headers[index]["content"];
|
|
163
|
+
var headerReplacement = headers && headers[index]["heading"];
|
|
164
|
+
|
|
165
|
+
if (responsive) {
|
|
166
|
+
cellProps["data-heading"] = typeof headerContent === "string" ? headerContent : headerReplacement;
|
|
167
|
+
}
|
|
168
|
+
|
|
162
169
|
return /*#__PURE__*/_react.default.createElement(_TableCell.default, _extends({
|
|
163
170
|
key: index
|
|
164
171
|
}, cellProps), content);
|
|
@@ -227,7 +234,7 @@ var MainTable = function MainTable(_ref4) {
|
|
|
227
234
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Table.default, _extends({
|
|
228
235
|
expanding: expanding,
|
|
229
236
|
responsive: responsive
|
|
230
|
-
}, props), !!headers && generateHeaders(currentSortKey, currentSortDirection, expanding, headers, sortable, updateSort, setSortDirection), !!rows && generateRows(currentSortDirection, currentSortKey, emptyStateMsg, expanding, paginate, rows, currentPage, setCurrentPage, sortable, sortFunction)), paginate && rows && rows.length > 0 && /*#__PURE__*/_react.default.createElement(_Pagination.default, {
|
|
237
|
+
}, props), !!headers && generateHeaders(currentSortKey, currentSortDirection, expanding, headers, sortable, updateSort, setSortDirection), !!rows && generateRows(currentSortDirection, currentSortKey, emptyStateMsg, expanding, responsive, headers, paginate, rows, currentPage, setCurrentPage, sortable, sortFunction)), paginate && rows && rows.length > 0 && /*#__PURE__*/_react.default.createElement(_Pagination.default, {
|
|
231
238
|
currentPage: currentPage,
|
|
232
239
|
itemsPerPage: paginate,
|
|
233
240
|
paginate: setCurrentPage,
|
|
@@ -9,10 +9,10 @@ exports.default = exports.Modal = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
11
11
|
|
|
12
|
-
var _nanoid = require("nanoid");
|
|
13
|
-
|
|
14
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
13
|
|
|
14
|
+
var _useId = require("../../hooks/useId");
|
|
15
|
+
|
|
16
16
|
var _excluded = ["buttonRow", "children", "className", "close", "title"];
|
|
17
17
|
|
|
18
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); }
|
|
@@ -38,8 +38,8 @@ var Modal = function Modal(_ref) {
|
|
|
38
38
|
// list of focusable selectors is based on this Stack Overflow answer:
|
|
39
39
|
// https://stackoverflow.com/a/30753870/3732840
|
|
40
40
|
var focusableElementSelectors = 'a[href]:not([tabindex="-1"]), button:not([disabled]), textarea:not([disabled]):not([tabindex="-1"]), input:not([disabled]):not([tabindex="-1"]), select:not([disabled]):not([tabindex="-1"]), area[href]:not([tabindex="-1"]), iframe:not([tabindex="-1"]), [tabindex]:not([tabindex="-1"]), [contentEditable=true]:not([tabindex="-1"])';
|
|
41
|
-
var descriptionId = (0,
|
|
42
|
-
var titleId = (0,
|
|
41
|
+
var descriptionId = (0, _useId.useId)();
|
|
42
|
+
var titleId = (0, _useId.useId)();
|
|
43
43
|
var shouldClose = (0, _react.useRef)(false);
|
|
44
44
|
var modalRef = (0, _react.useRef)(null);
|
|
45
45
|
var focusableModalElements = (0, _react.useRef)(null);
|
|
@@ -113,21 +113,21 @@ var Modal = function Modal(_ref) {
|
|
|
113
113
|
className: "p-modal__dialog",
|
|
114
114
|
role: "dialog",
|
|
115
115
|
"aria-modal": "true",
|
|
116
|
-
"aria-labelledby": titleId
|
|
117
|
-
"aria-describedby": descriptionId
|
|
116
|
+
"aria-labelledby": titleId,
|
|
117
|
+
"aria-describedby": descriptionId,
|
|
118
118
|
onMouseDown: handleContentOnMouseDown,
|
|
119
119
|
onMouseUp: handleContentOnMouseUp
|
|
120
120
|
}, !!title && /*#__PURE__*/_react.default.createElement("header", {
|
|
121
121
|
className: "p-modal__header"
|
|
122
122
|
}, /*#__PURE__*/_react.default.createElement("h2", {
|
|
123
123
|
className: "p-modal__title",
|
|
124
|
-
id: titleId
|
|
124
|
+
id: titleId
|
|
125
125
|
}, title), !!close && /*#__PURE__*/_react.default.createElement("button", {
|
|
126
126
|
className: "p-modal__close",
|
|
127
127
|
"aria-label": "Close active modal",
|
|
128
128
|
onClick: close
|
|
129
129
|
}, "Close")), /*#__PURE__*/_react.default.createElement("div", {
|
|
130
|
-
id: descriptionId
|
|
130
|
+
id: descriptionId
|
|
131
131
|
}, children), !!buttonRow && /*#__PURE__*/_react.default.createElement("footer", {
|
|
132
132
|
className: "p-modal__footer"
|
|
133
133
|
}, buttonRow)));
|
|
@@ -13,6 +13,14 @@ export declare type Props = {
|
|
|
13
13
|
* Text to display next to the spinner.
|
|
14
14
|
*/
|
|
15
15
|
text?: string;
|
|
16
|
+
/**
|
|
17
|
+
* What the role of the spinner should be.
|
|
18
|
+
*/
|
|
19
|
+
role?: string;
|
|
20
|
+
/**
|
|
21
|
+
* The politeness setting of the spinner alert.
|
|
22
|
+
*/
|
|
23
|
+
ariaLive?: "assertive" | "off" | "polite";
|
|
16
24
|
} & HTMLProps<HTMLSpanElement>;
|
|
17
|
-
declare const Spinner: ({ className, text, isLight, ...props }: Props) => JSX.Element;
|
|
25
|
+
declare const Spinner: ({ className, text, isLight, ariaLive, role, ...props }: Props) => JSX.Element;
|
|
18
26
|
export default Spinner;
|
|
@@ -11,7 +11,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
11
11
|
|
|
12
12
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
13
|
|
|
14
|
-
var _excluded = ["className", "text", "isLight"];
|
|
14
|
+
var _excluded = ["className", "text", "isLight", "ariaLive", "role"];
|
|
15
15
|
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
17
|
|
|
@@ -26,20 +26,28 @@ var Spinner = function Spinner(_ref) {
|
|
|
26
26
|
text = _ref.text,
|
|
27
27
|
_ref$isLight = _ref.isLight,
|
|
28
28
|
isLight = _ref$isLight === void 0 ? false : _ref$isLight,
|
|
29
|
+
_ref$ariaLive = _ref.ariaLive,
|
|
30
|
+
ariaLive = _ref$ariaLive === void 0 ? "polite" : _ref$ariaLive,
|
|
31
|
+
_ref$role = _ref.role,
|
|
32
|
+
role = _ref$role === void 0 ? "alert" : _ref$role,
|
|
29
33
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
30
34
|
|
|
31
35
|
return /*#__PURE__*/_react.default.createElement("span", _extends({}, props, {
|
|
32
|
-
className: (0, _classnames.default)(className, "p-text--default")
|
|
36
|
+
className: (0, _classnames.default)(className, "p-text--default"),
|
|
37
|
+
role: role,
|
|
38
|
+
"aria-live": ariaLive
|
|
33
39
|
}), /*#__PURE__*/_react.default.createElement("i", {
|
|
34
40
|
className: (0, _classnames.default)("p-icon--spinner", "u-animation--spin", {
|
|
35
41
|
"is-light": isLight
|
|
36
42
|
})
|
|
37
|
-
}), text && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "\u2002", /*#__PURE__*/_react.default.createElement("span", null, text)));
|
|
43
|
+
}, text ? text : "Loading"), text && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "\u2002", /*#__PURE__*/_react.default.createElement("span", null, text)));
|
|
38
44
|
};
|
|
39
45
|
|
|
40
46
|
Spinner.propTypes = {
|
|
41
47
|
isLight: _propTypes.default.bool,
|
|
42
|
-
text: _propTypes.default.string
|
|
48
|
+
text: _propTypes.default.string,
|
|
49
|
+
role: _propTypes.default.string,
|
|
50
|
+
ariaLive: _propTypes.default.oneOf(["assertive", "off", "polite"])
|
|
43
51
|
};
|
|
44
52
|
var _default = Spinner;
|
|
45
53
|
exports.default = _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { HTMLProps, ReactNode } from "react";
|
|
2
|
+
import type { PropsWithSpread } from "../../types";
|
|
3
|
+
export declare type Props = PropsWithSpread<{
|
|
4
|
+
/**
|
|
5
|
+
* The label name for the switch
|
|
6
|
+
*/
|
|
7
|
+
label: ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Whether the switch is disabled or not
|
|
10
|
+
*/
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
}, HTMLProps<HTMLInputElement>>;
|
|
13
|
+
export declare const Switch: ({ label, disabled, ...inputProps }: Props) => JSX.Element;
|
|
14
|
+
export default Switch;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.Switch = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _excluded = ["label", "disabled"];
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
15
|
+
|
|
16
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
17
|
+
|
|
18
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
19
|
+
|
|
20
|
+
var Switch = function Switch(_ref) {
|
|
21
|
+
var label = _ref.label,
|
|
22
|
+
_ref$disabled = _ref.disabled,
|
|
23
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
24
|
+
inputProps = _objectWithoutProperties(_ref, _excluded);
|
|
25
|
+
|
|
26
|
+
return /*#__PURE__*/_react.default.createElement("label", {
|
|
27
|
+
className: "p-switch"
|
|
28
|
+
}, /*#__PURE__*/_react.default.createElement("input", _extends({
|
|
29
|
+
type: "checkbox",
|
|
30
|
+
className: "p-switch__input",
|
|
31
|
+
role: "switch",
|
|
32
|
+
disabled: disabled
|
|
33
|
+
}, inputProps)), /*#__PURE__*/_react.default.createElement("span", {
|
|
34
|
+
className: "p-switch__slider"
|
|
35
|
+
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
36
|
+
className: "p-switch__label"
|
|
37
|
+
}, label));
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
exports.Switch = Switch;
|
|
41
|
+
var _default = Switch;
|
|
42
|
+
exports.default = _default;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _Switch.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
var _Switch = _interopRequireDefault(require("./Switch"));
|
|
14
|
+
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export { useWindowFitment } from "./useWindowFitment";
|
|
|
2
2
|
export { useListener } from "./useListener";
|
|
3
3
|
export { usePrevious } from "./usePrevious";
|
|
4
4
|
export { useThrottle } from "./useThrottle";
|
|
5
|
+
export { useId } from "./useId";
|
|
5
6
|
export type { WindowFitment } from "./useWindowFitment";
|
package/dist/hooks/index.js
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "useId", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _useId.useId;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "useListener", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function get() {
|
|
@@ -34,4 +40,6 @@ var _useListener = require("./useListener");
|
|
|
34
40
|
|
|
35
41
|
var _usePrevious = require("./usePrevious");
|
|
36
42
|
|
|
37
|
-
var _useThrottle = require("./useThrottle");
|
|
43
|
+
var _useThrottle = require("./useThrottle");
|
|
44
|
+
|
|
45
|
+
var _useId = require("./useId");
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useId = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _nanoid = require("nanoid");
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A hook that returns the same random ID string on every render.
|
|
14
|
+
* Can be used as a value for HTML "id" attributes.
|
|
15
|
+
* @returns random ID string
|
|
16
|
+
*/
|
|
17
|
+
var useId = function useId() {
|
|
18
|
+
return (0, _react.useRef)((0, _nanoid.nanoid)()).current;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
exports.useId = useId;
|
package/dist/index.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export { default as SearchAndFilter } from "./components/SearchAndFilter";
|
|
|
29
29
|
export { default as SearchBox } from "./components/SearchBox";
|
|
30
30
|
export { default as Select } from "./components/Select";
|
|
31
31
|
export { default as Slider } from "./components/Slider";
|
|
32
|
+
export { default as Switch } from "./components/Switch";
|
|
32
33
|
export { default as Spinner } from "./components/Spinner";
|
|
33
34
|
export { default as Strip } from "./components/Strip";
|
|
34
35
|
export { default as SummaryButton } from "./components/SummaryButton";
|
|
@@ -80,4 +81,6 @@ export type { TableRowProps } from "./components/TableRow";
|
|
|
80
81
|
export type { TabsProps } from "./components/Tabs";
|
|
81
82
|
export type { TextareaProps } from "./components/Textarea";
|
|
82
83
|
export type { TooltipProps } from "./components/Tooltip";
|
|
84
|
+
export { useWindowFitment, useListener, usePrevious, useThrottle, useId, } from "./hooks";
|
|
85
|
+
export type { WindowFitment } from "./hooks";
|
|
83
86
|
export type { ClassName, Headings, PropsWithSpread, SortDirection, SubComponentProps, TSFixMe, ValueOf, } from "./types";
|
package/dist/index.js
CHANGED
|
@@ -233,6 +233,12 @@ Object.defineProperty(exports, "SummaryButton", {
|
|
|
233
233
|
return _SummaryButton.default;
|
|
234
234
|
}
|
|
235
235
|
});
|
|
236
|
+
Object.defineProperty(exports, "Switch", {
|
|
237
|
+
enumerable: true,
|
|
238
|
+
get: function get() {
|
|
239
|
+
return _Switch.default;
|
|
240
|
+
}
|
|
241
|
+
});
|
|
236
242
|
Object.defineProperty(exports, "Table", {
|
|
237
243
|
enumerable: true,
|
|
238
244
|
get: function get() {
|
|
@@ -275,6 +281,36 @@ Object.defineProperty(exports, "Tooltip", {
|
|
|
275
281
|
return _Tooltip.default;
|
|
276
282
|
}
|
|
277
283
|
});
|
|
284
|
+
Object.defineProperty(exports, "useId", {
|
|
285
|
+
enumerable: true,
|
|
286
|
+
get: function get() {
|
|
287
|
+
return _hooks.useId;
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
Object.defineProperty(exports, "useListener", {
|
|
291
|
+
enumerable: true,
|
|
292
|
+
get: function get() {
|
|
293
|
+
return _hooks.useListener;
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
Object.defineProperty(exports, "usePrevious", {
|
|
297
|
+
enumerable: true,
|
|
298
|
+
get: function get() {
|
|
299
|
+
return _hooks.usePrevious;
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
Object.defineProperty(exports, "useThrottle", {
|
|
303
|
+
enumerable: true,
|
|
304
|
+
get: function get() {
|
|
305
|
+
return _hooks.useThrottle;
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
Object.defineProperty(exports, "useWindowFitment", {
|
|
309
|
+
enumerable: true,
|
|
310
|
+
get: function get() {
|
|
311
|
+
return _hooks.useWindowFitment;
|
|
312
|
+
}
|
|
313
|
+
});
|
|
278
314
|
|
|
279
315
|
var _Accordion = _interopRequireDefault(require("./components/Accordion"));
|
|
280
316
|
|
|
@@ -338,6 +374,8 @@ var _Select = _interopRequireDefault(require("./components/Select"));
|
|
|
338
374
|
|
|
339
375
|
var _Slider = _interopRequireDefault(require("./components/Slider"));
|
|
340
376
|
|
|
377
|
+
var _Switch = _interopRequireDefault(require("./components/Switch"));
|
|
378
|
+
|
|
341
379
|
var _Spinner = _interopRequireDefault(require("./components/Spinner"));
|
|
342
380
|
|
|
343
381
|
var _Strip = _interopRequireDefault(require("./components/Strip"));
|
|
@@ -358,6 +396,8 @@ var _Textarea = _interopRequireDefault(require("./components/Textarea"));
|
|
|
358
396
|
|
|
359
397
|
var _Tooltip = _interopRequireDefault(require("./components/Tooltip"));
|
|
360
398
|
|
|
399
|
+
var _hooks = require("./hooks");
|
|
400
|
+
|
|
361
401
|
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); }
|
|
362
402
|
|
|
363
403
|
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; }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canonical/react-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"author": "Huw Wilkins <huw.wilkins@canonical.com>",
|
|
@@ -35,6 +35,8 @@
|
|
|
35
35
|
"@storybook/theming": "6.4.18",
|
|
36
36
|
"@testing-library/cypress": "8.0.2",
|
|
37
37
|
"@testing-library/dom": "8.11.3",
|
|
38
|
+
"@testing-library/jest-dom": "5.16.2",
|
|
39
|
+
"@testing-library/react": "12.1.2",
|
|
38
40
|
"@testing-library/react-hooks": "7.0.2",
|
|
39
41
|
"@testing-library/user-event": "13.5.0",
|
|
40
42
|
"@typescript-eslint/eslint-plugin": "5.10.2",
|
|
@@ -61,6 +63,7 @@
|
|
|
61
63
|
"eslint-plugin-prettier": "4.0.0",
|
|
62
64
|
"eslint-plugin-react": "7.28.0",
|
|
63
65
|
"eslint-plugin-react-hooks": "4.3.0",
|
|
66
|
+
"eslint-plugin-testing-library": "5.0.5",
|
|
64
67
|
"jest": "27.4.7",
|
|
65
68
|
"npm-package-json-lint": "5.4.2",
|
|
66
69
|
"prettier": "2.5.1",
|
|
@@ -78,7 +81,7 @@
|
|
|
78
81
|
"ts-jest": "27.1.3",
|
|
79
82
|
"tsc-alias": "1.5.0",
|
|
80
83
|
"typescript": "4.5.5",
|
|
81
|
-
"vanilla-framework": "3.1.
|
|
84
|
+
"vanilla-framework": "3.1.1",
|
|
82
85
|
"wait-on": "5.3.0"
|
|
83
86
|
},
|
|
84
87
|
"dependencies": {
|
|
@@ -99,7 +102,7 @@
|
|
|
99
102
|
"peerDependencies": {
|
|
100
103
|
"react": "17.0.2",
|
|
101
104
|
"react-dom": "17.0.2",
|
|
102
|
-
"vanilla-framework": "3.1.
|
|
105
|
+
"vanilla-framework": "3.1.1"
|
|
103
106
|
},
|
|
104
107
|
"scripts": {
|
|
105
108
|
"build": "rm -rf dist && yarn build-local; yarn build-declaration",
|
|
@@ -151,10 +154,10 @@
|
|
|
151
154
|
"snapshotSerializers": [
|
|
152
155
|
"enzyme-to-json/serializer"
|
|
153
156
|
],
|
|
154
|
-
"
|
|
157
|
+
"setupFilesAfterEnv": [
|
|
155
158
|
"<rootDir>/src/setupTests.js"
|
|
156
159
|
],
|
|
157
|
-
"testEnvironment": "jsdom",
|
|
160
|
+
"testEnvironment": "jest-environment-jsdom",
|
|
158
161
|
"moduleDirectories": [
|
|
159
162
|
"node_modules",
|
|
160
163
|
"src"
|