@algolia/satellite 1.0.0 → 1.1.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/cjs/AutoComplete/AutoComplete.d.ts +1 -1
- package/dist/cjs/AutoComplete/AutoComplete.js +49 -26
- package/dist/cjs/AutoComplete/AutoComplete.tailwind.js +9 -1
- package/dist/cjs/AutoComplete/types.d.ts +1 -0
- package/dist/cjs/Checkbox/Checkbox.d.ts +1 -1
- package/dist/cjs/Checkbox/Checkbox.js +21 -13
- package/dist/cjs/Checkbox/Checkbox.tailwind.js +8 -2
- package/dist/cjs/DatePicker/DatePicker/DatePicker.d.ts +4 -2
- package/dist/cjs/DatePicker/DatePicker/DatePicker.js +18 -7
- package/dist/cjs/DatePicker/components/Display.d.ts +3 -3
- package/dist/cjs/DatePicker/components/Display.js +16 -5
- package/dist/cjs/Dropzone/Dropzone.d.ts +4 -2
- package/dist/cjs/Dropzone/Dropzone.js +23 -12
- package/dist/cjs/Field/Field.d.ts +1 -0
- package/dist/cjs/Field/Field.js +63 -11
- package/dist/cjs/Field/FieldContext.d.ts +3 -0
- package/dist/cjs/Field/useField.d.ts +4 -1
- package/dist/cjs/Field/useField.js +17 -1
- package/dist/cjs/Form/Form.d.ts +16 -0
- package/dist/cjs/Form/Form.js +140 -0
- package/dist/cjs/Form/FormContext.d.ts +13 -0
- package/dist/cjs/Form/FormContext.js +8 -0
- package/dist/cjs/Form/index.d.ts +3 -0
- package/dist/cjs/Form/index.js +27 -0
- package/dist/cjs/Form/stories/AsynchronousValidation.js +396 -0
- package/dist/cjs/Form/stories/Complex.js +928 -0
- package/dist/cjs/Form/stories/DependentFieldsValidation.js +249 -0
- package/dist/cjs/Form/stories/DirtyFields.js +339 -0
- package/dist/cjs/Form/stories/DynamicFieldsValidation.js +425 -0
- package/dist/cjs/Form/stories/FieldArrays.js +549 -0
- package/dist/cjs/Form/stories/ValidationStrategies.js +455 -0
- package/dist/cjs/Form/stories/utils/useFormikAutoFocusOnError.js +22 -0
- package/dist/cjs/Form/useForm.d.ts +1 -0
- package/dist/cjs/Form/useForm.js +11 -0
- package/dist/cjs/Input/Input.js +22 -9
- package/dist/cjs/Input/Input.tailwind.js +7 -2
- package/dist/cjs/Pagination/DotPagination/DotPagination.d.ts +1 -1
- package/dist/cjs/RadioGroup/RadioButton.d.ts +1 -1
- package/dist/cjs/RadioGroup/RadioButton.js +16 -3
- package/dist/cjs/RadioGroup/RadioButton.tailwind.js +23 -0
- package/dist/cjs/RadioGroup/RadioGroup.d.ts +7 -5
- package/dist/cjs/RadioGroup/RadioGroup.js +78 -16
- package/dist/cjs/RadioGroup/{RadiogroupContext.d.ts → RadioGroupContext.d.ts} +8 -1
- package/dist/cjs/RangeSlider/RangeSlider.d.ts +2 -3
- package/dist/cjs/RangeSlider/RangeSlider.js +27 -10
- package/dist/cjs/Satellite/locale.d.ts +2 -0
- package/dist/cjs/Select/Select.js +39 -6
- package/dist/cjs/Select/Select.tailwind.js +19 -0
- package/dist/cjs/Stepper/Step.js +2 -2
- package/dist/cjs/Switch/Switch.js +2 -2
- package/dist/cjs/Switch/SwitchOption.js +3 -3
- package/dist/cjs/Tables/DataTable/DataTable.d.ts +1 -1
- package/dist/cjs/Tag/Tag.d.ts +1 -1
- package/dist/cjs/TextArea/TextArea.d.ts +1 -0
- package/dist/cjs/TextArea/TextArea.js +47 -8
- package/dist/cjs/TextArea/TextArea.tailwind.js +41 -4
- package/dist/cjs/Toggle/Toggle.d.ts +1 -1
- package/dist/cjs/Toggle/Toggle.js +23 -6
- package/dist/cjs/Toggle/Toggle.tailwind.js +9 -0
- package/dist/cjs/Tooltip/Tooltip.d.ts +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +12 -0
- package/dist/cjs/utils/isCssPropertySupported.d.ts +1 -1
- package/dist/cjs/utils/mergeRefs.d.ts +2 -0
- package/dist/cjs/utils/mergeRefs.js +17 -0
- package/dist/esm/AutoComplete/AutoComplete.d.ts +1 -1
- package/dist/esm/AutoComplete/AutoComplete.js +52 -27
- package/dist/esm/AutoComplete/AutoComplete.tailwind.js +9 -1
- package/dist/esm/AutoComplete/types.d.ts +1 -0
- package/dist/esm/Checkbox/Checkbox.d.ts +1 -1
- package/dist/esm/Checkbox/Checkbox.js +21 -13
- package/dist/esm/Checkbox/Checkbox.tailwind.js +8 -2
- package/dist/esm/DatePicker/DatePicker/DatePicker.d.ts +4 -2
- package/dist/esm/DatePicker/DatePicker/DatePicker.js +19 -8
- package/dist/esm/DatePicker/components/Display.d.ts +3 -3
- package/dist/esm/DatePicker/components/Display.js +15 -5
- package/dist/esm/Dropzone/Dropzone.d.ts +4 -2
- package/dist/esm/Dropzone/Dropzone.js +24 -13
- package/dist/esm/Field/Field.d.ts +1 -0
- package/dist/esm/Field/Field.js +64 -12
- package/dist/esm/Field/FieldContext.d.ts +3 -0
- package/dist/esm/Field/useField.d.ts +4 -1
- package/dist/esm/Field/useField.js +17 -2
- package/dist/esm/Form/Form.d.ts +16 -0
- package/dist/esm/Form/Form.js +135 -0
- package/dist/esm/Form/FormContext.d.ts +13 -0
- package/dist/esm/Form/FormContext.js +2 -0
- package/dist/esm/Form/index.d.ts +3 -0
- package/dist/esm/Form/index.js +3 -0
- package/dist/esm/Form/stories/AsynchronousValidation.js +387 -0
- package/dist/esm/Form/stories/Complex.js +919 -0
- package/dist/esm/Form/stories/DependentFieldsValidation.js +240 -0
- package/dist/esm/Form/stories/DirtyFields.js +330 -0
- package/dist/esm/Form/stories/DynamicFieldsValidation.js +416 -0
- package/dist/esm/Form/stories/FieldArrays.js +544 -0
- package/dist/esm/Form/stories/ValidationStrategies.js +446 -0
- package/dist/esm/Form/stories/utils/useFormikAutoFocusOnError.js +16 -0
- package/dist/esm/Form/useForm.d.ts +1 -0
- package/dist/esm/Form/useForm.js +5 -0
- package/dist/esm/Input/Input.js +22 -9
- package/dist/esm/Input/Input.tailwind.js +7 -2
- package/dist/esm/Pagination/DotPagination/DotPagination.d.ts +1 -1
- package/dist/esm/RadioGroup/RadioButton.d.ts +1 -1
- package/dist/esm/RadioGroup/RadioButton.js +16 -3
- package/dist/esm/RadioGroup/RadioButton.tailwind.js +23 -0
- package/dist/esm/RadioGroup/RadioGroup.d.ts +7 -5
- package/dist/esm/RadioGroup/RadioGroup.js +77 -15
- package/dist/esm/RadioGroup/{RadiogroupContext.d.ts → RadioGroupContext.d.ts} +8 -1
- package/dist/esm/RangeSlider/RangeSlider.d.ts +2 -3
- package/dist/esm/RangeSlider/RangeSlider.js +27 -10
- package/dist/esm/Satellite/locale.d.ts +2 -0
- package/dist/esm/Select/Select.js +41 -7
- package/dist/esm/Select/Select.tailwind.js +19 -0
- package/dist/esm/Stepper/Step.js +2 -2
- package/dist/esm/Switch/Switch.js +1 -1
- package/dist/esm/Switch/SwitchOption.js +2 -2
- package/dist/esm/Tables/DataTable/DataTable.d.ts +1 -1
- package/dist/esm/Tag/Tag.d.ts +1 -1
- package/dist/esm/TextArea/TextArea.d.ts +1 -0
- package/dist/esm/TextArea/TextArea.js +49 -9
- package/dist/esm/TextArea/TextArea.tailwind.js +41 -4
- package/dist/esm/Toggle/Toggle.d.ts +1 -1
- package/dist/esm/Toggle/Toggle.js +23 -6
- package/dist/esm/Toggle/Toggle.tailwind.js +9 -0
- package/dist/esm/Tooltip/Tooltip.d.ts +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/utils/isCssPropertySupported.d.ts +1 -1
- package/dist/esm/utils/mergeRefs.d.ts +2 -0
- package/dist/esm/utils/mergeRefs.js +11 -0
- package/dist/satellite.min.css +1 -1
- package/package.json +13 -7
- /package/dist/cjs/RadioGroup/{RadiogroupContext.js → RadioGroupContext.js} +0 -0
- /package/dist/esm/RadioGroup/{RadiogroupContext.js → RadioGroupContext.js} +0 -0
@@ -21,8 +21,8 @@ var _satellitePrefixer = _interopRequireDefault(require("../styles/helpers/satel
|
|
21
21
|
var _formatters = require("../utils/formatters");
|
22
22
|
var _uniqueId = require("../utils/uniqueId");
|
23
23
|
var _jsxRuntime = require("react/jsx-runtime");
|
24
|
-
var _excluded = ["id", "placeholder", "disabled", "multiple", "clearable", "onChange", "className", "locale"];
|
25
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9
|
24
|
+
var _excluded = ["id", "placeholder", "disabled", "multiple", "clearable", "onChange", "className", "locale", "required"];
|
25
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
|
26
26
|
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; }
|
27
27
|
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; }
|
28
28
|
var DropzoneFileItem = function DropzoneFileItem(_ref) {
|
@@ -54,7 +54,7 @@ var ValidatedIcon = function ValidatedIcon() {
|
|
54
54
|
*
|
55
55
|
* See the [Dropzone documentation page](https://satellite.algolia.com/components/forms/dropzone) for more information.
|
56
56
|
*/
|
57
|
-
var Dropzone = exports.Dropzone = function
|
57
|
+
var Dropzone = exports.Dropzone = /*#__PURE__*/(0, _react.forwardRef)(function (_ref2, ref) {
|
58
58
|
var id = _ref2.id,
|
59
59
|
placeholder = _ref2.placeholder,
|
60
60
|
disabled = _ref2.disabled,
|
@@ -65,6 +65,8 @@ var Dropzone = exports.Dropzone = function Dropzone(_ref2) {
|
|
65
65
|
onChange = _ref2.onChange,
|
66
66
|
className = _ref2.className,
|
67
67
|
propsLocale = _ref2.locale,
|
68
|
+
_ref2$required = _ref2.required,
|
69
|
+
required = _ref2$required === void 0 ? false : _ref2$required,
|
68
70
|
props = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
|
69
71
|
var contextLocale = (0, _Satellite.useLocale)("dropzone");
|
70
72
|
var locale = _objectSpread(_objectSpread(_objectSpread({}, DEFAULT_DROPZONE_LOCALE), contextLocale), propsLocale);
|
@@ -76,9 +78,13 @@ var Dropzone = exports.Dropzone = function Dropzone(_ref2) {
|
|
76
78
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
77
79
|
focused = _useState4[0],
|
78
80
|
setFocused = _useState4[1];
|
79
|
-
var _useField = (0, _Field.useField)(
|
81
|
+
var _useField = (0, _Field.useField)({
|
82
|
+
required: required
|
83
|
+
}),
|
80
84
|
status = _useField.state.status,
|
81
|
-
labelId = _useField.labelId
|
85
|
+
labelId = _useField.labelId,
|
86
|
+
descriptionId = _useField.descriptionId,
|
87
|
+
inputId = _useField.inputId;
|
82
88
|
var onDrop = (0, _react.useCallback)(function (acceptedFiles, fileRejections) {
|
83
89
|
var updatedFiles = multiple ? [].concat((0, _toConsumableArray2["default"])(files), (0, _toConsumableArray2["default"])(acceptedFiles)) : acceptedFiles;
|
84
90
|
setFiles(updatedFiles);
|
@@ -100,14 +106,19 @@ var Dropzone = exports.Dropzone = function Dropzone(_ref2) {
|
|
100
106
|
isDragActive = _useDropzone.isDragActive,
|
101
107
|
isDragReject = _useDropzone.isDragReject;
|
102
108
|
var dropzoneId = (0, _react.useMemo)(function () {
|
103
|
-
|
104
|
-
|
109
|
+
var _ref3;
|
110
|
+
return (_ref3 = id !== null && id !== void 0 ? id : inputId) !== null && _ref3 !== void 0 ? _ref3 : (0, _uniqueId.uniqueId)("dropzone");
|
111
|
+
}, [id, inputId]);
|
105
112
|
var isValueEmpty = files.length === 0;
|
106
113
|
var isInvalid = status === "invalid";
|
107
114
|
var StatusIcon = isInvalid ? InvalidIcon : status === "validated" ? ValidatedIcon : _react.Fragment;
|
108
115
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", _objectSpread(_objectSpread({}, getRootProps({
|
116
|
+
ref: ref,
|
109
117
|
"aria-controls": dropzoneId,
|
110
|
-
|
118
|
+
"aria-labelledby": labelId,
|
119
|
+
"aria-describedby": descriptionId,
|
120
|
+
"aria-invalid": isInvalid,
|
121
|
+
className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n relative flex items-center group/dropzone\n border rounded\n overflow-hidden transition-all ease-in-out delay-100\n focus-within:shadow-field-focused\n min-h-16\n ", "\n ", "\n ", "\n ", ""])), focused && "border-accent-600 shadow-field-focused", disabled ? "cursor-not-allowed border-grey-200/30 shadow-none bg-gradient-to-b from-white to-grey-100" : "shadow-field cursor-pointer", isDragReject && !disabled ? "border-red-200 cursor-not-allowed" : isDragActive ? "border-accent-500 cursor-pointer" : null, isInvalid ? "bg-red-100 border-red-700 hover:bg-red-50 focus-within:outline focus-within:outline-red-700 focus-within:outline-1" : "border-grey-500 bg-white focus-within:border-accent-600 hover:bg-grey-50"), className),
|
111
122
|
onClick: function onClick(evt) {
|
112
123
|
// Helps with https://github.com/react-dropzone/react-dropzone/issues/182
|
113
124
|
if (evt.target.closest("label")) {
|
@@ -117,7 +128,7 @@ var Dropzone = exports.Dropzone = function Dropzone(_ref2) {
|
|
117
128
|
})), {}, {
|
118
129
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("input", _objectSpread({}, getInputProps({
|
119
130
|
id: dropzoneId,
|
120
|
-
|
131
|
+
required: required,
|
121
132
|
onFocus: function onFocus() {
|
122
133
|
return setFocused(true);
|
123
134
|
},
|
@@ -147,9 +158,8 @@ var Dropzone = exports.Dropzone = function Dropzone(_ref2) {
|
|
147
158
|
})]
|
148
159
|
})
|
149
160
|
}), clearable && !disabled && !isValueEmpty && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
150
|
-
className: (0, _satellitePrefixer["default"])(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])([""]))),
|
151
161
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.IconButton, {
|
152
|
-
className: (0, _satellitePrefixer["default"])(
|
162
|
+
className: (0, _satellitePrefixer["default"])(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["mr-2 ", ""])), focused ? "visible" : "invisible group-hover/dropzone:visible"),
|
153
163
|
title: locale.clearInput,
|
154
164
|
icon: _Icons.XIcon,
|
155
165
|
variant: "subtle",
|
@@ -160,4 +170,5 @@ var Dropzone = exports.Dropzone = function Dropzone(_ref2) {
|
|
160
170
|
})
|
161
171
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(StatusIcon, {})]
|
162
172
|
}));
|
163
|
-
};
|
173
|
+
});
|
174
|
+
Dropzone.displayName = "Dropzone";
|
package/dist/cjs/Field/Field.js
CHANGED
@@ -6,14 +6,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
});
|
7
7
|
exports.Field = void 0;
|
8
8
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
9
10
|
var _clsx = _interopRequireDefault(require("clsx"));
|
10
11
|
var _react = require("react");
|
12
|
+
var _useForm = require("../Form/useForm");
|
11
13
|
var _Icons = require("../Icons");
|
12
14
|
var _satellitePrefixer = _interopRequireDefault(require("../styles/helpers/satellitePrefixer"));
|
13
15
|
var _utils = require("../utils");
|
16
|
+
var _getTextFromReactNode = require("../utils/getTextFromReactNode");
|
14
17
|
var _FieldContext = require("./FieldContext");
|
15
18
|
var _jsxRuntime = require("react/jsx-runtime");
|
16
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
|
19
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10;
|
17
20
|
/**
|
18
21
|
* The `Field` component is a helper that wraps inputs to streamline labeling, validation, integration into a form.
|
19
22
|
*
|
@@ -22,13 +25,14 @@ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _temp
|
|
22
25
|
var Field = exports.Field = function Field(_ref) {
|
23
26
|
var className = _ref.className,
|
24
27
|
label = _ref.label,
|
25
|
-
|
28
|
+
labelForProp = _ref.labelFor,
|
26
29
|
labelIdProp = _ref.labelId,
|
27
30
|
description = _ref.description,
|
28
31
|
_ref$state = _ref.state,
|
29
32
|
state = _ref$state === void 0 ? _FieldContext.DEFAULT_FIELD_STATE : _ref$state,
|
30
33
|
_ref$inline = _ref.inline,
|
31
34
|
inline = _ref$inline === void 0 ? false : _ref$inline,
|
35
|
+
requiredProp = _ref.required,
|
32
36
|
children = _ref.children;
|
33
37
|
var hasLabel = !!label;
|
34
38
|
var labelId = (0, _react.useMemo)(
|
@@ -36,37 +40,85 @@ var Field = exports.Field = function Field(_ref) {
|
|
36
40
|
function () {
|
37
41
|
return hasLabel ? labelIdProp !== null && labelIdProp !== void 0 ? labelIdProp : (0, _utils.uniqueId)("stl-field-label-") : undefined;
|
38
42
|
}, [labelIdProp, hasLabel]);
|
43
|
+
var hasLabelFor = !!labelForProp;
|
44
|
+
var labelFor = (0, _react.useMemo)(
|
45
|
+
// eslint-disable-next-line @algolia/stl/prefer-stl-helper
|
46
|
+
function () {
|
47
|
+
return hasLabelFor ? labelForProp : (0, _utils.uniqueId)("stl-field-input-");
|
48
|
+
}, [labelForProp, hasLabelFor]);
|
49
|
+
var descriptionId = (0, _react.useMemo)(
|
50
|
+
// eslint-disable-next-line @algolia/stl/prefer-stl-helper
|
51
|
+
function () {
|
52
|
+
return description || state.status === "invalid" ? (0, _utils.uniqueId)("stl-field-description-") : undefined;
|
53
|
+
}, [description, state.status]);
|
54
|
+
var _useState = (0, _react.useState)(undefined),
|
55
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
56
|
+
requiredContext = _useState2[0],
|
57
|
+
setRequiredContext = _useState2[1];
|
58
|
+
if (process.env.NODE_ENV !== "production") {
|
59
|
+
if (typeof requiredProp !== "undefined" && typeof requiredContext !== "undefined" && requiredProp !== requiredContext) {
|
60
|
+
console.warn("The `required` prop is set to different values on both the Field (`required=".concat(requiredProp, "`) and the underlying input component (`required=").concat(requiredContext, "`)."));
|
61
|
+
}
|
62
|
+
}
|
63
|
+
var form = (0, _useForm.useExperimentalForm)();
|
64
|
+
var addField = form === null || form === void 0 ? void 0 : form.addField;
|
65
|
+
var removeField = form === null || form === void 0 ? void 0 : form.removeField;
|
66
|
+
(0, _react.useEffect)(function () {
|
67
|
+
addField === null || addField === void 0 || addField({
|
68
|
+
state: state,
|
69
|
+
label: (0, _getTextFromReactNode.getTextFromReactNode)(label),
|
70
|
+
labelFor: labelFor
|
71
|
+
});
|
72
|
+
return function () {
|
73
|
+
removeField === null || removeField === void 0 || removeField({
|
74
|
+
state: state,
|
75
|
+
label: (0, _getTextFromReactNode.getTextFromReactNode)(label),
|
76
|
+
labelFor: labelFor
|
77
|
+
});
|
78
|
+
};
|
79
|
+
}, [addField, removeField, state, labelFor, label]);
|
39
80
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_FieldContext.FieldContext.Provider, {
|
40
81
|
value: {
|
41
82
|
state: state,
|
42
|
-
labelId: labelId
|
83
|
+
labelId: labelId,
|
84
|
+
descriptionId: descriptionId,
|
85
|
+
inputId: labelFor,
|
86
|
+
setRequired: setRequiredContext
|
43
87
|
},
|
44
88
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
45
89
|
className: className,
|
46
90
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("label", {
|
47
91
|
className: (0, _satellitePrefixer["default"])(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["cursor-pointer flex ", ""])), inline ? "items-center" : "flex-col"),
|
48
92
|
htmlFor: labelFor,
|
49
|
-
children: [hasLabel && /*#__PURE__*/(0, _jsxRuntime.
|
93
|
+
children: [hasLabel && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
50
94
|
id: labelId,
|
51
95
|
className: (0, _satellitePrefixer["default"])(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["truncate ", ""])), inline ? "mr-2" : "mb-1"),
|
52
|
-
children: label
|
96
|
+
children: [label, (requiredProp || requiredContext) && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
97
|
+
className: (0, _satellitePrefixer["default"])(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["text-red-700 ml-0.5"]))),
|
98
|
+
"aria-hidden": true,
|
99
|
+
children: "*"
|
100
|
+
})]
|
53
101
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
54
|
-
className: (0, _clsx["default"])(inline && (0, _satellitePrefixer["default"])(
|
102
|
+
className: (0, _clsx["default"])(inline && (0, _satellitePrefixer["default"])(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["ml-auto mt-1"])))),
|
55
103
|
children: children
|
56
104
|
})]
|
57
105
|
}), state.status === "invalid" && state.errors.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)("ul", {
|
58
|
-
|
106
|
+
id: descriptionId,
|
107
|
+
className: (0, _satellitePrefixer["default"])(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["mb-1 mt-2 display-caption flex flex-col gap-0.5"]))),
|
59
108
|
children: state.errors.map(function (error) {
|
60
109
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("li", {
|
61
|
-
className: (0, _satellitePrefixer["default"])(
|
110
|
+
className: (0, _satellitePrefixer["default"])(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["flex items-center text-red-700"]))),
|
62
111
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Icons.AlertCircleIcon, {
|
63
|
-
className: (0, _satellitePrefixer["default"])(
|
64
|
-
|
112
|
+
className: (0, _satellitePrefixer["default"])(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["mr-1 shrink-0"]))),
|
113
|
+
width: "1rem",
|
114
|
+
height: "1rem",
|
115
|
+
"aria-hidden": true
|
65
116
|
}), error]
|
66
117
|
}, error);
|
67
118
|
})
|
68
119
|
}) : description ? /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
69
|
-
|
120
|
+
id: descriptionId,
|
121
|
+
className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["display-caption text-grey-600"]))), inline ? (0, _satellitePrefixer["default"])(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["mt-1"]))) : (0, _satellitePrefixer["default"])(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["mt-2"])))),
|
70
122
|
children: description
|
71
123
|
}) : null]
|
72
124
|
})
|
@@ -10,6 +10,9 @@ export declare type FieldState = {
|
|
10
10
|
export declare type FieldContextValue = {
|
11
11
|
state: FieldState;
|
12
12
|
labelId?: string;
|
13
|
+
descriptionId?: string;
|
14
|
+
inputId?: string;
|
15
|
+
setRequired?: (required?: boolean) => void;
|
13
16
|
};
|
14
17
|
export declare const DEFAULT_FIELD_STATE: FieldState;
|
15
18
|
export declare const DEFAULT_CONTEXT_VALUE: FieldContextValue;
|
@@ -1,11 +1,27 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
4
5
|
value: true
|
5
6
|
});
|
6
7
|
exports.useField = void 0;
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
9
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
7
10
|
var _react = require("react");
|
8
11
|
var _FieldContext = require("./FieldContext");
|
12
|
+
var _excluded = ["setRequired"];
|
13
|
+
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; }
|
14
|
+
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; }
|
9
15
|
var useField = exports.useField = function useField() {
|
10
|
-
|
16
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
17
|
+
required = _ref.required;
|
18
|
+
var _useContext = (0, _react.useContext)(_FieldContext.FieldContext),
|
19
|
+
setRequired = _useContext.setRequired,
|
20
|
+
contextValue = (0, _objectWithoutProperties2["default"])(_useContext, _excluded);
|
21
|
+
(0, _react.useEffect)(function () {
|
22
|
+
return setRequired === null || setRequired === void 0 ? void 0 : setRequired(required);
|
23
|
+
}, [setRequired, required]);
|
24
|
+
return _objectSpread({
|
25
|
+
setRequired: setRequired
|
26
|
+
}, contextValue);
|
11
27
|
};
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import type { FC, HTMLAttributes, ReactNode, VFC } from "react";
|
2
|
+
import type { AlertProps } from "../Banners";
|
3
|
+
import type { ButtonProps } from "../Button";
|
4
|
+
import type { ExperimentalFormContextField } from "./FormContext";
|
5
|
+
export interface ExperimentalFormProps extends HTMLAttributes<HTMLFormElement> {
|
6
|
+
}
|
7
|
+
export declare type ExperimentalFormLocale = {
|
8
|
+
errorText?: (invalidFields: ExperimentalFormContextField[]) => ReactNode;
|
9
|
+
};
|
10
|
+
export interface ExperimentalFormErrorMessageProps extends Omit<AlertProps, "children"> {
|
11
|
+
locale?: ExperimentalFormLocale;
|
12
|
+
}
|
13
|
+
export declare const ExperimentalFormErrorMessage: VFC<ExperimentalFormErrorMessageProps>;
|
14
|
+
export declare const ExperimentalForm: FC<ExperimentalFormProps>;
|
15
|
+
export declare const ExperimentalFormSubmit: FC<ButtonProps>;
|
16
|
+
export declare const ExperimentalFormReset: FC<ButtonProps>;
|
@@ -0,0 +1,140 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.ExperimentalFormSubmit = exports.ExperimentalFormReset = exports.ExperimentalFormErrorMessage = exports.ExperimentalForm = void 0;
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
11
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
12
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
13
|
+
var _clsx = _interopRequireDefault(require("clsx"));
|
14
|
+
var _react = require("react");
|
15
|
+
var _Banners = require("../Banners");
|
16
|
+
var _Button = require("../Button");
|
17
|
+
var _Icons = require("../Icons");
|
18
|
+
var _Satellite = require("../Satellite");
|
19
|
+
var _satellitePrefixer = _interopRequireDefault(require("../styles/helpers/satellitePrefixer"));
|
20
|
+
var _FormContext = require("./FormContext");
|
21
|
+
var _useForm = require("./useForm");
|
22
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
23
|
+
var _excluded = ["className", "locale"],
|
24
|
+
_excluded2 = ["children"],
|
25
|
+
_excluded3 = ["children"],
|
26
|
+
_excluded4 = ["children"];
|
27
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
28
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
29
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
30
|
+
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; }
|
31
|
+
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; }
|
32
|
+
var DEFAULT_ERROR_MESSAGE_LOCALE = {
|
33
|
+
errorText: function errorText(invalidFields) {
|
34
|
+
var firstInvalidField = invalidFields[0];
|
35
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
36
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
37
|
+
className: (0, _satellitePrefixer["default"])(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["display-heading mb-2"]))),
|
38
|
+
children: ["Please fix ", invalidFields.length, " error", invalidFields.length > 1 ? "s" : "", " below and try again."]
|
39
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
40
|
+
className: (0, _satellitePrefixer["default"])(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["flex flex-col"]))),
|
41
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
|
42
|
+
href: "#",
|
43
|
+
className: (0, _satellitePrefixer["default"])(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["text-black underline hover:text-grey-800"]))),
|
44
|
+
onClick: function onClick(e) {
|
45
|
+
e.preventDefault();
|
46
|
+
var label = document.querySelector("label[for=\"".concat(firstInvalidField.labelFor, "\"]"));
|
47
|
+
label === null || label === void 0 || label.scrollIntoView({
|
48
|
+
behavior: "smooth",
|
49
|
+
block: "start"
|
50
|
+
});
|
51
|
+
label === null || label === void 0 || label.focus({
|
52
|
+
preventScroll: true
|
53
|
+
});
|
54
|
+
},
|
55
|
+
children: "Go to first error"
|
56
|
+
})
|
57
|
+
})]
|
58
|
+
});
|
59
|
+
}
|
60
|
+
};
|
61
|
+
var ExperimentalFormErrorMessage = exports.ExperimentalFormErrorMessage = function ExperimentalFormErrorMessage(_ref) {
|
62
|
+
var className = _ref.className,
|
63
|
+
propsLocale = _ref.locale,
|
64
|
+
props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
65
|
+
var contextLocale = (0, _Satellite.useLocale)("form");
|
66
|
+
var locale = _objectSpread(_objectSpread(_objectSpread({}, DEFAULT_ERROR_MESSAGE_LOCALE), contextLocale), propsLocale);
|
67
|
+
var form = (0, _useForm.useExperimentalForm)();
|
68
|
+
if (!form) return null;
|
69
|
+
var invalidFields = Object.entries(form.fields).filter(function (_ref2) {
|
70
|
+
var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
|
71
|
+
_ = _ref3[0],
|
72
|
+
value = _ref3[1];
|
73
|
+
return value.state.status === "invalid";
|
74
|
+
}).map(function (_ref4) {
|
75
|
+
var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
|
76
|
+
_ = _ref5[0],
|
77
|
+
value = _ref5[1];
|
78
|
+
return value;
|
79
|
+
});
|
80
|
+
return invalidFields.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Banners.Alert, _objectSpread(_objectSpread({
|
81
|
+
variant: "red",
|
82
|
+
icon: _Icons.XOctagonIcon
|
83
|
+
}, props), {}, {
|
84
|
+
className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))), className),
|
85
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
86
|
+
"aria-live": "assertive",
|
87
|
+
className: (0, _satellitePrefixer["default"])(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["whitespace-break-spaces"]))),
|
88
|
+
children: locale.errorText(invalidFields)
|
89
|
+
})
|
90
|
+
})) : null;
|
91
|
+
};
|
92
|
+
var ExperimentalForm = exports.ExperimentalForm = function ExperimentalForm(_ref6) {
|
93
|
+
var children = _ref6.children,
|
94
|
+
props = (0, _objectWithoutProperties2["default"])(_ref6, _excluded2);
|
95
|
+
var _useState = (0, _react.useState)({}),
|
96
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
97
|
+
fields = _useState2[0],
|
98
|
+
setFields = _useState2[1];
|
99
|
+
var addField = (0, _react.useCallback)(function (field) {
|
100
|
+
setFields(function (fields) {
|
101
|
+
return _objectSpread(_objectSpread({}, fields), {}, (0, _defineProperty2["default"])({}, field.labelFor, field));
|
102
|
+
});
|
103
|
+
}, []);
|
104
|
+
var removeField = (0, _react.useCallback)(function (field) {
|
105
|
+
setFields(function (fields) {
|
106
|
+
var _field$labelFor = field.labelFor,
|
107
|
+
_ = fields[_field$labelFor],
|
108
|
+
rest = (0, _objectWithoutProperties2["default"])(fields, [_field$labelFor].map(_toPropertyKey));
|
109
|
+
return rest;
|
110
|
+
});
|
111
|
+
}, []);
|
112
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormContext.ExperimentalFormContext.Provider, {
|
113
|
+
value: {
|
114
|
+
fields: fields,
|
115
|
+
addField: addField,
|
116
|
+
removeField: removeField
|
117
|
+
},
|
118
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("form", _objectSpread(_objectSpread({
|
119
|
+
noValidate: true
|
120
|
+
}, props), {}, {
|
121
|
+
children: children
|
122
|
+
}))
|
123
|
+
});
|
124
|
+
};
|
125
|
+
var ExperimentalFormSubmit = exports.ExperimentalFormSubmit = function ExperimentalFormSubmit(_ref7) {
|
126
|
+
var children = _ref7.children,
|
127
|
+
props = (0, _objectWithoutProperties2["default"])(_ref7, _excluded3);
|
128
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, _objectSpread(_objectSpread({}, props), {}, {
|
129
|
+
type: "submit",
|
130
|
+
children: children
|
131
|
+
}));
|
132
|
+
};
|
133
|
+
var ExperimentalFormReset = exports.ExperimentalFormReset = function ExperimentalFormReset(_ref8) {
|
134
|
+
var children = _ref8.children,
|
135
|
+
props = (0, _objectWithoutProperties2["default"])(_ref8, _excluded4);
|
136
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, _objectSpread(_objectSpread({}, props), {}, {
|
137
|
+
type: "reset",
|
138
|
+
children: children
|
139
|
+
}));
|
140
|
+
};
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/// <reference types="react" />
|
2
|
+
import type { FieldState } from "../Field";
|
3
|
+
export declare type ExperimentalFormContextField = {
|
4
|
+
state: FieldState;
|
5
|
+
label: string;
|
6
|
+
labelFor: string;
|
7
|
+
};
|
8
|
+
export declare type ExperimentalFormContextValue = {
|
9
|
+
fields: Record<string, ExperimentalFormContextField>;
|
10
|
+
addField: (field: ExperimentalFormContextField) => void;
|
11
|
+
removeField: (field: ExperimentalFormContextField) => void;
|
12
|
+
};
|
13
|
+
export declare const ExperimentalFormContext: import("react").Context<ExperimentalFormContextValue | null>;
|
@@ -0,0 +1,8 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.ExperimentalFormContext = void 0;
|
7
|
+
var _react = require("react");
|
8
|
+
var ExperimentalFormContext = exports.ExperimentalFormContext = /*#__PURE__*/(0, _react.createContext)(null);
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
var _Form = require("./Form");
|
7
|
+
Object.keys(_Form).forEach(function (key) {
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
9
|
+
if (key in exports && exports[key] === _Form[key]) return;
|
10
|
+
Object.defineProperty(exports, key, {
|
11
|
+
enumerable: true,
|
12
|
+
get: function get() {
|
13
|
+
return _Form[key];
|
14
|
+
}
|
15
|
+
});
|
16
|
+
});
|
17
|
+
var _useForm = require("./useForm");
|
18
|
+
Object.keys(_useForm).forEach(function (key) {
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
20
|
+
if (key in exports && exports[key] === _useForm[key]) return;
|
21
|
+
Object.defineProperty(exports, key, {
|
22
|
+
enumerable: true,
|
23
|
+
get: function get() {
|
24
|
+
return _useForm[key];
|
25
|
+
}
|
26
|
+
});
|
27
|
+
});
|