@festo-ui/react 7.0.0-dev.317 → 7.0.0-dev.342

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/index.d.ts CHANGED
@@ -42,7 +42,9 @@ export { default as ColorIndicator } from './lib/forms/color-indicator/ColorIndi
42
42
  export { default as ColorPicker } from './lib/forms/color-picker/ColorPicker';
43
43
  export { default as DatePicker } from './lib/forms/date-picker/DatePicker';
44
44
  export { default as DateRangePicker } from './lib/forms/date-range-picker/DateRangePicker';
45
- export { default as RadioButton, default as RadioGroup } from './lib/forms/radio/RadioButton';
45
+ export { default as RadioButton } from './lib/forms/radio/RadioButton';
46
+ export { default as Radio } from './lib/forms/radio/RadioButton';
47
+ export { default as RadioGroup } from './lib/forms/radio/RadioGroup';
46
48
  export { default as Segment } from './lib/forms/segment/Segment';
47
49
  export { default as SegmentControl } from './lib/forms/segment/segment-control/SegmentControl';
48
50
  export { default as Select } from './lib/forms/select/Select';
package/index.js CHANGED
@@ -42,7 +42,9 @@ export { default as ColorIndicator } from './lib/forms/color-indicator/ColorIndi
42
42
  export { default as ColorPicker } from './lib/forms/color-picker/ColorPicker';
43
43
  export { default as DatePicker } from './lib/forms/date-picker/DatePicker';
44
44
  export { default as DateRangePicker } from './lib/forms/date-range-picker/DateRangePicker';
45
- export { default as RadioButton, default as RadioGroup } from './lib/forms/radio/RadioButton';
45
+ export { default as RadioButton } from './lib/forms/radio/RadioButton';
46
+ export { default as Radio } from './lib/forms/radio/RadioButton';
47
+ export { default as RadioGroup } from './lib/forms/radio/RadioGroup';
46
48
  export { default as Segment } from './lib/forms/segment/Segment';
47
49
  export { default as SegmentControl } from './lib/forms/segment/segment-control/SegmentControl';
48
50
  export { default as Select } from './lib/forms/select/Select';
