@hitachivantara/uikit-react-core 5.87.3 → 5.88.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.
Files changed (94) hide show
  1. package/dist/cjs/ActionsGeneric/ActionsGeneric.cjs +1 -1
  2. package/dist/cjs/Banner/BannerContent/BannerContent.cjs +1 -1
  3. package/dist/cjs/BaseInput/BaseInput.styles.cjs +1 -1
  4. package/dist/cjs/BaseInput/validations.cjs +2 -1
  5. package/dist/cjs/ColorPicker/ColorPicker.cjs +1 -1
  6. package/dist/cjs/DatePicker/DatePicker.cjs +12 -12
  7. package/dist/cjs/FilterGroup/FilterContent/FilterContent.cjs +1 -1
  8. package/dist/cjs/FormElement/Adornment/Adornment.cjs +15 -36
  9. package/dist/cjs/FormElement/Adornment/Adornment.styles.cjs +11 -17
  10. package/dist/cjs/Input/Input.cjs +29 -51
  11. package/dist/cjs/Input/Input.styles.cjs +1 -0
  12. package/dist/cjs/List/List.cjs +1 -1
  13. package/dist/cjs/Pagination/Pagination.styles.cjs +2 -2
  14. package/dist/cjs/Pagination/Select.cjs +1 -1
  15. package/dist/cjs/Table/TableBody/TableBody.cjs +16 -17
  16. package/dist/cjs/TableSection/TableSection.styles.cjs +10 -10
  17. package/dist/cjs/Tag/Tag.cjs +1 -1
  18. package/dist/cjs/TagsInput/TagsInput.cjs +103 -169
  19. package/dist/cjs/TagsInput/TagsInput.styles.cjs +44 -105
  20. package/dist/cjs/TextArea/TextArea.cjs +1 -3
  21. package/dist/cjs/TimePicker/TimePicker.cjs +5 -4
  22. package/dist/cjs/hooks/useFocus.cjs +38 -0
  23. package/dist/cjs/utils/focusUtils.cjs +0 -4
  24. package/dist/esm/ActionsGeneric/ActionsGeneric.js +1 -1
  25. package/dist/esm/AvatarGroup/AvatarGroupContext.js +1 -1
  26. package/dist/esm/Banner/BannerContent/BannerContent.js +1 -1
  27. package/dist/esm/BaseCheckBox/BaseCheckBox.js +1 -1
  28. package/dist/esm/BaseDropdown/BaseDropdown.js +3 -3
  29. package/dist/esm/BaseInput/BaseInput.js.map +1 -1
  30. package/dist/esm/BaseInput/BaseInput.styles.js +1 -1
  31. package/dist/esm/BaseInput/BaseInput.styles.js.map +1 -1
  32. package/dist/esm/BaseInput/validations.js +2 -1
  33. package/dist/esm/BaseInput/validations.js.map +1 -1
  34. package/dist/esm/BaseRadio/BaseRadio.js +1 -1
  35. package/dist/esm/Button/Button.js +1 -1
  36. package/dist/esm/Calendar/CalendarHeader/CalendarHeader.js +1 -1
  37. package/dist/esm/CheckBoxGroup/CheckBoxGroup.js.map +1 -1
  38. package/dist/esm/ColorPicker/ColorPicker.js +1 -1
  39. package/dist/esm/ColorPicker/ColorPicker.js.map +1 -1
  40. package/dist/esm/ColorPicker/Fields/Fields.js.map +1 -1
  41. package/dist/esm/DatePicker/DatePicker.js.map +1 -1
  42. package/dist/esm/DatePicker/utils.js +1 -1
  43. package/dist/esm/Dialog/context.js +1 -1
  44. package/dist/esm/DotPagination/DotPagination.js +1 -1
  45. package/dist/esm/Dropdown/Dropdown.js.map +1 -1
  46. package/dist/esm/DropdownButton/DropdownButton.js.map +1 -1
  47. package/dist/esm/FilterGroup/FilterContent/FilterContent.js +1 -1
  48. package/dist/esm/FilterGroup/FilterContent/FilterContent.js.map +1 -1
  49. package/dist/esm/FilterGroup/FilterGroupContext.js +1 -1
  50. package/dist/esm/Focus/Focus.js +1 -1
  51. package/dist/esm/FormElement/Adornment/Adornment.js +15 -36
  52. package/dist/esm/FormElement/Adornment/Adornment.js.map +1 -1
  53. package/dist/esm/FormElement/Adornment/Adornment.styles.js +11 -17
  54. package/dist/esm/FormElement/Adornment/Adornment.styles.js.map +1 -1
  55. package/dist/esm/Header/Navigation/useSelectionPath.js.map +1 -1
  56. package/dist/esm/Input/Input.js +30 -52
  57. package/dist/esm/Input/Input.js.map +1 -1
  58. package/dist/esm/Input/Input.styles.js +1 -0
  59. package/dist/esm/Input/Input.styles.js.map +1 -1
  60. package/dist/esm/List/List.js +1 -1
  61. package/dist/esm/Pagination/Pagination.styles.js +5 -5
  62. package/dist/esm/Pagination/Select.js +1 -1
  63. package/dist/esm/QueryBuilder/Context.js +1 -1
  64. package/dist/esm/QueryBuilder/QueryBuilder.js +1 -1
  65. package/dist/esm/QueryBuilder/utils/index.js +1 -1
  66. package/dist/esm/RadioGroup/RadioGroup.js.map +1 -1
  67. package/dist/esm/SelectionList/SelectionList.js.map +1 -1
  68. package/dist/esm/Slider/Slider.js +1 -1
  69. package/dist/esm/Slider/Slider.js.map +1 -1
  70. package/dist/esm/SnackbarProvider/SnackbarProvider.js +2 -2
  71. package/dist/esm/Table/TableBody/TableBody.js +16 -17
  72. package/dist/esm/Table/TableBody/TableBody.js.map +1 -1
  73. package/dist/esm/TableSection/TableSection.styles.js +24 -24
  74. package/dist/esm/Tag/Tag.js +1 -1
  75. package/dist/esm/Tag/Tag.js.map +1 -1
  76. package/dist/esm/TagsInput/TagsInput.js +103 -169
  77. package/dist/esm/TagsInput/TagsInput.js.map +1 -1
  78. package/dist/esm/TagsInput/TagsInput.styles.js +44 -105
  79. package/dist/esm/TagsInput/TagsInput.styles.js.map +1 -1
  80. package/dist/esm/TextArea/TextArea.js +1 -3
  81. package/dist/esm/TextArea/TextArea.js.map +1 -1
  82. package/dist/esm/TimePicker/TimePicker.js +1 -0
  83. package/dist/esm/TimePicker/TimePicker.js.map +1 -1
  84. package/dist/esm/TreeView/internals/TreeViewProvider.js +1 -1
  85. package/dist/esm/TreeView/internals/hooks/plugins/useTreeViewKeyboardNavigation.js +1 -1
  86. package/dist/esm/VerticalNavigation/NavigationSlider/NavigationSlider.js.map +1 -1
  87. package/dist/esm/hooks/useFocus.js +38 -0
  88. package/dist/esm/hooks/useFocus.js.map +1 -0
  89. package/dist/esm/hooks/useScrollTo.js.map +1 -1
  90. package/dist/esm/utils/document.js.map +1 -1
  91. package/dist/esm/utils/focusUtils.js +0 -4
  92. package/dist/esm/utils/focusUtils.js.map +1 -1
  93. package/dist/types/index.d.ts +189 -248
  94. package/package.json +8 -8
