@canonical/react-components 0.33.0 → 0.34.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.
@@ -0,0 +1 @@
1
+ export declare const nanoid: () => string;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.nanoid = void 0;
7
+ var id = 0;
8
+ beforeEach(function () {
9
+ id = 0;
10
+ });
11
+
12
+ var nanoid = function nanoid() {
13
+ id++;
14
+ return "mock-nanoid-".concat(id);
15
+ };
16
+
17
+ exports.nanoid = nanoid;
@@ -43,6 +43,6 @@ export declare type Props = PropsWithSpread<{
43
43
  * The value of the chip.
44
44
  */
45
45
  value: string;
46
- }, HTMLProps<HTMLSpanElement>>;
46
+ }, HTMLProps<HTMLButtonElement>>;
47
47
  declare const Chip: ({ appearance, lead, onClick, onDismiss, quoteValue, selected, subString, value, ...props }: Props) => JSX.Element;
48
48
  export default Chip;
@@ -71,27 +71,28 @@ var Chip = function Chip(_ref) {
71
71
  }
72
72
  }));
73
73
 
74
- var chipClassName = (0, _classnames.default)((_classNames = {}, _defineProperty(_classNames, "p-chip--".concat(appearance), !!appearance), _defineProperty(_classNames, "p-chip", !appearance), _classNames));
74
+ var chipClassName = (0, _classnames.default)((_classNames = {}, _defineProperty(_classNames, "p-chip--".concat(appearance), !!appearance), _defineProperty(_classNames, "p-chip", !appearance), _classNames), props.className);
75
75
 
