@hitachivantara/uikit-react-core 5.24.3 → 5.24.5

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 (218) hide show
  1. package/dist/cjs/components/Calendar/Calendar.cjs +12 -10
  2. package/dist/cjs/components/Calendar/Calendar.cjs.map +1 -1
  3. package/dist/cjs/components/Calendar/Calendar.styles.cjs +29 -57
  4. package/dist/cjs/components/Calendar/Calendar.styles.cjs.map +1 -1
  5. package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.cjs +20 -14
  6. package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.cjs.map +1 -1
  7. package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.styles.cjs +55 -82
  8. package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.styles.cjs.map +1 -1
  9. package/dist/cjs/components/Calendar/CalendarNavigation/ComposedNavigation/ComposedNavigation.cjs +10 -8
  10. package/dist/cjs/components/Calendar/CalendarNavigation/ComposedNavigation/ComposedNavigation.cjs.map +1 -1
  11. package/dist/cjs/components/Calendar/CalendarNavigation/ComposedNavigation/ComposedNavigation.styles.cjs +15 -31
  12. package/dist/cjs/components/Calendar/CalendarNavigation/ComposedNavigation/ComposedNavigation.styles.cjs.map +1 -1
  13. package/dist/cjs/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.cjs +18 -9
  14. package/dist/cjs/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.cjs.map +1 -1
  15. package/dist/cjs/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.styles.cjs +43 -56
  16. package/dist/cjs/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.styles.cjs.map +1 -1
  17. package/dist/cjs/components/Calendar/CalendarNavigation/Navigation/Navigation.cjs +22 -11
  18. package/dist/cjs/components/Calendar/CalendarNavigation/Navigation/Navigation.cjs.map +1 -1
  19. package/dist/cjs/components/Calendar/CalendarNavigation/Navigation/Navigation.styles.cjs +31 -77
  20. package/dist/cjs/components/Calendar/CalendarNavigation/Navigation/Navigation.styles.cjs.map +1 -1
  21. package/dist/cjs/components/Calendar/CalendarWeekLabels/CalendarWeekLabels.cjs +8 -5
  22. package/dist/cjs/components/Calendar/CalendarWeekLabels/CalendarWeekLabels.cjs.map +1 -1
  23. package/dist/cjs/components/Calendar/CalendarWeekLabels/CalendarWeekLabels.styles.cjs +15 -21
  24. package/dist/cjs/components/Calendar/CalendarWeekLabels/CalendarWeekLabels.styles.cjs.map +1 -1
  25. package/dist/cjs/components/Calendar/SingleCalendar/CalendarCell.cjs +25 -9
  26. package/dist/cjs/components/Calendar/SingleCalendar/CalendarCell.cjs.map +1 -1
  27. package/dist/cjs/components/Calendar/SingleCalendar/CalendarCell.styles.cjs +38 -53
  28. package/dist/cjs/components/Calendar/SingleCalendar/CalendarCell.styles.cjs.map +1 -1
  29. package/dist/cjs/components/Calendar/SingleCalendar/SingleCalendar.cjs +14 -11
  30. package/dist/cjs/components/Calendar/SingleCalendar/SingleCalendar.cjs.map +1 -1
  31. package/dist/cjs/components/Calendar/SingleCalendar/SingleCalendar.styles.cjs +64 -63
  32. package/dist/cjs/components/Calendar/SingleCalendar/SingleCalendar.styles.cjs.map +1 -1
  33. package/dist/cjs/components/Grid/Grid.cjs +7 -0
  34. package/dist/cjs/components/Grid/Grid.cjs.map +1 -1
  35. package/dist/cjs/components/Grid/Grid.styles.cjs +44 -0
  36. package/dist/cjs/components/Grid/Grid.styles.cjs.map +1 -0
  37. package/dist/cjs/components/Header/Navigation/MenuItem/MenuItem.cjs +2 -2
  38. package/dist/cjs/components/Header/Navigation/MenuItem/MenuItem.cjs.map +1 -1
  39. package/dist/cjs/components/Header/Navigation/Navigation.cjs.map +1 -1
  40. package/dist/cjs/components/Header/Navigation/useSelectionPath.cjs.map +1 -1
  41. package/dist/cjs/components/Kpi/Kpi.cjs +27 -24
  42. package/dist/cjs/components/Kpi/Kpi.cjs.map +1 -1
  43. package/dist/cjs/components/Kpi/Kpi.styles.cjs +47 -132
  44. package/dist/cjs/components/Kpi/Kpi.styles.cjs.map +1 -1
  45. package/dist/cjs/components/Link/Link.cjs +8 -5
  46. package/dist/cjs/components/Link/Link.cjs.map +1 -1
  47. package/dist/cjs/components/Link/Link.styles.cjs +15 -16
  48. package/dist/cjs/components/Link/Link.styles.cjs.map +1 -1
  49. package/dist/cjs/components/List/List.styles.cjs +1 -1
  50. package/dist/cjs/components/OverflowTooltip/OverflowTooltip.cjs +13 -8
  51. package/dist/cjs/components/OverflowTooltip/OverflowTooltip.cjs.map +1 -1
  52. package/dist/cjs/components/OverflowTooltip/OverflowTooltip.styles.cjs +16 -35
  53. package/dist/cjs/components/OverflowTooltip/OverflowTooltip.styles.cjs.map +1 -1
  54. package/dist/cjs/components/Slider/Slider.cjs +45 -29
  55. package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
  56. package/dist/cjs/components/Slider/Slider.styles.cjs +66 -150
  57. package/dist/cjs/components/Slider/Slider.styles.cjs.map +1 -1
  58. package/dist/cjs/components/Slider/SliderInput/SliderInput.cjs +13 -9
  59. package/dist/cjs/components/Slider/SliderInput/SliderInput.cjs.map +1 -1
  60. package/dist/cjs/components/Slider/SliderInput/SliderInput.styles.cjs +16 -51
  61. package/dist/cjs/components/Slider/SliderInput/SliderInput.styles.cjs.map +1 -1
  62. package/dist/cjs/components/Tag/Tag.cjs +42 -27
  63. package/dist/cjs/components/Tag/Tag.cjs.map +1 -1
  64. package/dist/cjs/components/Tag/Tag.styles.cjs +90 -139
  65. package/dist/cjs/components/Tag/Tag.styles.cjs.map +1 -1
  66. package/dist/cjs/components/TagsInput/TagsInput.cjs +75 -49
  67. package/dist/cjs/components/TagsInput/TagsInput.cjs.map +1 -1
  68. package/dist/cjs/components/TagsInput/TagsInput.styles.cjs +171 -328
  69. package/dist/cjs/components/TagsInput/TagsInput.styles.cjs.map +1 -1
  70. package/dist/cjs/components/Tooltip/Tooltip.cjs +7 -5
  71. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
  72. package/dist/cjs/components/Tooltip/Tooltip.styles.cjs +27 -9
  73. package/dist/cjs/components/Tooltip/Tooltip.styles.cjs.map +1 -1
  74. package/dist/cjs/index.cjs +20 -20
  75. package/dist/esm/components/Calendar/Calendar.js +15 -12
  76. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  77. package/dist/esm/components/Calendar/Calendar.styles.js +29 -55
  78. package/dist/esm/components/Calendar/Calendar.styles.js.map +1 -1
  79. package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.js +23 -16
  80. package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.js.map +1 -1
  81. package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.styles.js +55 -80
  82. package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.styles.js.map +1 -1
  83. package/dist/esm/components/Calendar/CalendarNavigation/ComposedNavigation/ComposedNavigation.js +13 -10
  84. package/dist/esm/components/Calendar/CalendarNavigation/ComposedNavigation/ComposedNavigation.js.map +1 -1
  85. package/dist/esm/components/Calendar/CalendarNavigation/ComposedNavigation/ComposedNavigation.styles.js +15 -29
  86. package/dist/esm/components/Calendar/CalendarNavigation/ComposedNavigation/ComposedNavigation.styles.js.map +1 -1
  87. package/dist/esm/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.js +21 -11
  88. package/dist/esm/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.js.map +1 -1
  89. package/dist/esm/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.styles.js +43 -54
  90. package/dist/esm/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.styles.js.map +1 -1
  91. package/dist/esm/components/Calendar/CalendarNavigation/Navigation/Navigation.js +25 -13
  92. package/dist/esm/components/Calendar/CalendarNavigation/Navigation/Navigation.js.map +1 -1
  93. package/dist/esm/components/Calendar/CalendarNavigation/Navigation/Navigation.styles.js +31 -75
  94. package/dist/esm/components/Calendar/CalendarNavigation/Navigation/Navigation.styles.js.map +1 -1
  95. package/dist/esm/components/Calendar/CalendarWeekLabels/CalendarWeekLabels.js +11 -7
  96. package/dist/esm/components/Calendar/CalendarWeekLabels/CalendarWeekLabels.js.map +1 -1
  97. package/dist/esm/components/Calendar/CalendarWeekLabels/CalendarWeekLabels.styles.js +15 -19
  98. package/dist/esm/components/Calendar/CalendarWeekLabels/CalendarWeekLabels.styles.js.map +1 -1
  99. package/dist/esm/components/Calendar/SingleCalendar/CalendarCell.js +27 -10
  100. package/dist/esm/components/Calendar/SingleCalendar/CalendarCell.js.map +1 -1
  101. package/dist/esm/components/Calendar/SingleCalendar/CalendarCell.styles.js +38 -51
  102. package/dist/esm/components/Calendar/SingleCalendar/CalendarCell.styles.js.map +1 -1
  103. package/dist/esm/components/Calendar/SingleCalendar/SingleCalendar.js +16 -12
  104. package/dist/esm/components/Calendar/SingleCalendar/SingleCalendar.js.map +1 -1
  105. package/dist/esm/components/Calendar/SingleCalendar/SingleCalendar.styles.js +64 -61
  106. package/dist/esm/components/Calendar/SingleCalendar/SingleCalendar.styles.js.map +1 -1
  107. package/dist/esm/components/Grid/Grid.js +9 -1
  108. package/dist/esm/components/Grid/Grid.js.map +1 -1
  109. package/dist/esm/components/Grid/Grid.styles.js +44 -0
  110. package/dist/esm/components/Grid/Grid.styles.js.map +1 -0
  111. package/dist/esm/components/Header/Navigation/MenuItem/MenuItem.js +2 -2
  112. package/dist/esm/components/Header/Navigation/MenuItem/MenuItem.js.map +1 -1
  113. package/dist/esm/components/Header/Navigation/Navigation.js.map +1 -1
  114. package/dist/esm/components/Header/Navigation/useSelectionPath.js.map +1 -1
  115. package/dist/esm/components/Kpi/Kpi.js +30 -26
  116. package/dist/esm/components/Kpi/Kpi.js.map +1 -1
  117. package/dist/esm/components/Kpi/Kpi.styles.js +47 -130
  118. package/dist/esm/components/Kpi/Kpi.styles.js.map +1 -1
  119. package/dist/esm/components/Link/Link.js +11 -7
  120. package/dist/esm/components/Link/Link.js.map +1 -1
  121. package/dist/esm/components/Link/Link.styles.js +15 -14
  122. package/dist/esm/components/Link/Link.styles.js.map +1 -1
  123. package/dist/esm/components/List/List.styles.js +1 -1
  124. package/dist/esm/components/OverflowTooltip/OverflowTooltip.js +16 -10
  125. package/dist/esm/components/OverflowTooltip/OverflowTooltip.js.map +1 -1
  126. package/dist/esm/components/OverflowTooltip/OverflowTooltip.styles.js +16 -33
  127. package/dist/esm/components/OverflowTooltip/OverflowTooltip.styles.js.map +1 -1
  128. package/dist/esm/components/Slider/Slider.js +45 -31
  129. package/dist/esm/components/Slider/Slider.js.map +1 -1
  130. package/dist/esm/components/Slider/Slider.styles.js +67 -147
  131. package/dist/esm/components/Slider/Slider.styles.js.map +1 -1
  132. package/dist/esm/components/Slider/SliderInput/SliderInput.js +16 -11
  133. package/dist/esm/components/Slider/SliderInput/SliderInput.js.map +1 -1
  134. package/dist/esm/components/Slider/SliderInput/SliderInput.styles.js +16 -49
  135. package/dist/esm/components/Slider/SliderInput/SliderInput.styles.js.map +1 -1
  136. package/dist/esm/components/Tag/Tag.js +43 -29
  137. package/dist/esm/components/Tag/Tag.js.map +1 -1
  138. package/dist/esm/components/Tag/Tag.styles.js +90 -136
  139. package/dist/esm/components/Tag/Tag.styles.js.map +1 -1
  140. package/dist/esm/components/TagsInput/TagsInput.js +78 -51
  141. package/dist/esm/components/TagsInput/TagsInput.js.map +1 -1
  142. package/dist/esm/components/TagsInput/TagsInput.styles.js +172 -327
  143. package/dist/esm/components/TagsInput/TagsInput.styles.js.map +1 -1
  144. package/dist/esm/components/Tooltip/Tooltip.js +10 -7
  145. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  146. package/dist/esm/components/Tooltip/Tooltip.styles.js +28 -10
  147. package/dist/esm/components/Tooltip/Tooltip.styles.js.map +1 -1
  148. package/dist/esm/index.js +178 -178
  149. package/dist/types/index.d.ts +750 -690
  150. package/package.json +2 -2
  151. package/dist/cjs/components/Calendar/CalendarHeader/calendarHeaderClasses.cjs +0 -8
  152. package/dist/cjs/components/Calendar/CalendarHeader/calendarHeaderClasses.cjs.map +0 -1
  153. package/dist/cjs/components/Calendar/CalendarNavigation/ComposedNavigation/composedNavigationClasses.cjs +0 -8
  154. package/dist/cjs/components/Calendar/CalendarNavigation/ComposedNavigation/composedNavigationClasses.cjs.map +0 -1
  155. package/dist/cjs/components/Calendar/CalendarNavigation/MonthSelector/monthSelectorClasses.cjs +0 -8
  156. package/dist/cjs/components/Calendar/CalendarNavigation/MonthSelector/monthSelectorClasses.cjs.map +0 -1
  157. package/dist/cjs/components/Calendar/CalendarNavigation/Navigation/navigationClasses.cjs +0 -8
  158. package/dist/cjs/components/Calendar/CalendarNavigation/Navigation/navigationClasses.cjs.map +0 -1
  159. package/dist/cjs/components/Calendar/CalendarWeekLabels/calendarWeekLabelsClasses.cjs +0 -8
  160. package/dist/cjs/components/Calendar/CalendarWeekLabels/calendarWeekLabelsClasses.cjs.map +0 -1
  161. package/dist/cjs/components/Calendar/SingleCalendar/calendarCellClasses.cjs +0 -8
  162. package/dist/cjs/components/Calendar/SingleCalendar/calendarCellClasses.cjs.map +0 -1
  163. package/dist/cjs/components/Calendar/SingleCalendar/singleCalendarClasses.cjs +0 -8
  164. package/dist/cjs/components/Calendar/SingleCalendar/singleCalendarClasses.cjs.map +0 -1
  165. package/dist/cjs/components/Calendar/calendarClasses.cjs +0 -8
  166. package/dist/cjs/components/Calendar/calendarClasses.cjs.map +0 -1
  167. package/dist/cjs/components/Grid/gridClasses.cjs +0 -8
  168. package/dist/cjs/components/Grid/gridClasses.cjs.map +0 -1
  169. package/dist/cjs/components/Kpi/kpiClasses.cjs +0 -8
  170. package/dist/cjs/components/Kpi/kpiClasses.cjs.map +0 -1
  171. package/dist/cjs/components/Link/linkClasses.cjs +0 -8
  172. package/dist/cjs/components/Link/linkClasses.cjs.map +0 -1
  173. package/dist/cjs/components/OverflowTooltip/overflowTooltipClasses.cjs +0 -8
  174. package/dist/cjs/components/OverflowTooltip/overflowTooltipClasses.cjs.map +0 -1
  175. package/dist/cjs/components/Slider/SliderInput/sliderInputClasses.cjs +0 -8
  176. package/dist/cjs/components/Slider/SliderInput/sliderInputClasses.cjs.map +0 -1
  177. package/dist/cjs/components/Slider/sliderClasses.cjs +0 -8
  178. package/dist/cjs/components/Slider/sliderClasses.cjs.map +0 -1
  179. package/dist/cjs/components/Tag/tagClasses.cjs +0 -8
  180. package/dist/cjs/components/Tag/tagClasses.cjs.map +0 -1
  181. package/dist/cjs/components/TagsInput/tagsInputClasses.cjs +0 -8
  182. package/dist/cjs/components/TagsInput/tagsInputClasses.cjs.map +0 -1
  183. package/dist/cjs/components/Tooltip/tooltipClasses.cjs +0 -8
  184. package/dist/cjs/components/Tooltip/tooltipClasses.cjs.map +0 -1
  185. package/dist/esm/components/Calendar/CalendarHeader/calendarHeaderClasses.js +0 -8
  186. package/dist/esm/components/Calendar/CalendarHeader/calendarHeaderClasses.js.map +0 -1
  187. package/dist/esm/components/Calendar/CalendarNavigation/ComposedNavigation/composedNavigationClasses.js +0 -8
  188. package/dist/esm/components/Calendar/CalendarNavigation/ComposedNavigation/composedNavigationClasses.js.map +0 -1
  189. package/dist/esm/components/Calendar/CalendarNavigation/MonthSelector/monthSelectorClasses.js +0 -8
  190. package/dist/esm/components/Calendar/CalendarNavigation/MonthSelector/monthSelectorClasses.js.map +0 -1
  191. package/dist/esm/components/Calendar/CalendarNavigation/Navigation/navigationClasses.js +0 -8
  192. package/dist/esm/components/Calendar/CalendarNavigation/Navigation/navigationClasses.js.map +0 -1
  193. package/dist/esm/components/Calendar/CalendarWeekLabels/calendarWeekLabelsClasses.js +0 -8
  194. package/dist/esm/components/Calendar/CalendarWeekLabels/calendarWeekLabelsClasses.js.map +0 -1
  195. package/dist/esm/components/Calendar/SingleCalendar/calendarCellClasses.js +0 -8
  196. package/dist/esm/components/Calendar/SingleCalendar/calendarCellClasses.js.map +0 -1
  197. package/dist/esm/components/Calendar/SingleCalendar/singleCalendarClasses.js +0 -8
  198. package/dist/esm/components/Calendar/SingleCalendar/singleCalendarClasses.js.map +0 -1
  199. package/dist/esm/components/Calendar/calendarClasses.js +0 -8
  200. package/dist/esm/components/Calendar/calendarClasses.js.map +0 -1
  201. package/dist/esm/components/Grid/gridClasses.js +0 -8
  202. package/dist/esm/components/Grid/gridClasses.js.map +0 -1
  203. package/dist/esm/components/Kpi/kpiClasses.js +0 -8
  204. package/dist/esm/components/Kpi/kpiClasses.js.map +0 -1
  205. package/dist/esm/components/Link/linkClasses.js +0 -8
  206. package/dist/esm/components/Link/linkClasses.js.map +0 -1
  207. package/dist/esm/components/OverflowTooltip/overflowTooltipClasses.js +0 -8
  208. package/dist/esm/components/OverflowTooltip/overflowTooltipClasses.js.map +0 -1
  209. package/dist/esm/components/Slider/SliderInput/sliderInputClasses.js +0 -8
  210. package/dist/esm/components/Slider/SliderInput/sliderInputClasses.js.map +0 -1
  211. package/dist/esm/components/Slider/sliderClasses.js +0 -8
  212. package/dist/esm/components/Slider/sliderClasses.js.map +0 -1
  213. package/dist/esm/components/Tag/tagClasses.js +0 -8
  214. package/dist/esm/components/Tag/tagClasses.js.map +0 -1
  215. package/dist/esm/components/TagsInput/tagsInputClasses.js +0 -8
  216. package/dist/esm/components/TagsInput/tagsInputClasses.js.map +0 -1
  217. package/dist/esm/components/Tooltip/tooltipClasses.js +0 -8
  218. package/dist/esm/components/Tooltip/tooltipClasses.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { useState, useRef, useMemo, useCallback, useEffect } from "react";