@@ -4,10 +4,10 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const React = require("react");
5
5
  const utils = require("@mui/material/utils");
6
6
  const uikitReactUtils = require("@hitachivantara/uikit-react-utils");
7
- const uikitStyles = require("@hitachivantara/uikit-styles");
8
7
  const validations = require("../BaseInput/validations.cjs");
9
8
  const Suggestions = require("../FormElement/Suggestions/Suggestions.cjs");
10
9
  const useControlled = require("../hooks/useControlled.cjs");
10
+ const useFocus = require("../hooks/useFocus.cjs");
11
11
  const useIsMounted = require("../hooks/useIsMounted.cjs");
12
12
  const useUniqueId = require("../hooks/useUniqueId.cjs");
13
13
  const keyboardUtils = require("../utils/keyboardUtils.cjs");
@@ -18,11 +18,7 @@ const utils$1 = require("../FormElement/utils.cjs");
18
18
  const FormElement = require("../FormElement/FormElement.cjs");
19
19
  const Label = require("../FormElement/Label/Label.cjs");
20
20
  const InfoMessage = require("../FormElement/InfoMessage/InfoMessage.cjs");
21
- const ListContainer = require("../ListContainer/ListContainer.cjs");
22
- const ListItem = require("../ListContainer/ListItem/ListItem.cjs");
23
21
  const Tag = require("../Tag/Tag.cjs");
