@deque/cauldron-react 7.6.0-canary.f3f1b3ab → 7.6.0-canary.f4013a2a

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.
@@ -1,34 +1,16 @@
1
- import React, { ChangeEvent } from 'react';
1
+ import React from 'react';
2
2
  export interface TextFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {
3
3
  label: React.ReactNode;
4
4
  description?: React.ReactNode;
5
5
  error?: React.ReactNode;
6
6
  defaultValue?: string;
7
7
  onChange?: (value: string, e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
8
+ /**
9
+ * @deprecated Use the forwarded `ref` instead. Will be removed in the next major version.
10
+ */
8
11
  fieldRef?: React.Ref<HTMLInputElement | HTMLTextAreaElement>;
9
12
  requiredText?: string;
10
13
  multiline?: boolean;
11
14
  }
12
- interface TextFieldState {
13
- value: string | number | string[] | undefined;
14
- }
15
- export default class TextField extends React.Component<TextFieldProps, TextFieldState> {
16
- static displayName: string;
17
- static defaultProps: {
18
- error: null;
19
- required: boolean;
20
- defaultValue: null;
21
- onChange: () => void;
22
- fieldRef: () => void;
23
- requiredText: string;
24
- multiline: boolean;
25
- };
26
- private inputId;
27
- private errorId;
28
- private descriptionId;
29
- private input;
30
- constructor(props: TextFieldProps);
31
- render(): React.JSX.Element;
32
- onChange(e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>): void;
33
- }
34
- export {};
15
+ declare const TextField: React.ForwardRefExoticComponent<TextFieldProps & React.RefAttributes<HTMLInputElement | HTMLTextAreaElement>>;
16
+ export default TextField;
package/lib/index.js CHANGED
@@ -2749,89 +2749,53 @@ function TooltipTabstop(_a) {
2749
2749
  }
2750
2750
  TooltipTabstop.displayName = 'TooltipTabstop';
2751
2751
 
2752
- var TextField = /** @class */ (function (_super) {
2753
- tslib.__extends(TextField, _super);
2754
- function TextField(props) {
2755
- var _this = _super.call(this, props) || this;
2756
- _this.inputId = _this.props.id || randomId();
2757
- _this.errorId = randomId();
2758
- _this.descriptionId = randomId();
2759
- _this.state = {
2760
- value: typeof _this.props.value !== 'undefined'
2761
- ? _this.props.value
2762
- : _this.props.defaultValue || ''
2763
- };
2764
- _this.onChange = _this.onChange.bind(_this);
2765
- return _this;
2766
- }
2767
- TextField.prototype.render = function () {
2768
- var _this = this;
2769
- var isRequired = !!this.props.required;
2770
- // disabling `no-unused-vars` to prevent specific
2771
- // props from being passed through to the input
2772
- var _a = this.props, label = _a.label, fieldRef = _a.fieldRef, value = _a.value, description = _a.description;
2773
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
2774
- _a.onChange;
2775
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
2776
- _a.defaultValue; var _b = _a.error, error = _b === void 0 ? null : _b, requiredText = _a.requiredText, multiline = _a.multiline, ariaDescribedby = _a["aria-describedby"]; _a.children; var className = _a.className, other = tslib.__rest(_a, ["label", "fieldRef", "value", "description", "onChange", "defaultValue", "error", "requiredText", "multiline", 'aria-describedby', "children", "className"]);
2777
- // typescript can't infer the type so it's complaining about
2778
- // textarea and input props being incompatible
2779
- // we should probably fix this
2780
- var Field = multiline ? 'textarea' : 'input';
2781
- var describedby = description
2782
- ? addIdRef(ariaDescribedby, this.descriptionId)
2783
- : ariaDescribedby;
2784
- var inputProps = {
2785
- 'aria-describedby': error
2786
- ? addIdRef(describedby, this.errorId)
2787
- : describedby
2788
- };
2789
- return (React__default["default"].createElement("div", { className: "Field" },
2790
- React__default["default"].createElement("label", { className: classNames__default["default"]('Field__label', {
2791
- 'Field__label--is-required': isRequired,
2792
- 'Field__label--has-error': error
2793
- }), htmlFor: this.inputId },
2794
- React__default["default"].createElement("span", null, label),
2795
- isRequired && (React__default["default"].createElement("span", { className: "Field__required-text", "aria-hidden": "true" }, requiredText))),
2796
- description && (React__default["default"].createElement("div", { className: "Field__description", id: this.descriptionId }, description)),
2797
- error && (React__default["default"].createElement("div", { className: "Field__error", id: this.errorId },
2798
- React__default["default"].createElement(Icon, { type: "caution" }),
2799
- error)),
2800
- React__default["default"].createElement(Field, tslib.__assign({ className: classNames__default["default"](className, {
2801
- 'Field__text-input': !multiline,
2802
- Field__textarea: multiline,
2803
- 'Field--has-error': error
2804
- }), id: this.inputId, value: typeof value !== 'undefined' ? value : this.state.value, onChange: this.onChange, "aria-invalid": !!error, ref: function (input) {
2805
- _this.input = input;
2806
- setRef(fieldRef, input);
2807
- } }, other, inputProps))));
2808
- };
2809
- TextField.prototype.onChange = function (e) {
2810
- var _a, _b;
2811
- if (this.props.onChange) {
2812
- this.props.onChange(((_a = this.input) === null || _a === void 0 ? void 0 : _a.value) || /* istanbul ignore next: default value */ '', e);
2813
- }
2814
- if (typeof this.props.value !== 'undefined') {
2752
+ var TextField = React.forwardRef(function (_a, ref) {
2753
+ var id = _a.id, label = _a.label, fieldRef = _a.fieldRef, value = _a.value, description = _a.description, onChange = _a.onChange, defaultValue = _a.defaultValue, _b = _a.error, error = _b === void 0 ? null : _b, _c = _a.required, required = _c === void 0 ? false : _c, _d = _a.requiredText, requiredText = _d === void 0 ? 'Required' : _d, _e = _a.multiline, multiline = _e === void 0 ? false : _e, ariaDescribedby = _a["aria-describedby"];
2754
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2755
+ _a.children; var className = _a.className, other = tslib.__rest(_a, ["id", "label", "fieldRef", "value", "description", "onChange", "defaultValue", "error", "required", "requiredText", "multiline", 'aria-describedby', "children", "className"]);
2756
+ var _f = tslib.__read(nextId.useId(3, 'textfield'), 3), generatedInputId = _f[0], errorId = _f[1], descriptionId = _f[2];
2757
+ var inputId = id || generatedInputId;
2758
+ var isControlled = typeof value !== 'undefined';
2759
+ var _g = tslib.__read(React.useState(isControlled ? value : defaultValue || ''), 2), uncontrolledValue = _g[0], setUncontrolledValue = _g[1];
2760
+ var setFieldRef = React.useCallback(function (field) {
2761
+ setRef(ref, field);
2762
+ setRef(fieldRef, field);
2763
+ }, [ref, fieldRef]);
2764
+ var handleChange = function (e) {
2765
+ onChange === null || onChange === void 0 ? void 0 : onChange(e.target.value, e);
2766
+ if (isControlled) {
2815
2767
  return;
2816
2768
  }
2817
- this.setState({
2818
- value: (_b = this.input) === null || _b === void 0 ? void 0 : _b.value
2819
- });
2769
+ setUncontrolledValue(e.target.value);
2820
2770
  };
2821
- TextField.displayName = 'TextField';
2822
- TextField.defaultProps = {
2823
- error: null,
2824
- required: false,
2825
- defaultValue: null,
2826
- // eslint-disable-next-line @typescript-eslint/no-empty-function
2827
- onChange: function () { },
2828
- // eslint-disable-next-line @typescript-eslint/no-empty-function
2829
- fieldRef: function () { },
2830
- requiredText: 'Required',
2831
- multiline: false
2771
+ // typescript can't infer the type so it's complaining about
2772
+ // textarea and input props being incompatible
2773
+ // we should probably fix this
2774
+ var Field = multiline ? 'textarea' : 'input';
2775
+ var describedby = description
2776
+ ? addIdRef(ariaDescribedby, descriptionId)
2777
+ : ariaDescribedby;
2778
+ var inputProps = {
2779
+ 'aria-describedby': error ? addIdRef(describedby, errorId) : describedby
2832
2780
  };
2833
- return TextField;
2834
- }(React__default["default"].Component));
2781
+ return (React__default["default"].createElement("div", { className: "Field" },
2782
+ React__default["default"].createElement("label", { className: classNames__default["default"]('Field__label', {
2783
+ 'Field__label--is-required': required,
2784
+ 'Field__label--has-error': error
2785
+ }), htmlFor: inputId },
2786
+ React__default["default"].createElement("span", null, label),
2787
+ required && (React__default["default"].createElement("span", { className: "Field__required-text", "aria-hidden": "true" }, requiredText))),
2788
+ description && (React__default["default"].createElement("div", { className: "Field__description", id: descriptionId }, description)),
2789
+ error && (React__default["default"].createElement("div", { className: "Field__error", id: errorId },
2790
+ React__default["default"].createElement(Icon, { type: "caution" }),
2791
+ error)),
2792
+ React__default["default"].createElement(Field, tslib.__assign({ className: classNames__default["default"](className, {
2793
+ 'Field__text-input': !multiline,
2794
+ Field__textarea: multiline,
2795
+ 'Field--has-error': error
2796
+ }), id: inputId, value: isControlled ? value : uncontrolledValue, onChange: handleChange, "aria-invalid": !!error, required: required, ref: setFieldRef }, other, inputProps))));
2797
+ });
2798
+ TextField.displayName = 'TextField';
2835
2799
 
2836
2800
  var TextFieldWrapper = React.forwardRef(function (_a, ref) {
2837
2801
  var className = _a.className, children = _a.children, otherProps = tslib.__rest(_a, ["className", "children"]);
@@ -3768,7 +3732,7 @@ var Notice = React.forwardRef(function (_a, ref) {
3768
3732
  _b["Notice--".concat(type)] = type,
3769
3733
  _b["Notice--condensed"] = variant === 'condensed',
3770
3734
  _b)), ref: ref }, otherProps),
3771
- React__default["default"].createElement(Icon, { type: icon || iconTypeMap[type] }),
3735
+ React__default["default"].createElement(Icon, { className: "Notice__icon", type: icon || iconTypeMap[type] }),
3772
3736
  React__default["default"].createElement("div", { className: "Notice__title" }, title),
3773
3737
  children && React__default["default"].createElement("div", { className: "Notice__content" }, children)));
3774
3738
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deque/cauldron-react",
3
- "version": "7.6.0-canary.f3f1b3ab",
3
+ "version": "7.6.0-canary.f4013a2a",
4
4
  "license": "MPL-2.0",
5
5
  "description": "Fully accessible react components library for Deque Cauldron",
6
6
  "homepage": "https://cauldron.dequelabs.com/",