@atlaskit/form 12.6.2 → 13.0.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/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atlaskit/form
2
2
 
3
+ ## 13.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - [`2eb0f5a39acd6`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/2eb0f5a39acd6) -
8
+ Spread props have been removed from the checkbox field and range field components to improve
9
+ maintenance and consistency of experience for makers.
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
15
+ ## 12.7.0
16
+
17
+ ### Minor Changes
18
+
19
+ - [`edef4ab21e5c5`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/edef4ab21e5c5) -
20
+ We are testing a new streamlined implementation of the field component behind a feature flag. If
21
+ this fix is successful it will be available in a later release.
22
+
3
23
  ## 12.6.2
4
24
 
5
25
  ### Patch Changes
@@ -6,18 +6,15 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.default = void 0;
9
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
12
  var _react = _interopRequireWildcard(require("react"));
14
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
13
  var _field = _interopRequireDefault(require("./field"));
16
- var _excluded = ["children", "defaultIsChecked", "isDisabled", "isRequired", "label", "name", "value"],
17
- _excluded2 = ["value", "onChange"],
18
- _excluded3 = ["fieldProps"],
19
- _excluded4 = ["value", "onChange"],
20
- _excluded5 = ["fieldProps"];
14
+ var _excluded = ["value", "onChange"],
15
+ _excluded2 = ["fieldProps"],
16
+ _excluded3 = ["value", "onChange"],
17
+ _excluded4 = ["fieldProps"];
21
18
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
22
19
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
20
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -38,16 +35,13 @@ var CheckboxField = function CheckboxField(_ref) {
38
35
  isRequired = _ref.isRequired,
39
36
  label = _ref.label,
40
37
  name = _ref.name,
41
- value = _ref.value,
42
- rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
38
+ value = _ref.value;
43
39
  // Maintains a memoised list of the default values
44
40
  var defaultValue = (0, _react.useCallback)(function () {
45
41
  var currentValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
46
42
  return defaultIsChecked && value !== undefined ? [].concat((0, _toConsumableArray2.default)(currentValue), [value]) : currentValue;
47
43
  }, [value, defaultIsChecked]);
48
- return value !== undefined ? /*#__PURE__*/_react.default.createElement(_field.default
49
- // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
50
- , (0, _extends2.default)({}, (0, _platformFeatureFlags.fg)('platform_design-system-team_checkbox-field-spread') ? {} : _objectSpread({}, rest), {
44
+ return value !== undefined ? /*#__PURE__*/_react.default.createElement(_field.default, {
51
45
  defaultValue: defaultValue,
52
46
  isDisabled: isDisabled,
53
47
  isRequired: isRequired,
@@ -58,12 +52,12 @@ var CheckboxField = function CheckboxField(_ref) {
58
52
  return v !== value;
59
53
  });
60
54
  }
61
- }), function (_ref2) {
55
+ }, function (_ref2) {
62
56
  var _ref2$fieldProps = _ref2.fieldProps,
63
57
  fieldValue = _ref2$fieldProps.value,
64
58
  _onChange = _ref2$fieldProps.onChange,
65
- otherFieldProps = (0, _objectWithoutProperties2.default)(_ref2$fieldProps, _excluded2),
66
- others = (0, _objectWithoutProperties2.default)(_ref2, _excluded3);
59
+ otherFieldProps = (0, _objectWithoutProperties2.default)(_ref2$fieldProps, _excluded),
60
+ others = (0, _objectWithoutProperties2.default)(_ref2, _excluded2);
67
61
  return children(_objectSpread({
68
62
  fieldProps: _objectSpread(_objectSpread({}, otherFieldProps), {}, {
69
63
  // Setting to any because it's typed weirdly at the field level
@@ -76,9 +70,7 @@ var CheckboxField = function CheckboxField(_ref) {
76
70
  value: value
77
71
  })
78
72
  }, others));
79
- }) : /*#__PURE__*/_react.default.createElement(_field.default
80
- // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
81
- , (0, _extends2.default)({}, (0, _platformFeatureFlags.fg)('platform_design-system-team_checkbox-field-spread') ? {} : _objectSpread({}, rest), {
73
+ }) : /*#__PURE__*/_react.default.createElement(_field.default, {
82
74
  defaultValue: defaultIsChecked,
83
75
  isDisabled: isDisabled,
84
76
  isRequired: isRequired,
@@ -87,12 +79,12 @@ var CheckboxField = function CheckboxField(_ref) {
87
79
  transform: function transform(event) {
88
80
  return typeof event === 'boolean' ? event : event.currentTarget.checked;
89
81
  }
90
- }), function (_ref3) {
82
+ }, function (_ref3) {
91
83
  var _ref3$fieldProps = _ref3.fieldProps,
92
84
  fieldValue = _ref3$fieldProps.value,
93
85
  _onChange2 = _ref3$fieldProps.onChange,
94
- otherFieldProps = (0, _objectWithoutProperties2.default)(_ref3$fieldProps, _excluded4),
95
- others = (0, _objectWithoutProperties2.default)(_ref3, _excluded5);
86
+ otherFieldProps = (0, _objectWithoutProperties2.default)(_ref3$fieldProps, _excluded3),
87
+ others = (0, _objectWithoutProperties2.default)(_ref3, _excluded4);
96
88
  return children(_objectSpread({
97
89
  fieldProps: _objectSpread(_objectSpread({}, otherFieldProps), {}, {
98
90
  // Setting to any because it's typed weirdly at the field level
package/dist/cjs/field.js CHANGED
@@ -8,16 +8,17 @@ Object.defineProperty(exports, "__esModule", {
8
8
  });
9
9
  exports.default = Field;
10
10
  require("./field.compiled.css");
11
- var _react = _interopRequireWildcard(require("react"));
12
- var React = _react;
13
11
  var _runtime = require("@compiled/react/runtime");
14
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
13
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
16
14
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
15
+ var _react = _interopRequireWildcard(require("react"));
17
16
  var _useId = require("@atlaskit/ds-lib/use-id");
17
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
18
18
  var _fieldIdContext = require("./field-id-context");
19
19
  var _form = require("./form");
20
20
  var _label = require("./label");
21
+ var _messages = require("./messages");
21
22
  var _requiredAsterisk = _interopRequireDefault(require("./required-asterisk"));
22
23
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
23
24
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -67,6 +68,11 @@ function isShallowEqual(previousValue, currentValue) {
67
68
  }
68
69
  function Field(props) {
69
70
  var _getCurrentValue;
71
+ var _props$children = props.children,
72
+ children = _props$children === void 0 ? function () {
73
+ return null;
74
+ } : _props$children,
75
+ component = props.component;
70
76
  var _useContext = (0, _react.useContext)(_form.FormContext),
71
77
  registerField = _useContext.registerField,
72
78
  getCurrentValue = _useContext.getCurrentValue;
@@ -248,16 +254,18 @@ function Field(props) {
248
254
  'aria-labelledby': "".concat(fieldId, "-label"),
249
255
  id: fieldId
250
256
  });
251
- return /*#__PURE__*/React.createElement("div", {
257
+ return /*#__PURE__*/_react.default.createElement("div", {
252
258
  "data-testid": props.testId,
253
259
  className: (0, _runtime.ax)(["_1pfhu2gc"])
254
- }, props.label && /*#__PURE__*/React.createElement(_label.Label, {
260
+ }, props.label && /*#__PURE__*/_react.default.createElement(_label.Label, {
255
261
  htmlFor: fieldId,
256
262
  id: "".concat(fieldId, "-label"),
257
263
  testId: props.testId && "".concat(props.testId, "--label")
258
- }, props.label, props.isRequired && /*#__PURE__*/React.createElement(_requiredAsterisk.default, null), props.elementAfterLabel), /*#__PURE__*/React.createElement(_fieldIdContext.FieldId.Provider, {
264
+ }, props.label, props.isRequired && /*#__PURE__*/_react.default.createElement(_requiredAsterisk.default, null), props.elementAfterLabel), /*#__PURE__*/_react.default.createElement(_fieldIdContext.FieldId.Provider, {
259
265
  value: fieldId
260
- }, props.children({
266
+ }, component && (0, _platformFeatureFlags.fg)('platform_design-system-team_field-upgrade') ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, component && component({
267
+ fieldProps: extendedFieldProps
268
+ }), /*#__PURE__*/_react.default.createElement(_messages.MessageWrapper, null, props.helperMessage && /*#__PURE__*/_react.default.createElement(_messages.HelperMessage, null, props.helperMessage), state.error && /*#__PURE__*/_react.default.createElement(_messages.ErrorMessage, null, props.errorMessage || state.error), state.meta.touched && state.valid && props.validMessage && /*#__PURE__*/_react.default.createElement(_messages.ValidMessage, null, props.validMessage))) : children({
261
269
  fieldProps: extendedFieldProps,
262
270
  error: state.error,
263
271
  valid: state.valid,
@@ -5,15 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
9
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
10
  var _react = _interopRequireDefault(require("react"));
12
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
13
11
  var _field = _interopRequireDefault(require("./field"));
14
- var _excluded = ["children", "defaultValue", "id", "isDisabled", "label", "name"],
15
- _excluded2 = ["isInvalid", "isRequired"],
16
- _excluded3 = ["fieldProps"];
12
+ var _excluded = ["isInvalid", "isRequired"],
13
+ _excluded2 = ["fieldProps"];
17
14
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18
15
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19
16
  /**
@@ -31,21 +28,20 @@ var RangeField = function RangeField(_ref) {
31
28
  id = _ref.id,
32
29
  isDisabled = _ref.isDisabled,
33
30
  label = _ref.label,
34
- name = _ref.name,
35
- strippedProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
36
- return /*#__PURE__*/_react.default.createElement(_field.default, (0, _extends2.default)({}, (0, _platformFeatureFlags.fg)('platform_design-system-team_range-field-spread') ? {} : strippedProps, {
31
+ name = _ref.name;
32
+ return /*#__PURE__*/_react.default.createElement(_field.default, {
37
33
  defaultValue: defaultValue,
38
34
  id: id,
39
35
  isDisabled: isDisabled,
40
36
  label: label,
41
37
  name: name,
42
38
  transform: Number
43
- }), function (_ref2) {
39
+ }, function (_ref2) {
44
40
  var _ref2$fieldProps = _ref2.fieldProps,
45
41
  isInvalid = _ref2$fieldProps.isInvalid,
46
42
  isRequired = _ref2$fieldProps.isRequired,
47
- fieldProps = (0, _objectWithoutProperties2.default)(_ref2$fieldProps, _excluded2),
48
- rest = (0, _objectWithoutProperties2.default)(_ref2, _excluded3);
43
+ fieldProps = (0, _objectWithoutProperties2.default)(_ref2$fieldProps, _excluded),
44
+ rest = (0, _objectWithoutProperties2.default)(_ref2, _excluded2);
49
45
  return (
50
46
  // isInvalid and isRequired are specifically invalid for range inputs
51
47
  children(_objectSpread({
@@ -1,6 +1,4 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import React, { useCallback } from 'react';
3
- import { fg } from '@atlaskit/platform-feature-flags';
4
2
  import Field from './field';
5
3
  /**
6
4
  * __Checkbox field__
@@ -18,23 +16,18 @@ const CheckboxField = ({
18
16
  isRequired,
19
17
  label,
20
18
  name,
21
- value,
22
- ...rest
19
+ value
23
20
  }) => {
24
21
  // Maintains a memoised list of the default values
25
22
  const defaultValue = useCallback((currentValue = []) => defaultIsChecked && value !== undefined ? [...currentValue, value] : currentValue, [value, defaultIsChecked]);
26
- return value !== undefined ? /*#__PURE__*/React.createElement(Field
27
- // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
28
- , _extends({}, fg('platform_design-system-team_checkbox-field-spread') ? {} : {
29
- ...rest
30
- }, {
23
+ return value !== undefined ? /*#__PURE__*/React.createElement(Field, {
31
24
  defaultValue: defaultValue,
32
25
  isDisabled: isDisabled,
33
26
  isRequired: isRequired,
34
27
  label: label,
35
28
  name: name,
36
29
  transform: (event, currentValue) => !Array.isArray(event) && event.currentTarget.checked && currentValue ? [...currentValue, value] : currentValue.filter(v => v !== value)
37
- }), ({
30
+ }, ({
38
31
  fieldProps: {
39
32
  value: fieldValue,
40
33
  onChange,
@@ -50,18 +43,14 @@ const CheckboxField = ({
50
43
  value
51
44
  },
52
45
  ...others
53
- })) : /*#__PURE__*/React.createElement(Field
54
- // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
55
- , _extends({}, fg('platform_design-system-team_checkbox-field-spread') ? {} : {
56
- ...rest
57
- }, {
46
+ })) : /*#__PURE__*/React.createElement(Field, {
58
47
  defaultValue: defaultIsChecked,
59
48
  isDisabled: isDisabled,
60
49
  isRequired: isRequired,
61
50
  label: label,
62
51
  name: name,
63
52
  transform: event => typeof event === 'boolean' ? event : event.currentTarget.checked
64
- }), ({
53
+ }, ({
65
54
  fieldProps: {
66
55
  value: fieldValue,
67
56
  onChange,
@@ -1,12 +1,13 @@
1
1
  /* field.tsx generated by @compiled/babel-plugin v0.36.1 */
2
2
  import "./field.compiled.css";
3
- import * as React from 'react';
4
3
  import { ax, ix } from "@compiled/react/runtime";
5
- import { useContext, useEffect, useMemo, useRef, useState } from 'react';
4
+ import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
6
5
  import { useId } from '@atlaskit/ds-lib/use-id';
6
+ import { fg } from '@atlaskit/platform-feature-flags';
7
7
  import { FieldId } from './field-id-context';
8
8
  import { FormContext, IsDisabledContext } from './form';
9
9
  import { Label } from './label';
10
+ import { ErrorMessage, HelperMessage, MessageWrapper, ValidMessage } from './messages';
10
11
  import RequiredAsterisk from './required-asterisk';
11
12
  const fieldWrapperStyles = null;
12
13
  function isEvent(event) {
@@ -53,6 +54,10 @@ function isShallowEqual(previousValue, currentValue) {
53
54
  }
54
55
  export default function Field(props) {
55
56
  var _getCurrentValue;
57
+ const {
58
+ children = () => null,
59
+ component
60
+ } = props;
56
61
  const {
57
62
  registerField,
58
63
  getCurrentValue
@@ -241,7 +246,9 @@ export default function Field(props) {
241
246
  testId: props.testId && `${props.testId}--label`
242
247
  }, props.label, props.isRequired && /*#__PURE__*/React.createElement(RequiredAsterisk, null), props.elementAfterLabel), /*#__PURE__*/React.createElement(FieldId.Provider, {
243
248
  value: fieldId
244
- }, props.children({
249
+ }, component && fg('platform_design-system-team_field-upgrade') ? /*#__PURE__*/React.createElement(React.Fragment, null, component && component({
250
+ fieldProps: extendedFieldProps
251
+ }), /*#__PURE__*/React.createElement(MessageWrapper, null, props.helperMessage && /*#__PURE__*/React.createElement(HelperMessage, null, props.helperMessage), state.error && /*#__PURE__*/React.createElement(ErrorMessage, null, props.errorMessage || state.error), state.meta.touched && state.valid && props.validMessage && /*#__PURE__*/React.createElement(ValidMessage, null, props.validMessage))) : children({
245
252
  fieldProps: extendedFieldProps,
246
253
  error: state.error,
247
254
  valid: state.valid,
@@ -1,6 +1,4 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import React from 'react';
3
- import { fg } from '@atlaskit/platform-feature-flags';
4
2
  import Field from './field';
5
3
  /**
6
4
  * __Range field__
@@ -17,16 +15,15 @@ const RangeField = ({
17
15
  id,
18
16
  isDisabled,
19
17
  label,
20
- name,
21
- ...strippedProps
22
- }) => /*#__PURE__*/React.createElement(Field, _extends({}, fg('platform_design-system-team_range-field-spread') ? {} : strippedProps, {
18
+ name
19
+ }) => /*#__PURE__*/React.createElement(Field, {
23
20
  defaultValue: defaultValue,
24
21
  id: id,
25
22
  isDisabled: isDisabled,
26
23
  label: label,
27
24
  name: name,
28
25
  transform: Number
29
- }), ({
26
+ }, ({
30
27
  fieldProps: {
31
28
  isInvalid,
32
29
  isRequired,
@@ -1,16 +1,13 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
- var _excluded = ["children", "defaultIsChecked", "isDisabled", "isRequired", "label", "name", "value"],
6
- _excluded2 = ["value", "onChange"],
7
- _excluded3 = ["fieldProps"],
8
- _excluded4 = ["value", "onChange"],
9
- _excluded5 = ["fieldProps"];
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
+ var _excluded = ["value", "onChange"],
5
+ _excluded2 = ["fieldProps"],
6
+ _excluded3 = ["value", "onChange"],
7
+ _excluded4 = ["fieldProps"];
10
8
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
9
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
10
  import React, { useCallback } from 'react';
13
- import { fg } from '@atlaskit/platform-feature-flags';
14
11
  import Field from './field';
15
12
  /**
16
13
  * __Checkbox field__
@@ -29,16 +26,13 @@ var CheckboxField = function CheckboxField(_ref) {
29
26
  isRequired = _ref.isRequired,
30
27
  label = _ref.label,
31
28
  name = _ref.name,
32
- value = _ref.value,
33
- rest = _objectWithoutProperties(_ref, _excluded);
29
+ value = _ref.value;
34
30
  // Maintains a memoised list of the default values
35
31
  var defaultValue = useCallback(function () {
36
32
  var currentValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
37
33
  return defaultIsChecked && value !== undefined ? [].concat(_toConsumableArray(currentValue), [value]) : currentValue;
38
34
  }, [value, defaultIsChecked]);
39
- return value !== undefined ? /*#__PURE__*/React.createElement(Field
40
- // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
41
- , _extends({}, fg('platform_design-system-team_checkbox-field-spread') ? {} : _objectSpread({}, rest), {
35
+ return value !== undefined ? /*#__PURE__*/React.createElement(Field, {
42
36
  defaultValue: defaultValue,
43
37
  isDisabled: isDisabled,
44
38
  isRequired: isRequired,
@@ -49,12 +43,12 @@ var CheckboxField = function CheckboxField(_ref) {
49
43
  return v !== value;
50
44
  });
51
45
  }
52
- }), function (_ref2) {
46
+ }, function (_ref2) {
53
47
  var _ref2$fieldProps = _ref2.fieldProps,
54
48
  fieldValue = _ref2$fieldProps.value,
55
49
  _onChange = _ref2$fieldProps.onChange,
56
- otherFieldProps = _objectWithoutProperties(_ref2$fieldProps, _excluded2),
57
- others = _objectWithoutProperties(_ref2, _excluded3);
50
+ otherFieldProps = _objectWithoutProperties(_ref2$fieldProps, _excluded),
51
+ others = _objectWithoutProperties(_ref2, _excluded2);
58
52
  return children(_objectSpread({
59
53
  fieldProps: _objectSpread(_objectSpread({}, otherFieldProps), {}, {
60
54
  // Setting to any because it's typed weirdly at the field level
@@ -67,9 +61,7 @@ var CheckboxField = function CheckboxField(_ref) {
67
61
  value: value
68
62
  })
69
63
  }, others));
70
- }) : /*#__PURE__*/React.createElement(Field
71
- // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
72
- , _extends({}, fg('platform_design-system-team_checkbox-field-spread') ? {} : _objectSpread({}, rest), {
64
+ }) : /*#__PURE__*/React.createElement(Field, {
73
65
  defaultValue: defaultIsChecked,
74
66
  isDisabled: isDisabled,
75
67
  isRequired: isRequired,
@@ -78,12 +70,12 @@ var CheckboxField = function CheckboxField(_ref) {
78
70
  transform: function transform(event) {
79
71
  return typeof event === 'boolean' ? event : event.currentTarget.checked;
80
72
  }
81
- }), function (_ref3) {
73
+ }, function (_ref3) {
82
74
  var _ref3$fieldProps = _ref3.fieldProps,
83
75
  fieldValue = _ref3$fieldProps.value,
84
76
  _onChange2 = _ref3$fieldProps.onChange,
85
- otherFieldProps = _objectWithoutProperties(_ref3$fieldProps, _excluded4),
86
- others = _objectWithoutProperties(_ref3, _excluded5);
77
+ otherFieldProps = _objectWithoutProperties(_ref3$fieldProps, _excluded3),
78
+ others = _objectWithoutProperties(_ref3, _excluded4);
87
79
  return children(_objectSpread({
88
80
  fieldProps: _objectSpread(_objectSpread({}, otherFieldProps), {}, {
89
81
  // Setting to any because it's typed weirdly at the field level
package/dist/esm/field.js CHANGED
@@ -3,15 +3,16 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import _typeof from "@babel/runtime/helpers/typeof";
5
5
  import "./field.compiled.css";
6
- import * as React from 'react';
7
6
  import { ax, ix } from "@compiled/react/runtime";
8
7
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
9
8
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
10
- import { useContext, useEffect, useMemo, useRef, useState } from 'react';
9
+ import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
11
10
  import { useId } from '@atlaskit/ds-lib/use-id';
11
+ import { fg } from '@atlaskit/platform-feature-flags';
12
12
  import { FieldId } from './field-id-context';
13
13
  import { FormContext, IsDisabledContext } from './form';
14
14
  import { Label } from './label';
15
+ import { ErrorMessage, HelperMessage, MessageWrapper, ValidMessage } from './messages';
15
16
  import RequiredAsterisk from './required-asterisk';
16
17
  var fieldWrapperStyles = null;
17
18
  function isEvent(event) {
@@ -58,6 +59,11 @@ function isShallowEqual(previousValue, currentValue) {
58
59
  }
59
60
  export default function Field(props) {
60
61
  var _getCurrentValue;
62
+ var _props$children = props.children,
63
+ children = _props$children === void 0 ? function () {
64
+ return null;
65
+ } : _props$children,
66
+ component = props.component;
61
67
  var _useContext = useContext(FormContext),
62
68
  registerField = _useContext.registerField,
63
69
  getCurrentValue = _useContext.getCurrentValue;
@@ -248,7 +254,9 @@ export default function Field(props) {
248
254
  testId: props.testId && "".concat(props.testId, "--label")
249
255
  }, props.label, props.isRequired && /*#__PURE__*/React.createElement(RequiredAsterisk, null), props.elementAfterLabel), /*#__PURE__*/React.createElement(FieldId.Provider, {
250
256
  value: fieldId
251
- }, props.children({
257
+ }, component && fg('platform_design-system-team_field-upgrade') ? /*#__PURE__*/React.createElement(React.Fragment, null, component && component({
258
+ fieldProps: extendedFieldProps
259
+ }), /*#__PURE__*/React.createElement(MessageWrapper, null, props.helperMessage && /*#__PURE__*/React.createElement(HelperMessage, null, props.helperMessage), state.error && /*#__PURE__*/React.createElement(ErrorMessage, null, props.errorMessage || state.error), state.meta.touched && state.valid && props.validMessage && /*#__PURE__*/React.createElement(ValidMessage, null, props.validMessage))) : children({
252
260
  fieldProps: extendedFieldProps,
253
261
  error: state.error,
254
262
  valid: state.valid,
@@ -1,13 +1,10 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
- var _excluded = ["children", "defaultValue", "id", "isDisabled", "label", "name"],
5
- _excluded2 = ["isInvalid", "isRequired"],
6
- _excluded3 = ["fieldProps"];
3
+ var _excluded = ["isInvalid", "isRequired"],
4
+ _excluded2 = ["fieldProps"];
7
5
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8
6
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
9
7
  import React from 'react';
10
- import { fg } from '@atlaskit/platform-feature-flags';
11
8
  import Field from './field';
12
9
  /**
13
10
  * __Range field__
@@ -24,21 +21,20 @@ var RangeField = function RangeField(_ref) {
24
21
  id = _ref.id,
25
22
  isDisabled = _ref.isDisabled,
26
23
  label = _ref.label,
27
- name = _ref.name,
28
- strippedProps = _objectWithoutProperties(_ref, _excluded);
29
- return /*#__PURE__*/React.createElement(Field, _extends({}, fg('platform_design-system-team_range-field-spread') ? {} : strippedProps, {
24
+ name = _ref.name;
25
+ return /*#__PURE__*/React.createElement(Field, {
30
26
  defaultValue: defaultValue,
31
27
  id: id,
32
28
  isDisabled: isDisabled,
33
29
  label: label,
34
30
  name: name,
35
31
  transform: Number
36
- }), function (_ref2) {
32
+ }, function (_ref2) {
37
33
  var _ref2$fieldProps = _ref2.fieldProps,
38
34
  isInvalid = _ref2$fieldProps.isInvalid,
39
35
  isRequired = _ref2$fieldProps.isRequired,
40
- fieldProps = _objectWithoutProperties(_ref2$fieldProps, _excluded2),
41
- rest = _objectWithoutProperties(_ref2, _excluded3);
36
+ fieldProps = _objectWithoutProperties(_ref2$fieldProps, _excluded),
37
+ rest = _objectWithoutProperties(_ref2, _excluded2);
42
38
  return (
43
39
  // isInvalid and isRequired are specifically invalid for range inputs
44
40
  children(_objectSpread({
@@ -47,5 +47,5 @@ interface CheckboxProps {
47
47
  * - [Code] https://atlaskit.atlassian.com/packages/design-system/form/docs/fields#checkboxfield-reference
48
48
  * - [Usage] https://atlaskit.atlassian.com/packages/design-system/form/docs/fields#checkboxfield-reference
49
49
  */
50
- declare const CheckboxField: ({ children, defaultIsChecked, isDisabled, isRequired, label, name, value, ...rest }: CheckboxProps) => React.JSX.Element;
50
+ declare const CheckboxField: ({ children, defaultIsChecked, isDisabled, isRequired, label, name, value, }: CheckboxProps) => React.JSX.Element;
51
51
  export default CheckboxField;
@@ -29,16 +29,34 @@ export interface Meta {
29
29
  submitError?: boolean;
30
30
  validating?: boolean;
31
31
  }
32
- export interface FieldComponentProps<FieldValue, Element extends SupportedElements> {
32
+ export type FieldComponentProps<FieldValue, Element extends SupportedElements> = {
33
33
  /**
34
- * Content to render in the field. This is a function that is called with props for the field component and other information about the field.
34
+ * Content to render in the field. This is a function that is called with props for the field component and other information about the field. This cannot be used at the same time as the `component` prop, as the `children` prop will be ignored.
35
35
  */
36
- children: (args: {
36
+ children?: (args: {
37
37
  fieldProps: FieldProps<FieldValue, Element>;
38
38
  error?: string;
39
39
  valid: boolean;
40
40
  meta: Meta;
41
41
  }) => ReactNode;
42
+ /**
43
+ * Content to render in the field. This will be rendered with the `*Message` props. This cannot be used at the same time as the `children` prop, as the `children` prop will be ignored.
44
+ */
45
+ component?: (args: {
46
+ fieldProps: FieldProps<FieldValue, Element>;
47
+ }) => ReactNode;
48
+ /**
49
+ * Renders a `HelperMessage` with the provided content when using the `component` prop.
50
+ */
51
+ helperMessage?: ReactNode;
52
+ /**
53
+ * Renders an `ErrorMessage` with the provided content when using the `component` prop.
54
+ */
55
+ errorMessage?: ReactNode;
56
+ /**
57
+ * Renders a `ValidMessage` with the provided content when using the `component` prop.
58
+ */
59
+ validMessage?: ReactNode;
42
60
  /**
43
61
  * Sets the default value of the field. If a function is provided, it is called with the current default value of the field.
44
62
  */
@@ -79,6 +97,6 @@ export interface FieldComponentProps<FieldValue, Element extends SupportedElemen
79
97
  * A `testId` prop is provided for specified elements, which is a unique string that appears as a data attribute `data-testid` in the rendered code, serving as a hook for automated tests
80
98
  */
81
99
  testId?: string;
82
- }
100
+ };
83
101
  export default function Field<FieldValue = string, Element extends SupportedElements = HTMLInputElement>(props: FieldComponentProps<FieldValue, Element>): JSX.Element;
84
102
  export {};
@@ -40,5 +40,5 @@ export interface RangeFieldProps {
40
40
  * - [Code](https://atlaskit.atlassian.com/packages/design-system/form/docs/fields#rangefield-reference)
41
41
  * - [Usage](https://atlaskit.atlassian.com/packages/design-system/form/docs/fields#rangefield-reference)
42
42
  */
43
- declare const RangeField: ({ children, defaultValue, id, isDisabled, label, name, ...strippedProps }: RangeFieldProps) => React.JSX.Element;
43
+ declare const RangeField: ({ children, defaultValue, id, isDisabled, label, name }: RangeFieldProps) => React.JSX.Element;
44
44
  export default RangeField;
@@ -47,5 +47,5 @@ interface CheckboxProps {
47
47
  * - [Code] https://atlaskit.atlassian.com/packages/design-system/form/docs/fields#checkboxfield-reference
48
48
  * - [Usage] https://atlaskit.atlassian.com/packages/design-system/form/docs/fields#checkboxfield-reference
49
49
  */
50
- declare const CheckboxField: ({ children, defaultIsChecked, isDisabled, isRequired, label, name, value, ...rest }: CheckboxProps) => React.JSX.Element;
50
+ declare const CheckboxField: ({ children, defaultIsChecked, isDisabled, isRequired, label, name, value, }: CheckboxProps) => React.JSX.Element;
51
51
  export default CheckboxField;
@@ -29,16 +29,34 @@ export interface Meta {
29
29
  submitError?: boolean;
30
30
  validating?: boolean;
31
31
  }
32
- export interface FieldComponentProps<FieldValue, Element extends SupportedElements> {
32
+ export type FieldComponentProps<FieldValue, Element extends SupportedElements> = {
33
33
  /**
34
- * Content to render in the field. This is a function that is called with props for the field component and other information about the field.
34
+ * Content to render in the field. This is a function that is called with props for the field component and other information about the field. This cannot be used at the same time as the `component` prop, as the `children` prop will be ignored.
35
35
  */
36
- children: (args: {
36
+ children?: (args: {
37
37
  fieldProps: FieldProps<FieldValue, Element>;
38
38
  error?: string;
39
39
  valid: boolean;
40
40
  meta: Meta;
41
41
  }) => ReactNode;
42
+ /**
43
+ * Content to render in the field. This will be rendered with the `*Message` props. This cannot be used at the same time as the `children` prop, as the `children` prop will be ignored.
44
+ */
45
+ component?: (args: {
46
+ fieldProps: FieldProps<FieldValue, Element>;
47
+ }) => ReactNode;
48
+ /**
49
+ * Renders a `HelperMessage` with the provided content when using the `component` prop.
50
+ */
51
+ helperMessage?: ReactNode;
52
+ /**
53
+ * Renders an `ErrorMessage` with the provided content when using the `component` prop.
54
+ */
55
+ errorMessage?: ReactNode;
56
+ /**
57
+ * Renders a `ValidMessage` with the provided content when using the `component` prop.
58
+ */
59
+ validMessage?: ReactNode;
42
60
  /**
43
61
  * Sets the default value of the field. If a function is provided, it is called with the current default value of the field.
44
62
  */
@@ -79,6 +97,6 @@ export interface FieldComponentProps<FieldValue, Element extends SupportedElemen
79
97
  * A `testId` prop is provided for specified elements, which is a unique string that appears as a data attribute `data-testid` in the rendered code, serving as a hook for automated tests
80
98
  */
81
99
  testId?: string;
82
- }
100
+ };
83
101
  export default function Field<FieldValue = string, Element extends SupportedElements = HTMLInputElement>(props: FieldComponentProps<FieldValue, Element>): JSX.Element;
84
102
  export {};
@@ -40,5 +40,5 @@ export interface RangeFieldProps {
40
40
  * - [Code](https://atlaskit.atlassian.com/packages/design-system/form/docs/fields#rangefield-reference)
41
41
  * - [Usage](https://atlaskit.atlassian.com/packages/design-system/form/docs/fields#rangefield-reference)
42
42
  */
43
- declare const RangeField: ({ children, defaultValue, id, isDisabled, label, name, ...strippedProps }: RangeFieldProps) => React.JSX.Element;
43
+ declare const RangeField: ({ children, defaultValue, id, isDisabled, label, name }: RangeFieldProps) => React.JSX.Element;
44
44
  export default RangeField;
package/offerings.json CHANGED
@@ -33,8 +33,6 @@
33
33
  "Always include a visible label (exception: search fields)",
34
34
  "Match field length to intended content length"
35
35
  ],
36
- "examples": {
37
- "basic": "./examples/ai/form.tsx"
38
- }
36
+ "examples": ["./examples/ai/form.tsx"]
39
37
  }
40
38
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/form",
3
- "version": "12.6.2",
3
+ "version": "13.0.0",
4
4
  "description": "A form allows users to input information.",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -30,7 +30,7 @@
30
30
  "@atlaskit/heading": "^5.2.0",
31
31
  "@atlaskit/icon": "^28.2.0",
32
32
  "@atlaskit/platform-feature-flags": "^1.1.0",
33
- "@atlaskit/primitives": "^14.14.0",
33
+ "@atlaskit/primitives": "^14.15.0",
34
34
  "@atlaskit/tokens": "^6.3.0",
35
35
  "@babel/runtime": "^7.0.0",
36
36
  "final-form": "^4.20.3",
@@ -110,13 +110,10 @@
110
110
  "platform_dst_form_screenreader_message_fix": {
111
111
  "type": "boolean"
112
112
  },
113
- "platform_design-system-team_range-field-spread": {
114
- "type": "boolean"
115
- },
116
113
  "platform_design-system-team_form-upgrade": {
117
114
  "type": "boolean"
118
115
  },
119
- "platform_design-system-team_checkbox-field-spread": {
116
+ "platform_design-system-team_field-upgrade": {
120
117
  "type": "boolean"
121
118
  },
122
119
  "platform-form-field-error-focus": {