76
76
  if (onDismiss) {
77
- return /*#__PURE__*/_react.default.createElement("span", _extends({
78
- className: chipClassName,
79
- "aria-pressed": selected
80
- }, props), chipContent, /*#__PURE__*/_react.default.createElement("button", {
77
+ return /*#__PURE__*/_react.default.createElement("span", _extends({}, props, {
78
+ className: chipClassName
79
+ }), chipContent, /*#__PURE__*/_react.default.createElement("button", {
81
80
  className: "p-chip__dismiss",
82
- onClick: onDismiss
81
+ onClick: onDismiss,
82
+ type: "button"
83
83
  }, /*#__PURE__*/_react.default.createElement("i", {
84
84
  className: "p-icon--close"
85
85
  }, "Dismiss")));
86
86
  } else {
87
- return /*#__PURE__*/_react.default.createElement("button", {
88
- className: chipClassName,
87
+ return /*#__PURE__*/_react.default.createElement("button", _extends({}, props, {
89
88
  "aria-pressed": selected,
89
+ className: chipClassName,
90
90
  onClick: onClick,
91
91
  onKeyDown: function onKeyDown(e) {
92
92
  return _onKeyDown(e);
93
- }
94
- }, chipContent);
93
+ },
94
+ type: "button"
95
+ }), chipContent);
95
96
  }
96
97
  };
97
98
 
@@ -28,6 +28,10 @@ export declare type Props = {
28
28
  * Help text to show below the field.
29
29
  */
30
30
  help?: ReactNode;
31
+ /**
32
+ * An id to give to the help element.
33
+ */
34
+ helpId?: string;
31
35
  /**
32
36
  * Whether the component is wrapping a select element.
33
37
  */
@@ -56,6 +60,10 @@ export declare type Props = {
56
60
  * The content for success validation.
57
61
  */
58
62
  success?: ReactNode;
63
+ /**
64
+ * An id to give to the caution, error or success element.
65
+ */
66
+ validationId?: string;
59
67
  };
60
- declare const Field: ({ caution, children, className, error, forId, help, isSelect, label, labelClassName, labelFirst, required, stacked, success, }: Props) => JSX.Element;
68
+ declare const Field: ({ caution, children, className, error, forId, help, helpId, isSelect, label, labelClassName, labelFirst, required, stacked, success, validationId, }: Props) => JSX.Element;
61
69
  export default Field;
@@ -15,20 +15,22 @@ var _Col = _interopRequireDefault(require("../Col"));
15
15
 
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
18
- var generateHelp = function generateHelp(help) {
18
+ var generateHelp = function generateHelp(help, helpId) {
19
19
  return help && /*#__PURE__*/_react.default.createElement("p", {
20
- className: "p-form-help-text"
20
+ className: "p-form-help-text",
21
+ id: helpId
21
22
  }, help);
22
23
  };
23
24
 
24
- var generateError = function generateError(error, caution, success) {
25
+ var generateError = function generateError(error, caution, success, validationId) {
25
26
  if (!error && !caution && !success) {
26
27
  return null;
27
28
  }
28
29
 
29
30
  var messageType = error && "Error" || caution && "Caution" || success && "Success";
30
31
  return /*#__PURE__*/_react.default.createElement("p", {
31
- className: "p-form-validation__message"
32
+ className: "p-form-validation__message",
33
+ id: validationId
32
34
  }, /*#__PURE__*/_react.default.createElement("strong", null, messageType, ":"), " ", error || caution || success);
33
35
  };
34
36
 
@@ -52,12 +54,12 @@ var generateLabel = function generateLabel(forId, required, label, labelClassNam
52
54
  return labelNode;
53
55
  };
54
56
 
55
- var generateContent = function generateContent(isSelect, children, labelFirst, labelNode, help, error, caution, success) {
57
+ var generateContent = function generateContent(isSelect, children, labelFirst, labelNode, help, error, caution, success, validationId, helpId) {
56
58
  return /*#__PURE__*/_react.default.createElement("div", {
57
59
  className: "p-form__control u-clearfix"
58
60
  }, isSelect ? /*#__PURE__*/_react.default.createElement("div", {
59
61
  className: "p-form-validation__select-wrapper"
60
- }, children) : children, !labelFirst && labelNode, generateHelp(help), generateError(error, caution, success));
62
+ }, children) : children, !labelFirst && labelNode, generateHelp(help, helpId), generateError(error, caution, success, validationId));
61
63
  };
62
64
 
63
65
  var Field = function Field(_ref) {
@@ -67,6 +69,7 @@ var Field = function Field(_ref) {
67
69
  error = _ref.error,
68
70
  forId = _ref.forId,
69
71
  help = _ref.help,
72
+ helpId = _ref.helpId,
70
73
  isSelect = _ref.isSelect,
71
74
  label = _ref.label,
72
75
  labelClassName = _ref.labelClassName,
@@ -74,9 +77,10 @@ var Field = function Field(_ref) {
74
77
  labelFirst = _ref$labelFirst === void 0 ? true : _ref$labelFirst,
75
78
  required = _ref.required,
76
79
  stacked = _ref.stacked,
77
- success = _ref.success;
80
+ success = _ref.success,
81
+ validationId = _ref.validationId;
78
82
  var labelNode = generateLabel(forId, required, label, labelClassName, stacked);
79
- var content = generateContent(isSelect, children, labelFirst, labelNode, help, error, caution, success);
83
+ var content = generateContent(isSelect, children, labelFirst, labelNode, help, error, caution, success, validationId, helpId);
80
84
  return /*#__PURE__*/_react.default.createElement("div", {
81
85
  className: (0, _classnames.default)("p-form__group", "p-form-validation", className, {
82
86
  "is-error": error,
@@ -17,6 +17,8 @@ var _CheckboxInput = _interopRequireDefault(require("../CheckboxInput"));
17
17
 
18
18
  var _RadioInput = _interopRequireDefault(require("../RadioInput"));
19
19
 
20
+ var _hooks = require("../../hooks");
21
+
20
22
  var _excluded = ["caution", "className", "error", "help", "id", "label", "labelClassName", "required", "stacked", "success", "takeFocus", "type", "wrapperClassName"];
21
23
 
22
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); }
@@ -27,6 +29,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
27
29
 
28
30
  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); }
29
31
 
32
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
33
+
34
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
35
+
36
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
37
+
30
38
  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; }
31
39
 
32
40
  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; }
@@ -49,6 +57,19 @@ var Input = function Input(_ref) {
49
57
 
50
58
  var inputRef = (0, _react.useRef)(null);
51
59
  var fieldLabel = !["checkbox", "radio"].includes(type) ? label : "";
60
+ var validationId = (0, _hooks.useId)();
61
+ var helpId = (0, _hooks.useId)();
62
+ var hasError = !!error;
63
+
64
+ var commonProps = _objectSpread({
65
+ "aria-describedby": help ? helpId : null,
66
+ "aria-errormessage": hasError ? validationId : null,
67
+ "aria-invalid": hasError,
68
+ id: id,
69
+ label: label,
70
+ required: required
71
+ }, inputProps);
72
+
52
73
  (0, _react.useEffect)(function () {
53
74
  if (takeFocus) {
54
75
  inputRef.current.focus();
@@ -58,27 +79,20 @@ var Input = function Input(_ref) {
58
79
 
59
80
  if (type === "checkbox") {
60
81
  input = /*#__PURE__*/_react.default.createElement(_CheckboxInput.default, _extends({
61
- id: id,
62
82
  label: label,
63
- labelClassName: labelClassName,
64
- required: required
65
- }, inputProps));
83
+ labelClassName: labelClassName
84
+ }, commonProps));
66
85
  } else if (type === "radio") {
67
86
  input = /*#__PURE__*/_react.default.createElement(_RadioInput.default, _extends({
68
- id: id,
69
87
  label: label,
70
- labelClassName: labelClassName,
71
- required: required
72
- }, inputProps));
88
+ labelClassName: labelClassName
89
+ }, commonProps));
73
90
  } else {
74
91
  input = /*#__PURE__*/_react.default.createElement("input", _extends({
75
92
  className: (0, _classnames.default)("p-form-validation__input", className),
76
- id: id,
77
93
  ref: inputRef,
78
- required: required,
79
- type: type,
80
- "aria-invalid": !!error
81
- }, inputProps));
94
+ type: type
95
+ }, commonProps));
82
96
  }
