@jobber/components 6.103.2-JOB-140609-8386817.45 → 6.103.3
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/Autocomplete/Autocomplete.types.d.ts +1 -12
- package/dist/Autocomplete/index.cjs +13 -1
- package/dist/Autocomplete/index.mjs +13 -1
- package/dist/Checkbox/Checkbox.types.d.ts +9 -2
- package/dist/Checkbox/index.cjs +2 -4
- package/dist/Checkbox/index.mjs +2 -4
- package/dist/Chips/InternalChipDismissible/hooks/index.cjs +2 -2
- package/dist/Chips/InternalChipDismissible/hooks/index.mjs +2 -2
- package/dist/Chips/InternalChipDismissible/index.cjs +2 -2
- package/dist/Chips/InternalChipDismissible/index.mjs +2 -2
- package/dist/Chips/index.cjs +2 -2
- package/dist/Chips/index.mjs +2 -2
- package/dist/DataList/components/DataListSearch/index.cjs +12 -1
- package/dist/DataList/components/DataListSearch/index.mjs +12 -1
- package/dist/DataList/index.cjs +8 -0
- package/dist/DataList/index.mjs +8 -0
- package/dist/DataTable/index.cjs +2 -2
- package/dist/DataTable/index.mjs +2 -2
- package/dist/DatePicker/index.cjs +2 -2
- package/dist/DatePicker/index.mjs +2 -2
- package/dist/FormField/FormFieldTypes.d.ts +2 -0
- package/dist/FormField/hooks/useFormFieldWrapperStyles.d.ts +2 -7
- package/dist/FormField-cjs.js +6 -1
- package/dist/FormField-es.js +6 -2
- package/dist/InputDate/index.cjs +9 -5
- package/dist/InputDate/index.mjs +9 -5
- package/dist/InputDate/useInputDateActivatorActions.d.ts +8 -4
- package/dist/InputEmail/InputEmail.types.d.ts +20 -12
- package/dist/InputEmail/hooks/useInputEmailActions.d.ts +1 -1
- package/dist/InputEmail/hooks/useInputEmailFormField.d.ts +32 -0
- package/dist/InputEmail/index.cjs +44 -8
- package/dist/InputEmail/index.mjs +44 -8
- package/dist/InputNumber/InputNumber.rebuilt.types.d.ts +3 -20
- package/dist/InputNumber/index.cjs +3 -3
- package/dist/InputNumber/index.mjs +3 -3
- package/dist/InputPhoneNumber/InputPhoneNumber.types.d.ts +27 -13
- package/dist/InputPhoneNumber/hooks/useInputPhoneActions.d.ts +1 -1
- package/dist/InputPhoneNumber/hooks/useInputPhoneFormField.d.ts +71 -0
- package/dist/InputPhoneNumber/index.cjs +34 -17
- package/dist/InputPhoneNumber/index.mjs +34 -17
- package/dist/InputText/InputText.types.d.ts +24 -24
- package/dist/InputText/index.cjs +54 -54
- package/dist/InputText/index.mjs +55 -55
- package/dist/InputText/useInputTextActions.d.ts +1 -1
- package/dist/InputText/useInputTextFormField.d.ts +352 -0
- package/dist/InputTime/InputTime.rebuilt.d.ts +1 -1
- package/dist/InputTime/InputTime.types.d.ts +1 -21
- package/dist/InputTime/index.cjs +33 -63
- package/dist/InputTime/index.d.ts +1 -1
- package/dist/InputTime/index.mjs +36 -66
- package/dist/List/index.cjs +2 -2
- package/dist/List/index.mjs +2 -2
- package/dist/RecurringSelect/index.cjs +2 -2
- package/dist/RecurringSelect/index.mjs +2 -2
- package/dist/Select/Select.rebuilt.d.ts +1 -1
- package/dist/Select/Select.types.d.ts +1 -14
- package/dist/Select/hooks/useSelectActions.d.ts +5 -5
- package/dist/Select/hooks/useSelectFormField.d.ts +34 -0
- package/dist/Select/index.cjs +41 -28
- package/dist/Select/index.d.ts +5 -7
- package/dist/Select/index.mjs +43 -30
- package/dist/Tabs-es.js +1 -1
- package/dist/_baseEach-cjs.js +12 -12
- package/dist/_baseEach-es.js +1 -1
- package/dist/_baseFlatten-cjs.js +2 -2
- package/dist/_baseFlatten-es.js +1 -1
- package/dist/{_getAllKeys-cjs.js → _baseGet-cjs.js} +181 -181
- package/dist/{_getAllKeys-es.js → _baseGet-es.js} +182 -182
- package/dist/debounce-es.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/omit-cjs.js +14 -14
- package/dist/omit-es.js +1 -1
- package/dist/sharedHelpers/types.d.ts +0 -235
- package/dist/styles.css +18 -20
- package/dist/useScrollToActive-cjs.js +3 -3
- package/dist/useScrollToActive-es.js +2 -2
- package/package.json +2 -2
- package/dist/InputTime/hooks/useInputTimeActions.d.ts +0 -16
|
@@ -113,6 +113,7 @@ const DEFAULT_PATTERN = "(***) ***-****";
|
|
|
113
113
|
function useInputPhoneActions({ onChange, inputRef, onFocus, onBlur, onKeyDown, onEnter, }) {
|
|
114
114
|
function handleClear() {
|
|
115
115
|
var _a;
|
|
116
|
+
handleBlur();
|
|
116
117
|
onChange && onChange("");
|
|
117
118
|
(_a = inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
118
119
|
}
|
|
@@ -146,22 +147,26 @@ function useInputPhoneActions({ onChange, inputRef, onFocus, onBlur, onKeyDown,
|
|
|
146
147
|
};
|
|
147
148
|
}
|
|
148
149
|
|
|
150
|
+
/**
|
|
151
|
+
* Provides the props for the html fields rendered by the html input.
|
|
152
|
+
* DO not repeat this pattern. We are doing this as a proof of concept relating to the refactoring of Form inputs to see what can be removed.
|
|
153
|
+
*/
|
|
154
|
+
function useInputPhoneFormField(_a) {
|
|
155
|
+
var { id, name, description, inline, handleChange, handleBlur, handleFocus, handleKeyDown, error, disabled, autofocus, value, readonly } = _a, rest = __rest(_a, ["id", "name", "description", "inline", "handleChange", "handleBlur", "handleFocus", "handleKeyDown", "error", "disabled", "autofocus", "value", "readonly"]);
|
|
156
|
+
const descriptionIdentifier = `descriptionUUID--${id}`;
|
|
157
|
+
const fieldProps = Object.assign(Object.assign(Object.assign(Object.assign({}, rest), { id,
|
|
158
|
+
name,
|
|
159
|
+
disabled, autoFocus: autofocus, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, onKeyDown: handleKeyDown, value, invalid: error || rest.invalid ? "true" : undefined }), (description &&
|
|
160
|
+
!inline && { "aria-describedby": descriptionIdentifier })), { readOnly: readonly });
|
|
161
|
+
return { fieldProps, descriptionIdentifier };
|
|
162
|
+
}
|
|
163
|
+
|
|
149
164
|
const InputPhoneNumberRebuilt = forwardRef(function InputPhoneNumberInternal(_a, ref) {
|
|
150
165
|
var _b, _c, _d, _e;
|
|
151
166
|
var { pattern = DEFAULT_PATTERN } = _a, props = __rest(_a, ["pattern"]);
|
|
152
167
|
const inputPhoneNumberRef = (_b = ref) !== null && _b !== void 0 ? _b : React__default.useRef(null);
|
|
153
168
|
const wrapperRef = React__default.useRef(null);
|
|
154
|
-
const { inputStyle } = useFormFieldWrapperStyles({
|
|
155
|
-
size: props.size,
|
|
156
|
-
align: props.align,
|
|
157
|
-
placeholder: props.placeholder,
|
|
158
|
-
value: props.value,
|
|
159
|
-
invalid: props.invalid,
|
|
160
|
-
error: props.error,
|
|
161
|
-
disabled: props.disabled,
|
|
162
|
-
inline: props.inline,
|
|
163
|
-
type: "tel",
|
|
164
|
-
});
|
|
169
|
+
const { inputStyle } = useFormFieldWrapperStyles(Object.assign(Object.assign({}, props), { type: "tel" }));
|
|
165
170
|
const generatedId = useId();
|
|
166
171
|
const id = props.id || generatedId;
|
|
167
172
|
const { name } = useAtlantisFormFieldName({
|
|
@@ -181,13 +186,25 @@ const InputPhoneNumberRebuilt = forwardRef(function InputPhoneNumberInternal(_a,
|
|
|
181
186
|
onEnter: props.onEnter,
|
|
182
187
|
inputRef: inputPhoneNumberRef,
|
|
183
188
|
});
|
|
184
|
-
const descriptionIdentifier =
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
+
const { fieldProps, descriptionIdentifier } = useInputPhoneFormField({
|
|
190
|
+
id,
|
|
191
|
+
name,
|
|
192
|
+
handleChange,
|
|
193
|
+
handleBlur,
|
|
194
|
+
handleFocus,
|
|
195
|
+
handleKeyDown,
|
|
196
|
+
autofocus: props.autoFocus,
|
|
197
|
+
disabled: props.disabled,
|
|
198
|
+
readonly: props.readonly,
|
|
199
|
+
invalid: props.invalid,
|
|
200
|
+
error: props.error,
|
|
201
|
+
description: props.description,
|
|
202
|
+
inline: props.inline,
|
|
203
|
+
});
|
|
204
|
+
return (React__default.createElement(FormFieldWrapper, { disabled: props.disabled, size: props.size, inline: props.inline, wrapperRef: wrapperRef, error: (_c = props.error) !== null && _c !== void 0 ? _c : "", invalid: Boolean(props.error || props.invalid), identifier: id, descriptionIdentifier: descriptionIdentifier, description: props.description, clearable: (_d = props.clearable) !== null && _d !== void 0 ? _d : "never", onClear: handleClear, type: "tel", placeholder: props.placeholder, value: formattedValue, prefix: props.prefix, suffix: props.suffix, readonly: props.readonly, loading: props.loading },
|
|
205
|
+
React__default.createElement("input", Object.assign({ type: "tel" }, fieldProps, { ref: inputPhoneNumberRef, className: classnames(inputStyle, {
|
|
189
206
|
[styles.emptyValue]: inputValue.length === 0 && pattern[0] === "(",
|
|
190
|
-
}), value: formattedValue
|
|
207
|
+
}), value: formattedValue })),
|
|
191
208
|
React__default.createElement(MaskElement, { isMasking: isMasking, formattedValue: formattedValue, placeholderMask: placeholderMask }),
|
|
192
209
|
React__default.createElement(FormFieldPostFix, { variation: "spinner", visible: (_e = props.loading) !== null && _e !== void 0 ? _e : false })));
|
|
193
210
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { Clearable } from "@jobber/hooks";
|
|
1
2
|
import type { XOR } from "ts-xor";
|
|
2
|
-
import type { CommonFormFieldProps, FormFieldProps, FormFieldTypes } from "../FormField";
|
|
3
|
-
import type { FocusEvents, HTMLInputBaseProps, InputLengthConstraint, KeyboardEvents, RebuiltInputCommonProps } from "../sharedHelpers/types";
|
|
3
|
+
import type { AutocompleteTypes, CommonFormFieldProps, FormFieldProps, FormFieldTypes } from "../FormField";
|
|
4
4
|
export interface RowRange {
|
|
5
5
|
min: number;
|
|
6
6
|
max: number;
|
|
@@ -10,7 +10,15 @@ export type InputTextVersion = 1 | 2 | undefined;
|
|
|
10
10
|
* Experimental version 2 of the InputText component.
|
|
11
11
|
* Do not use unless you have talked with Atlantis first.
|
|
12
12
|
*/
|
|
13
|
-
export interface InputTextRebuiltProps extends
|
|
13
|
+
export interface InputTextRebuiltProps extends Omit<React.InputHTMLAttributes<HTMLInputElement | HTMLTextAreaElement>, "onChange" | "onBlur" | "maxLength" | "rows" | "size" | "suffix" | "prefix" | "value" | "max" | "min" | "defaultValue"> {
|
|
14
|
+
readonly error?: string;
|
|
15
|
+
readonly invalid?: boolean;
|
|
16
|
+
readonly identifier?: string;
|
|
17
|
+
readonly autocomplete?: boolean | AutocompleteTypes;
|
|
18
|
+
readonly loading?: boolean;
|
|
19
|
+
readonly onKeyUp?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
|
|
20
|
+
readonly children?: React.ReactNode;
|
|
21
|
+
readonly clearable?: Clearable;
|
|
14
22
|
/**
|
|
15
23
|
* Use this when you're expecting a long answer.
|
|
16
24
|
*/
|
|
@@ -22,32 +30,24 @@ export interface InputTextRebuiltProps extends HTMLInputBaseProps, FocusEvents<H
|
|
|
22
30
|
* maximum number of visible rows.
|
|
23
31
|
*/
|
|
24
32
|
readonly rows?: number | RowRange;
|
|
25
|
-
/**
|
|
26
|
-
* Determines what kind of form field should the component give you.
|
|
27
|
-
*/
|
|
28
33
|
readonly type?: FormFieldTypes;
|
|
29
34
|
/**
|
|
30
|
-
*
|
|
31
|
-
*/
|
|
32
|
-
readonly toolbar?: React.ReactNode;
|
|
33
|
-
/**
|
|
34
|
-
* Determines the visibility of the toolbar.
|
|
35
|
-
*/
|
|
36
|
-
readonly toolbarVisibility?: "always" | "while-editing";
|
|
37
|
-
/**
|
|
38
|
-
* The current value of the input.
|
|
39
|
-
*/
|
|
40
|
-
readonly value: string;
|
|
41
|
-
/**
|
|
42
|
-
* Custom onChange handler that provides the new value as the first argument.
|
|
35
|
+
* Version 2 is highly experimental. Avoid using it unless you have talked with Atlantis first.
|
|
43
36
|
*/
|
|
37
|
+
readonly version: 2;
|
|
44
38
|
readonly onChange?: (newValue: string, event?: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
45
|
-
/**
|
|
46
|
-
* A callback to handle "Enter" keypress. This will only run
|
|
47
|
-
* if Enter is the only key. Will not run if Shift or Control
|
|
48
|
-
* are being held.
|
|
49
|
-
*/
|
|
50
39
|
readonly onEnter?: FormFieldProps["onEnter"];
|
|
40
|
+
readonly onBlur?: FormFieldProps["onBlur"];
|
|
41
|
+
readonly value: string;
|
|
42
|
+
readonly maxLength?: number;
|
|
43
|
+
readonly size?: FormFieldProps["size"];
|
|
44
|
+
readonly inline?: FormFieldProps["inline"];
|
|
45
|
+
readonly align?: FormFieldProps["align"];
|
|
46
|
+
readonly toolbar?: FormFieldProps["toolbar"];
|
|
47
|
+
readonly toolbarVisibility?: FormFieldProps["toolbarVisibility"];
|
|
48
|
+
readonly prefix?: FormFieldProps["prefix"];
|
|
49
|
+
readonly suffix?: FormFieldProps["suffix"];
|
|
50
|
+
readonly description?: FormFieldProps["description"];
|
|
51
51
|
}
|
|
52
52
|
interface BaseProps extends CommonFormFieldProps, Pick<FormFieldProps, "autofocus" | "maxLength" | "readonly" | "autocomplete" | "keyboard" | "onEnter" | "onFocus" | "onBlur" | "onChange" | "inputRef" | "validations" | "defaultValue" | "prefix" | "suffix" | "toolbar" | "toolbarVisibility" | "version"> {
|
|
53
53
|
multiline?: boolean;
|
package/dist/InputText/index.cjs
CHANGED
|
@@ -4,11 +4,12 @@ var React = require('react');
|
|
|
4
4
|
var jobberHooks = require('@jobber/hooks');
|
|
5
5
|
var FormField = require('../FormField-cjs.js');
|
|
6
6
|
require('classnames');
|
|
7
|
-
require('../tslib.es6-cjs.js');
|
|
7
|
+
var tslib_es6 = require('../tslib.es6-cjs.js');
|
|
8
8
|
require('react-hook-form');
|
|
9
9
|
require('framer-motion');
|
|
10
10
|
require('@jobber/design');
|
|
11
11
|
require('../Button-cjs.js');
|
|
12
|
+
var omit = require('../omit-cjs.js');
|
|
12
13
|
require('../Icon-cjs.js');
|
|
13
14
|
require('../Text-cjs.js');
|
|
14
15
|
require('../Typography-cjs.js');
|
|
@@ -16,6 +17,17 @@ require('../useFormFieldFocus-cjs.js');
|
|
|
16
17
|
require('../InputValidation-cjs.js');
|
|
17
18
|
require('../Spinner-cjs.js');
|
|
18
19
|
require('react-router-dom');
|
|
20
|
+
require('../_commonjsHelpers-cjs.js');
|
|
21
|
+
require('../_baseGet-cjs.js');
|
|
22
|
+
require('../isTypedArray-cjs.js');
|
|
23
|
+
require('../isObjectLike-cjs.js');
|
|
24
|
+
require('../identity-cjs.js');
|
|
25
|
+
require('../_getTag-cjs.js');
|
|
26
|
+
require('../isSymbol-cjs.js');
|
|
27
|
+
require('../keysIn-cjs.js');
|
|
28
|
+
require('../_baseAssignValue-cjs.js');
|
|
29
|
+
require('../_baseFlatten-cjs.js');
|
|
30
|
+
require('../_setToString-cjs.js');
|
|
19
31
|
|
|
20
32
|
/**
|
|
21
33
|
* Hook for resizing a textarea based on its content. The textarea will grow up to the max number of rows specified.
|
|
@@ -150,6 +162,7 @@ function insertAtCursor(input, newText) {
|
|
|
150
162
|
function useInputTextActions({ onChange, inputRef, onEnter, onFocus, onBlur, onKeyDown, }) {
|
|
151
163
|
function handleClear() {
|
|
152
164
|
var _a;
|
|
165
|
+
handleBlur();
|
|
153
166
|
onChange && onChange("");
|
|
154
167
|
(_a = inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
155
168
|
}
|
|
@@ -183,10 +196,23 @@ function useInputTextActions({ onChange, inputRef, onEnter, onFocus, onBlur, onK
|
|
|
183
196
|
};
|
|
184
197
|
}
|
|
185
198
|
|
|
199
|
+
/**
|
|
200
|
+
* Provides the props for the html fields rendered by the html input.
|
|
201
|
+
* DO not repeat this pattern. We are doing this as a proof of concept relating to the refactoring of Form inputs to see what can be removed.
|
|
202
|
+
*/
|
|
203
|
+
function useInputTextFormField(_a) {
|
|
204
|
+
var { id, name, description, inline, handleChange, handleBlur, handleFocus, handleKeyDown, error } = _a, rest = tslib_es6.__rest(_a, ["id", "name", "description", "inline", "handleChange", "handleBlur", "handleFocus", "handleKeyDown", "error"]);
|
|
205
|
+
const descriptionIdentifier = `descriptionUUID--${id}`;
|
|
206
|
+
const fieldProps = Object.assign(Object.assign(Object.assign(Object.assign({}, rest), { id, className: FormField.styles.input, name, disabled: rest.disabled, inputMode: rest.inputMode, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus }), (description &&
|
|
207
|
+
!inline && { "aria-describedby": descriptionIdentifier })), { "aria-invalid": rest["aria-invalid"] || error || rest.invalid ? true : undefined, autoFocus: rest.autoFocus, invalid: error || rest.invalid ? "true" : undefined, onKeyDown: handleKeyDown });
|
|
208
|
+
return { fieldProps, descriptionIdentifier };
|
|
209
|
+
}
|
|
210
|
+
|
|
186
211
|
const InputTextSPAR = React.forwardRef(function InputTextInternal(props, inputRefs) {
|
|
187
212
|
var _a, _b, _c;
|
|
188
213
|
const inputTextRef = React.useRef(null);
|
|
189
214
|
const wrapperRef = React.useRef(null);
|
|
215
|
+
const legacyPropHelper = Object.assign(Object.assign({}, props), { version: 1 });
|
|
190
216
|
const id = useInputTextId(props);
|
|
191
217
|
const { rowRange } = useTextAreaResize({
|
|
192
218
|
rows: props.rows,
|
|
@@ -194,18 +220,8 @@ const InputTextSPAR = React.forwardRef(function InputTextInternal(props, inputRe
|
|
|
194
220
|
inputRef: inputTextRef,
|
|
195
221
|
wrapperRef: wrapperRef,
|
|
196
222
|
});
|
|
197
|
-
const
|
|
198
|
-
|
|
199
|
-
align: props.align,
|
|
200
|
-
placeholder: props.placeholder,
|
|
201
|
-
value: props.value,
|
|
202
|
-
invalid: props.invalid,
|
|
203
|
-
error: props.error,
|
|
204
|
-
maxLength: props.maxLength,
|
|
205
|
-
type: props.multiline ? "textarea" : "text",
|
|
206
|
-
disabled: props.disabled,
|
|
207
|
-
inline: props.inline,
|
|
208
|
-
});
|
|
223
|
+
const type = props.multiline ? "textarea" : "text";
|
|
224
|
+
const { inputStyle } = FormField.useFormFieldWrapperStyles(legacyPropHelper);
|
|
209
225
|
const { name } = FormField.useAtlantisFormFieldName({
|
|
210
226
|
nameProp: props.name,
|
|
211
227
|
id: id,
|
|
@@ -218,43 +234,27 @@ const InputTextSPAR = React.forwardRef(function InputTextInternal(props, inputRe
|
|
|
218
234
|
onEnter: props.onEnter,
|
|
219
235
|
inputRef: inputTextRef,
|
|
220
236
|
});
|
|
221
|
-
const
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
237
|
+
const inputProps = omit.omit(props, [
|
|
238
|
+
"onChange",
|
|
239
|
+
"onBlur",
|
|
240
|
+
"onFocus",
|
|
241
|
+
"onEnter",
|
|
242
|
+
"size",
|
|
243
|
+
"placeholder",
|
|
244
|
+
"multiline",
|
|
245
|
+
"prefix",
|
|
246
|
+
"suffix",
|
|
247
|
+
"version",
|
|
248
|
+
]);
|
|
249
|
+
const { fieldProps, descriptionIdentifier } = useInputTextFormField(Object.assign(Object.assign({}, inputProps), { id,
|
|
227
250
|
name,
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
autoComplete: props.autoComplete,
|
|
234
|
-
inputMode: props.inputMode,
|
|
235
|
-
tabIndex: props.tabIndex,
|
|
236
|
-
maxLength: props.maxLength,
|
|
237
|
-
role: props.role,
|
|
238
|
-
"aria-label": props.ariaLabel,
|
|
239
|
-
"aria-describedby": hasDescription
|
|
240
|
-
? descriptionIdentifier
|
|
241
|
-
: props.ariaDescribedBy,
|
|
242
|
-
"aria-invalid": isInvalid ? true : undefined,
|
|
243
|
-
"aria-controls": props.ariaControls,
|
|
244
|
-
"aria-expanded": props.ariaExpanded,
|
|
245
|
-
"aria-activedescendant": props.ariaActiveDescendant,
|
|
246
|
-
"aria-autocomplete": props.ariaAutocomplete,
|
|
247
|
-
"aria-required": props.ariaRequired,
|
|
248
|
-
onChange: handleChange,
|
|
249
|
-
onBlur: handleBlur,
|
|
250
|
-
onFocus: handleFocus,
|
|
251
|
-
onKeyDown: handleKeyDown,
|
|
252
|
-
onKeyUp: props.onKeyUp,
|
|
253
|
-
ref: FormField.mergeRefs([inputRefs, inputTextRef]),
|
|
254
|
-
};
|
|
255
|
-
return (React.createElement(FormField.FormFieldWrapper, { disabled: props.disabled, size: props.size, align: props.align, inline: props.inline, autofocus: props.autoFocus, name: name, wrapperRef: wrapperRef, error: (_a = props.error) !== null && _a !== void 0 ? _a : "", invalid: Boolean(props.error || props.invalid), identifier: id, descriptionIdentifier: descriptionIdentifier, description: props.description, clearable: (_b = props.clearable) !== null && _b !== void 0 ? _b : "never", maxLength: props.maxLength, onClear: handleClear, type: props.multiline ? "textarea" : "text", placeholder: props.placeholder, value: props.value, prefix: props.prefix, suffix: props.suffix, rows: rowRange.min, toolbar: props.toolbar, toolbarVisibility: props.toolbarVisibility },
|
|
251
|
+
handleChange,
|
|
252
|
+
handleBlur,
|
|
253
|
+
handleFocus,
|
|
254
|
+
handleKeyDown }));
|
|
255
|
+
return (React.createElement(FormField.FormFieldWrapper, { disabled: props.disabled, size: props.size, align: props.align, inline: props.inline, autofocus: props.autoFocus, name: name, wrapperRef: wrapperRef, error: (_a = props.error) !== null && _a !== void 0 ? _a : "", invalid: Boolean(props.error || props.invalid), identifier: id, descriptionIdentifier: descriptionIdentifier, description: props.description, clearable: (_b = props.clearable) !== null && _b !== void 0 ? _b : "never", onClear: handleClear, type: props.multiline ? "textarea" : "text", placeholder: props.placeholder, value: props.value, prefix: props.prefix, suffix: props.suffix, rows: rowRange.min, toolbar: props.toolbar, toolbarVisibility: props.toolbarVisibility },
|
|
256
256
|
React.createElement(React.Fragment, null,
|
|
257
|
-
|
|
257
|
+
type === "textarea" ? (React.createElement(TextArea, { fieldProps: fieldProps, rowRange: rowRange, inputRefs: [inputRefs, inputTextRef], value: props.value, inputStyle: inputStyle })) : (React.createElement(TextInput, { fieldProps: fieldProps, inputRefs: [inputRefs, inputTextRef], value: props.value, inputStyle: inputStyle })),
|
|
258
258
|
React.createElement(FormField.FormFieldPostFix, { variation: "spinner", visible: (_c = props.loading) !== null && _c !== void 0 ? _c : false }),
|
|
259
259
|
props.children)));
|
|
260
260
|
});
|
|
@@ -262,12 +262,12 @@ function useInputTextId(props) {
|
|
|
262
262
|
const generatedId = React.useId();
|
|
263
263
|
return props.id || generatedId;
|
|
264
264
|
}
|
|
265
|
-
|
|
266
|
-
return React.createElement("textarea", Object.assign({},
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
return React.createElement("input", Object.assign({},
|
|
270
|
-
}
|
|
265
|
+
function TextArea({ fieldProps, rowRange, inputRefs, value, inputStyle, }) {
|
|
266
|
+
return (React.createElement("textarea", Object.assign({}, fieldProps, { rows: rowRange.min, ref: FormField.mergeRefs(inputRefs), className: inputStyle, value: value })));
|
|
267
|
+
}
|
|
268
|
+
function TextInput({ fieldProps, inputRefs, value, inputStyle, }) {
|
|
269
|
+
return (React.createElement("input", Object.assign({}, fieldProps, { ref: FormField.mergeRefs(inputRefs), className: inputStyle, value: value })));
|
|
270
|
+
}
|
|
271
271
|
|
|
272
272
|
function isNewInputTextProps(props) {
|
|
273
273
|
return props.version === 2;
|
package/dist/InputText/index.mjs
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import React__default, { forwardRef, useRef, useImperativeHandle, useId } from 'react';
|
|
2
2
|
import { useSafeLayoutEffect } from '@jobber/hooks';
|
|
3
|
-
import { k as FormField,
|
|
3
|
+
import { k as FormField, s as styles, j as useFormFieldWrapperStyles, b as useAtlantisFormFieldName, f as FormFieldWrapper, l as FormFieldPostFix, m as mergeRefs } from '../FormField-es.js';
|
|
4
4
|
import 'classnames';
|
|
5
|
-
import '../tslib.es6-es.js';
|
|
5
|
+
import { _ as __rest } from '../tslib.es6-es.js';
|
|
6
6
|
import 'react-hook-form';
|
|
7
7
|
import 'framer-motion';
|
|
8
8
|
import '@jobber/design';
|
|
9
9
|
import '../Button-es.js';
|
|
10
|
+
import { o as omit } from '../omit-es.js';
|
|
10
11
|
import '../Icon-es.js';
|
|
11
12
|
import '../Text-es.js';
|
|
12
13
|
import '../Typography-es.js';
|
|
@@ -14,6 +15,17 @@ import '../useFormFieldFocus-es.js';
|
|
|
14
15
|
import '../InputValidation-es.js';
|
|
15
16
|
import '../Spinner-es.js';
|
|
16
17
|
import 'react-router-dom';
|
|
18
|
+
import '../_commonjsHelpers-es.js';
|
|
19
|
+
import '../_baseGet-es.js';
|
|
20
|
+
import '../isTypedArray-es.js';
|
|
21
|
+
import '../isObjectLike-es.js';
|
|
22
|
+
import '../identity-es.js';
|
|
23
|
+
import '../_getTag-es.js';
|
|
24
|
+
import '../isSymbol-es.js';
|
|
25
|
+
import '../keysIn-es.js';
|
|
26
|
+
import '../_baseAssignValue-es.js';
|
|
27
|
+
import '../_baseFlatten-es.js';
|
|
28
|
+
import '../_setToString-es.js';
|
|
17
29
|
|
|
18
30
|
/**
|
|
19
31
|
* Hook for resizing a textarea based on its content. The textarea will grow up to the max number of rows specified.
|
|
@@ -148,6 +160,7 @@ function insertAtCursor(input, newText) {
|
|
|
148
160
|
function useInputTextActions({ onChange, inputRef, onEnter, onFocus, onBlur, onKeyDown, }) {
|
|
149
161
|
function handleClear() {
|
|
150
162
|
var _a;
|
|
163
|
+
handleBlur();
|
|
151
164
|
onChange && onChange("");
|
|
152
165
|
(_a = inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
153
166
|
}
|
|
@@ -181,10 +194,23 @@ function useInputTextActions({ onChange, inputRef, onEnter, onFocus, onBlur, onK
|
|
|
181
194
|
};
|
|
182
195
|
}
|
|
183
196
|
|
|
197
|
+
/**
|
|
198
|
+
* Provides the props for the html fields rendered by the html input.
|
|
199
|
+
* DO not repeat this pattern. We are doing this as a proof of concept relating to the refactoring of Form inputs to see what can be removed.
|
|
200
|
+
*/
|
|
201
|
+
function useInputTextFormField(_a) {
|
|
202
|
+
var { id, name, description, inline, handleChange, handleBlur, handleFocus, handleKeyDown, error } = _a, rest = __rest(_a, ["id", "name", "description", "inline", "handleChange", "handleBlur", "handleFocus", "handleKeyDown", "error"]);
|
|
203
|
+
const descriptionIdentifier = `descriptionUUID--${id}`;
|
|
204
|
+
const fieldProps = Object.assign(Object.assign(Object.assign(Object.assign({}, rest), { id, className: styles.input, name, disabled: rest.disabled, inputMode: rest.inputMode, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus }), (description &&
|
|
205
|
+
!inline && { "aria-describedby": descriptionIdentifier })), { "aria-invalid": rest["aria-invalid"] || error || rest.invalid ? true : undefined, autoFocus: rest.autoFocus, invalid: error || rest.invalid ? "true" : undefined, onKeyDown: handleKeyDown });
|
|
206
|
+
return { fieldProps, descriptionIdentifier };
|
|
207
|
+
}
|
|
208
|
+
|
|
184
209
|
const InputTextSPAR = forwardRef(function InputTextInternal(props, inputRefs) {
|
|
185
210
|
var _a, _b, _c;
|
|
186
211
|
const inputTextRef = React__default.useRef(null);
|
|
187
212
|
const wrapperRef = React__default.useRef(null);
|
|
213
|
+
const legacyPropHelper = Object.assign(Object.assign({}, props), { version: 1 });
|
|
188
214
|
const id = useInputTextId(props);
|
|
189
215
|
const { rowRange } = useTextAreaResize({
|
|
190
216
|
rows: props.rows,
|
|
@@ -192,18 +218,8 @@ const InputTextSPAR = forwardRef(function InputTextInternal(props, inputRefs) {
|
|
|
192
218
|
inputRef: inputTextRef,
|
|
193
219
|
wrapperRef: wrapperRef,
|
|
194
220
|
});
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
align: props.align,
|
|
198
|
-
placeholder: props.placeholder,
|
|
199
|
-
value: props.value,
|
|
200
|
-
invalid: props.invalid,
|
|
201
|
-
error: props.error,
|
|
202
|
-
maxLength: props.maxLength,
|
|
203
|
-
type: props.multiline ? "textarea" : "text",
|
|
204
|
-
disabled: props.disabled,
|
|
205
|
-
inline: props.inline,
|
|
206
|
-
});
|
|
221
|
+
const type = props.multiline ? "textarea" : "text";
|
|
222
|
+
const { inputStyle } = useFormFieldWrapperStyles(legacyPropHelper);
|
|
207
223
|
const { name } = useAtlantisFormFieldName({
|
|
208
224
|
nameProp: props.name,
|
|
209
225
|
id: id,
|
|
@@ -216,43 +232,27 @@ const InputTextSPAR = forwardRef(function InputTextInternal(props, inputRefs) {
|
|
|
216
232
|
onEnter: props.onEnter,
|
|
217
233
|
inputRef: inputTextRef,
|
|
218
234
|
});
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
235
|
+
const inputProps = omit(props, [
|
|
236
|
+
"onChange",
|
|
237
|
+
"onBlur",
|
|
238
|
+
"onFocus",
|
|
239
|
+
"onEnter",
|
|
240
|
+
"size",
|
|
241
|
+
"placeholder",
|
|
242
|
+
"multiline",
|
|
243
|
+
"prefix",
|
|
244
|
+
"suffix",
|
|
245
|
+
"version",
|
|
246
|
+
]);
|
|
247
|
+
const { fieldProps, descriptionIdentifier } = useInputTextFormField(Object.assign(Object.assign({}, inputProps), { id,
|
|
225
248
|
name,
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
autoComplete: props.autoComplete,
|
|
232
|
-
inputMode: props.inputMode,
|
|
233
|
-
tabIndex: props.tabIndex,
|
|
234
|
-
maxLength: props.maxLength,
|
|
235
|
-
role: props.role,
|
|
236
|
-
"aria-label": props.ariaLabel,
|
|
237
|
-
"aria-describedby": hasDescription
|
|
238
|
-
? descriptionIdentifier
|
|
239
|
-
: props.ariaDescribedBy,
|
|
240
|
-
"aria-invalid": isInvalid ? true : undefined,
|
|
241
|
-
"aria-controls": props.ariaControls,
|
|
242
|
-
"aria-expanded": props.ariaExpanded,
|
|
243
|
-
"aria-activedescendant": props.ariaActiveDescendant,
|
|
244
|
-
"aria-autocomplete": props.ariaAutocomplete,
|
|
245
|
-
"aria-required": props.ariaRequired,
|
|
246
|
-
onChange: handleChange,
|
|
247
|
-
onBlur: handleBlur,
|
|
248
|
-
onFocus: handleFocus,
|
|
249
|
-
onKeyDown: handleKeyDown,
|
|
250
|
-
onKeyUp: props.onKeyUp,
|
|
251
|
-
ref: mergeRefs([inputRefs, inputTextRef]),
|
|
252
|
-
};
|
|
253
|
-
return (React__default.createElement(FormFieldWrapper, { disabled: props.disabled, size: props.size, align: props.align, inline: props.inline, autofocus: props.autoFocus, name: name, wrapperRef: wrapperRef, error: (_a = props.error) !== null && _a !== void 0 ? _a : "", invalid: Boolean(props.error || props.invalid), identifier: id, descriptionIdentifier: descriptionIdentifier, description: props.description, clearable: (_b = props.clearable) !== null && _b !== void 0 ? _b : "never", maxLength: props.maxLength, onClear: handleClear, type: props.multiline ? "textarea" : "text", placeholder: props.placeholder, value: props.value, prefix: props.prefix, suffix: props.suffix, rows: rowRange.min, toolbar: props.toolbar, toolbarVisibility: props.toolbarVisibility },
|
|
249
|
+
handleChange,
|
|
250
|
+
handleBlur,
|
|
251
|
+
handleFocus,
|
|
252
|
+
handleKeyDown }));
|
|
253
|
+
return (React__default.createElement(FormFieldWrapper, { disabled: props.disabled, size: props.size, align: props.align, inline: props.inline, autofocus: props.autoFocus, name: name, wrapperRef: wrapperRef, error: (_a = props.error) !== null && _a !== void 0 ? _a : "", invalid: Boolean(props.error || props.invalid), identifier: id, descriptionIdentifier: descriptionIdentifier, description: props.description, clearable: (_b = props.clearable) !== null && _b !== void 0 ? _b : "never", onClear: handleClear, type: props.multiline ? "textarea" : "text", placeholder: props.placeholder, value: props.value, prefix: props.prefix, suffix: props.suffix, rows: rowRange.min, toolbar: props.toolbar, toolbarVisibility: props.toolbarVisibility },
|
|
254
254
|
React__default.createElement(React__default.Fragment, null,
|
|
255
|
-
|
|
255
|
+
type === "textarea" ? (React__default.createElement(TextArea, { fieldProps: fieldProps, rowRange: rowRange, inputRefs: [inputRefs, inputTextRef], value: props.value, inputStyle: inputStyle })) : (React__default.createElement(TextInput, { fieldProps: fieldProps, inputRefs: [inputRefs, inputTextRef], value: props.value, inputStyle: inputStyle })),
|
|
256
256
|
React__default.createElement(FormFieldPostFix, { variation: "spinner", visible: (_c = props.loading) !== null && _c !== void 0 ? _c : false }),
|
|
257
257
|
props.children)));
|
|
258
258
|
});
|
|
@@ -260,12 +260,12 @@ function useInputTextId(props) {
|
|
|
260
260
|
const generatedId = useId();
|
|
261
261
|
return props.id || generatedId;
|
|
262
262
|
}
|
|
263
|
-
|
|
264
|
-
return React__default.createElement("textarea", Object.assign({},
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
return React__default.createElement("input", Object.assign({},
|
|
268
|
-
}
|
|
263
|
+
function TextArea({ fieldProps, rowRange, inputRefs, value, inputStyle, }) {
|
|
264
|
+
return (React__default.createElement("textarea", Object.assign({}, fieldProps, { rows: rowRange.min, ref: mergeRefs(inputRefs), className: inputStyle, value: value })));
|
|
265
|
+
}
|
|
266
|
+
function TextInput({ fieldProps, inputRefs, value, inputStyle, }) {
|
|
267
|
+
return (React__default.createElement("input", Object.assign({}, fieldProps, { ref: mergeRefs(inputRefs), className: inputStyle, value: value })));
|
|
268
|
+
}
|
|
269
269
|
|
|
270
270
|
function isNewInputTextProps(props) {
|
|
271
271
|
return props.version === 2;
|
|
@@ -12,5 +12,5 @@ export declare function useInputTextActions({ onChange, inputRef, onEnter, onFoc
|
|
|
12
12
|
handleChange: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
13
13
|
handleKeyDown: (event: KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
14
14
|
handleFocus: (event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
15
|
-
handleBlur: (event
|
|
15
|
+
handleBlur: (event?: FocusEvent) => void;
|
|
16
16
|
};
|