@@ -5,6 +5,7 @@ import { jsxs as _jsxs } from "react/jsx-runtime";
5
5
  const Button = /*#__PURE__*/forwardRef((_ref, ref) => {
6
6
  let {
7
7
  icon,
8
+ type = 'button',
8
9
  disabled = false,
9
10
  iconOnly = false,
10
11
  large = false,
@@ -24,7 +25,9 @@ const Button = /*#__PURE__*/forwardRef((_ref, ref) => {
24
25
  'fwe-btn-lg': large
25
26
  }, className);
26
27
  return /*#__PURE__*/_jsxs("button", {
27
- type: "button",
28
+ // ignore here because fallback will explicitly be set to type 'button'
29
+ // eslint-disable-next-line react/button-has-type
30
+ type: type,
28
31
  onClick: onClick,
29
32
  className: classes,
30
33
  disabled: disabled,
@@ -1,15 +1,16 @@
1
1
  /// <reference types="react" />
2
2
  import { ClassNamePropsWithChildren } from '../../helper/types';
3
- export interface RadioButtonProps extends ClassNamePropsWithChildren {
4
- id: string;
3
+ export interface RadioProps extends ClassNamePropsWithChildren {
4
+ id?: string;
5
+ defaultChecked?: boolean;
5
6
  checked?: boolean;
6
- onChange: (value: string) => void;
7
- name: string;
8
- value: string;
7
+ onChange?: (value: string) => void;
8
+ name?: string;
9
+ value?: string;
9
10
  labelPosition?: 'before' | 'after' | 'below';
10
11
  large?: boolean;
11
12
  disabled?: boolean;
12
13
  required?: boolean;
13
14
  }
14
- declare function RadioButton({ id, onChange, value, name, checked, labelPosition, large, disabled, required, children, className, }: RadioButtonProps): JSX.Element;
15
- export default RadioButton;
15
+ declare function Radio(props: RadioProps): JSX.Element;
16
+ export default Radio;
@@ -1,14 +1,16 @@
1
1
  import { useContext } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import RadioGroupContext from './RadioGroupContext';
4
+ import useId from '../../helper/useId';
4
5
  import { jsx as _jsx } from "react/jsx-runtime";
5
6
  import { jsxs as _jsxs } from "react/jsx-runtime";
6
- function RadioButton(_ref) {
7
- let {
8
- id,
7
+ function Radio(props) {
8
+ const {
9
+ id: idProps,
9
10
  onChange,
10
11
  value,
11
12
  name,
13
+ defaultChecked: defaultCheckedProp,
12
14
  checked,
13
15
  labelPosition = 'after',
14
16
  large = false,
@@ -16,16 +18,18 @@ function RadioButton(_ref) {
16
18
  required = false,
17
19
  children,
18
20
  className
19
- } = _ref;
21
+ } = props;
20
22
  const {
21
23
  disabled: groupDisabled,
22
24
  labelPosition: groupLabelPosition,
23
25
  large: groupLarge,
24
26
  name: groupName,
27
+ value: groupValue,
25
28
  required: groupRequired,
26
- value: groupValue
29
+ handleValueChange: onGroupValueChange,
30
+ isControlled
27
31
  } = useContext(RadioGroupContext);
28
- const innerLabelPosition = groupLabelPosition || labelPosition;
32
+ const innerLabelPosition = groupLabelPosition ?? labelPosition;
29
33
  const classes = classNames('fwe-radio', {
30
34
  'fwe-radio-label-below': innerLabelPosition === 'below'
31
35
  }, {
@@ -33,16 +37,39 @@ function RadioButton(_ref) {
33
37
  }, {
34
38
  'fwe-radio-lg': large || groupLarge
35
39
  }, className);
40
+ const controlledChecked = checked !== undefined || isControlled && groupValue !== undefined ? Boolean(checked || groupValue === value) : undefined;
41
+ const getDefaultChecked = () => {
42
+ if (controlledChecked !== undefined) {
43
+ return undefined;
44
+ }
45
+ if (defaultCheckedProp !== undefined) {
46
+ return defaultCheckedProp;
47
+ }
48
+ if (!isControlled && groupValue !== undefined) {
49
+ return groupValue === value;
50
+ }
51
+ return undefined;
52
+ };
53
+ const defaultChecked = getDefaultChecked();
54
+ function handleChange(event) {
55
+ const newValue = event.target.value;
56
+ if (newValue) {
57
+ onGroupValueChange?.(newValue);
58
+ }
59
+ onChange?.(newValue);
60
+ }
61
+ const id = useId(idProps);
36
62
  return /*#__PURE__*/_jsxs("label", {
37
63
  className: classes,
38
64
  htmlFor: id,
39
65
  children: [/*#__PURE__*/_jsx("input", {
40
- checked: checked,
66
+ defaultChecked: defaultChecked,
67
+ checked: controlledChecked,
41
68
  type: "radio",
42
69
  id: id,
43
70
  name: groupName || name,
44
- value: value || groupValue,
45
- onChange: () => onChange(value),
71
+ value: value,
72
+ onChange: handleChange,
46
73
  disabled: disabled || groupDisabled,
47
74
  required: required || groupRequired
48
75
  }), /*#__PURE__*/_jsx("div", {
@@ -53,4 +80,4 @@ function RadioButton(_ref) {
53
80
  })]
54
81
  });
55
82
  }
56
- export default RadioButton;
83
+ export default Radio;
@@ -1,13 +1,14 @@
1
1
  /// <reference types="react" />
2
2
  import { ClassNamePropsWithChildren } from '../../helper/types';
3
3
  interface RadioGroupProps extends ClassNamePropsWithChildren {
4
- checked?: boolean;
5
- name: string;
6
- value: string;
4
+ name?: string;
5
+ defaultValue?: string;
6
+ onValueChange?: (value: string) => void;
7
+ value?: string;
7
8
  labelPosition?: 'before' | 'after' | 'below';
8
9
  large?: boolean;
9
10
  disabled?: boolean;
10
11
  required?: boolean;
11
12
  }
12
- declare function RadioGroup({ value, name, checked, labelPosition, large, disabled, required, children, className, }: RadioGroupProps): JSX.Element;
13
+ declare function RadioGroup(props: RadioGroupProps): JSX.Element;
13
14
  export default RadioGroup;
@@ -1,28 +1,35 @@
1
1
  import classNames from 'classnames';
2
- import { useMemo } from 'react';
2
+ import { useCallback, useMemo } from 'react';
3
+ import useControlled from '../../helper/useControlled';
4
+ import useId from '../../helper/useId';
3
5
  import RadioGroupContext from './RadioGroupContext';
4
6
  import { jsx as _jsx } from "react/jsx-runtime";
5
- function RadioGroup(_ref) {
6
- let {
7
- value,
8
- name,
9
- checked,
10
- labelPosition = 'after',
11
- large,
12
- disabled,
13
- required,
7
+ function RadioGroup(props) {
8
+ const {
14
9
  children,
15
- className
16
- } = _ref;
10
+ className,
11
+ onValueChange,
12
+ value: controlledValue,
13
+ defaultValue,
14
+ name,
15
+ ...restProps
16
+ } = props;
17
+ const contextName = useId(name);
18
+ const [value, setValue] = useControlled({
19
+ controlled: controlledValue,
20
+ default: defaultValue
21
+ });
22
+ const handleValueChange = useCallback(newValue => {
23
+ onValueChange?.(newValue);
24
+ setValue(newValue);
25
+ }, [onValueChange, setValue]);
17
26
  const contextValue = useMemo(() => ({
27
+ ...restProps,
28
+ handleValueChange,
18
29
  value,
19
- name,
20
- checked,
21
- labelPosition,
22
- large,
23
- disabled,
24
- required
25
- }), [checked, disabled, labelPosition, large, name, required, value]);
30
+ isControlled: controlledValue !== undefined,
31
+ name: contextName
32
+ }), [controlledValue, handleValueChange, restProps, value, contextName]);
26
33
  return /*#__PURE__*/_jsx(RadioGroupContext.Provider, {
27
34
  value: contextValue,
28
35
  children: /*#__PURE__*/_jsx("div", {
@@ -1,12 +1,13 @@
1
1
  /// <reference types="react" />
2
2
  interface ContextProps {
3
- checked?: boolean;
4
3
  name: string;
5
4
  value: string;
6
- labelPosition?: 'before' | 'after' | 'below';
7
- large?: boolean;
8
- disabled?: boolean;
9
- required?: boolean;
5
+ isControlled: boolean;
6
+ labelPosition: 'before' | 'after' | 'below';
7
+ large: boolean;
8
+ handleValueChange: (value: string) => void;
9
+ disabled: boolean;
10
+ required: boolean;
10
11
  }
11
12
  declare const RadioGroupContext: import("react").Context<Partial<ContextProps>>;
12
13
  export default RadioGroupContext;
package/node/index.js CHANGED
@@ -195,6 +195,12 @@ Object.defineProperty(exports, "Prompt", {
195
195
  return _Prompt.default;
196
196
  }
197
197
  });
198
+ Object.defineProperty(exports, "Radio", {
199
+ enumerable: true,
200
+ get: function () {
201
+ return _RadioButton.default;
202
+ }
203
+ });
198
204
  Object.defineProperty(exports, "RadioButton", {
199
205
  enumerable: true,
200
206
  get: function () {
@@ -204,7 +210,7 @@ Object.defineProperty(exports, "RadioButton", {
204
210
  Object.defineProperty(exports, "RadioGroup", {
205
211
  enumerable: true,
206
212
  get: function () {
207
- return _RadioButton.default;
213
+ return _RadioGroup.default;
208
214
  }
209
215
  });
210
216
  Object.defineProperty(exports, "SearchInput", {
@@ -390,6 +396,7 @@ var _ColorPicker = _interopRequireDefault(require("./lib/forms/color-picker/Colo
390
396
  var _DatePicker = _interopRequireDefault(require("./lib/forms/date-picker/DatePicker"));
391
397
  var _DateRangePicker = _interopRequireDefault(require("./lib/forms/date-range-picker/DateRangePicker"));
392
398
  var _RadioButton = _interopRequireDefault(require("./lib/forms/radio/RadioButton"));
399
+ var _RadioGroup = _interopRequireDefault(require("./lib/forms/radio/RadioGroup"));
393
400
  var _Segment = _interopRequireDefault(require("./lib/forms/segment/Segment"));
394
401
  var _SegmentControl = _interopRequireDefault(require("./lib/forms/segment/segment-control/SegmentControl"));
395
402
  var _Select = _interopRequireDefault(require("./lib/forms/select/Select"));
@@ -11,6 +11,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
11
11
  const Button = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
12
12
  let {
13
13
  icon,
14
+ type = 'button',
14
15
  disabled = false,
15
16
  iconOnly = false,
16
17
  large = false,
@@ -30,7 +31,9 @@ const Button = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
30
31
  'fwe-btn-lg': large
31
32
  }, className);
32
33
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("button", {
33
- type: "button",
34
+ // ignore here because fallback will explicitly be set to type 'button'
35
+ // eslint-disable-next-line react/button-has-type
36
+ type: type,
34
37
  onClick: onClick,
35
38
  className: classes,
36
39
  disabled: disabled,
@@ -7,14 +7,16 @@ exports.default = void 0;
7
7
  var _react = require("react");
8
8
  var _classnames = _interopRequireDefault(require("classnames"));
9
9
  var _RadioGroupContext = _interopRequireDefault(require("./RadioGroupContext"));
10
+ var _useId = _interopRequireDefault(require("../../helper/useId"));
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
- function RadioButton(_ref) {
13
- let {
14
- id,
13
+ function Radio(props) {
14
+ const {
15
+ id: idProps,
15
16
  onChange,
16
17
  value,
17
18
  name,
19
+ defaultChecked: defaultCheckedProp,
18
20
  checked,
19
21
  labelPosition = 'after',
20
22
  large = false,
@@ -22,16 +24,18 @@ function RadioButton(_ref) {
22
24
  required = false,
23
25
  children,
24
26
  className
25
- } = _ref;
27
+ } = props;
26
28
  const {
27
29
  disabled: groupDisabled,
28
30
  labelPosition: groupLabelPosition,
29
31
  large: groupLarge,
30
32
  name: groupName,
33
+ value: groupValue,
31
34
  required: groupRequired,
32
- value: groupValue
35
+ handleValueChange: onGroupValueChange,
36
+ isControlled
33
37
  } = (0, _react.useContext)(_RadioGroupContext.default);
34
- const innerLabelPosition = groupLabelPosition || labelPosition;
38
+ const innerLabelPosition = groupLabelPosition ?? labelPosition;
35
39
  const classes = (0, _classnames.default)('fwe-radio', {
36
40
  'fwe-radio-label-below': innerLabelPosition === 'below'
37
41
  }, {
@@ -39,16 +43,39 @@ function RadioButton(_ref) {
39
43
  }, {
40
44
  'fwe-radio-lg': large || groupLarge
41
45
  }, className);
46
+ const controlledChecked = checked !== undefined || isControlled && groupValue !== undefined ? Boolean(checked || groupValue === value) : undefined;
47
+ const getDefaultChecked = () => {
48
+ if (controlledChecked !== undefined) {
49
+ return undefined;
50
+ }
51
+ if (defaultCheckedProp !== undefined) {
52
+ return defaultCheckedProp;
53
+ }
54
+ if (!isControlled && groupValue !== undefined) {
55
+ return groupValue === value;
56
+ }
57
+ return undefined;
58
+ };
59
+ const defaultChecked = getDefaultChecked();
60
+ function handleChange(event) {
61
+ const newValue = event.target.value;
62
+ if (newValue) {
63
+ onGroupValueChange?.(newValue);
64
+ }
65
+ onChange?.(newValue);
66
+ }
67
+ const id = (0, _useId.default)(idProps);
42
68
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("label", {
43
69
  className: classes,
44
70
  htmlFor: id,
45
71
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
46
- checked: checked,
72
+ defaultChecked: defaultChecked,
73
+ checked: controlledChecked,
47
74
  type: "radio",
48
75
  id: id,
49
76
  name: groupName || name,
50
- value: value || groupValue,
51
- onChange: () => onChange(value),
77
+ value: value,
78
+ onChange: handleChange,
52
79
  disabled: disabled || groupDisabled,
53
80
  required: required || groupRequired
54
81
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
@@ -59,4 +86,4 @@ function RadioButton(_ref) {
59
86
  })]
60
87
  });
61
88
  }
62
- var _default = exports.default = RadioButton;
89
+ var _default = exports.default = Radio;
@@ -6,30 +6,37 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _classnames = _interopRequireDefault(require("classnames"));
8
8
  var _react = require("react");
9
+ var _useControlled = _interopRequireDefault(require("../../helper/useControlled"));
10
+ var _useId = _interopRequireDefault(require("../../helper/useId"));
9
11
  var _RadioGroupContext = _interopRequireDefault(require("./RadioGroupContext"));
10
12
  var _jsxRuntime = require("react/jsx-runtime");
11
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
- function RadioGroup(_ref) {
13
- let {
14
- value,
15
- name,
16
- checked,
17
- labelPosition = 'after',
18
- large,
19
- disabled,
20
- required,
14
+ function RadioGroup(props) {
15
+ const {
21
16
  children,
22
- className
23
- } = _ref;
17
+ className,
18
+ onValueChange,
19
+ value: controlledValue,
20
+ defaultValue,
21
+ name,
22
+ ...restProps
23
+ } = props;
24
+ const contextName = (0, _useId.default)(name);
25
+ const [value, setValue] = (0, _useControlled.default)({
26
+ controlled: controlledValue,
27
+ default: defaultValue
28
+ });
29
+ const handleValueChange = (0, _react.useCallback)(newValue => {
30
+ onValueChange?.(newValue);
31
+ setValue(newValue);
32
+ }, [onValueChange, setValue]);
24
33
  const contextValue = (0, _react.useMemo)(() => ({
34
+ ...restProps,
35
+ handleValueChange,
25
36
  value,
26
- name,
27
- checked,
28
- labelPosition,
29
- large,
30
- disabled,
31
- required
32
- }), [checked, disabled, labelPosition, large, name, required, value]);
37
+ isControlled: controlledValue !== undefined,
38
+ name: contextName
39
+ }), [controlledValue, handleValueChange, restProps, value, contextName]);
33
40
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RadioGroupContext.default.Provider, {
34
41
  value: contextValue,
35
42
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@festo-ui/react",
3
- "version": "7.0.0-dev.317",
3
+ "version": "7.0.0-dev.342",
4
4
  "author": "Festo UI (styleguide@festo.com)",
5
5
  "license": "apache-2.0",
6
6
  "exports": {