2
- import { clsx } from "clsx";
3
2
  import isNil from "lodash/isNil";
3
+ import { theme } from "@hitachivantara/uikit-styles";
4
4
  import { useControlled } from "../../hooks/useControlled.js";
5
5
  import { useUniqueId } from "../../hooks/useUniqueId.js";
6
6
  import { useIsMounted } from "../../hooks/useIsMounted.js";
@@ -9,13 +9,24 @@ import { isKey } from "../../utils/keyboardUtils.js";
9
9
  import { setId } from "../../utils/setId.js";
10
10
  import validationState from "../Forms/FormElement/validationStates.js";
11
11
  import { DEFAULT_ERROR_MESSAGES } from "../BaseInput/validations.js";
12
- import { StyledFormElement, StyledLabelContainer, StyledLabel, StyledDescription, StyledCharCounter, StyledTagsList, StyledListItem, StyledTag, StyledInputListItem, StyledInput, StyledSuggestions, StyledError } from "./TagsInput.styles.js";
13
- import tagsInputClasses from "./tagsInputClasses.js";
12
+ import { useClasses } from "./TagsInput.styles.js";
13
+ import { staticClasses } from "./TagsInput.styles.js";
14
14
  import { jsxs, jsx, Fragment } from "@emotion/react/jsx-runtime";