24
- const BaseInput_styles = require("../BaseInput/BaseInput.styles.cjs");
25
- const Input = require("../Input/Input.cjs");
26
22
  const WarningText = require("../FormElement/WarningText/WarningText.cjs");
27
23
  const HvTagsInput = React.forwardRef(
28
24
  function HvTagsInput2(props, ref) {
@@ -47,10 +43,11 @@ const HvTagsInput = React.forwardRef(
47
43
  onBlur,
48
44
  onFocus,
49
45
  placeholder,
46
+ endAdornment,
50
47
  hideCounter,
51
48
  middleCountLabel = "/",
52
49
  maxTagsQuantity,
53
- resizable = true,
50
+ resizable,
54
51
  inputProps,
55
52
  countCharProps,
56
53
  multiline,
@@ -64,7 +61,7 @@ const HvTagsInput = React.forwardRef(
64
61
  suggestionsLoose,
65
62
  ...others
66
63
  } = uikitReactUtils.useDefaultProps("HvTagsInput", props);
67
- const { classes, cx, css } = TagsInput_styles.useClasses(classesProp);
64
+ const { classes, cx } = TagsInput_styles.useClasses(classesProp);
68
65
  const elementId = useUniqueId.useUniqueId(id);
69
66
  const hasLabel = textAreaLabel != null;
70
67
  const hasDescription = description != null;
@@ -77,16 +74,13 @@ const HvTagsInput = React.forwardRef(
77
74
  statusMessage,
78
75
  ""
79
76
  );
80
- const [tagInput, setTagInput] = React.useState("");
81
- const [tagCursorPos, setTagCursorPos] = React.useState(value.length);
82
77
  const [stateValid, setStateValid] = React.useState(true);
83
- const inputRef = React.useRef();
84
- const containerRef = React.useRef();
78
+ const inputRef = React.useRef(null);
79
+ const containerRef = React.useRef(null);
85
80
  const skipReset = React.useRef(false);
86
81
  const blurTimeout = React.useRef();
87
- const materialInputRef = React.useRef(null);
82
+ const focusUtils = useFocus.useFocus({ containerRef });
88
83
  const forkedContainerRef = utils.useForkRef(ref, containerRef);
89
- const isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;
90
84
  const hasCounter = maxTagsQuantity != null && !hideCounter;
91
85
  const [suggestionValues, setSuggestionValues] = React.useState(null);
92
86
  const isStateInvalid = React.useMemo(() => {
@@ -118,59 +112,46 @@ const HvTagsInput = React.forwardRef(
118
112
  ]
119
113
  );
120
114
  const deleteTag = React.useCallback(
121
- (tagPos, event, end) => {
115
+ (tagPos, event, refocus = false) => {
122
116
  const newTagsArr = [
123
117
  ...value.slice(0, tagPos),
124
118
  ...value.slice(tagPos + 1)
125
119
  ];
126
120
  setValue(newTagsArr);
127
- setTagCursorPos(
128
- end ? newTagsArr.length : tagCursorPos > 0 ? tagCursorPos - 1 : 0
129
- );
130
- inputRef.current?.focus();
121
+ if (refocus) {
122
+ setTimeout(() => focusUtils.focusChild(tagPos), 10);
123
+ }
131
124
  performValidation(newTagsArr);
132
125
  onDelete?.(event, value[tagPos], tagPos);
133
126
  onChange?.(event, newTagsArr);
134
127
  skipReset.current = true;
135
128
  },
136
- [onChange, onDelete, performValidation, setValue, tagCursorPos, value]
129
+ [focusUtils, onChange, onDelete, performValidation, setValue, value]
137
130
  );
138
131
  const addTag = React.useCallback(
139
- (event, tag) => {
132
+ (event, tagInput) => {
140
133
  event.preventDefault();
141
- if (tag !== "") {
142
- const newTag = { label: tag, type: "semantic" };
143
- const newTagsArr = [...value, newTag];
144
- setValue(newTagsArr);
145
- performValidation(newTagsArr);
146
- onAdd?.(event, newTag, newTagsArr.length - 1);
147
- onChange?.(event, newTagsArr);
148
- }
134
+ const tag = tagInput ?? inputRef.current?.value ?? "";
135
+ if (tag === "") return;
136
+ const newTag = { label: tag, type: "semantic" };
137
+ const newTagsArr = [...value, newTag];
138
+ setValue(newTagsArr);
139
+ performValidation(newTagsArr);
140
+ onAdd?.(event, newTag, newTagsArr.length - 1);
141
+ onChange?.(event, newTagsArr);
142
+ inputRef.current.value = "";
149
143
  },
150
144
  [onAdd, onChange, performValidation, setValue, value]
151
145
  );
152
146
  const canShowError = status !== void 0 && status === "invalid" && statusMessage !== void 0 || !stateValid;
153
147
  React.useEffect(() => {
154
- if (!multiline) {
155
- const element = containerRef?.current?.children[tagCursorPos];
156
- setTimeout(() => {
157
- const container = containerRef.current;
158
- if (container == null) return;
159
- container.scrollLeft = element ? element.offsetLeft - container.getBoundingClientRect().width / 2 + element.getBoundingClientRect().width / 2 : 0;
160
- }, 10);
161
- element?.focus();
162
- }
163
- }, [multiline, tagCursorPos]);
164
- React.useEffect(() => {
165
- if (!skipReset.current) {
166
- setTagInput("");
167
- setTagCursorPos(value.length);
168
- }
148
+ if (skipReset.current || !inputRef.current) return;
149
+ inputRef.current.value = "";
169
150
  skipReset.current = false;
170
151
  }, [value]);
171
152
  const isMounted = useIsMounted.useIsMounted();
172
153
  const focusInput = () => {
173
- materialInputRef.current.focus();
154
+ inputRef.current?.focus();
174
155
  };
175
156
  const getSuggestions = React.useCallback(
176
157
  (li) => {
@@ -198,8 +179,7 @@ const HvTagsInput = React.forwardRef(
198
179
  [suggestionClearHandler, suggestionListCallback]
199
180
  );
200
181
  const suggestionSelectedHandler = (event, item) => {
201
- addTag(event, item.value || item.label);
202
- setTagInput(item.value || item.label);
182
+ addTag(event, item.value || String(item.label));
203
183
  focusInput();
204
184
  suggestionClearHandler();
205
185
  };
@@ -212,10 +192,9 @@ const HvTagsInput = React.forwardRef(
212
192
  }
213
193
  };
214
194
  const onChangeHandler = React.useCallback(
215
- (event, input) => {
216
- setTagInput(input);
195
+ (event) => {
217
196
  if (canShowSuggestions) {
218
- suggestionHandler(input);
197
+ suggestionHandler(event.target.value);
219
198
  }
220
199
  },
221
200
  [canShowSuggestions, suggestionHandler]
@@ -223,63 +202,63 @@ const HvTagsInput = React.forwardRef(
223
202
  const onInputKeyDownHandler = React.useCallback(
224
203
  (event) => {
225
204
  if (!canShowSuggestions && commitTagOn.includes(event.code)) {
226
- addTag(event, tagInput);
205
+ addTag(event);
227
206
  }
228
207
  },
229
- [addTag, canShowSuggestions, commitTagOn, tagInput]
208
+ [addTag, canShowSuggestions, commitTagOn]
230
209
  );
231
210
  const onKeyDownHandler = React.useCallback(
232
211
  (event) => {
212
+ const tagInput = inputRef.current?.value || "";
233
213
  if (tagInput === "") {
234
214
  switch (event.code) {
235
215
  case "ArrowLeft":
236
- setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);
237
- break;
216
+ focusUtils.focusPrevious();
217
+ return;
238
218
  case "ArrowRight":
239
- setTagCursorPos(
240
- tagCursorPos < value.length ? tagCursorPos + 1 : value.length
241
- );
242
- break;
219
+ focusUtils.focusNext();
220
+ return;
221
+ case "End":
222
+ focusUtils.focusLast();
223
+ return;
224
+ case "Home":
225
+ focusUtils.focusFirst();
226
+ return;
243
227
  case "Backspace":
244
- if (isTagSelected) {
245
- deleteTag(tagCursorPos, event, false);
246
- } else {
247
- setTagCursorPos(value.length - 1);
248
- }
249
- break;
250
- case "Delete":
251
- if (isTagSelected) {
252
- deleteTag(tagCursorPos, event, false);
228
+ case "Delete": {
229
+ if (document.activeElement === inputRef.current) {
230
+ deleteTag(value.length - 1, event);
253
231
  }
254
- break;
255
- }
256
- } else {
257
- switch (event.code) {
258
- case "ArrowDown":
259
- getSuggestions(0)?.focus();
260
- break;
261
- case "Enter":
262
- if (canShowSuggestions && suggestionsLoose && (suggestionValidation?.(tagInput) || !suggestionValidation)) {
263
- addTag(event, tagInput);
264
- setTagInput(tagInput);
265
- focusInput();
266
- suggestionClearHandler();
267
- }
268
- break;
232
+ return;
233
+ }
234
+ default:
235
+ return;
269
236
  }
270
237
  }
238
+ switch (event.code) {
239
+ case "ArrowDown":
240
+ getSuggestions(0)?.focus();
241
+ return;
242
+ case "Enter":
243
+ if (canShowSuggestions && suggestionsLoose && (suggestionValidation?.(tagInput) || !suggestionValidation)) {
244
+ addTag(event);
245
+ focusInput();
246
+ suggestionClearHandler();
247
+ }
248
+ return;
249
+ default:
250
+ return;
251
+ }
271
252
  },
272
253
  [
273
254
  addTag,
274
255
  canShowSuggestions,
275
256
  deleteTag,
257
+ focusUtils,
276
258
  getSuggestions,
277
- isTagSelected,
278
259
  suggestionClearHandler,
279
260
  suggestionValidation,
280
261
  suggestionsLoose,
281
- tagCursorPos,
282
- tagInput,
283
262
  value.length
284
263
  ]
285
264
  );
@@ -293,19 +272,18 @@ const HvTagsInput = React.forwardRef(
293
272
  const onContainerClickHandler = React.useCallback(() => {
294
273
  inputRef.current?.focus();
295
274
  clearTimeout(blurTimeout.current);
296
- setTagCursorPos(value.length);
297
- }, [value.length]);
275
+ }, []);
298
276
  const onBlurHandler = (evt) => {
299
277
  blurTimeout.current = setTimeout(() => {
300
278
  if (commitOnBlur) {
301
- addTag(evt, tagInput);
279
+ addTag(evt);
302
280
  }
303
- onBlur?.(evt, tagInput);
281
+ onBlur?.(evt, inputRef.current?.value || "");
304
282
  }, 10);
305
283
  };
306
284
  const onFocusHandler = (evt) => {
307
285
  clearTimeout(blurTimeout.current);
308
- onFocus?.(evt, tagInput);
286
+ onFocus?.(evt, inputRef.current?.value || "");
309
287
  };
310
288
  return /* @__PURE__ */ jsxRuntime.jsxs(
311
289
  FormElement.HvFormElement,
@@ -320,7 +298,10 @@ const HvTagsInput = React.forwardRef(
320
298
  onFocus: onFocusHandler,
321
299
  className: cx(
322
300
  classes.root,
323
- { [classes.disabled]: disabled, [classes.readOnly]: readOnly },
301
+ {
302
+ [classes.disabled]: disabled,
303
+ [classes.readOnly]: readOnly
304
+ },
324
305
  className
325
306
  ),
326
307
  children: [
@@ -356,8 +337,9 @@ const HvTagsInput = React.forwardRef(
356
337
  }
357
338
  ),
358
339
  /* @__PURE__ */ jsxRuntime.jsxs(
359
- ListContainer.HvListContainer,
340
+ "div",
360
341
  {
342
+ ref: forkedContainerRef,
361
343
  className: cx(classes.tagsList, {
362
344
  [classes.error]: canShowError,
363
345
  [classes.resizable]: resizable && multiline,
@@ -366,96 +348,48 @@ const HvTagsInput = React.forwardRef(
366
348
  }),
367
349
  onKeyDown: onKeyDownHandler,
368
350
  onClick: onContainerClickHandler,
369
- ref: forkedContainerRef,
370
351
  children: [
371
352
  value?.map((t, i) => {
372
- const tag = typeof t === "string" ? {
373
- label: t,
374
- type: "semantic"
375
- } : t;
353
+ const tag = typeof t === "string" ? { label: t, type: "semantic" } : t;
376
354
  const { label, type, ...otherProps } = tag;
377
355
  return /* @__PURE__ */ jsxRuntime.jsx(
378
- ListItem.HvListItem,
356
+ Tag.HvTag,
379
357
  {
358
+ type,
359
+ label,
360
+ disabled,
380
361
  tabIndex: -1,
381
- className: cx({ [classes.singleLine]: !multiline }),
382
- classes: {
383
- gutters: classes.listItemGutters,
384
- root: classes.listItemRoot
362
+ className: cx(classes.chipRoot, classes.listItemRoot),
363
+ ...!(readOnly || disabled || type === "categorical") && {
364
+ onDelete: (event) => onDeleteTagHandler(event, i)
385
365
  },
386
- id: setId.setId(elementId, `tag-${i}`),
387
- children: /* @__PURE__ */ jsxRuntime.jsx(
388
- Tag.HvTag,
389
- {
390
- label,
391
- className: cx(classes.chipRoot, {
392
- [classes.tagSelected]: i === tagCursorPos
393
- }),
394
- type,
395
- ...!(readOnly || disabled || type === "categorical") && {
396
- onDelete: (event) => onDeleteTagHandler(event, i)
397
- },
398
- deleteButtonProps: {
399
- tabIndex: -1
400
- },
401
- ...otherProps
402
- }
403
- )
366
+ ...otherProps
404
367
  },
405
- `${tag.label}-${i}`
368
+ `${label}-${i}`
406
369
  );
407
370
  }),
408
- !(disabled || readOnly) && /* @__PURE__ */ jsxRuntime.jsx(
409
- ListItem.HvListItem,
371
+ !disabled && !readOnly && /* @__PURE__ */ jsxRuntime.jsx(
372
+ "input",
410
373
  {
374
+ id: setId.setId(elementId, "input"),
375
+ onChange: onChangeHandler,
376
+ autoComplete: "off",
377
+ onKeyDown: onInputKeyDownHandler,
378
+ placeholder: value.length === 0 ? placeholder : "",
411
379
  className: cx(
412
- {
413
- [classes.singleLine]: !multiline,
414
- [classes.tagInputRootEmpty]: value.length === 0
415
- },
416
- !!isTagSelected && css({
417
- [`& .${BaseInput_styles.staticClasses.inputRoot}`]: {
418
- backgroundColor: uikitStyles.theme.colors.atmo1
419
- }
420
- })
380
+ classes.tagInputContainerRoot,
381
+ classes.tagInputRoot,
382
+ classes.input
421
383
  ),
422
- classes: {
423
- root: classes.tagInputContainerRoot,
424
- gutters: classes.listItemGutters
425
- },
426
- id: setId.setId(elementId, `tag-${value.length}`),
427
- children: /* @__PURE__ */ jsxRuntime.jsx(
428
- Input.HvInput,
429
- {
430
- value: tagInput,
431
- disableClear: true,
432
- onChange: onChangeHandler,
433
- onKeyDown: onInputKeyDownHandler,
434
- placeholder: value.length === 0 ? placeholder : "",
435
- className: cx({
436
- [classes.singleLine]: !multiline
437
- }),
438
- classes: {
439
- root: classes.tagInputRoot,
440
- input: classes.input,
441
- inputBorderContainer: classes.tagInputBorderContainer,
442
- inputRootFocused: classes.tagInputRootFocused
443
- },
444
- disabled,
445
- readOnly: readOnly || isTagSelected,
446
- inputProps: {
447
- ref: materialInputRef,
448
- "aria-label": ariaLabel,
449
- "aria-labelledby": ariaLabelledBy,
450
- "aria-describedby": ariaDescribedBy != null ? ariaDescribedBy : description && setId.setId(elementId, "description") || void 0,
451
- ...inputProps
452
- },
453
- ref: inputRef,
454
- ...others
455
- }
456
- )
384
+ ref: inputRef,
385
+ "aria-label": ariaLabel,
386
+ "aria-labelledby": ariaLabelledBy,
387
+ "aria-describedby": ariaDescribedBy ?? (description ? setId.setId(elementId, "description") : void 0),
388
+ ...inputProps,
389
+ ...others
457
390
  }
458
- )
391
+ ),
392
+ !disabled && !readOnly && endAdornment
459
393
  ]
460
394
  }
461
395
  ),
@@ -469,8 +403,8 @@ const HvTagsInput = React.forwardRef(
469
403
  root: classes.suggestionsContainer,
470
404
  list: classes.suggestionList
471
405
  },
472
- expanded: hasSuggestions,
473
- anchorEl: containerRef?.current?.parentElement,
406
+ open: hasSuggestions,
407
+ anchorEl: containerRef?.current,
474
408
  onClose: suggestionClearHandler,
475
409
  onKeyDown: onSuggestionKeyDown,
476
410
  onSuggestionSelected: suggestionSelectedHandler,
@@ -2,46 +2,30 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const uikitReactUtils = require("@hitachivantara/uikit-react-utils");
4
4
  const uikitStyles = require("@hitachivantara/uikit-styles");
5
- const BaseInput_styles = require("../BaseInput/BaseInput.styles.cjs");
6
- require("../BaseInput/BaseInput.cjs");
7
- const Suggestions_styles = require("../FormElement/Suggestions/Suggestions.styles.cjs");
5
+ const focusUtils = require("../utils/focusUtils.cjs");
8
6
  const { staticClasses, useClasses } = uikitReactUtils.createClasses("HvTagsInput", {
9
- input: {
10
- width: "100%",
11
- ...uikitStyles.theme.typography.caption1
12
- },
13
- listItemGutters: { padding: "0 5px" },
14
- listItemRoot: {
15
- marginBottom: 2,
16
- height: 24,
17
- lineHeight: "24px",
18
- "&:not(:last-child)": {
19
- marginBottom: 2
20
- },
21
- "&$singleLine": {
22
- display: "table-cell",
23
- paddingTop: "2px"
24
- }
25
- },
7
+ /** @deprecated unused */
8
+ listItemGutters: {},
9
+ /** @deprecated use `chipRoot` */
10
+ listItemRoot: {},
26
11
  root: { display: "inline-block", width: "100%" },
12
+ // TODO: consider renaming this
27
13
  chipRoot: {
28
14
  maxWidth: "none"
29
15
  },
30
16
  disabled: {
31
17
  "& $tagsList": {
32
18
  backgroundColor: uikitStyles.theme.colors.atmo2,
33
- border: `1px solid ${uikitStyles.theme.colors.atmo4}`,
34
- "&:focus-within, &:hover": {
35
- border: `1px solid ${uikitStyles.theme.colors.atmo4}`
19
+ "&,:hover": {
20
+ borderColor: uikitStyles.theme.colors.atmo4
36
21
  }
37
22
  }
38
23
  },
39
24
  readOnly: {
40
25
  "& $tagsList": {
41
26
  backgroundColor: uikitStyles.theme.colors.atmo2,
42
- border: `1px solid ${uikitStyles.theme.colors.secondary_60}`,
43
- "&:hover": {
44
- border: `1px solid ${uikitStyles.theme.colors.secondary_60}`
27
+ "&,:hover": {
28
+ borderColor: uikitStyles.theme.colors.secondary_60
45
29
  }
46
30
  }
47
31
  },
@@ -58,112 +42,67 @@ const { staticClasses, useClasses } = uikitReactUtils.createClasses("HvTagsInput
58
42
  },
59
43
  tagsList: {
60
44
  display: "flex",
45
+ alignItems: "center",
61
46
  alignContent: "flex-start",
62
- float: "left",
63
- clear: "both",
47
+ gap: uikitStyles.theme.spacing("xxs", "xs"),
48
+ cursor: "text",
64
49
  width: "100%",
65
- maxWidth: "100%",
66
- height: "32px",
67
- padding: 5,
50
+ minHeight: 32,
51
+ padding: uikitStyles.theme.spacing("xxs", "xs"),
68
52
  overflow: "auto",
69
53
  position: "relative",
70
54
  flexDirection: "row",
71
55
  flexWrap: "wrap",
72
56
  backgroundColor: uikitStyles.theme.colors.atmo1,
73
- border: `1px solid ${uikitStyles.theme.colors.secondary_80}`,
57
+ borderWidth: 1,
58
+ borderColor: uikitStyles.theme.colors.secondary_80,
74
59
  borderRadius: uikitStyles.theme.radii.base,
75
60
  "&:hover": {
76
- cursor: "text",
77
- border: `1px solid ${uikitStyles.theme.colors.primary}`
78
- },
79
- [`& .${BaseInput_styles.staticClasses.inputRoot}`]: {
80
- border: "none"
61
+ borderColor: uikitStyles.theme.colors.primary
81
62
  },
82
- "&:focus, &:focus-within, &:focus-visible": {
83
- outlineColor: "#52A8EC",
84
- outlineStyle: "solid",
85
- outlineWidth: "0px",
86
- outlineOffset: "-1px",
87
- boxShadow: "0 0 0 1px #52A8EC, 0 0 0 4px rgba(29,155,209,.3)"
63
+ "&:focus-within, &:focus-visible": {
64
+ ...focusUtils.outlineStyles
88
65
  },
89
66
  "&$singleLine": {
90
- overflowX: "hidden",
91
- overflowY: "hidden",
92
- height: 32,
93
- display: "table-row",
94
- paddingTop: 0
67
+ flexWrap: "nowrap"
95
68
  },
96
69
  "&$error": {
97
- border: `1px solid ${uikitStyles.theme.colors.negative_120}`
70
+ borderColor: uikitStyles.theme.colors.negative_120
98
71
  },
99
72
  "&$invalid": {
100
- border: `1px solid ${uikitStyles.theme.colors.negative_120}`
73
+ borderColor: uikitStyles.theme.colors.negative_120
101
74
  }
102
75
  },
103
- tagInputContainerRoot: {
76
+ /** @deprecated use `classes.input` instead */
77
+ tagInputContainerRoot: {},
78
+ /** @deprecated use `classes.input` instead */
79
+ tagInputRoot: {},
80
+ input: {
104
81
  display: "flex",
105
- flexGrow: 1,
106
- height: 24,
107
- lineHeight: "24px",
108
- "&$singleLine": {
109
- display: "table-cell",
110
- minWidth: 60,
111
- width: "100%",
112
- paddingTop: "3px",
113
- verticalAlign: "middle"
114
- }
115
- },
116
- tagInputRoot: {
117
- [`& .${BaseInput_styles.staticClasses.root}`]: {
118
- width: "100%",
119
- border: "none"
120
- },
121
- [`&& .${BaseInput_styles.staticClasses.inputRoot}`]: {
122
- marginLeft: 0,
123
- marginRight: 0,
124
- flex: "1 1 auto",
125
- height: 24,
126
- lineHeight: "24px",
127
- padding: 0,
128
- border: "none"
129
- },
130
- [`& .${BaseInput_styles.staticClasses.inputRootFocused}`]: {
131
- outline: "none",
132
- boxShadow: "none"
133
- },
134
- [`& .${BaseInput_styles.staticClasses.root} .${BaseInput_styles.staticClasses.inputRootReadOnly}`]: {
135
- backgroundColor: "transparent",
136
- border: "none",
137
- "&:hover": {
138
- border: "none"
139
- }
140
- },
141
- [`&& .${BaseInput_styles.staticClasses.input}`]: {
142
- marginLeft: 0
143
- }
144
- },
145
- tagSelected: {
146
- outlineColor: "#52A8EC",
147
- outlineStyle: "solid",
148
- outlineWidth: "0px",
149
- outlineOffset: "-1px",
150
- boxShadow: "0 0 0 1px #52A8EC, 0 0 0 4px rgba(29,155,209,.3)"
82
+ flex: "1 0 auto",
83
+ height: "auto",
84
+ width: 0,
85
+ minWidth: 60,
86
+ border: "none",
87
+ margin: 0,
88
+ padding: 0,
89
+ ...uikitStyles.theme.typography.caption1,
90
+ backgroundColor: "transparent",
91
+ outline: "none",
92
+ boxShadow: "none"
151
93
  },
94
+ /** @deprecated unused. use `:focus` or `:focus-visible` instead */
95
+ tagSelected: {},
152
96
  /** @deprecated unused. use `::after` instead */
153
97
  tagInputBorderContainer: {},
98
+ /** @deprecated unused. use `:focus` or `:focus-visible` instead */
154
99
  tagInputRootFocused: {},
100
+ /** @deprecated unused */
155
101
  tagInputRootEmpty: {},
156
102
  singleLine: {},
157
103
  error: { float: "left" },
158
104
  inputExtension: {},
159
- suggestionsContainer: {
160
- width: "100%",
161
- position: "relative",
162
- top: 59,
163
- [`& .${Suggestions_styles.staticClasses.root} .${Suggestions_styles.staticClasses.list} &`]: {
164
- width: "100%"
165
- }
166
- },
105
+ suggestionsContainer: {},
167
106
  suggestionList: {}
168
107
  });
169
108
  exports.staticClasses = staticClasses;
@@ -83,7 +83,6 @@ const HvTextArea = React.forwardRef(function HvTextArea2(props, ref) {
83
83
  const performValidation = React.useCallback(() => {
84
84
  const inputValidity = validations.validateInput(
85
85
  inputRef.current,
86
- String(value),
87
86
  required,
88
87
  minCharQuantity,
89
88
  maxCharQuantity,
@@ -104,8 +103,7 @@ const HvTextArea = React.forwardRef(function HvTextArea2(props, ref) {
104
103
  required,
105
104
  setValidationMessage,
106
105
  setValidationState,
107
- validation,
108
- value
106
+ validation
109
107
  ]);
110
108
  const limitValue = (currentValue) => {
111
109
  if (currentValue === void 0 || !blockMax) return currentValue;