@jobber/components 6.103.2-JOB-141426-1b49367.0 → 6.103.2-JOB-140609-8386817.45

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.
Files changed (79) hide show
  1. package/dist/Autocomplete/Autocomplete.types.d.ts +12 -1
  2. package/dist/Autocomplete/index.cjs +3 -24
  3. package/dist/Autocomplete/index.mjs +3 -24
  4. package/dist/Autocomplete/useAutocomplete.d.ts +0 -1
  5. package/dist/Checkbox/Checkbox.types.d.ts +2 -9
  6. package/dist/Checkbox/index.cjs +4 -2
  7. package/dist/Checkbox/index.mjs +4 -2
  8. package/dist/Chips/InternalChipDismissible/hooks/index.cjs +2 -2
  9. package/dist/Chips/InternalChipDismissible/hooks/index.mjs +2 -2
  10. package/dist/Chips/InternalChipDismissible/index.cjs +2 -2
  11. package/dist/Chips/InternalChipDismissible/index.mjs +2 -2
  12. package/dist/Chips/index.cjs +2 -2
  13. package/dist/Chips/index.mjs +2 -2
  14. package/dist/DataList/components/DataListSearch/index.cjs +1 -12
  15. package/dist/DataList/components/DataListSearch/index.mjs +1 -12
  16. package/dist/DataList/index.cjs +0 -8
  17. package/dist/DataList/index.mjs +0 -8
  18. package/dist/DataTable/index.cjs +2 -2
  19. package/dist/DataTable/index.mjs +2 -2
  20. package/dist/DatePicker/index.cjs +2 -2
  21. package/dist/DatePicker/index.mjs +2 -2
  22. package/dist/FormField/FormFieldTypes.d.ts +0 -2
  23. package/dist/FormField/hooks/useFormFieldWrapperStyles.d.ts +7 -2
  24. package/dist/FormField-cjs.js +0 -1
  25. package/dist/FormField-es.js +1 -1
  26. package/dist/InputDate/index.cjs +5 -9
  27. package/dist/InputDate/index.mjs +5 -9
  28. package/dist/InputDate/useInputDateActivatorActions.d.ts +4 -8
  29. package/dist/InputEmail/InputEmail.types.d.ts +12 -20
  30. package/dist/InputEmail/hooks/useInputEmailActions.d.ts +1 -1
  31. package/dist/InputEmail/index.cjs +8 -44
  32. package/dist/InputEmail/index.mjs +8 -44
  33. package/dist/InputNumber/InputNumber.rebuilt.types.d.ts +20 -3
  34. package/dist/InputNumber/index.cjs +2 -2
  35. package/dist/InputNumber/index.mjs +2 -2
  36. package/dist/InputPhoneNumber/InputPhoneNumber.types.d.ts +13 -27
  37. package/dist/InputPhoneNumber/hooks/useInputPhoneActions.d.ts +1 -1
  38. package/dist/InputPhoneNumber/index.cjs +17 -34
  39. package/dist/InputPhoneNumber/index.mjs +17 -34
  40. package/dist/InputText/InputText.types.d.ts +24 -24
  41. package/dist/InputText/index.cjs +54 -54
  42. package/dist/InputText/index.mjs +55 -55
  43. package/dist/InputText/useInputTextActions.d.ts +1 -1
  44. package/dist/InputTime/InputTime.rebuilt.d.ts +1 -1
  45. package/dist/InputTime/InputTime.types.d.ts +21 -1
  46. package/dist/InputTime/hooks/useInputTimeActions.d.ts +16 -0
  47. package/dist/InputTime/index.cjs +63 -33
  48. package/dist/InputTime/index.d.ts +1 -1
  49. package/dist/InputTime/index.mjs +66 -36
  50. package/dist/List/index.cjs +2 -2
  51. package/dist/List/index.mjs +2 -2
  52. package/dist/RecurringSelect/index.cjs +2 -2
  53. package/dist/RecurringSelect/index.mjs +2 -2
  54. package/dist/Select/Select.rebuilt.d.ts +1 -1
  55. package/dist/Select/Select.types.d.ts +14 -1
  56. package/dist/Select/hooks/useSelectActions.d.ts +5 -5
  57. package/dist/Select/index.cjs +28 -41
  58. package/dist/Select/index.d.ts +7 -5
  59. package/dist/Select/index.mjs +30 -43
  60. package/dist/Tabs-es.js +1 -1
  61. package/dist/_baseEach-cjs.js +12 -12
  62. package/dist/_baseEach-es.js +1 -1
  63. package/dist/_baseFlatten-cjs.js +2 -2
  64. package/dist/_baseFlatten-es.js +1 -1
  65. package/dist/{_baseGet-cjs.js → _getAllKeys-cjs.js} +181 -181
  66. package/dist/{_baseGet-es.js → _getAllKeys-es.js} +182 -182
  67. package/dist/debounce-es.js +1 -1
  68. package/dist/index.cjs +2 -2
  69. package/dist/index.mjs +2 -2
  70. package/dist/omit-cjs.js +14 -14
  71. package/dist/omit-es.js +1 -1
  72. package/dist/sharedHelpers/types.d.ts +235 -0
  73. package/dist/useScrollToActive-cjs.js +3 -3
  74. package/dist/useScrollToActive-es.js +2 -2
  75. package/package.json +2 -2
  76. package/dist/InputEmail/hooks/useInputEmailFormField.d.ts +0 -32
  77. package/dist/InputPhoneNumber/hooks/useInputPhoneFormField.d.ts +0 -71
  78. package/dist/InputText/useInputTextFormField.d.ts +0 -352
  79. package/dist/Select/hooks/useSelectFormField.d.ts +0 -34