83
97
 
84
98
  return /*#__PURE__*/_react.default.createElement(_Field.default, {
@@ -87,11 +101,13 @@ var Input = function Input(_ref) {
87
101
  error: error,
88
102
  forId: id,
89
103
  help: help,
104
+ helpId: helpId,
90
105
  label: fieldLabel,
91
106
  labelClassName: labelClassName,
92
107
  required: required,
93
108
  stacked: stacked,
94
- success: success
109
+ success: success,
110
+ validationId: validationId
95
111
  }, input);
96
112
  };
97
113
 
@@ -22,7 +22,8 @@ var PaginationItem = function PaginationItem(_ref) {
22
22
  className: (0, _classnames.default)("p-pagination__link", {
23
23
  "is-active": isActive
24
24
  }),
25
- onClick: onClick
25
+ onClick: onClick,
26
+ "aria-current": isActive ? "page" : undefined
26
27
  }, number));
27
28
  };
28
29
 
@@ -17,6 +17,8 @@ var _Field = _interopRequireDefault(require("../Field"));
17
17
 
18
18
  var _Label = _interopRequireDefault(require("../Label"));
19
19
 
20
+ var _hooks = require("../../hooks");
21
+
20
22
  var _excluded = ["caution", "className", "error", "help", "id", "label", "readOnly", "required", "success", "type", "wrapperClassName"];
21
23
 
22
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); }
@@ -62,6 +64,10 @@ var PasswordToggle = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
62
64
  isPassword = _useState2[0],
63
65
  setIsPassword = _useState2[1];
64
66
 