15
+ import { HvTag } from "../Tag/Tag.js";
16
+ import { HvInput } from "../Input/Input.js";
17
+ import { HvFormElement } from "../Forms/FormElement/FormElement.js";
18
+ import { HvLabel } from "../Forms/Label/Label.js";
19
+ import { HvInfoMessage } from "../Forms/InfoMessage/InfoMessage.js";
20
+ import { HvCharCounter } from "../Forms/CharCounter/CharCounter.js";
21
+ import { HvListContainer } from "../ListContainer/ListContainer.js";
22
+ import { HvListItem } from "../ListContainer/ListItem/ListItem.js";
23
+ import { staticClasses as staticClasses2 } from "../BaseInput/BaseInput.styles.js";
24
+ import { HvSuggestions } from "../Forms/Suggestions/Suggestions.js";
25
+ import { HvWarningText } from "../Forms/WarningText/WarningText.js";
15
26
  const HvTagsInput = (props) => {
16
27
  var _a;
17
28
  const {
18
- classes,
29
+ classes: classesProp,
19
30
  className,
20
31
  id,
21
32
  name,
@@ -51,6 +62,11 @@ const HvTagsInput = (props) => {
51
62
  suggestionListCallback,
52
63
  ...others
53
64
  } = useDefaultProps("HvTagsInput", props);
65
+ const {
66
+ classes,
67
+ cx,
68
+ css
69
+ } = useClasses(classesProp);
54
70
  const elementId = useUniqueId(id, "hvTagsInput");
55
71
  const hasLabel = textAreaLabel != null;
56
72
  const hasDescription = description != null;
@@ -235,7 +251,7 @@ const HvTagsInput = (props) => {
235
251
  clearTimeout(blurTimeout.current);
236
252
  onFocus == null ? void 0 : onFocus(evt, tagInput);
237
253
  };
238
- return /* @__PURE__ */ jsxs(StyledFormElement, {
254
+ return /* @__PURE__ */ jsxs(HvFormElement, {
239
255
  id,
240
256
  name,
241
257
  disabled,
@@ -244,34 +260,36 @@ const HvTagsInput = (props) => {
244
260
  required,
245
261
  onBlur: onBlurHandler,
246
262
  onFocus: onFocusHandler,
247
- className: clsx(tagsInputClasses.root, classes == null ? void 0 : classes.root, className, disabled && clsx(tagsInputClasses.disabled, classes == null ? void 0 : classes.disabled)),
248
- children: [(hasLabel || hasDescription) && /* @__PURE__ */ jsxs(StyledLabelContainer, {
249
- className: clsx(tagsInputClasses.labelContainer, classes == null ? void 0 : classes.labelContainer),
250
- children: [hasLabel && /* @__PURE__ */ jsx(StyledLabel, {
251
- className: clsx(tagsInputClasses.label, classes == null ? void 0 : classes.label),
263
+ className: cx(classes.root, {
264
+ [classes.disabled]: disabled,
265
+ [classes.readOnly]: readOnly
266
+ }, className),
267
+ children: [(hasLabel || hasDescription) && /* @__PURE__ */ jsxs("div", {
268
+ className: classes.labelContainer,
269
+ children: [hasLabel && /* @__PURE__ */ jsx(HvLabel, {
270
+ className: classes.label,
252
271
  id: setId(id, "label"),
253
272
  htmlFor: setId(elementId, "input"),
254
273
  label: textAreaLabel
255
- }), hasDescription && /* @__PURE__ */ jsx(StyledDescription, {
256
- className: clsx(tagsInputClasses.description, classes == null ? void 0 : classes.description),
274
+ }), hasDescription && /* @__PURE__ */ jsx(HvInfoMessage, {
275
+ className: classes.description,
257
276
  id: setId(elementId, "description"),
258
277
  children: description
259
278
  })]
260
- }), hasCounter && /* @__PURE__ */ jsx(StyledCharCounter, {
279
+ }), hasCounter && /* @__PURE__ */ jsx(HvCharCounter, {
261
280
  id: setId(elementId, "charCounter"),
262
- className: clsx(tagsInputClasses.characterCounter, classes == null ? void 0 : classes.characterCounter),
281
+ className: classes.characterCounter,
263
282
  separator: middleCountLabel,
264
283
  currentCharQuantity: value.length,
265
284
  maxCharQuantity: maxTagsQuantity,
266
285
  ...countCharProps
267
- }), /* @__PURE__ */ jsxs(StyledTagsList, {
268
- className: clsx(tagsInputClasses.tagsList, classes == null ? void 0 : classes.tagsList, canShowError && clsx(tagsInputClasses.error, classes == null ? void 0 : classes.error), resizable && multiline && clsx(tagsInputClasses.resizable, classes == null ? void 0 : classes.resizable), isStateInvalid && clsx(tagsInputClasses.invalid, classes == null ? void 0 : classes.invalid), !multiline && clsx(tagsInputClasses.singleLine, classes == null ? void 0 : classes.singleLine)),
269
- $disabled: disabled,
270
- $singleLine: !multiline,
271
- $error: canShowError,
272
- $resizable: resizable && multiline,
273
- $invalid: isStateInvalid,
274
- $readOnly: readOnly,
286
+ }), /* @__PURE__ */ jsxs(HvListContainer, {
287
+ className: cx(classes.tagsList, {
288
+ [classes.error]: canShowError,
289
+ [classes.resizable]: resizable && multiline,
290
+ [classes.invalid]: isStateInvalid,
291
+ [classes.singleLine]: !multiline
292
+ }),
275
293
  onKeyDown: onKeyDownHandler,
276
294
  onClick: onContainerClickHandler,
277
295
  ref: containerRef,
@@ -285,20 +303,23 @@ const HvTagsInput = (props) => {
285
303
  type,
286
304
  ...otherProps
287
305
  } = tag;
288
- return /* @__PURE__ */ jsx(StyledListItem, {
306
+ return /* @__PURE__ */ jsx(HvListItem, {
289
307
  tabIndex: -1,
290
- className: clsx(!multiline && clsx(tagsInputClasses.singleLine, classes == null ? void 0 : classes.singleLine)),
308
+ className: cx({
309
+ [classes.singleLine]: !multiline
310
+ }),
291
311
  classes: {
292
- gutters: clsx(tagsInputClasses.listItemGutters, classes == null ? void 0 : classes.listItemGutters),
293
- root: clsx(tagsInputClasses.listItemRoot, classes == null ? void 0 : classes.listItemRoot)
312
+ gutters: classes.listItemGutters,
313
+ root: classes.listItemRoot
294
314
  },
295
315
  id: `tag-${i}`,
296
- $singleLine: !multiline,
297
- children: /* @__PURE__ */ jsx(StyledTag, {
316
+ children: /* @__PURE__ */ jsx(HvTag, {
298
317
  label,
299
- className: clsx(i === tagCursorPos && clsx(tagsInputClasses.tagSelected, classes == null ? void 0 : classes.tagSelected)),
318
+ className: cx({
319
+ [classes.tagSelected]: i === tagCursorPos
320
+ }),
300
321
  classes: {
301
- chipRoot: clsx(tagsInputClasses.chipRoot, classes == null ? void 0 : classes.chipRoot)
322
+ chipRoot: classes.chipRoot
302
323
  },
303
324
  type,
304
325
  ...!(readOnly || disabled || type === "categorical") && {
@@ -307,32 +328,38 @@ const HvTagsInput = (props) => {
307
328
  deleteButtonProps: {
308
329
  tabIndex: -1
309
330
  },
310
- $selected: i === tagCursorPos,
311
331
  ...otherProps
312
332
  })
313
333
  }, `${tag.label}-${i}`);
314
- }), !(disabled || readOnly) && /* @__PURE__ */ jsx(StyledInputListItem, {
315
- className: clsx(!multiline && clsx(tagsInputClasses.singleLine, classes == null ? void 0 : classes.singleLine, value.length === 0 && clsx(tagsInputClasses.tagInputRootEmpty, classes == null ? void 0 : classes.tagInputRootEmpty))),
334
+ }), !(disabled || readOnly) && /* @__PURE__ */ jsx(HvListItem, {
335
+ className: cx({
336
+ [classes.singleLine]: !multiline,
337
+ [classes.tagInputRootEmpty]: value.length === 0
338
+ }, !!isTagSelected && css({
339
+ [`& .${staticClasses2.inputRoot}`]: {
340
+ backgroundColor: theme.colors.atmo1
341
+ }
342
+ })),
316
343
  classes: {
317
- root: clsx(tagsInputClasses.tagInputContainerRoot, classes == null ? void 0 : classes.tagInputContainerRoot),
318
- gutters: clsx(tagsInputClasses.listItemGutters, classes == null ? void 0 : classes.listItemGutters)
344
+ root: classes.tagInputContainerRoot,
345
+ gutters: classes.listItemGutters
319
346
  },
320
347
  id: `tag-${value.length}`,
321
- $singleLine: !multiline,
322
- $isTagSelected: !!isTagSelected,
323
- children: /* @__PURE__ */ jsx(StyledInput, {
348
+ children: /* @__PURE__ */ jsx(HvInput, {
324
349
  value: tagInput,
325
350
  disableClear: true,
326
351
  onChange: onChangeHandler,
327
352
  onKeyDown: onInputKeyDownHandler,
328
353
  placeholder: value.length === 0 ? placeholder : "",
329
354
  autoFocus,
330
- className: clsx(!multiline && clsx(tagsInputClasses.singleLine, classes == null ? void 0 : classes.singleLine)),
355
+ className: cx({
356
+ [classes.singleLine]: !multiline
357
+ }),
331
358
  classes: {
332
- root: clsx(tagsInputClasses.tagInputRoot, classes == null ? void 0 : classes.tagInputRoot),
333
- input: clsx(tagsInputClasses.input, classes == null ? void 0 : classes.input),
334
- inputBorderContainer: clsx(tagsInputClasses.tagInputBorderContainer, classes == null ? void 0 : classes.tagInputBorderContainer),
335
- inputRootFocused: clsx(tagsInputClasses.tagInputRootFocused, classes == null ? void 0 : classes.tagInputRootFocused)
359
+ root: classes.tagInputRoot,
360
+ input: classes.input,
361
+ inputBorderContainer: classes.tagInputBorderContainer,
362
+ inputRootFocused: classes.tagInputRootFocused
336
363
  },
337
364
  disabled,
338
365
  readOnly: readOnly || isTagSelected,
@@ -344,19 +371,18 @@ const HvTagsInput = (props) => {
344
371
  ...inputProps
345
372
  },
346
373
  inputRef,
347
- $singleLine: !multiline,
348
374
  ...others
349
375
  })
350
376
  })]
351
377
  }), canShowSuggestions && /* @__PURE__ */ jsxs(Fragment, {
352
378
  children: [hasSuggestions && /* @__PURE__ */ jsx("div", {
353
379
  role: "presentation",
354
- className: clsx(tagsInputClasses.inputExtension, classes == null ? void 0 : classes.inputExtension)
355
- }), /* @__PURE__ */ jsx(StyledSuggestions, {
380
+ className: classes.inputExtension
381
+ }), /* @__PURE__ */ jsx(HvSuggestions, {
356
382
  id: setId(elementId, "suggestions"),
357
383
  classes: {
358
- root: clsx(tagsInputClasses.suggestionsContainer, classes == null ? void 0 : classes.suggestionsContainer),
359
- list: clsx(tagsInputClasses.suggestionList, classes == null ? void 0 : classes.suggestionList)
384
+ root: classes.suggestionsContainer,
385
+ list: classes.suggestionList
360
386
  },
361
387
  expanded: hasSuggestions,
362
388
  anchorEl: (_a = containerRef == null ? void 0 : containerRef.current) == null ? void 0 : _a.parentElement,
@@ -365,15 +391,16 @@ const HvTagsInput = (props) => {
365
391
  onSuggestionSelected: suggestionSelectedHandler,
366
392
  suggestionValues
367
393
  })]
368
- }), canShowError && /* @__PURE__ */ jsx(StyledError, {
394
+ }), canShowError && /* @__PURE__ */ jsx(HvWarningText, {
369
395
  id: setId(elementId, "error"),
370
396
  disableBorder: true,
371
- className: clsx(tagsInputClasses.error, classes == null ? void 0 : classes.error),
397
+ className: classes.error,
372
398
  children: validationMessage
373
399
  })]
374
400
  });
375
401
  };
376
402
  export {
377
- HvTagsInput
403
+ HvTagsInput,
404
+ staticClasses as tagsInputClasses
378
405
  };
379
406
  //# sourceMappingURL=TagsInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TagsInput.js","sources":["../../../../src/components/TagsInput/TagsInput.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { clsx } from \"clsx\";\n\nimport isNil from \"lodash/isNil\";\n\nimport { InputBaseComponentProps as MuiInputBaseComponentProps } from \"@mui/material\";\n\nimport { HvTagSuggestion, HvValidationMessages } from \"@core/types/forms\";\nimport { HvBaseProps } from \"@core/types/generic\";\nimport { useControlled } from \"@core/hooks/useControlled\";\nimport { useUniqueId } from \"@core/hooks/useUniqueId\";\nimport { useIsMounted } from \"@core/hooks/useIsMounted\";\nimport { useDefaultProps } from \"@core/hooks/useDefaultProps\";\nimport { isKey } from \"@core/utils/keyboardUtils\";\nimport { setId } from \"@core/utils/setId\";\nimport validationStates from \"@core/components/Forms/FormElement/validationStates\";\nimport { DEFAULT_ERROR_MESSAGES } from \"@core/components/BaseInput/validations\";\nimport { HvTagProps } from \"@core/components/Tag\";\nimport { HvCharCounterProps, HvFormStatus } from \"@core/components/Forms\";\n\nimport {\n StyledCharCounter,\n StyledDescription,\n StyledError,\n StyledFormElement,\n StyledLabel,\n StyledLabelContainer,\n StyledListItem,\n StyledTag,\n StyledTagsList,\n StyledInputListItem,\n StyledInput,\n StyledSuggestions,\n} from \"./TagsInput.styles\";\nimport tagsInputClasses, { HvTagsInputClasses } from \"./tagsInputClasses\";\n\nexport interface HvTagsInputProps\n extends HvBaseProps<\n HTMLElement,\n \"onChange\" | \"onBlur\" | \"onFocus\" | \"onKeyDown\" | \"color\" | \"defaultValue\"\n > {\n /** The form element name. */\n name?: string;\n /** The value of the form element. */\n value?: string[] | HvTagProps[];\n /** When uncontrolled, defines the initial input value. */\n defaultValue?: string[] | HvTagProps[];\n /**\n * The label of the form element.\n * The form element must be labeled for accessibility reasons.\n * If not provided, an aria-label or aria-labelledby must be inputted via inputProps.\n */\n label?: React.ReactNode;\n /** Provide additional descriptive text for the form element. */\n description?: React.ReactNode;\n /** Indicates that the form element is disabled. */\n disabled?: boolean;\n /** Indicates that the form element is not editable. */\n readOnly?: boolean;\n /** Indicates that the form element is required. */\n required?: boolean;\n /** The function that will be executed onChange. */\n onChange?: (\n event:\n | React.ChangeEvent<HTMLInputElement>\n | React.KeyboardEvent<HTMLInputElement>\n | React.MouseEvent<HTMLButtonElement>\n | React.MouseEvent<HTMLElement, MouseEvent>\n | React.KeyboardEventHandler<HTMLElement>,\n value: HvTagProps[]\n ) => void;\n /** The function that will be executed when the element is focused. */\n onFocus?: (event: React.FocusEvent<HTMLInputElement>, value: string) => void;\n /** The function that will be executed when the element is blurred. */\n onBlur?: (event: React.FocusEvent<HTMLInputElement>, value: string) => void;\n /** The function that will be executed when a tag is deleted. */\n onDelete?: (\n event:\n | React.ChangeEvent<HTMLInputElement>\n | React.KeyboardEvent<HTMLInputElement>\n | React.MouseEvent<HTMLButtonElement>\n | React.MouseEvent<HTMLElement, MouseEvent>\n | React.KeyboardEventHandler<HTMLElement>,\n value: HvTagProps,\n index: number\n ) => void;\n /** The function that will be executed when a tag is added. */\n onAdd?: (\n event:\n | React.ChangeEvent<HTMLInputElement>\n | React.KeyboardEvent<HTMLInputElement>\n | React.MouseEvent<HTMLButtonElement>\n | React.MouseEvent<HTMLElement, MouseEvent>\n | React.KeyboardEventHandler<HTMLElement>,\n value: HvTagProps,\n index: number\n ) => void;\n /** The placeholder value of the input. */\n placeholder?: string;\n /** If `true` the character counter isn't shown even if maxTagsQuantity is set. */\n hideCounter?: boolean;\n /** Text between the current char counter and max value. */\n middleCountLabel?: string;\n /** The maximum allowed length of the characters, if this value is null no check will be performed. */\n maxTagsQuantity?: number;\n /** Attributes applied to the input element. */\n inputProps?: MuiInputBaseComponentProps;\n /** If `true` it should autofocus. */\n autoFocus?: boolean;\n /** If `true` the component is resizable. */\n resizable?: boolean;\n /** Props passed to the HvCharCount component. */\n countCharProps?: Partial<HvCharCounterProps>;\n /** If `true` the component is in multiline mode. */\n multiline?: boolean;\n /** The status of the form element. */\n status?: HvFormStatus;\n /** The error message to show when `status` is \"invalid\". */\n statusMessage?: React.ReactNode;\n /** An Object containing the various texts associated with the input. */\n validationMessages?: HvValidationMessages;\n /** An array of strings that represent the character used to input a tag. This character is the string representation of the event.code from the input event. */\n commitTagOn?: string[];\n /** If `true` the tag will be committed when the blur event occurs. */\n commitOnBlur?: boolean;\n /** The function that will be executed to received an array of objects that has a label and id to create list of suggestion */\n suggestionListCallback?: (value: string) => HvTagSuggestion[] | null;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvTagsInputClasses;\n}\n\n/**\n * A tags input is a single or multiline control that allows the input of tags.\n */\nexport const HvTagsInput = (props: HvTagsInputProps) => {\n const {\n classes,\n className,\n id,\n name,\n value: valueProp,\n defaultValue = [],\n readOnly = false,\n disabled = false,\n required = false,\n label: textAreaLabel,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n description,\n \"aria-describedby\": ariaDescribedBy,\n onChange,\n onAdd,\n onDelete,\n onBlur,\n onFocus,\n placeholder,\n hideCounter = false,\n middleCountLabel = \"/\",\n maxTagsQuantity,\n autoFocus = false,\n resizable = true,\n inputProps = {},\n countCharProps = {},\n multiline = false,\n status,\n statusMessage,\n validationMessages,\n commitTagOn = [\"Enter\"],\n commitOnBlur = false,\n suggestionListCallback,\n ...others\n } = useDefaultProps(\"HvTagsInput\", props);\n const elementId = useUniqueId(id, \"hvTagsInput\");\n\n const hasLabel = textAreaLabel != null;\n const hasDescription = description != null;\n\n const [value, setValue] = useControlled(valueProp, defaultValue);\n\n const [validationState, setValidationState] = useControlled(\n status,\n validationStates.standBy\n );\n const [validationMessage, setValidationMessage] = useControlled(\n statusMessage,\n \"\"\n );\n\n const [tagInput, setTagInput] = useState(\"\");\n const [tagCursorPos, setTagCursorPos] = useState(value.length);\n const [stateValid, setStateValid] = useState(true);\n\n const inputRef = useRef<any>();\n const containerRef = useRef<any>();\n const skipReset = useRef(false);\n const blurTimeout = useRef<any>();\n const materialInputRef = useRef<any>(null);\n\n const isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;\n const hasCounter = maxTagsQuantity != null && !hideCounter;\n\n // suggestions related state\n const [suggestionValues, setSuggestionValues] = useState<\n HvTagSuggestion[] | null\n >(null);\n\n const isStateInvalid = useMemo(() => {\n return hasCounter && value.length > maxTagsQuantity;\n }, [hasCounter, maxTagsQuantity, value.length]);\n\n const canShowSuggestions = suggestionListCallback != null;\n const hasSuggestions = !!suggestionValues;\n\n const errorMessages = useMemo(\n () => ({ ...DEFAULT_ERROR_MESSAGES, ...validationMessages }),\n [validationMessages]\n );\n\n const performValidation = useCallback(\n (currValue) => {\n if (\n maxTagsQuantity !== null &&\n maxTagsQuantity !== undefined &&\n currValue.length > maxTagsQuantity\n ) {\n setValidationState(validationStates.invalid);\n setValidationMessage(errorMessages.maxCharError);\n setStateValid(false);\n } else {\n setValidationState(validationStates.valid);\n setValidationMessage(\"\");\n setStateValid(true);\n }\n },\n [\n errorMessages.maxCharError,\n maxTagsQuantity,\n setValidationMessage,\n setValidationState,\n ]\n );\n\n /**\n * Deletes a Tag from the array of tags and sets the new position for the tag cursor.\n * Also executes the user provided onDelete and onChange events.\n *\n * @param {number} tagPos - the position at which to remove the tag\n * @param {Event} event - the event associated with the delete\n * @param {boolean} end - whether or not to set the cursor at the end of the array\n */\n const deleteTag = useCallback(\n (tagPos, event, end) => {\n const newTagsArr = [\n ...value.slice(0, tagPos),\n ...value.slice(tagPos + 1),\n ];\n setValue(newTagsArr);\n setTagCursorPos(\n end ? newTagsArr.length : tagCursorPos > 0 ? tagCursorPos - 1 : 0\n );\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onDelete?.(event, value[tagPos], tagPos);\n onChange?.(event, newTagsArr);\n skipReset.current = true;\n },\n [onChange, onDelete, performValidation, setValue, tagCursorPos, value]\n );\n\n /**\n * Adds a Tag to the array of tags.\n * Also executes the user provided onAdd and onDelete events.\n *\n * @param {Event} event - whatever event triggered adding a tag\n * @param {string} tag - the string for the tag\n */\n const addTag = useCallback(\n (event, tag) => {\n event.preventDefault();\n if (tag !== \"\") {\n const newTag: HvTagProps = { label: tag, type: \"semantic\" };\n const newTagsArr = [...value, newTag];\n setValue(newTagsArr);\n performValidation(newTagsArr);\n onAdd?.(event, newTag, newTagsArr.length - 1);\n onChange?.(event, newTagsArr);\n }\n },\n [onAdd, onChange, performValidation, setValue, value]\n );\n\n const canShowError =\n (status !== undefined &&\n status === \"invalid\" &&\n statusMessage !== undefined) ||\n !stateValid;\n\n useEffect(() => {\n if (!multiline) {\n const element = containerRef?.current?.children[tagCursorPos];\n // this setTimeout is a workaround for Firefox not properly dealing\n // with setting the scrollLeft value.\n setTimeout(() => {\n const container = containerRef.current;\n if (isNil(container)) return;\n container.scrollLeft = element\n ? element.offsetLeft -\n container.getBoundingClientRect().width / 2 +\n element.getBoundingClientRect().width / 2\n : 0;\n }, 50);\n\n element?.focus();\n }\n }, [multiline, tagCursorPos]);\n\n useEffect(() => {\n if (!skipReset.current) {\n setTagInput(\"\");\n setTagCursorPos(value.length);\n }\n skipReset.current = false;\n }, [value]);\n\n const isMounted = useIsMounted();\n\n /**\n * Looks for the node that represent the input inside the material tree and focus it.\n */\n const focusInput = () => {\n materialInputRef.current.focus();\n };\n\n const getSuggestions = useCallback(\n (li) => {\n // TODO Replace with ref\n const listEl = document.getElementById(\n setId(elementId, \"suggestions-list\") || \"\"\n );\n return li != null ? listEl?.getElementsByTagName(\"li\")?.[li] : listEl;\n },\n [elementId]\n );\n\n /**\n * Clears the suggestion array.\n */\n const suggestionClearHandler = useCallback(() => {\n if (isMounted.current) {\n setSuggestionValues(null);\n }\n }, [isMounted]);\n\n /**\n * Fills of the suggestion array.\n */\n const suggestionHandler = useCallback(\n (val) => {\n const suggestionsArray = suggestionListCallback?.(val);\n if (suggestionsArray?.[0]?.label) {\n setSuggestionValues(suggestionsArray);\n } else {\n suggestionClearHandler();\n }\n },\n [suggestionClearHandler, suggestionListCallback]\n );\n\n /**\n * Executes the user callback adds the selection to the state and clears the suggestions.\n */\n const suggestionSelectedHandler = (event, item) => {\n addTag(event, item.value || item.label);\n\n // set the input value (only when value is uncontrolled)\n setTagInput(item.value || item.label);\n\n focusInput();\n suggestionClearHandler();\n };\n\n /**\n * Handler for the `onKeyDown` event on the suggestions component\n */\n const onSuggestionKeyDown = (event) => {\n if (isKey(event, \"Esc\")) {\n suggestionClearHandler();\n focusInput();\n } else if (isKey(event, \"Tab\")) {\n suggestionClearHandler();\n }\n };\n\n /**\n * Handler for the `onChange` event on the tag input\n */\n const onChangeHandler = useCallback(\n (_, input) => {\n setTagInput(input);\n\n if (canShowSuggestions) {\n // an edge case might be a controlled input whose onChange callback\n // doesn't change the value (or sets another): the suggestionListCallback\n // callback will still receive the original rejected value.\n // a refactor is needed so the suggestionListCallback might be called only\n // when the input is uncontrolled, providing a way to externally control\n // the suggestion values.\n suggestionHandler(input);\n }\n },\n [canShowSuggestions, suggestionHandler]\n );\n\n /**\n * Handler for the `onKeyDown` event on the form element\n */\n const onInputKeyDownHandler = useCallback(\n (event) => {\n if (!canShowSuggestions && commitTagOn.includes(event.code)) {\n addTag(event, tagInput);\n }\n },\n [addTag, canShowSuggestions, commitTagOn, tagInput]\n );\n\n /**\n * Handler for the `onKeyDown` event on the list container.\n */\n const onKeyDownHandler = useCallback(\n (event) => {\n if (tagInput === \"\") {\n switch (event.code) {\n case \"ArrowLeft\":\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n break;\n case \"ArrowRight\":\n setTagCursorPos(\n tagCursorPos < value.length ? tagCursorPos + 1 : value.length\n );\n break;\n case \"Backspace\":\n if (isTagSelected) {\n deleteTag(tagCursorPos, event, false);\n } else {\n setTagCursorPos(value.length - 1);\n }\n break;\n case \"Delete\":\n if (isTagSelected) {\n deleteTag(tagCursorPos, event, false);\n }\n break;\n default:\n break;\n }\n } else {\n switch (event.code) {\n case \"ArrowDown\":\n getSuggestions(0)?.focus();\n break;\n default:\n break;\n }\n }\n },\n [\n deleteTag,\n getSuggestions,\n isTagSelected,\n tagCursorPos,\n tagInput,\n value.length,\n ]\n );\n\n /**\n * Handler for the `onDelete` event on the tag component\n */\n const onDeleteTagHandler = useCallback(\n (event, i) => {\n deleteTag(i, event, true);\n setValidationState(validationStates.standBy);\n },\n [deleteTag, setValidationState]\n );\n\n /**\n * Handler for the `onClick` event on the list container\n */\n const onContainerClickHandler = useCallback(() => {\n inputRef.current?.focus();\n clearTimeout(blurTimeout.current);\n setTagCursorPos(value.length);\n }, [value.length]);\n\n const onBlurHandler = (evt) => {\n blurTimeout.current = setTimeout(() => {\n if (commitOnBlur) {\n addTag(evt, tagInput);\n }\n onBlur?.(evt, tagInput);\n }, 250);\n };\n\n const onFocusHandler = (evt) => {\n clearTimeout(blurTimeout.current);\n onFocus?.(evt, tagInput);\n };\n\n return (\n <StyledFormElement\n id={id}\n name={name}\n disabled={disabled}\n readOnly={readOnly}\n status={validationState}\n required={required}\n onBlur={onBlurHandler}\n onFocus={onFocusHandler}\n className={clsx(\n tagsInputClasses.root,\n classes?.root,\n className,\n disabled && clsx(tagsInputClasses.disabled, classes?.disabled)\n )}\n >\n {(hasLabel || hasDescription) && (\n <StyledLabelContainer\n className={clsx(\n tagsInputClasses.labelContainer,\n classes?.labelContainer\n )}\n >\n {hasLabel && (\n <StyledLabel\n className={clsx(tagsInputClasses.label, classes?.label)}\n id={setId(id, \"label\")}\n htmlFor={setId(elementId, \"input\")}\n label={textAreaLabel}\n />\n )}\n\n {hasDescription && (\n <StyledDescription\n className={clsx(\n tagsInputClasses.description,\n classes?.description\n )}\n id={setId(elementId, \"description\")}\n >\n {description}\n </StyledDescription>\n )}\n </StyledLabelContainer>\n )}\n\n {hasCounter && (\n <StyledCharCounter\n id={setId(elementId, \"charCounter\")}\n className={clsx(\n tagsInputClasses.characterCounter,\n classes?.characterCounter\n )}\n separator={middleCountLabel}\n currentCharQuantity={value.length}\n maxCharQuantity={maxTagsQuantity}\n {...countCharProps}\n />\n )}\n\n <StyledTagsList\n className={clsx(\n tagsInputClasses.tagsList,\n classes?.tagsList,\n canShowError && clsx(tagsInputClasses.error, classes?.error),\n resizable &&\n multiline &&\n clsx(tagsInputClasses.resizable, classes?.resizable),\n isStateInvalid && clsx(tagsInputClasses.invalid, classes?.invalid),\n !multiline && clsx(tagsInputClasses.singleLine, classes?.singleLine)\n )}\n $disabled={disabled}\n $singleLine={!multiline}\n $error={canShowError}\n $resizable={resizable && multiline}\n $invalid={isStateInvalid}\n $readOnly={readOnly}\n onKeyDown={onKeyDownHandler}\n onClick={onContainerClickHandler}\n ref={containerRef}\n >\n {value &&\n value.map((t, i) => {\n const tag =\n typeof t === \"string\"\n ? {\n label: t,\n type: \"semantic\",\n }\n : t;\n const { label, type, ...otherProps } = tag;\n return (\n <StyledListItem\n key={`${tag.label}-${i}`}\n tabIndex={-1}\n className={clsx(\n !multiline &&\n clsx(tagsInputClasses.singleLine, classes?.singleLine)\n )}\n classes={{\n gutters: clsx(\n tagsInputClasses.listItemGutters,\n classes?.listItemGutters\n ),\n root: clsx(\n tagsInputClasses.listItemRoot,\n classes?.listItemRoot\n ),\n }}\n id={`tag-${i}`}\n $singleLine={!multiline}\n >\n <StyledTag\n label={label}\n className={clsx(\n i === tagCursorPos &&\n clsx(tagsInputClasses.tagSelected, classes?.tagSelected)\n )}\n classes={{\n chipRoot: clsx(\n tagsInputClasses.chipRoot,\n classes?.chipRoot\n ),\n }}\n type={type}\n {...(!(readOnly || disabled || type === \"categorical\") && {\n onDelete: (event) => onDeleteTagHandler(event, i),\n })}\n deleteButtonProps={{\n tabIndex: -1,\n }}\n $selected={i === tagCursorPos}\n {...otherProps}\n />\n </StyledListItem>\n );\n })}\n {!(disabled || readOnly) && (\n <StyledInputListItem\n className={clsx(\n !multiline &&\n clsx(\n tagsInputClasses.singleLine,\n classes?.singleLine,\n value.length === 0 &&\n clsx(\n tagsInputClasses.tagInputRootEmpty,\n classes?.tagInputRootEmpty\n )\n )\n )}\n classes={{\n root: clsx(\n tagsInputClasses.tagInputContainerRoot,\n classes?.tagInputContainerRoot\n ),\n gutters: clsx(\n tagsInputClasses.listItemGutters,\n classes?.listItemGutters\n ),\n }}\n id={`tag-${value.length}`}\n $singleLine={!multiline}\n $isTagSelected={!!isTagSelected}\n >\n <StyledInput\n value={tagInput}\n disableClear\n onChange={onChangeHandler}\n onKeyDown={onInputKeyDownHandler}\n placeholder={value.length === 0 ? placeholder : \"\"}\n autoFocus={autoFocus}\n className={clsx(\n !multiline &&\n clsx(tagsInputClasses.singleLine, classes?.singleLine)\n )}\n classes={{\n root: clsx(\n tagsInputClasses.tagInputRoot,\n classes?.tagInputRoot\n ),\n input: clsx(tagsInputClasses.input, classes?.input),\n inputBorderContainer: clsx(\n tagsInputClasses.tagInputBorderContainer,\n classes?.tagInputBorderContainer\n ),\n inputRootFocused: clsx(\n tagsInputClasses.tagInputRootFocused,\n classes?.tagInputRootFocused\n ),\n }}\n disabled={disabled}\n readOnly={readOnly || isTagSelected}\n inputProps={{\n ref: materialInputRef,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\":\n ariaDescribedBy != null\n ? ariaDescribedBy\n : (description && setId(elementId, \"description\")) ||\n undefined,\n\n ...inputProps,\n }}\n inputRef={inputRef}\n $singleLine={!multiline}\n {...others}\n />\n </StyledInputListItem>\n )}\n </StyledTagsList>\n {canShowSuggestions && (\n <>\n {hasSuggestions && (\n <div\n role=\"presentation\"\n className={clsx(\n tagsInputClasses.inputExtension,\n classes?.inputExtension\n )}\n />\n )}\n <StyledSuggestions\n id={setId(elementId, \"suggestions\")}\n classes={{\n root: clsx(\n tagsInputClasses.suggestionsContainer,\n classes?.suggestionsContainer\n ),\n list: clsx(\n tagsInputClasses.suggestionList,\n classes?.suggestionList\n ),\n }}\n expanded={hasSuggestions}\n anchorEl={containerRef?.current?.parentElement}\n onClose={suggestionClearHandler}\n onKeyDown={onSuggestionKeyDown}\n onSuggestionSelected={suggestionSelectedHandler}\n suggestionValues={suggestionValues}\n />\n </>\n )}\n {canShowError && (\n <StyledError\n id={setId(elementId, \"error\")}\n disableBorder\n className={clsx(tagsInputClasses.error, classes?.error)}\n >\n {validationMessage}\n </StyledError>\n )}\n </StyledFormElement>\n );\n};\n"],"names":["HvTagsInput","props","classes","className","id","name","value","valueProp","defaultValue","readOnly","disabled","required","label","textAreaLabel","ariaLabel","ariaLabelledBy","description","ariaDescribedBy","onChange","onAdd","onDelete","onBlur","onFocus","placeholder","hideCounter","middleCountLabel","maxTagsQuantity","autoFocus","resizable","inputProps","countCharProps","multiline","status","statusMessage","validationMessages","commitTagOn","commitOnBlur","suggestionListCallback","others","useDefaultProps","elementId","useUniqueId","hasLabel","hasDescription","setValue","useControlled","validationState","setValidationState","validationStates","standBy","validationMessage","setValidationMessage","tagInput","setTagInput","useState","tagCursorPos","setTagCursorPos","length","stateValid","setStateValid","inputRef","useRef","containerRef","skipReset","blurTimeout","materialInputRef","isTagSelected","hasCounter","suggestionValues","setSuggestionValues","isStateInvalid","useMemo","canShowSuggestions","hasSuggestions","errorMessages","DEFAULT_ERROR_MESSAGES","performValidation","useCallback","currValue","undefined","invalid","maxCharError","valid","deleteTag","tagPos","event","end","newTagsArr","slice","current","focus","addTag","tag","preventDefault","newTag","type","canShowError","useEffect","element","children","setTimeout","container","isNil","scrollLeft","offsetLeft","getBoundingClientRect","width","isMounted","useIsMounted","focusInput","getSuggestions","li","listEl","document","getElementById","setId","getElementsByTagName","suggestionClearHandler","suggestionHandler","val","suggestionsArray","suggestionSelectedHandler","item","onSuggestionKeyDown","isKey","onChangeHandler","_","input","onInputKeyDownHandler","includes","code","onKeyDownHandler","_a","onDeleteTagHandler","i","onContainerClickHandler","clearTimeout","onBlurHandler","evt","onFocusHandler","StyledFormElement","clsx","tagsInputClasses","root","StyledLabelContainer","labelContainer","_jsx","StyledLabel","htmlFor","StyledDescription","StyledCharCounter","characterCounter","separator","currentCharQuantity","maxCharQuantity","_jsxs","StyledTagsList","tagsList","error","singleLine","$disabled","$singleLine","$error","$resizable","$invalid","$readOnly","onKeyDown","onClick","ref","map","t","otherProps","StyledListItem","tabIndex","gutters","listItemGutters","listItemRoot","StyledTag","tagSelected","chipRoot","deleteButtonProps","$selected","StyledInputListItem","tagInputRootEmpty","tagInputContainerRoot","$isTagSelected","StyledInput","disableClear","tagInputRoot","inputBorderContainer","tagInputBorderContainer","inputRootFocused","tagInputRootFocused","_Fragment","role","inputExtension","StyledSuggestions","suggestionsContainer","list","suggestionList","expanded","anchorEl","parentElement","onClose","onSuggestionSelected","StyledError","disableBorder"],"mappings":";;;;;;;;;;;;;;AA6IaA,MAAAA,cAAcA,CAACC,UAA4B;;AAChD,QAAA;AAAA,IACJC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC,OAAOC;AAAAA,IACPC,eAAe,CAAE;AAAA,IACjBC,WAAW;AAAA,IACXC,WAAW;AAAA,IACXC,WAAW;AAAA,IACXC,OAAOC;AAAAA,IACP,cAAcC;AAAAA,IACd,mBAAmBC;AAAAA,IACnBC;AAAAA,IACA,oBAAoBC;AAAAA,IACpBC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC,cAAc;AAAA,IACdC,mBAAmB;AAAA,IACnBC;AAAAA,IACAC,YAAY;AAAA,IACZC,YAAY;AAAA,IACZC,aAAa,CAAC;AAAA,IACdC,iBAAiB,CAAC;AAAA,IAClBC,YAAY;AAAA,IACZC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC,cAAc,CAAC,OAAO;AAAA,IACtBC,eAAe;AAAA,IACfC;AAAAA,IACA,GAAGC;AAAAA,EAAAA,IACDC,gBAAgB,eAAetC,KAAK;AAClCuC,QAAAA,YAAYC,YAAYrC,IAAI,aAAa;AAE/C,QAAMsC,WAAW7B,iBAAiB;AAClC,QAAM8B,iBAAiB3B,eAAe;AAEtC,QAAM,CAACV,OAAOsC,QAAQ,IAAIC,cAActC,WAAWC,YAAY;AAE/D,QAAM,CAACsC,mBAAiBC,kBAAkB,IAAIF,cAC5Cb,QACAgB,gBAAiBC,OACnB;AACA,QAAM,CAACC,mBAAmBC,oBAAoB,IAAIN,cAChDZ,eACA,EACF;AAEA,QAAM,CAACmB,UAAUC,WAAW,IAAIC,SAAS,EAAE;AAC3C,QAAM,CAACC,cAAcC,eAAe,IAAIF,SAAShD,MAAMmD,MAAM;AAC7D,QAAM,CAACC,YAAYC,aAAa,IAAIL,SAAS,IAAI;AAEjD,QAAMM,WAAWC;AACjB,QAAMC,eAAeD;AACfE,QAAAA,YAAYF,OAAO,KAAK;AAC9B,QAAMG,cAAcH;AACdI,QAAAA,mBAAmBJ,OAAY,IAAI;AAEzC,QAAMK,gBAAgBX,gBAAgB,KAAKA,eAAejD,MAAMmD;AAC1DU,QAAAA,aAAazC,mBAAmB,QAAQ,CAACF;AAG/C,QAAM,CAAC4C,kBAAkBC,mBAAmB,IAAIf,SAE9C,IAAI;AAEAgB,QAAAA,iBAAiBC,QAAQ,MAAM;AAC5BJ,WAAAA,cAAc7D,MAAMmD,SAAS/B;AAAAA,KACnC,CAACyC,YAAYzC,iBAAiBpB,MAAMmD,MAAM,CAAC;AAE9C,QAAMe,qBAAqBnC,0BAA0B;AAC/CoC,QAAAA,iBAAiB,CAAC,CAACL;AAEnBM,QAAAA,gBAAgBH,QACpB,OAAO;AAAA,IAAE,GAAGI;AAAAA,IAAwB,GAAGzC;AAAAA,EAAAA,IACvC,CAACA,kBAAkB,CACrB;AAEM0C,QAAAA,oBAAoBC,YACvBC,CAAc,cAAA;AACb,QACEpD,oBAAoB,QACpBA,oBAAoBqD,UACpBD,UAAUrB,SAAS/B,iBACnB;AACAqB,yBAAmBC,gBAAiBgC,OAAO;AAC3C7B,2BAAqBuB,cAAcO,YAAY;AAC/CtB,oBAAc,KAAK;AAAA,IAAA,OACd;AACLZ,yBAAmBC,gBAAiBkC,KAAK;AACzC/B,2BAAqB,EAAE;AACvBQ,oBAAc,IAAI;AAAA,IACpB;AAAA,EAAA,GAEF,CACEe,cAAcO,cACdvD,iBACAyB,sBACAJ,kBAAkB,CAEtB;AAUA,QAAMoC,YAAYN,YAChB,CAACO,QAAQC,OAAOC,QAAQ;;AACtB,UAAMC,aAAa,CACjB,GAAGjF,MAAMkF,MAAM,GAAGJ,MAAM,GACxB,GAAG9E,MAAMkF,MAAMJ,SAAS,CAAC,CAAC;AAE5BxC,aAAS2C,UAAU;AACnB/B,oBACE8B,MAAMC,WAAW9B,SAASF,eAAe,IAAIA,eAAe,IAAI,CAClE;AACAK,KAAAA,MAAAA,SAAS6B,YAAT7B,gBAAAA,IAAkB8B;AAClBd,sBAAkBW,UAAU;AAC5BnE,yCAAWiE,OAAO/E,MAAM8E,MAAM,GAAGA;AACjClE,yCAAWmE,OAAOE;AAClBxB,cAAU0B,UAAU;AAAA,EAAA,GAEtB,CAACvE,UAAUE,UAAUwD,mBAAmBhC,UAAUW,cAAcjD,KAAK,CACvE;AASA,QAAMqF,SAASd,YACb,CAACQ,OAAOO,QAAQ;AACdP,UAAMQ,eAAe;AACrB,QAAID,QAAQ,IAAI;AACd,YAAME,SAAqB;AAAA,QAAElF,OAAOgF;AAAAA,QAAKG,MAAM;AAAA,MAAA;AAC/C,YAAMR,aAAa,CAAC,GAAGjF,OAAOwF,MAAM;AACpClD,eAAS2C,UAAU;AACnBX,wBAAkBW,UAAU;AAC5BpE,qCAAQkE,OAAOS,QAAQP,WAAW9B,SAAS;AAC3CvC,2CAAWmE,OAAOE;AAAAA,IACpB;AAAA,EAAA,GAEF,CAACpE,OAAOD,UAAU0D,mBAAmBhC,UAAUtC,KAAK,CACtD;AAEA,QAAM0F,eACHhE,WAAW+C,UACV/C,WAAW,aACXC,kBAAkB8C,UACpB,CAACrB;AAEHuC,YAAU,MAAM;;AACd,QAAI,CAAClE,WAAW;AACd,YAAMmE,WAAUpC,MAAAA,6CAAc2B,YAAd3B,gBAAAA,IAAuBqC,SAAS5C;AAGhD6C,iBAAW,MAAM;AACf,cAAMC,YAAYvC,aAAa2B;AAC/B,YAAIa,MAAMD,SAAS;AAAG;AACtBA,kBAAUE,aAAaL,UACnBA,QAAQM,aACRH,UAAUI,sBAAAA,EAAwBC,QAAQ,IAC1CR,QAAQO,sBAAsB,EAAEC,QAAQ,IACxC;AAAA,SACH,EAAE;AAELR,yCAASR;AAAAA,IACX;AAAA,EAAA,GACC,CAAC3D,WAAWwB,YAAY,CAAC;AAE5B0C,YAAU,MAAM;AACV,QAAA,CAAClC,UAAU0B,SAAS;AACtBpC,kBAAY,EAAE;AACdG,sBAAgBlD,MAAMmD,MAAM;AAAA,IAC9B;AACAM,cAAU0B,UAAU;AAAA,EAAA,GACnB,CAACnF,KAAK,CAAC;AAEV,QAAMqG,YAAYC;AAKlB,QAAMC,aAAaA,MAAM;AACvB5C,qBAAiBwB,QAAQC;EAAM;AAG3BoB,QAAAA,iBAAiBjC,YACpBkC,CAAO,OAAA;;AAEN,UAAMC,SAASC,SAASC,eACtBC,MAAM3E,WAAW,kBAAkB,KAAK,EAC1C;AACA,WAAOuE,MAAM,QAAOC,MAAAA,iCAAQI,qBAAqB,UAA7BJ,gBAAAA,IAAqCD,MAAMC;AAAAA,EAAAA,GAEjE,CAACxE,SAAS,CACZ;AAKM6E,QAAAA,yBAAyBxC,YAAY,MAAM;AAC/C,QAAI8B,UAAUlB,SAAS;AACrBpB,0BAAoB,IAAI;AAAA,IAC1B;AAAA,EAAA,GACC,CAACsC,SAAS,CAAC;AAKRW,QAAAA,oBAAoBzC,YACvB0C,CAAQ,QAAA;;AACDC,UAAAA,mBAAmBnF,iEAAyBkF;AAC9CC,SAAAA,MAAAA,qDAAmB,OAAnBA,gBAAAA,IAAuB5G,OAAO;AAChCyD,0BAAoBmD,gBAAgB;AAAA,IAAA,OAC/B;AACkB;IACzB;AAAA,EAAA,GAEF,CAACH,wBAAwBhF,sBAAsB,CACjD;AAKMoF,QAAAA,4BAA4BA,CAACpC,OAAOqC,SAAS;AACjD/B,WAAON,OAAOqC,KAAKpH,SAASoH,KAAK9G,KAAK;AAG1B8G,gBAAAA,KAAKpH,SAASoH,KAAK9G,KAAK;AAEzB;AACY;EAAA;AAMzB,QAAM+G,sBAAuBtC,CAAU,UAAA;AACjCuC,QAAAA,MAAMvC,OAAO,KAAK,GAAG;AACA;AACZ;IACFuC,WAAAA,MAAMvC,OAAO,KAAK,GAAG;AACP;IACzB;AAAA,EAAA;AAMF,QAAMwC,kBAAkBhD,YACtB,CAACiD,GAAGC,UAAU;AACZ1E,gBAAY0E,KAAK;AAEjB,QAAIvD,oBAAoB;AAOtB8C,wBAAkBS,KAAK;AAAA,IACzB;AAAA,EAAA,GAEF,CAACvD,oBAAoB8C,iBAAiB,CACxC;AAKMU,QAAAA,wBAAwBnD,YAC3BQ,CAAU,UAAA;AACT,QAAI,CAACb,sBAAsBrC,YAAY8F,SAAS5C,MAAM6C,IAAI,GAAG;AAC3DvC,aAAON,OAAOjC,QAAQ;AAAA,IACxB;AAAA,KAEF,CAACuC,QAAQnB,oBAAoBrC,aAAaiB,QAAQ,CACpD;AAKM+E,QAAAA,mBAAmBtD,YACtBQ,CAAU,UAAA;;AACT,QAAIjC,aAAa,IAAI;AACnB,cAAQiC,MAAM6C,MAAI;AAAA,QAChB,KAAK;AACH1E,0BAAgBD,eAAe,IAAIA,eAAe,IAAI,CAAC;AACvD;AAAA,QACF,KAAK;AACHC,0BACED,eAAejD,MAAMmD,SAASF,eAAe,IAAIjD,MAAMmD,MACzD;AACA;AAAA,QACF,KAAK;AACH,cAAIS,eAAe;AACPX,sBAAAA,cAAc8B,OAAO,KAAK;AAAA,UAAA,OAC/B;AACW/E,4BAAAA,MAAMmD,SAAS,CAAC;AAAA,UAClC;AACA;AAAA,QACF,KAAK;AACH,cAAIS,eAAe;AACPX,sBAAAA,cAAc8B,OAAO,KAAK;AAAA,UACtC;AACA;AAAA,MAGJ;AAAA,IAAA,OACK;AACL,cAAQA,MAAM6C,MAAI;AAAA,QAChB,KAAK;AACY,WAAAE,MAAA,eAAA,CAAC,MAAD,gBAAAA,IAAI1C;AACnB;AAAA,MAGJ;AAAA,IACF;AAAA,EAAA,GAEF,CACEP,WACA2B,gBACA5C,eACAX,cACAH,UACA9C,MAAMmD,MAAM,CAEhB;AAKA,QAAM4E,qBAAqBxD,YACzB,CAACQ,OAAOiD,MAAM;AACFA,cAAAA,GAAGjD,OAAO,IAAI;AACxBtC,uBAAmBC,gBAAiBC,OAAO;AAAA,EAAA,GAE7C,CAACkC,WAAWpC,kBAAkB,CAChC;AAKMwF,QAAAA,0BAA0B1D,YAAY,MAAM;;AAChDjB,KAAAA,MAAAA,SAAS6B,YAAT7B,gBAAAA,IAAkB8B;AAClB8C,iBAAaxE,YAAYyB,OAAO;AAChCjC,oBAAgBlD,MAAMmD,MAAM;AAAA,EAAA,GAC3B,CAACnD,MAAMmD,MAAM,CAAC;AAEjB,QAAMgF,gBAAiBC,CAAQ,QAAA;AACjBjD,gBAAAA,UAAUW,WAAW,MAAM;AACrC,UAAIhE,cAAc;AAChBuD,eAAO+C,KAAKtF,QAAQ;AAAA,MACtB;AACA/B,uCAASqH,KAAKtF;AAAAA,OACb,GAAG;AAAA,EAAA;AAGR,QAAMuF,iBAAkBD,CAAQ,QAAA;AAC9BF,iBAAaxE,YAAYyB,OAAO;AAChCnE,uCAAUoH,KAAKtF;AAAAA,EAAQ;AAGzB,8BACGwF,mBAAiB;AAAA,IAChBxI;AAAAA,IACAC;AAAAA,IACAK;AAAAA,IACAD;AAAAA,IACAuB,QAAQc;AAAAA,IACRnC;AAAAA,IACAU,QAAQoH;AAAAA,IACRnH,SAASqH;AAAAA,IACTxI,WAAW0I,KACTC,iBAAiBC,MACjB7I,mCAAS6I,MACT5I,WACAO,YAAYmI,KAAKC,iBAAiBpI,UAAUR,mCAASQ,QAAQ,CAC/D;AAAA,IAAEyF,UAAA,EAEAzD,YAAYC,wCACXqG,sBAAoB;AAAA,MACnB7I,WAAW0I,KACTC,iBAAiBG,gBACjB/I,mCAAS+I,cACX;AAAA,MAAE9C,UAEDzD,CAAAA,YACCwG,oBAACC,aAAW;AAAA,QACVhJ,WAAW0I,KAAKC,iBAAiBlI,OAAOV,mCAASU,KAAK;AAAA,QACtDR,IAAI+G,MAAM/G,IAAI,OAAO;AAAA,QACrBgJ,SAASjC,MAAM3E,WAAW,OAAO;AAAA,QACjC5B,OAAOC;AAAAA,MAAAA,CACR,GAGF8B,kBACCuG,oBAACG,mBAAiB;AAAA,QAChBlJ,WAAW0I,KACTC,iBAAiB9H,aACjBd,mCAASc,WACX;AAAA,QACAZ,IAAI+G,MAAM3E,WAAW,aAAa;AAAA,QAAE2D,UAEnCnF;AAAAA,MAAAA,CACgB,CACpB;AAAA,IAAA,CACmB,GAGvBmD,cACC+E,oBAACI,mBAAiB;AAAA,MAChBlJ,IAAI+G,MAAM3E,WAAW,aAAa;AAAA,MAClCrC,WAAW0I,KACTC,iBAAiBS,kBACjBrJ,mCAASqJ,gBACX;AAAA,MACAC,WAAW/H;AAAAA,MACXgI,qBAAqBnJ,MAAMmD;AAAAA,MAC3BiG,iBAAiBhI;AAAAA,MAAgB,GAC7BI;AAAAA,IAAAA,CACL,GAGH6H,qBAACC,gBAAc;AAAA,MACbzJ,WAAW0I,KACTC,iBAAiBe,UACjB3J,mCAAS2J,UACT7D,gBAAgB6C,KAAKC,iBAAiBgB,OAAO5J,mCAAS4J,KAAK,GAC3DlI,aACEG,aACA8G,KAAKC,iBAAiBlH,WAAW1B,mCAAS0B,SAAS,GACrD0C,kBAAkBuE,KAAKC,iBAAiB9D,SAAS9E,mCAAS8E,OAAO,GACjE,CAACjD,aAAa8G,KAAKC,iBAAiBiB,YAAY7J,mCAAS6J,UAAU,CACrE;AAAA,MACAC,WAAWtJ;AAAAA,MACXuJ,aAAa,CAAClI;AAAAA,MACdmI,QAAQlE;AAAAA,MACRmE,YAAYvI,aAAaG;AAAAA,MACzBqI,UAAU9F;AAAAA,MACV+F,WAAW5J;AAAAA,MACX6J,WAAWnC;AAAAA,MACXoC,SAAShC;AAAAA,MACTiC,KAAK1G;AAAAA,MAAaqC,UAAA,CAEjB7F,SACCA,MAAMmK,IAAI,CAACC,GAAGpC,MAAM;AACZ1C,cAAAA,MACJ,OAAO8E,MAAM,WACT;AAAA,UACE9J,OAAO8J;AAAAA,UACP3E,MAAM;AAAA,QAER2E,IAAAA;AACA,cAAA;AAAA,UAAE9J;AAAAA,UAAOmF;AAAAA,UAAM,GAAG4E;AAAAA,QAAe/E,IAAAA;AACvC,mCACGgF,gBAAc;AAAA,UAEbC,UAAU;AAAA,UACV1K,WAAW0I,KACT,CAAC9G,aACC8G,KAAKC,iBAAiBiB,YAAY7J,mCAAS6J,UAAU,CACzD;AAAA,UACA7J,SAAS;AAAA,YACP4K,SAASjC,KACPC,iBAAiBiC,iBACjB7K,mCAAS6K,eACX;AAAA,YACAhC,MAAMF,KACJC,iBAAiBkC,cACjB9K,mCAAS8K,YACX;AAAA,UACF;AAAA,UACA5K,IAAK,OAAMkI;AAAAA,UACX2B,aAAa,CAAClI;AAAAA,UAAUoE,8BAEvB8E,WAAS;AAAA,YACRrK;AAAAA,YACAT,WAAW0I,KACTP,MAAM/E,gBACJsF,KAAKC,iBAAiBoC,aAAahL,mCAASgL,WAAW,CAC3D;AAAA,YACAhL,SAAS;AAAA,cACPiL,UAAUtC,KACRC,iBAAiBqC,UACjBjL,mCAASiL,QACX;AAAA,YACF;AAAA,YACApF;AAAAA,YAAW,GACN,EAAEtF,YAAYC,YAAYqF,SAAS,kBAAkB;AAAA,cACxD3E,UAAWiE,CAAAA,UAAUgD,mBAAmBhD,OAAOiD,CAAC;AAAA,YAClD;AAAA,YACA8C,mBAAmB;AAAA,cACjBP,UAAU;AAAA,YACZ;AAAA,YACAQ,WAAW/C,MAAM/E;AAAAA,YAAa,GAC1BoH;AAAAA,UAAAA,CACL;AAAA,QAAA,GAxCK,GAAE/E,IAAIhF,SAAS0H,GAyCP;AAAA,MAEnB,CAAA,GACF,EAAE5H,YAAYD,iCACZ6K,qBAAmB;AAAA,QAClBnL,WAAW0I,KACT,CAAC9G,aACC8G,KACEC,iBAAiBiB,YACjB7J,mCAAS6J,YACTzJ,MAAMmD,WAAW,KACfoF,KACEC,iBAAiByC,mBACjBrL,mCAASqL,iBACX,CACJ,CACJ;AAAA,QACArL,SAAS;AAAA,UACP6I,MAAMF,KACJC,iBAAiB0C,uBACjBtL,mCAASsL,qBACX;AAAA,UACAV,SAASjC,KACPC,iBAAiBiC,iBACjB7K,mCAAS6K,eACX;AAAA,QACF;AAAA,QACA3K,IAAK,OAAME,MAAMmD;AAAAA,QACjBwG,aAAa,CAAClI;AAAAA,QACd0J,gBAAgB,CAAC,CAACvH;AAAAA,QAAciC,8BAE/BuF,aAAW;AAAA,UACVpL,OAAO8C;AAAAA,UACPuI,cAAY;AAAA,UACZzK,UAAU2G;AAAAA,UACVyC,WAAWtC;AAAAA,UACXzG,aAAajB,MAAMmD,WAAW,IAAIlC,cAAc;AAAA,UAChDI;AAAAA,UACAxB,WAAW0I,KACT,CAAC9G,aACC8G,KAAKC,iBAAiBiB,YAAY7J,mCAAS6J,UAAU,CACzD;AAAA,UACA7J,SAAS;AAAA,YACP6I,MAAMF,KACJC,iBAAiB8C,cACjB1L,mCAAS0L,YACX;AAAA,YACA7D,OAAOc,KAAKC,iBAAiBf,OAAO7H,mCAAS6H,KAAK;AAAA,YAClD8D,sBAAsBhD,KACpBC,iBAAiBgD,yBACjB5L,mCAAS4L,uBACX;AAAA,YACAC,kBAAkBlD,KAChBC,iBAAiBkD,qBACjB9L,mCAAS8L,mBACX;AAAA,UACF;AAAA,UACAtL;AAAAA,UACAD,UAAUA,YAAYyD;AAAAA,UACtBrC,YAAY;AAAA,YACV2I,KAAKvG;AAAAA,YACL,cAAcnD;AAAAA,YACd,mBAAmBC;AAAAA,YACnB,oBACEE,mBAAmB,OACfA,kBACCD,eAAemG,MAAM3E,WAAW,aAAa,KAC9CuC;AAAAA,YAEN,GAAGlD;AAAAA,UACL;AAAA,UACA+B;AAAAA,UACAqG,aAAa,CAAClI;AAAAA,UAAU,GACpBO;AAAAA,QAAAA,CACL;AAAA,MAAA,CACkB,CACtB;AAAA,IAAA,CACa,GACfkC,sBACCmF,qBAAAsC,UAAA;AAAA,MAAA9F,UAAA,CACG1B,kBACCyE,oBAAA,OAAA;AAAA,QACEgD,MAAK;AAAA,QACL/L,WAAW0I,KACTC,iBAAiBqD,gBACjBjM,mCAASiM,cACX;AAAA,MAAA,CACD,GAEHjD,oBAACkD,mBAAiB;AAAA,QAChBhM,IAAI+G,MAAM3E,WAAW,aAAa;AAAA,QAClCtC,SAAS;AAAA,UACP6I,MAAMF,KACJC,iBAAiBuD,sBACjBnM,mCAASmM,oBACX;AAAA,UACAC,MAAMzD,KACJC,iBAAiByD,gBACjBrM,mCAASqM,cACX;AAAA,QACF;AAAA,QACAC,UAAU/H;AAAAA,QACVgI,WAAU3I,kDAAc2B,YAAd3B,mBAAuB4I;AAAAA,QACjCC,SAAStF;AAAAA,QACTiD,WAAW3C;AAAAA,QACXiF,sBAAsBnF;AAAAA,QACtBrD;AAAAA,MAAAA,CACD,CAAC;AAAA,IAAA,CACF,GAEH4B,gBACCkD,oBAAC2D,aAAW;AAAA,MACVzM,IAAI+G,MAAM3E,WAAW,OAAO;AAAA,MAC5BsK,eAAa;AAAA,MACb3M,WAAW0I,KAAKC,iBAAiBgB,OAAO5J,mCAAS4J,KAAK;AAAA,MAAE3D,UAEvDjD;AAAAA,IAAAA,CACU,CACd;AAAA,EAAA,CACgB;AAEvB;"}
1
+ {"version":3,"file":"TagsInput.js","sources":["../../../../src/components/TagsInput/TagsInput.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport isNil from \"lodash/isNil\";\n\nimport { InputBaseComponentProps as MuiInputBaseComponentProps } from \"@mui/material\";\n\nimport { theme } from \"@hitachivantara/uikit-styles\";\n\nimport { HvListContainer, HvListItem } from \"@core/components/ListContainer\";\nimport { baseInputClasses } from \"@core/components/BaseInput\";\nimport { HvInput } from \"@core/components/Input\";\nimport { HvTagSuggestion, HvValidationMessages } from \"@core/types/forms\";\nimport { HvBaseProps } from \"@core/types/generic\";\nimport { useControlled } from \"@core/hooks/useControlled\";\nimport { useUniqueId } from \"@core/hooks/useUniqueId\";\nimport { useIsMounted } from \"@core/hooks/useIsMounted\";\nimport { useDefaultProps } from \"@core/hooks/useDefaultProps\";\nimport { isKey } from \"@core/utils/keyboardUtils\";\nimport { setId } from \"@core/utils/setId\";\nimport validationStates from \"@core/components/Forms/FormElement/validationStates\";\nimport { DEFAULT_ERROR_MESSAGES } from \"@core/components/BaseInput/validations\";\nimport { HvTag, HvTagProps } from \"@core/components/Tag\";\nimport {\n HvCharCounter,\n HvCharCounterProps,\n HvFormElement,\n HvFormStatus,\n HvInfoMessage,\n HvLabel,\n HvSuggestions,\n HvWarningText,\n} from \"@core/components/Forms\";\nimport { ExtractNames } from \"@core/utils/classes\";\n\nimport { staticClasses, useClasses } from \"./TagsInput.styles\";\n\nexport { staticClasses as tagsInputClasses };\n\nexport type HvTagsInputClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvTagsInputProps\n extends HvBaseProps<\n HTMLElement,\n \"onChange\" | \"onBlur\" | \"onFocus\" | \"onKeyDown\" | \"color\" | \"defaultValue\"\n > {\n /** The form element name. */\n name?: string;\n /** The value of the form element. */\n value?: string[] | HvTagProps[];\n /** When uncontrolled, defines the initial input value. */\n defaultValue?: string[] | HvTagProps[];\n /**\n * The label of the form element.\n * The form element must be labeled for accessibility reasons.\n * If not provided, an aria-label or aria-labelledby must be inputted via inputProps.\n */\n label?: React.ReactNode;\n /** Provide additional descriptive text for the form element. */\n description?: React.ReactNode;\n /** Indicates that the form element is disabled. */\n disabled?: boolean;\n /** Indicates that the form element is not editable. */\n readOnly?: boolean;\n /** Indicates that the form element is required. */\n required?: boolean;\n /** The function that will be executed onChange. */\n onChange?: (\n event:\n | React.ChangeEvent<HTMLInputElement>\n | React.KeyboardEvent<HTMLInputElement>\n | React.MouseEvent<HTMLButtonElement>\n | React.MouseEvent<HTMLElement, MouseEvent>\n | React.KeyboardEventHandler<HTMLElement>,\n value: HvTagProps[]\n ) => void;\n /** The function that will be executed when the element is focused. */\n onFocus?: (event: React.FocusEvent<HTMLInputElement>, value: string) => void;\n /** The function that will be executed when the element is blurred. */\n onBlur?: (event: React.FocusEvent<HTMLInputElement>, value: string) => void;\n /** The function that will be executed when a tag is deleted. */\n onDelete?: (\n event:\n | React.ChangeEvent<HTMLInputElement>\n | React.KeyboardEvent<HTMLInputElement>\n | React.MouseEvent<HTMLButtonElement>\n | React.MouseEvent<HTMLElement, MouseEvent>\n | React.KeyboardEventHandler<HTMLElement>,\n value: HvTagProps,\n index: number\n ) => void;\n /** The function that will be executed when a tag is added. */\n onAdd?: (\n event:\n | React.ChangeEvent<HTMLInputElement>\n | React.KeyboardEvent<HTMLInputElement>\n | React.MouseEvent<HTMLButtonElement>\n | React.MouseEvent<HTMLElement, MouseEvent>\n | React.KeyboardEventHandler<HTMLElement>,\n value: HvTagProps,\n index: number\n ) => void;\n /** The placeholder value of the input. */\n placeholder?: string;\n /** If `true` the character counter isn't shown even if maxTagsQuantity is set. */\n hideCounter?: boolean;\n /** Text between the current char counter and max value. */\n middleCountLabel?: string;\n /** The maximum allowed length of the characters, if this value is null no check will be performed. */\n maxTagsQuantity?: number;\n /** Attributes applied to the input element. */\n inputProps?: MuiInputBaseComponentProps;\n /** If `true` it should autofocus. */\n autoFocus?: boolean;\n /** If `true` the component is resizable. */\n resizable?: boolean;\n /** Props passed to the HvCharCount component. */\n countCharProps?: Partial<HvCharCounterProps>;\n /** If `true` the component is in multiline mode. */\n multiline?: boolean;\n /** The status of the form element. */\n status?: HvFormStatus;\n /** The error message to show when `status` is \"invalid\". */\n statusMessage?: React.ReactNode;\n /** An Object containing the various texts associated with the input. */\n validationMessages?: HvValidationMessages;\n /** An array of strings that represent the character used to input a tag. This character is the string representation of the event.code from the input event. */\n commitTagOn?: string[];\n /** If `true` the tag will be committed when the blur event occurs. */\n commitOnBlur?: boolean;\n /** The function that will be executed to received an array of objects that has a label and id to create list of suggestion */\n suggestionListCallback?: (value: string) => HvTagSuggestion[] | null;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvTagsInputClasses;\n}\n\n/**\n * A tags input is a single or multiline control that allows the input of tags.\n */\nexport const HvTagsInput = (props: HvTagsInputProps) => {\n const {\n classes: classesProp,\n className,\n id,\n name,\n value: valueProp,\n defaultValue = [],\n readOnly = false,\n disabled = false,\n required = false,\n label: textAreaLabel,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n description,\n \"aria-describedby\": ariaDescribedBy,\n onChange,\n onAdd,\n onDelete,\n onBlur,\n onFocus,\n placeholder,\n hideCounter = false,\n middleCountLabel = \"/\",\n maxTagsQuantity,\n autoFocus = false,\n resizable = true,\n inputProps = {},\n countCharProps = {},\n multiline = false,\n status,\n statusMessage,\n validationMessages,\n commitTagOn = [\"Enter\"],\n commitOnBlur = false,\n suggestionListCallback,\n ...others\n } = useDefaultProps(\"HvTagsInput\", props);\n\n const { classes, cx, css } = useClasses(classesProp);\n\n const elementId = useUniqueId(id, \"hvTagsInput\");\n\n const hasLabel = textAreaLabel != null;\n const hasDescription = description != null;\n\n const [value, setValue] = useControlled(valueProp, defaultValue);\n\n const [validationState, setValidationState] = useControlled(\n status,\n validationStates.standBy\n );\n const [validationMessage, setValidationMessage] = useControlled(\n statusMessage,\n \"\"\n );\n\n const [tagInput, setTagInput] = useState(\"\");\n const [tagCursorPos, setTagCursorPos] = useState(value.length);\n const [stateValid, setStateValid] = useState(true);\n\n const inputRef = useRef<any>();\n const containerRef = useRef<any>();\n const skipReset = useRef(false);\n const blurTimeout = useRef<any>();\n const materialInputRef = useRef<any>(null);\n\n const isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;\n const hasCounter = maxTagsQuantity != null && !hideCounter;\n\n // suggestions related state\n const [suggestionValues, setSuggestionValues] = useState<\n HvTagSuggestion[] | null\n >(null);\n\n const isStateInvalid = useMemo(() => {\n return hasCounter && value.length > maxTagsQuantity;\n }, [hasCounter, maxTagsQuantity, value.length]);\n\n const canShowSuggestions = suggestionListCallback != null;\n const hasSuggestions = !!suggestionValues;\n\n const errorMessages = useMemo(\n () => ({ ...DEFAULT_ERROR_MESSAGES, ...validationMessages }),\n [validationMessages]\n );\n\n const performValidation = useCallback(\n (currValue) => {\n if (\n maxTagsQuantity !== null &&\n maxTagsQuantity !== undefined &&\n currValue.length > maxTagsQuantity\n ) {\n setValidationState(validationStates.invalid);\n setValidationMessage(errorMessages.maxCharError);\n setStateValid(false);\n } else {\n setValidationState(validationStates.valid);\n setValidationMessage(\"\");\n setStateValid(true);\n }\n },\n [\n errorMessages.maxCharError,\n maxTagsQuantity,\n setValidationMessage,\n setValidationState,\n ]\n );\n\n /**\n * Deletes a Tag from the array of tags and sets the new position for the tag cursor.\n * Also executes the user provided onDelete and onChange events.\n *\n * @param {number} tagPos - the position at which to remove the tag\n * @param {Event} event - the event associated with the delete\n * @param {boolean} end - whether or not to set the cursor at the end of the array\n */\n const deleteTag = useCallback(\n (tagPos, event, end) => {\n const newTagsArr = [\n ...value.slice(0, tagPos),\n ...value.slice(tagPos + 1),\n ];\n setValue(newTagsArr);\n setTagCursorPos(\n end ? newTagsArr.length : tagCursorPos > 0 ? tagCursorPos - 1 : 0\n );\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onDelete?.(event, value[tagPos], tagPos);\n onChange?.(event, newTagsArr);\n skipReset.current = true;\n },\n [onChange, onDelete, performValidation, setValue, tagCursorPos, value]\n );\n\n /**\n * Adds a Tag to the array of tags.\n * Also executes the user provided onAdd and onDelete events.\n *\n * @param {Event} event - whatever event triggered adding a tag\n * @param {string} tag - the string for the tag\n */\n const addTag = useCallback(\n (event, tag) => {\n event.preventDefault();\n if (tag !== \"\") {\n const newTag: HvTagProps = { label: tag, type: \"semantic\" };\n const newTagsArr = [...value, newTag];\n setValue(newTagsArr);\n performValidation(newTagsArr);\n onAdd?.(event, newTag, newTagsArr.length - 1);\n onChange?.(event, newTagsArr);\n }\n },\n [onAdd, onChange, performValidation, setValue, value]\n );\n\n const canShowError =\n (status !== undefined &&\n status === \"invalid\" &&\n statusMessage !== undefined) ||\n !stateValid;\n\n useEffect(() => {\n if (!multiline) {\n const element = containerRef?.current?.children[tagCursorPos];\n // this setTimeout is a workaround for Firefox not properly dealing\n // with setting the scrollLeft value.\n setTimeout(() => {\n const container = containerRef.current;\n if (isNil(container)) return;\n container.scrollLeft = element\n ? element.offsetLeft -\n container.getBoundingClientRect().width / 2 +\n element.getBoundingClientRect().width / 2\n : 0;\n }, 50);\n\n element?.focus();\n }\n }, [multiline, tagCursorPos]);\n\n useEffect(() => {\n if (!skipReset.current) {\n setTagInput(\"\");\n setTagCursorPos(value.length);\n }\n skipReset.current = false;\n }, [value]);\n\n const isMounted = useIsMounted();\n\n /**\n * Looks for the node that represent the input inside the material tree and focus it.\n */\n const focusInput = () => {\n materialInputRef.current.focus();\n };\n\n const getSuggestions = useCallback(\n (li) => {\n // TODO Replace with ref\n const listEl = document.getElementById(\n setId(elementId, \"suggestions-list\") || \"\"\n );\n return li != null ? listEl?.getElementsByTagName(\"li\")?.[li] : listEl;\n },\n [elementId]\n );\n\n /**\n * Clears the suggestion array.\n */\n const suggestionClearHandler = useCallback(() => {\n if (isMounted.current) {\n setSuggestionValues(null);\n }\n }, [isMounted]);\n\n /**\n * Fills of the suggestion array.\n */\n const suggestionHandler = useCallback(\n (val) => {\n const suggestionsArray = suggestionListCallback?.(val);\n if (suggestionsArray?.[0]?.label) {\n setSuggestionValues(suggestionsArray);\n } else {\n suggestionClearHandler();\n }\n },\n [suggestionClearHandler, suggestionListCallback]\n );\n\n /**\n * Executes the user callback adds the selection to the state and clears the suggestions.\n */\n const suggestionSelectedHandler = (event, item) => {\n addTag(event, item.value || item.label);\n\n // set the input value (only when value is uncontrolled)\n setTagInput(item.value || item.label);\n\n focusInput();\n suggestionClearHandler();\n };\n\n /**\n * Handler for the `onKeyDown` event on the suggestions component\n */\n const onSuggestionKeyDown = (event) => {\n if (isKey(event, \"Esc\")) {\n suggestionClearHandler();\n focusInput();\n } else if (isKey(event, \"Tab\")) {\n suggestionClearHandler();\n }\n };\n\n /**\n * Handler for the `onChange` event on the tag input\n */\n const onChangeHandler = useCallback(\n (_, input) => {\n setTagInput(input);\n\n if (canShowSuggestions) {\n // an edge case might be a controlled input whose onChange callback\n // doesn't change the value (or sets another): the suggestionListCallback\n // callback will still receive the original rejected value.\n // a refactor is needed so the suggestionListCallback might be called only\n // when the input is uncontrolled, providing a way to externally control\n // the suggestion values.\n suggestionHandler(input);\n }\n },\n [canShowSuggestions, suggestionHandler]\n );\n\n /**\n * Handler for the `onKeyDown` event on the form element\n */\n const onInputKeyDownHandler = useCallback(\n (event) => {\n if (!canShowSuggestions && commitTagOn.includes(event.code)) {\n addTag(event, tagInput);\n }\n },\n [addTag, canShowSuggestions, commitTagOn, tagInput]\n );\n\n /**\n * Handler for the `onKeyDown` event on the list container.\n */\n const onKeyDownHandler = useCallback(\n (event) => {\n if (tagInput === \"\") {\n switch (event.code) {\n case \"ArrowLeft\":\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n break;\n case \"ArrowRight\":\n setTagCursorPos(\n tagCursorPos < value.length ? tagCursorPos + 1 : value.length\n );\n break;\n case \"Backspace\":\n if (isTagSelected) {\n deleteTag(tagCursorPos, event, false);\n } else {\n setTagCursorPos(value.length - 1);\n }\n break;\n case \"Delete\":\n if (isTagSelected) {\n deleteTag(tagCursorPos, event, false);\n }\n break;\n default:\n break;\n }\n } else {\n switch (event.code) {\n case \"ArrowDown\":\n getSuggestions(0)?.focus();\n break;\n default:\n break;\n }\n }\n },\n [\n deleteTag,\n getSuggestions,\n isTagSelected,\n tagCursorPos,\n tagInput,\n value.length,\n ]\n );\n\n /**\n * Handler for the `onDelete` event on the tag component\n */\n const onDeleteTagHandler = useCallback(\n (event, i) => {\n deleteTag(i, event, true);\n setValidationState(validationStates.standBy);\n },\n [deleteTag, setValidationState]\n );\n\n /**\n * Handler for the `onClick` event on the list container\n */\n const onContainerClickHandler = useCallback(() => {\n inputRef.current?.focus();\n clearTimeout(blurTimeout.current);\n setTagCursorPos(value.length);\n }, [value.length]);\n\n const onBlurHandler = (evt) => {\n blurTimeout.current = setTimeout(() => {\n if (commitOnBlur) {\n addTag(evt, tagInput);\n }\n onBlur?.(evt, tagInput);\n }, 250);\n };\n\n const onFocusHandler = (evt) => {\n clearTimeout(blurTimeout.current);\n onFocus?.(evt, tagInput);\n };\n\n return (\n <HvFormElement\n id={id}\n name={name}\n disabled={disabled}\n readOnly={readOnly}\n status={validationState}\n required={required}\n onBlur={onBlurHandler}\n onFocus={onFocusHandler}\n className={cx(\n classes.root,\n { [classes.disabled]: disabled, [classes.readOnly]: readOnly },\n className\n )}\n >\n {(hasLabel || hasDescription) && (\n <div className={classes.labelContainer}>\n {hasLabel && (\n <HvLabel\n className={classes.label}\n id={setId(id, \"label\")}\n htmlFor={setId(elementId, \"input\")}\n label={textAreaLabel}\n />\n )}\n\n {hasDescription && (\n <HvInfoMessage\n className={classes.description}\n id={setId(elementId, \"description\")}\n >\n {description}\n </HvInfoMessage>\n )}\n </div>\n )}\n\n {hasCounter && (\n <HvCharCounter\n id={setId(elementId, \"charCounter\")}\n className={classes.characterCounter}\n separator={middleCountLabel}\n currentCharQuantity={value.length}\n maxCharQuantity={maxTagsQuantity}\n {...countCharProps}\n />\n )}\n\n <HvListContainer\n className={cx(classes.tagsList, {\n [classes.error]: canShowError,\n [classes.resizable]: resizable && multiline,\n [classes.invalid]: isStateInvalid,\n [classes.singleLine]: !multiline,\n })}\n onKeyDown={onKeyDownHandler}\n onClick={onContainerClickHandler}\n ref={containerRef}\n >\n {value &&\n value.map((t, i) => {\n const tag =\n typeof t === \"string\"\n ? {\n label: t,\n type: \"semantic\",\n }\n : t;\n const { label, type, ...otherProps } = tag;\n return (\n <HvListItem\n key={`${tag.label}-${i}`}\n tabIndex={-1}\n className={cx({ [classes.singleLine]: !multiline })}\n classes={{\n gutters: classes.listItemGutters,\n root: classes.listItemRoot,\n }}\n id={`tag-${i}`}\n >\n <HvTag\n label={label}\n className={cx({ [classes.tagSelected]: i === tagCursorPos })}\n classes={{\n chipRoot: classes.chipRoot,\n }}\n type={type}\n {...(!(readOnly || disabled || type === \"categorical\") && {\n onDelete: (event) => onDeleteTagHandler(event, i),\n })}\n deleteButtonProps={{\n tabIndex: -1,\n }}\n {...otherProps}\n />\n </HvListItem>\n );\n })}\n {!(disabled || readOnly) && (\n <HvListItem\n className={cx(\n {\n [classes.singleLine]: !multiline,\n [classes.tagInputRootEmpty]: value.length === 0,\n },\n !!isTagSelected &&\n css({\n [`& .${baseInputClasses.inputRoot}`]: {\n backgroundColor: theme.colors.atmo1,\n },\n })\n )}\n classes={{\n root: classes.tagInputContainerRoot,\n gutters: classes.listItemGutters,\n }}\n id={`tag-${value.length}`}\n >\n <HvInput\n value={tagInput}\n disableClear\n onChange={onChangeHandler}\n onKeyDown={onInputKeyDownHandler}\n placeholder={value.length === 0 ? placeholder : \"\"}\n autoFocus={autoFocus}\n className={cx({\n [classes.singleLine]: !multiline,\n })}\n classes={{\n root: classes.tagInputRoot,\n input: classes.input,\n inputBorderContainer: classes.tagInputBorderContainer,\n inputRootFocused: classes.tagInputRootFocused,\n }}\n disabled={disabled}\n readOnly={readOnly || isTagSelected}\n inputProps={{\n ref: materialInputRef,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\":\n ariaDescribedBy != null\n ? ariaDescribedBy\n : (description && setId(elementId, \"description\")) ||\n undefined,\n\n ...inputProps,\n }}\n inputRef={inputRef}\n {...others}\n />\n </HvListItem>\n )}\n </HvListContainer>\n {canShowSuggestions && (\n <>\n {hasSuggestions && (\n <div role=\"presentation\" className={classes.inputExtension} />\n )}\n <HvSuggestions\n id={setId(elementId, \"suggestions\")}\n classes={{\n root: classes.suggestionsContainer,\n list: classes.suggestionList,\n }}\n expanded={hasSuggestions}\n anchorEl={containerRef?.current?.parentElement}\n onClose={suggestionClearHandler}\n onKeyDown={onSuggestionKeyDown}\n onSuggestionSelected={suggestionSelectedHandler}\n suggestionValues={suggestionValues}\n />\n </>\n )}\n {canShowError && (\n <HvWarningText\n id={setId(elementId, \"error\")}\n disableBorder\n className={classes.error}\n >\n {validationMessage}\n </HvWarningText>\n )}\n </HvFormElement>\n );\n};\n"],"names":["HvTagsInput","props","classes","classesProp","className","id","name","value","valueProp","defaultValue","readOnly","disabled","required","label","textAreaLabel","ariaLabel","ariaLabelledBy","description","ariaDescribedBy","onChange","onAdd","onDelete","onBlur","onFocus","placeholder","hideCounter","middleCountLabel","maxTagsQuantity","autoFocus","resizable","inputProps","countCharProps","multiline","status","statusMessage","validationMessages","commitTagOn","commitOnBlur","suggestionListCallback","others","useDefaultProps","cx","css","useClasses","elementId","useUniqueId","hasLabel","hasDescription","setValue","useControlled","validationState","setValidationState","validationStates","standBy","validationMessage","setValidationMessage","tagInput","setTagInput","useState","tagCursorPos","setTagCursorPos","length","stateValid","setStateValid","inputRef","useRef","containerRef","skipReset","blurTimeout","materialInputRef","isTagSelected","hasCounter","suggestionValues","setSuggestionValues","isStateInvalid","useMemo","canShowSuggestions","hasSuggestions","errorMessages","DEFAULT_ERROR_MESSAGES","performValidation","useCallback","currValue","undefined","invalid","maxCharError","valid","deleteTag","tagPos","event","end","newTagsArr","slice","current","focus","addTag","tag","preventDefault","newTag","type","canShowError","useEffect","element","children","setTimeout","container","isNil","scrollLeft","offsetLeft","getBoundingClientRect","width","isMounted","useIsMounted","focusInput","getSuggestions","li","listEl","document","getElementById","setId","getElementsByTagName","suggestionClearHandler","suggestionHandler","val","suggestionsArray","suggestionSelectedHandler","item","onSuggestionKeyDown","isKey","onChangeHandler","_","input","onInputKeyDownHandler","includes","code","onKeyDownHandler","_a","onDeleteTagHandler","i","onContainerClickHandler","clearTimeout","onBlurHandler","evt","onFocusHandler","HvFormElement","root","labelContainer","_jsx","HvLabel","htmlFor","HvInfoMessage","HvCharCounter","characterCounter","separator","currentCharQuantity","maxCharQuantity","_jsxs","HvListContainer","tagsList","error","singleLine","onKeyDown","onClick","ref","map","t","otherProps","HvListItem","tabIndex","gutters","listItemGutters","listItemRoot","HvTag","tagSelected","chipRoot","deleteButtonProps","tagInputRootEmpty","baseInputClasses","inputRoot","backgroundColor","theme","colors","atmo1","tagInputContainerRoot","HvInput","disableClear","tagInputRoot","inputBorderContainer","tagInputBorderContainer","inputRootFocused","tagInputRootFocused","_Fragment","role","inputExtension","HvSuggestions","suggestionsContainer","list","suggestionList","expanded","anchorEl","parentElement","onClose","onSuggestionSelected","HvWarningText","disableBorder"],"mappings":"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"}