@@ -1,7 +1,7 @@
1
- import React__default, { useState, useCallback, useEffect, useRef, useId } from 'react';
1
+ import React__default, { useState, useCallback, useEffect, forwardRef, useRef, useId } from 'react';
2
2
  import { _ as __rest } from '../tslib.es6-es.js';
3
- import { d as debounce } from '../debounce-es.js';
4
- import { j as useFormFieldWrapperStyles, f as FormFieldWrapper, k as FormField } from '../FormField-es.js';
3
+ import { a as debounce } from '../debounce-es.js';
4
+ import { j as useFormFieldWrapperStyles, f as FormFieldWrapper, m as mergeRefs, k as FormField } from '../FormField-es.js';
5
5
  import 'classnames';
6
6
  import '@jobber/design';
7
7
  import 'react-hook-form';
@@ -19,7 +19,7 @@ import '../useFormFieldFocus-es.js';
19
19
  import '../InputValidation-es.js';
20
20
  import '../Spinner-es.js';
21
21
  import 'react-router-dom';
22
- import '../_baseGet-es.js';
22
+ import '../_getAllKeys-es.js';
23
23
  import '../isTypedArray-es.js';
24
24
  import '../identity-es.js';
25
25
  import '../_getTag-es.js';
@@ -202,23 +202,7 @@ function timeStringToDate(timeString, baseDate) {
202
202
  }
203
203
  }
204
204
 