67
+ var validationId = (0, _hooks.useId)();
68
+ var helpId = (0, _hooks.useId)();
69
+ var hasError = !!error;
70
+
65
71
  var togglePassword = function togglePassword() {
66
72
  if (isPassword) {
67
73
  setIsPassword(false);
@@ -75,8 +81,10 @@ var PasswordToggle = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
75
81
  className: wrapperClassName,
76
82
  error: error,
77
83
  help: help,
84
+ helpId: helpId,
78
85
  required: required,
79
- success: success
86
+ success: success,
87
+ validationId: validationId
80
88
  }, /*#__PURE__*/_react.default.createElement("div", {
81
89
  className: "p-form-password-toggle"
82
90
  }, /*#__PURE__*/_react.default.createElement(_Label.default, {
@@ -97,11 +105,14 @@ var PasswordToggle = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
97
105
  }, isPassword ? "Show" : "Hide"), /*#__PURE__*/_react.default.createElement("i", {
98
106
  className: isPassword ? "p-icon--show" : "p-icon--hide"
99
107
  }))), /*#__PURE__*/_react.default.createElement("input", _extends({
108
+ "aria-describedby": help ? helpId : null,
109
+ "aria-errormessage": hasError ? validationId : null,
110
+ "aria-invalid": hasError,
100
111
  className: (0, _classnames.default)("p-form-validation__input", className),
101
112
  id: id,
113
+ readOnly: readOnly,
102
114
  ref: ref,
103
- type: isPassword ? "password" : "text",
104
- readOnly: readOnly
115
+ type: isPassword ? "password" : "text"
105
116
  }, inputProps)));
106
117
  });
107
118
 
@@ -13,6 +13,8 @@ var _react = _interopRequireWildcard(require("react"));
13
13
 
14
14
  var _Field = _interopRequireDefault(require("../Field"));
15
15
 
16
+ var _hooks = require("../../hooks");
17
+
16
18
  var _excluded = ["label", "value"],
17
19
  _excluded2 = ["caution", "className", "error", "help", "id", "label", "labelClassName", "onChange", "options", "required", "stacked", "success", "takeFocus", "wrapperClassName"];
18
20
 