205
- function InputTimeRebuilt(_a) {
206
- var _b, _c;
207
- var { value, onChange } = _a, params = __rest(_a, ["value", "onChange"]);
208
- const ref = (_b = params.inputRef) !== null && _b !== void 0 ? _b : useRef(null);
209
- const { setTypedTime } = useTimePredict({
210
- value,
211
- handleChange,
212
- });
213
- const { inputStyle } = useFormFieldWrapperStyles(params);
214
- const wrapperRef = React__default.useRef(null);
215
- const id = getId(params);
216
- return (React__default.createElement(FormFieldWrapper, { disabled: params.disabled, size: params.size, align: params.align, inline: params.inline, name: params.name, error: params.error || "", identifier: id, descriptionIdentifier: `descriptionUUID--${id}`, invalid: Boolean(params.invalid), description: params.description, clearable: (_c = params.clearable) !== null && _c !== void 0 ? _c : "never", onClear: handleClear, type: "time", readonly: params.readonly, placeholder: params.placeholder, value: dateToTimeString(value), wrapperRef: wrapperRef },
217
- React__default.createElement("input", { ref: ref, type: "time", name: params.name, className: inputStyle, onBlur: handleBlur, id: id, disabled: params.disabled, readOnly: params.readonly, onChange: handleChangeEvent, onFocus: handleFocus, "data-testid": "ATL-InputTime-input", onKeyUp: e => {
218
- if (params.disabled || params.readonly)
219
- return;
220
- !isNaN(parseInt(e.key, 10)) && setTypedTime(prev => prev + e.key);
221
- }, value: dateToTimeString(value) })));
205
+ function useInputTimeActions({ onChange, value, inputRef, onFocus, onBlur, onKeyDown, }) {
222
206
  function handleChangeEvent(event) {
223
207
  handleChange(event.target.value);
224
208
  }
@@ -226,30 +210,76 @@ function InputTimeRebuilt(_a) {
226
210
  onChange === null || onChange === void 0 ? void 0 : onChange(timeStringToDate(newValue, value));
227
211
  }
228
212
  function handleBlur(event) {
229
- var _a;
230
- (_a = params.onBlur) === null || _a === void 0 ? void 0 : _a.call(params, event);
231
- if (ref.current) {
232
- if (!ref.current.checkValidity()) {
233
- ref.current.value = "";
213
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
214
+ if (inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) {
215
+ if (!inputRef.current.checkValidity()) {
216
+ inputRef.current.value = "";
234
217
  }
235
218
  }
236
219
  }
237
220
  function handleClear() {
238
221
  var _a;
239
- handleBlur();
222
+ // Clear the value and refocus without triggering blur event
240
223
  onChange === null || onChange === void 0 ? void 0 : onChange(undefined);
241
- (_a = ref.current) === null || _a === void 0 ? void 0 : _a.focus();
224
+ (_a = inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
242
225
  }
243
226
  function handleFocus(event) {
244
- var _a;
245
- (_a = params.onFocus) === null || _a === void 0 ? void 0 : _a.call(params, event);
227
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
246
228
  }
247
- function getId(props) {
248
- const generatedId = useId();
249
- return props.id || generatedId;
229
+ function handleKeyDown(event) {
230
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
250
231
  }
232
+ return {
233
+ handleChangeEvent,
234
+ handleChange,
235
+ handleBlur,
236
+ handleClear,
237
+ handleFocus,
238
+ handleKeyDown,
239
+ };
251
240
  }
252
241
 
242
+ const InputTimeRebuilt = forwardRef(function InputTimeRebuilt(_a, forwardedRef) {
243
+ var _b;
244
+ var { value, onChange, readOnly, autoComplete,
245
+ // Deprecated props
246
+ inputRef: deprecatedInputRef } = _a, params = __rest(_a, ["value", "onChange", "readOnly", "autoComplete", "inputRef"]);
247
+ const internalRef = useRef(null);
248
+ const mergedRef = mergeRefs([
249
+ internalRef,
250
+ deprecatedInputRef,
251
+ forwardedRef,
252
+ ]);
253
+ const id = params.id || useId();
254
+ const wrapperRef = React__default.useRef(null);
255
+ const { inputStyle } = useFormFieldWrapperStyles(params);
256
+ const { handleChangeEvent, handleChange, handleBlur, handleClear, handleFocus, handleKeyDown, } = useInputTimeActions({
257
+ onChange,
258
+ value,
259
+ readOnly,
260
+ disabled: params.disabled,
261
+ inputRef: internalRef,
262
+ onFocus: params.onFocus,
263
+ onBlur: params.onBlur,
264
+ onKeyDown: params.onKeyDown,
265
+ });
266
+ const { setTypedTime } = useTimePredict({
267
+ value,
268
+ handleChange,
269
+ });
270
+ // Kept outside the useInputTimeActions hook to avoid circular dependency via setTypedTime and handleChange
271
+ function handleKeyUp(event) {
272
+ var _a;
273
+ (_a = params.onKeyUp) === null || _a === void 0 ? void 0 : _a.call(params, event);
274
+ if (params.disabled || readOnly)
275
+ return;
276
+ !isNaN(parseInt(event.key, 10)) && setTypedTime(prev => prev + event.key);
277
+ }
278
+ const isInvalid = Boolean(params.error || params.invalid);
279
+ return (React__default.createElement(FormFieldWrapper, { disabled: params.disabled, size: params.size, align: params.align, inline: params.inline, name: params.name, error: params.error || "", identifier: id, descriptionIdentifier: `descriptionUUID--${id}`, invalid: Boolean(params.invalid), description: params.description, maxLength: params.maxLength, clearable: (_b = params.clearable) !== null && _b !== void 0 ? _b : "never", onClear: handleClear, type: "time", readonly: readOnly, placeholder: params.placeholder, value: dateToTimeString(value), wrapperRef: wrapperRef },
280
+ React__default.createElement("input", { ref: mergedRef, type: "time", name: params.name, className: inputStyle, id: id, disabled: params.disabled, readOnly: readOnly, autoComplete: autoComplete, maxLength: params.maxLength, max: params.max, min: params.min, value: dateToTimeString(value), onChange: handleChangeEvent, onBlur: handleBlur, onFocus: handleFocus, onKeyDown: handleKeyDown, onKeyUp: handleKeyUp, "data-testid": "ATL-InputTime-input", "aria-label": params.ariaLabel, "aria-describedby": params.ariaDescribedBy, "aria-invalid": isInvalid ? true : undefined, "aria-required": params.ariaRequired })));
281
+ });
282
+
253
283
  function InputTime$1(_a) {
254
284
  var { defaultValue, value, onChange } = _a, params = __rest(_a, ["defaultValue", "value", "onChange"]);
255
285
  const ref = useRef(null);
@@ -280,13 +310,13 @@ function InputTime$1(_a) {
280
310
  function isNewInputTimeProps(props) {
281
311
  return props.version === 2;
282
312
  }
283
- function InputTime(props) {
313
+ const InputTime = forwardRef(function InputTimeShim(props, ref) {
284
314
  if (isNewInputTimeProps(props)) {
285
- return React__default.createElement(InputTimeRebuilt, Object.assign({}, props));
315
+ return React__default.createElement(InputTimeRebuilt, Object.assign({}, props, { ref: ref }));
286
316
  }
287
317
  else {
288
318
  return React__default.createElement(InputTime$1, Object.assign({}, props));
289
319
  }
290
- }
320
+ });
291
321
 
292
322
  export { InputTime };
@@ -8,9 +8,9 @@ require('../identity-cjs.js');
8
8
  require('../isTypedArray-cjs.js');
9
9
  require('../isObjectLike-cjs.js');
10
10
  require('../_commonjsHelpers-cjs.js');
11
- require('../_baseGet-cjs.js');
12
- require('../_getTag-cjs.js');
11
+ require('../_getAllKeys-cjs.js');
13
12
  require('../isSymbol-cjs.js');
13
+ require('../_getTag-cjs.js');
14
14
  require('../_baseFor-cjs.js');
15
15
  require('../_baseAssignValue-cjs.js');
16
16
  require('../Typography-cjs.js');
@@ -6,9 +6,9 @@ import '../identity-es.js';
6
6
  import '../isTypedArray-es.js';
7
7
  import '../isObjectLike-es.js';
8
8
  import '../_commonjsHelpers-es.js';
9
- import '../_baseGet-es.js';
10
- import '../_getTag-es.js';
9
+ import '../_getAllKeys-es.js';
11
10
  import '../isSymbol-es.js';
11
+ import '../_getTag-es.js';
12
12
  import '../_baseFor-es.js';
13
13
  import '../_baseAssignValue-es.js';
14
14
  import '../Typography-es.js';
@@ -9,12 +9,12 @@ require('classnames');
9
9
  require('../Select/index.cjs');
10
10
  require('../omit-cjs.js');
11
11
  require('../_commonjsHelpers-cjs.js');
12
- require('../_baseGet-cjs.js');
12
+ require('../_getAllKeys-cjs.js');
13
13
  require('../isTypedArray-cjs.js');
14
14
  require('../isObjectLike-cjs.js');
15
+ require('../isSymbol-cjs.js');
15
16
  require('../identity-cjs.js');
16
17
  require('../_getTag-cjs.js');
17
- require('../isSymbol-cjs.js');
18
18
  require('../keysIn-cjs.js');
19
19
  require('../_baseAssignValue-cjs.js');
20
20
  require('../_baseFlatten-cjs.js');
@@ -7,12 +7,12 @@ import 'classnames';
7
7
  import '../Select/index.mjs';
8
8
  import '../omit-es.js';
9
9
  import '../_commonjsHelpers-es.js';
10
- import '../_baseGet-es.js';
10
+ import '../_getAllKeys-es.js';
11
11
  import '../isTypedArray-es.js';
12
12
  import '../isObjectLike-es.js';
13
+ import '../isSymbol-es.js';
13
14
  import '../identity-es.js';
14
15
  import '../_getTag-es.js';
15
- import '../isSymbol-es.js';
16
16
  import '../keysIn-es.js';
17
17
  import '../_baseAssignValue-es.js';
18
18
  import '../_baseFlatten-es.js';
@@ -1,3 +1,3 @@
1
1
  import React from "react";
2
2
  import type { SelectRebuiltProps } from "./Select.types";
3
- export declare function SelectRebuilt(props: SelectRebuiltProps): React.JSX.Element;
3
+ export declare const SelectRebuilt: React.ForwardRefExoticComponent<SelectRebuiltProps & React.RefAttributes<HTMLSelectElement>>;
@@ -1,4 +1,5 @@
1
1
  import type { CommonFormFieldProps, FormFieldProps } from "../FormField";
2
+ import type { AriaInputProps, FocusEvents } from "../sharedHelpers/types";
2
3
  export interface SelectLegacyProps extends Pick<CommonFormFieldProps, "id" | "align" | "description" | "disabled" | "invalid" | "inline" | "name" | "onValidation" | "placeholder" | "size" | "value" | "onChange">, Pick<FormFieldProps, "autofocus" | "onEnter" | "onBlur" | "onFocus" | "inputRef" | "wrapperRef" | "validations" | "children" | "prefix" | "suffix" | "defaultValue" | "version"> {
3
4
  /**
4
5
  * Changes the width to roughly the same size as the maximum character length
@@ -8,12 +9,24 @@ export interface SelectLegacyProps extends Pick<CommonFormFieldProps, "id" | "al
8
9
  /**
9
10
  * Rebuilt version of the Select component without React Hook Form dependency.
10
11
  */
11
- export interface SelectRebuiltProps extends Omit<SelectLegacyProps, "defaultValue" | "version" | "onChange" | "value" | "validations" | "onValidation"> {
12
+ export interface SelectRebuiltProps extends Omit<SelectLegacyProps, "defaultValue" | "version" | "onChange" | "value" | "validations" | "onValidation" | "autofocus" | "inputRef" | "onEnter" | "onBlur" | "onFocus">, AriaInputProps, FocusEvents<HTMLSelectElement> {
12
13
  defaultValue?: never;
13
14
  readonly value?: string | number;
14
15
  onChange?(newValue?: string | number): void;
15
16
  version: 2;
16
17
  error?: string;
18
+ /**
19
+ * Automatically focus the select when mounted.
20
+ */
21
+ readonly autoFocus?: boolean;
22
+ /**
23
+ * @deprecated Use `ref` instead. Note: `ref` support requires React 18+ forwardRef.
24
+ */
25
+ readonly inputRef?: FormFieldProps["inputRef"];
26
+ /**
27
+ * @deprecated Use `onKeyDown` or `onKeyUp` instead.
28
+ */
29
+ readonly onEnter?: FormFieldProps["onEnter"];
17
30
  /**
18
31
  * Opt-in to the customizable select UI (Chromium 123+).
19
32
  * When true, the component will apply the custom select styles
@@ -1,15 +1,15 @@
1
- import type { ChangeEvent } from "react";
1
+ import type { ChangeEvent, FocusEvent } from "react";
2
2
  interface UseSelectActionsProps {
3
3
  readonly onChange?: (newValue: string | number, event?: ChangeEvent<HTMLSelectElement>) => void;
4
- readonly onBlur?: () => void;
5
- readonly onFocus?: () => void;
4
+ readonly onBlur?: (event: FocusEvent<HTMLSelectElement>) => void;
5
+ readonly onFocus?: (event: FocusEvent<HTMLSelectElement>) => void;
6
6
  }
7
7
  /**
8
8
  * Hook with actions on the Select component.
9
9
  */
10
10
  export declare function useSelectActions({ onChange, onBlur, onFocus, }: UseSelectActionsProps): {
11
11
  handleChange: (event: ChangeEvent<HTMLSelectElement>) => void;
12
- handleBlur: () => void;
13
- handleFocus: () => void;
12
+ handleBlur: (event: FocusEvent<HTMLSelectElement>) => void;
13
+ handleFocus: (event: FocusEvent<HTMLSelectElement>) => void;
14
14
  };
15
15
  export {};
@@ -11,12 +11,12 @@ require('framer-motion');
11
11
  require('@jobber/design');
12
12
  require('../Button-cjs.js');
13
13
  require('../_commonjsHelpers-cjs.js');
14
- require('../_baseGet-cjs.js');
14
+ require('../_getAllKeys-cjs.js');
15
15
  require('../isTypedArray-cjs.js');
16
16
  require('../isObjectLike-cjs.js');
17
+ require('../isSymbol-cjs.js');
17
18
  require('../identity-cjs.js');
18
19
  require('../_getTag-cjs.js');
19
- require('../isSymbol-cjs.js');
20
20
  require('../keysIn-cjs.js');
21
21
  require('../_baseAssignValue-cjs.js');
22
22
  require('../_baseFlatten-cjs.js');
@@ -42,11 +42,11 @@ function useSelectActions({ onChange, onBlur, onFocus, }) {
42
42
  const newValue = event.currentTarget.value;
43
43
  onChange === null || onChange === void 0 ? void 0 : onChange(newValue, event);
44
44
  }
45
- function handleBlur() {
46
- onBlur === null || onBlur === void 0 ? void 0 : onBlur();
45
+ function handleBlur(event) {
46
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
47
47
  }
48
- function handleFocus() {
49
- onFocus === null || onFocus === void 0 ? void 0 : onFocus();
48
+ function handleFocus(event) {
49
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
50
50
  }
51
51
  return {
52
52
  handleChange,
@@ -55,27 +55,22 @@ function useSelectActions({ onChange, onBlur, onFocus, }) {
55
55
  };
56
56
  }
57
57
 
58
- /**
59
- * Hook for managing the props of a Select component.
60
- * Extracted from FormField's useAtlantisFormField.
61
- */
62
- function useSelectFormField({ id, name, disabled, autofocus, description, inline, value, handleChange, handleBlur, handleFocus, }) {
63
- const descriptionIdentifier = `descriptionUUID--${id}`;
64
- const fieldProps = Object.assign({ id,
65
- name,
66
- disabled, autoFocus: autofocus, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, value }, (description &&
67
- !inline && { "aria-describedby": descriptionIdentifier }));
68
- return { fieldProps, descriptionIdentifier };
69
- }
70
-
71
58
  var styles = {"select":"-hmXAsAfH9U-","selectPostfix":"_5ST4c1fXDYU-","spinning":"oOACJmrVDf0-"};
72
59
 
73
- function SelectRebuilt(props) {
74
- var _a, _b;
75
- const selectRef = (_a = props.inputRef) !== null && _a !== void 0 ? _a : React.useRef(null);
60
+ const SelectRebuilt = React.forwardRef(function SelectRebuilt(props, forwardedRef) {
61
+ var _a;
62
+ // Deprecated props
63
+ const { inputRef: deprecatedInputRef } = props;
64
+ const internalRef = React.useRef(null);
65
+ const mergedRef = FormField.mergeRefs([
66
+ internalRef,
67
+ deprecatedInputRef,
68
+ forwardedRef,
69
+ ]);
76
70
  const wrapperRef = React.useRef(null);
77
71
  const { inputStyle } = FormField.useFormFieldWrapperStyles(Object.assign({}, omit.omit(props, ["version"])));
78
72
  const id = useSelectId(props);
73
+ const descriptionIdentifier = `descriptionUUID--${id}`;
79
74
  const { name } = FormField.useAtlantisFormFieldName({
80
75
  nameProp: props.name,
81
76
  id: id,
@@ -85,24 +80,15 @@ function SelectRebuilt(props) {
85
80
  onBlur: props.onBlur,
86
81
  onFocus: props.onFocus,
87
82
  });
88
- const inputProps = omit.omit(props, [
89
- "onChange",
90
- "onBlur",
91
- "onFocus",
92
- "size",
93
- "placeholder",
94
- "version",
95
- ]);
96
- const { fieldProps, descriptionIdentifier } = useSelectFormField(Object.assign(Object.assign({}, inputProps), { id,
97
- name,
98
- handleChange,
99
- handleBlur,
100
- handleFocus }));
101
- 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: (_b = props.error) !== null && _b !== void 0 ? _b : "", invalid: props.invalid, identifier: id, descriptionIdentifier: descriptionIdentifier, description: props.description, type: "select", placeholder: props.placeholder, value: props.value, prefix: props.prefix, suffix: props.suffix, clearable: "never", maxLength: props.maxLength },
83
+ const isInvalid = Boolean(props.error || props.invalid);
84
+ 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: props.invalid, identifier: id, descriptionIdentifier: descriptionIdentifier, description: props.description, type: "select", placeholder: props.placeholder, value: props.value, prefix: props.prefix, suffix: props.suffix, clearable: "never", maxLength: props.maxLength },
102
85
  React.createElement(React.Fragment, null,
103
- React.createElement("select", Object.assign({}, fieldProps, { ref: selectRef, className: classnames(inputStyle, props.UNSAFE_experimentalStyles && styles.select) }), props.children),
86
+ React.createElement("select", { id: id, name: name, disabled: props.disabled, autoFocus: props.autoFocus, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, value: props.value, "aria-label": props.ariaLabel, "aria-describedby": props.ariaDescribedBy ||
87
+ (props.description && !props.inline
88
+ ? descriptionIdentifier
89
+ : undefined), "aria-invalid": isInvalid ? true : undefined, "aria-required": props.ariaRequired, ref: mergedRef, className: classnames(inputStyle, props.UNSAFE_experimentalStyles && styles.select) }, props.children),
104
90
  React.createElement(FormField.FormFieldPostFix, { variation: "select", className: styles.selectPostfix }))));
105
- }
91
+ });
106
92
  function useSelectId(props) {
107
93
  const generatedId = React.useId();
108
94
  return props.id || generatedId;
@@ -119,14 +105,15 @@ function OptionGroup({ children, label, disabled, UNSAFE_className, UNSAFE_style
119
105
  function isNewSelectProps(props) {
120
106
  return props.version === 2;
121
107
  }
122
- function Select(props) {
108
+ const SelectBase = React.forwardRef(function SelectShim(props, ref) {
123
109
  if (isNewSelectProps(props)) {
124
- return React.createElement(SelectRebuilt, Object.assign({}, props));
110
+ return React.createElement(SelectRebuilt, Object.assign({}, props, { ref: ref }));
125
111
  }
126
112
  else {
127
113
  return React.createElement(Select$1, Object.assign({}, props));
128
114
  }
129
- }
115
+ });
116
+ const Select = SelectBase;
130
117
  Select.Option = SelectOption;
131
118
  Select.OptionGroup = OptionGroup;
132
119
 
@@ -1,10 +1,12 @@
1
1
  import React from "react";
2
+ import { Option } from "./Option";
3
+ import { OptionGroup } from "./OptionGroup";
2
4
  import { type SelectLegacyProps, type SelectRebuiltProps } from "./Select.types";
3
5
  export { Option } from "./Option";
4
6
  export type SelectShimProps = SelectLegacyProps | SelectRebuiltProps;
5
- export declare function Select(props: SelectShimProps): React.JSX.Element;
6
- export declare namespace Select {
7
- var Option: typeof import("./Option").Option;
8
- var OptionGroup: typeof import("./OptionGroup").OptionGroup;
9
- }
7
+ type SelectComponent = React.ForwardRefExoticComponent<SelectShimProps & React.RefAttributes<HTMLSelectElement>> & {
8
+ Option: typeof Option;
9
+ OptionGroup: typeof OptionGroup;
10
+ };
11
+ export declare const Select: SelectComponent;
10
12
  export type { SelectRebuiltProps, SelectLegacyProps };
@@ -1,6 +1,6 @@
1
- import React__default, { useRef, useId } from 'react';
1
+ import React__default, { forwardRef, useRef, useId } from 'react';
2
2
  import { o as omit } from '../omit-es.js';
3
- import { k as FormField, j as useFormFieldWrapperStyles, b as useAtlantisFormFieldName, f as FormFieldWrapper, l as FormFieldPostFix } from '../FormField-es.js';
3
+ import { k as FormField, j as useFormFieldWrapperStyles, b as useAtlantisFormFieldName, f as FormFieldWrapper, l as FormFieldPostFix, m as mergeRefs } from '../FormField-es.js';
4
4
  import classnames from 'classnames';
5
5
  import '../tslib.es6-es.js';
6
6
  import 'react-hook-form';
@@ -9,12 +9,12 @@ import 'framer-motion';
9
9
  import '@jobber/design';
10
10
  import '../Button-es.js';
11
11
  import '../_commonjsHelpers-es.js';
12
- import '../_baseGet-es.js';
12
+ import '../_getAllKeys-es.js';
13
13
  import '../isTypedArray-es.js';
14
14
  import '../isObjectLike-es.js';
15
+ import '../isSymbol-es.js';
15
16
  import '../identity-es.js';
16
17
  import '../_getTag-es.js';
17
- import '../isSymbol-es.js';
18
18
  import '../keysIn-es.js';
19
19
  import '../_baseAssignValue-es.js';
20
20
  import '../_baseFlatten-es.js';
@@ -40,11 +40,11 @@ function useSelectActions({ onChange, onBlur, onFocus, }) {
40
40
  const newValue = event.currentTarget.value;
41
41
  onChange === null || onChange === void 0 ? void 0 : onChange(newValue, event);
42
42
  }
43
- function handleBlur() {
44
- onBlur === null || onBlur === void 0 ? void 0 : onBlur();
43
+ function handleBlur(event) {
44
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
45
45
  }
46
- function handleFocus() {
47
- onFocus === null || onFocus === void 0 ? void 0 : onFocus();
46
+ function handleFocus(event) {
47
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
48
48
  }
49
49
  return {
50
50
  handleChange,
@@ -53,27 +53,22 @@ function useSelectActions({ onChange, onBlur, onFocus, }) {
53
53
  };
54
54
  }
55
55
 
56
- /**
57
- * Hook for managing the props of a Select component.
58
- * Extracted from FormField's useAtlantisFormField.
59
- */
60
- function useSelectFormField({ id, name, disabled, autofocus, description, inline, value, handleChange, handleBlur, handleFocus, }) {
61
- const descriptionIdentifier = `descriptionUUID--${id}`;
62
- const fieldProps = Object.assign({ id,
63
- name,
64
- disabled, autoFocus: autofocus, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, value }, (description &&
65
- !inline && { "aria-describedby": descriptionIdentifier }));
66
- return { fieldProps, descriptionIdentifier };
67
- }
68
-
69
56
  var styles = {"select":"-hmXAsAfH9U-","selectPostfix":"_5ST4c1fXDYU-","spinning":"oOACJmrVDf0-"};
70
57
 
71
- function SelectRebuilt(props) {
72
- var _a, _b;
73
- const selectRef = (_a = props.inputRef) !== null && _a !== void 0 ? _a : useRef(null);
58
+ const SelectRebuilt = forwardRef(function SelectRebuilt(props, forwardedRef) {
59
+ var _a;
60
+ // Deprecated props
61
+ const { inputRef: deprecatedInputRef } = props;
62
+ const internalRef = useRef(null);
63
+ const mergedRef = mergeRefs([
64
+ internalRef,
65
+ deprecatedInputRef,
66
+ forwardedRef,
67
+ ]);
74
68
  const wrapperRef = useRef(null);
75
69
  const { inputStyle } = useFormFieldWrapperStyles(Object.assign({}, omit(props, ["version"])));
76
70
  const id = useSelectId(props);
71
+ const descriptionIdentifier = `descriptionUUID--${id}`;
77
72
  const { name } = useAtlantisFormFieldName({
78
73
  nameProp: props.name,
79
74
  id: id,
@@ -83,24 +78,15 @@ function SelectRebuilt(props) {
83
78
  onBlur: props.onBlur,
84
79
  onFocus: props.onFocus,
85
80
  });
86
- const inputProps = omit(props, [
87
- "onChange",
88
- "onBlur",
89
- "onFocus",
90
- "size",
91
- "placeholder",
92
- "version",
93
- ]);
94
- const { fieldProps, descriptionIdentifier } = useSelectFormField(Object.assign(Object.assign({}, inputProps), { id,
95
- name,
96
- handleChange,
97
- handleBlur,
98
- handleFocus }));
99
- 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: (_b = props.error) !== null && _b !== void 0 ? _b : "", invalid: props.invalid, identifier: id, descriptionIdentifier: descriptionIdentifier, description: props.description, type: "select", placeholder: props.placeholder, value: props.value, prefix: props.prefix, suffix: props.suffix, clearable: "never", maxLength: props.maxLength },
81
+ const isInvalid = Boolean(props.error || props.invalid);
82
+ 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: props.invalid, identifier: id, descriptionIdentifier: descriptionIdentifier, description: props.description, type: "select", placeholder: props.placeholder, value: props.value, prefix: props.prefix, suffix: props.suffix, clearable: "never", maxLength: props.maxLength },
100
83
  React__default.createElement(React__default.Fragment, null,
101
- React__default.createElement("select", Object.assign({}, fieldProps, { ref: selectRef, className: classnames(inputStyle, props.UNSAFE_experimentalStyles && styles.select) }), props.children),
84
+ React__default.createElement("select", { id: id, name: name, disabled: props.disabled, autoFocus: props.autoFocus, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, value: props.value, "aria-label": props.ariaLabel, "aria-describedby": props.ariaDescribedBy ||
85
+ (props.description && !props.inline
86
+ ? descriptionIdentifier
87
+ : undefined), "aria-invalid": isInvalid ? true : undefined, "aria-required": props.ariaRequired, ref: mergedRef, className: classnames(inputStyle, props.UNSAFE_experimentalStyles && styles.select) }, props.children),
102
88
  React__default.createElement(FormFieldPostFix, { variation: "select", className: styles.selectPostfix }))));
103
- }
89
+ });
104
90
  function useSelectId(props) {
105
91
  const generatedId = useId();
106
92
  return props.id || generatedId;
@@ -117,14 +103,15 @@ function OptionGroup({ children, label, disabled, UNSAFE_className, UNSAFE_style
117
103
  function isNewSelectProps(props) {
118
104
  return props.version === 2;
119
105
  }
120
- function Select(props) {
106
+ const SelectBase = forwardRef(function SelectShim(props, ref) {
121
107
  if (isNewSelectProps(props)) {
122
- return React__default.createElement(SelectRebuilt, Object.assign({}, props));
108
+ return React__default.createElement(SelectRebuilt, Object.assign({}, props, { ref: ref }));
123
109
  }
124
110
  else {
125
111
  return React__default.createElement(Select$1, Object.assign({}, props));
126
112
  }
127
- }
113
+ });
114
+ const Select = SelectBase;
128
115
  Select.Option = SelectOption;
129
116
  Select.OptionGroup = OptionGroup;
130
117
 
package/dist/Tabs-es.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import React__default, { useState, useRef, useCallback, useEffect } from 'react';
2
2
  import classnames from 'classnames';
3
3
  import { g as getDefaultExportFromCjs } from './_commonjsHelpers-es.js';
4
- import { a as debounce_1 } from './debounce-es.js';
4
+ import { d as debounce_1 } from './debounce-es.js';
5
5
  import { a as isObject_1 } from './isObjectLike-es.js';
6
6
  import { T as Typography } from './Typography-es.js';
7
7
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  var identity$1 = require('./identity-cjs.js');
4
4
  var isObjectLike$1 = require('./isObjectLike-cjs.js');
5
- var _baseGet = require('./_baseGet-cjs.js');
5
+ var _getAllKeys = require('./_getAllKeys-cjs.js');
6
6
  var _getTag = require('./_getTag-cjs.js');
7
7
  var isTypedArray$1 = require('./isTypedArray-cjs.js');
8
8
  var _commonjsHelpers = require('./_commonjsHelpers-cjs.js');
@@ -351,7 +351,7 @@ function equalByTag$1(object, other, tag, bitmask, customizer, equalFunc, stack)
351
351
 
352
352
  var _equalByTag = equalByTag$1;
353
353
 
354
- var getAllKeys = _baseGet._getAllKeys;
354
+ var getAllKeys = _getAllKeys._getAllKeys;
355
355
 
356
356
  /** Used to compose bitmasks for value comparisons. */
357
357
  var COMPARE_PARTIAL_FLAG$3 = 1;
@@ -635,7 +635,7 @@ function isStrictComparable$2(value) {
635
635
  var _isStrictComparable = isStrictComparable$2;
636
636
 
637
637
  var isStrictComparable$1 = _isStrictComparable,
638
- keys$1 = _baseGet.keys_1;
638
+ keys$1 = _getAllKeys.keys_1;
639
639
 
640
640
  /**
641
641
  * Gets the property names, values, and compare flags of `object`.
@@ -704,7 +704,7 @@ function baseMatches$1(source) {
704
704
 
705
705
  var _baseMatches = baseMatches$1;
706
706
 
707
- var baseGet$1 = _baseGet._baseGet;
707
+ var baseGet$1 = _getAllKeys._baseGet;
708
708
 
709
709
  /**
710
710
  * Gets the value at `path` of `object`. If the resolved value is
@@ -755,12 +755,12 @@ function baseHasIn$1(object, key) {
755
755
 
756
756
  var _baseHasIn = baseHasIn$1;
757
757
 
758
- var castPath = _baseGet._castPath,
758
+ var castPath = _getAllKeys._castPath,
759
759
  isArguments = isTypedArray$1.isArguments_1,
760
760
  isArray$1 = isTypedArray$1.isArray_1,
761
761
  isIndex = identity$1._isIndex,
762
762
  isLength = isTypedArray$1.isLength_1,
763
- toKey$2 = _baseGet._toKey;
763
+ toKey$2 = _getAllKeys._toKey;
764
764
 
765
765
  /**
766
766
  * Checks if `path` exists on `object`.
@@ -833,10 +833,10 @@ var hasIn_1 = hasIn$1;
833
833
  var baseIsEqual = _baseIsEqual,
834
834
  get = get_1,
835
835
  hasIn = hasIn_1,
836
- isKey$1 = _baseGet._isKey,
836
+ isKey$1 = _getAllKeys._isKey,
837
837
  isStrictComparable = _isStrictComparable,
838
838
  matchesStrictComparable = _matchesStrictComparable,
839
- toKey$1 = _baseGet._toKey;
839
+ toKey$1 = _getAllKeys._toKey;
840
840
 
841
841
  /** Used to compose bitmasks for value comparisons. */
842
842
  var COMPARE_PARTIAL_FLAG = 1,
@@ -880,7 +880,7 @@ function baseProperty$1(key) {
880
880
 
881
881
  var _baseProperty = baseProperty$1;
882
882
 
883
- var baseGet = _baseGet._baseGet;
883
+ var baseGet = _getAllKeys._baseGet;
884
884
 
885
885
  /**
886
886
  * A specialized version of `baseProperty` which supports deep paths.
@@ -899,8 +899,8 @@ var _basePropertyDeep = basePropertyDeep$1;
899
899
 
900
900
  var baseProperty = _baseProperty,
901
901
  basePropertyDeep = _basePropertyDeep,
902
- isKey = _baseGet._isKey,
903
- toKey = _baseGet._toKey;
902
+ isKey = _getAllKeys._isKey,
903
+ toKey = _getAllKeys._toKey;
904
904
 
905
905
  /**
906
906
  * Creates a function that returns the value at `path` of a given object.
@@ -963,7 +963,7 @@ function baseIteratee(value) {
963
963
  var _baseIteratee = baseIteratee;
964
964
 
965
965
  var baseFor = _baseFor._baseFor,
966
- keys = _baseGet.keys_1;
966
+ keys = _getAllKeys.keys_1;
967
967
 
968
968
  /**
969
969
  * The base implementation of `_.forOwn` without support for iteratee shorthands.
@@ -1,6 +1,6 @@
1
1
  import { g as _MapCache, d as _Uint8Array, e as eq_1, c as _Stack, a as _isIndex, i as identity_1 } from './identity-es.js';
2
2
  import { b as _Symbol, i as isObjectLike_1, a as isObject_1 } from './isObjectLike-es.js';
3
- import { e as _getAllKeys, k as keys_1, b as _baseGet, f as _castPath, g as _toKey, h as _isKey } from './_baseGet-es.js';
3
+ import { e as _getAllKeys, k as keys_1, b as _baseGet, f as _castPath, g as _toKey, h as _isKey } from './_getAllKeys-es.js';
4
4
  import { a as _getTag } from './_getTag-es.js';
5
5
  import { c as isBufferExports, d as isTypedArray_1, a as isArray_1, i as isArguments_1, m as isLength_1, b as isArrayLike_1 } from './isTypedArray-es.js';
6
6
  import { g as getDefaultExportFromCjs } from './_commonjsHelpers-es.js';