@@ -59,6 +61,9 @@ var Select = function Select(_ref2) {
59
61
  selectProps = _objectWithoutProperties(_ref2, _excluded2);
60
62
 
61
63
  var selectRef = (0, _react.useRef)(null);
64
+ var validationId = (0, _hooks.useId)();
65
+ var helpId = (0, _hooks.useId)();
66
+ var hasError = !!error;
62
67
  (0, _react.useEffect)(function () {
63
68
  if (takeFocus) {
64
69
  selectRef.current.focus();
@@ -70,13 +75,18 @@ var Select = function Select(_ref2) {
70
75
  error: error,
71
76
  forId: id,
72
77
  help: help,
78
+ helpId: helpId,
73
79
  isSelect: true,
74
80
  label: label,
75
81
  labelClassName: labelClassName,
76
82
  required: required,
77
83
  stacked: stacked,
78
- success: success
84
+ success: success,
85
+ validationId: validationId
79
86
  }, /*#__PURE__*/_react.default.createElement("select", _extends({
87
+ "aria-describedby": help ? helpId : null,
88
+ "aria-errormessage": hasError ? validationId : null,
89
+ "aria-invalid": hasError,
80
90
  className: (0, _classnames.default)("p-form-validation__input", className),
81
91
  id: id,
82
92
  onChange: function onChange(evt) {
@@ -9,6 +9,8 @@ var _react = _interopRequireDefault(require("react"));
9
9
 
10
10
  var _Field = _interopRequireDefault(require("../Field"));
11
11
 
12
+ var _hooks = require("../../hooks");
13
+
12
14
  var _excluded = ["caution", "disabled", "error", "help", "id", "inputDisabled", "label", "max", "min", "onChange", "required", "showInput"];
13
15
 
14
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -45,6 +47,9 @@ var Slider = function Slider(_ref) {
45
47
  showInput = _ref$showInput === void 0 ? false : _ref$showInput,
46
48
  inputProps = _objectWithoutProperties(_ref, _excluded);
47
49
 
50
+ var validationId = (0, _hooks.useId)();
51
+ var helpId = (0, _hooks.useId)();
52
+ var hasError = !!error;
48
53
  var style = {};
49
54
 
50
55
  if ((_navigator = navigator) !== null && _navigator !== void 0 && (_navigator$userAgent = _navigator.userAgent) !== null && _navigator$userAgent !== void 0 && _navigator$userAgent.includes("AppleWebKit")) {
@@ -61,11 +66,16 @@ var Slider = function Slider(_ref) {
61
66
  caution: caution,
62
67
  error: error,
63
68
  help: help,
69
+ helpId: helpId,
64
70
  label: label,
65
- required: required
71
+ required: required,
72
+ validationId: validationId
66
73
  }, /*#__PURE__*/_react.default.createElement("div", {
67
74
  className: "p-slider__wrapper"
68
75
  }, /*#__PURE__*/_react.default.createElement("input", _extends({
76
+ "aria-describedby": help ? helpId : null,
77
+ "aria-errormessage": hasError ? validationId : null,
78
+ "aria-invalid": hasError,
69
79
  disabled: disabled,
70
80
  id: id,
71
81
  max: max,
@@ -75,6 +85,9 @@ var Slider = function Slider(_ref) {
75
85
  style: style,
76
86
  type: "range"
77
87
  }, inputProps)), showInput && /*#__PURE__*/_react.default.createElement("input", _extends({
88
+ "aria-describedby": help ? helpId : null,
89
+ "aria-errormessage": hasError ? validationId : null,
90
+ "aria-invalid": hasError,
78
91
  className: "p-slider__input",
79
92
  disabled: disabled || inputDisabled,
80
93
  max: max,
@@ -13,6 +13,8 @@ var _react = _interopRequireWildcard(require("react"));
13
13
 
14
14
  var _Field = _interopRequireDefault(require("../Field"));
15
15
 
16
+ var _hooks = require("../../hooks");
17
+
16
18
  var _excluded = ["caution", "className", "error", "grow", "help", "id", "label", "labelClassName", "onKeyUp", "required", "stacked", "style", "success", "takeFocus", "wrapperClassName"];
17
19
 
18
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); }
@@ -54,6 +56,9 @@ var Textarea = function Textarea(_ref) {
54
56
  props = _objectWithoutProperties(_ref, _excluded);
55
57
 
56
58
  var textareaRef = (0, _react.useRef)(null);
59
+ var validationId = (0, _hooks.useId)();
60
+ var helpId = (0, _hooks.useId)();
61
+ var hasError = !!error;
57
62
  (0, _react.useEffect)(function () {
58
63
  if (takeFocus) {
59
64
  textareaRef.current.focus();
@@ -65,12 +70,17 @@ var Textarea = function Textarea(_ref) {
65
70
  error: error,
66
71
  forId: id,
67
72
  help: help,
73
+ helpId: helpId,
68
74
  label: label,
69
75
  labelClassName: labelClassName,
70
76
  required: required,
71
77
  stacked: stacked,
72
- success: success
78
+ success: success,
79
+ validationId: validationId
73
80
  }, /*#__PURE__*/_react.default.createElement("textarea", _extends({
81
+ "aria-describedby": help ? helpId : null,
82
+ "aria-errormessage": hasError ? validationId : null,
83
+ "aria-invalid": hasError,
74
84
  className: (0, _classnames.default)("p-form-validation__input", className),
75
85
  id: id,
76
86
  onKeyUp: function onKeyUp(evt) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonical/react-components",
3
- "version": "0.33.0",
3
+ "version": "0.34.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "author": "Huw Wilkins <huw.wilkins@canonical.com>",