@hitachivantara/uikit-react-core 5.18.0 → 5.18.2

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 (194) hide show
  1. package/dist/cjs/components/Accordion/Accordion.cjs +1 -1
  2. package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -1
  3. package/dist/cjs/components/AppSwitcher/AppSwitcher.cjs +2 -5
  4. package/dist/cjs/components/AppSwitcher/AppSwitcher.cjs.map +1 -1
  5. package/dist/cjs/components/BaseInput/BaseInput.cjs +1 -1
  6. package/dist/cjs/components/BaseInput/BaseInput.cjs.map +1 -1
  7. package/dist/cjs/components/Box/Box.cjs +2 -2
  8. package/dist/cjs/components/Box/Box.cjs.map +1 -1
  9. package/dist/cjs/components/Button/Button.cjs +1 -1
  10. package/dist/cjs/components/Button/Button.cjs.map +1 -1
  11. package/dist/cjs/components/Button/Button.styles.cjs +6 -5
  12. package/dist/cjs/components/Button/Button.styles.cjs.map +1 -1
  13. package/dist/cjs/components/Carousel/Carousel.cjs +8 -8
  14. package/dist/cjs/components/Carousel/Carousel.cjs.map +1 -1
  15. package/dist/cjs/components/ColorPicker/Fields/Fields.cjs +8 -8
  16. package/dist/cjs/components/ColorPicker/Fields/Fields.cjs.map +1 -1
  17. package/dist/cjs/components/ColorPicker/Picker/Picker.cjs +2 -2
  18. package/dist/cjs/components/ColorPicker/Picker/Picker.cjs.map +1 -1
  19. package/dist/cjs/components/DatePicker/DatePicker.cjs +2 -2
  20. package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -1
  21. package/dist/cjs/components/Dialog/Dialog.cjs +1 -1
  22. package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
  23. package/dist/cjs/components/DotPagination/DotPagination.cjs +19 -13
  24. package/dist/cjs/components/DotPagination/DotPagination.cjs.map +1 -1
  25. package/dist/cjs/components/DotPagination/DotPagination.styles.cjs +20 -67
  26. package/dist/cjs/components/DotPagination/DotPagination.styles.cjs.map +1 -1
  27. package/dist/cjs/components/DropDownMenu/DropDownMenu.styles.cjs +1 -0
  28. package/dist/cjs/components/DropDownMenu/DropDownMenu.styles.cjs.map +1 -1
  29. package/dist/cjs/components/Dropdown/List/List.cjs +1 -1
  30. package/dist/cjs/components/Dropdown/List/List.cjs.map +1 -1
  31. package/dist/cjs/components/FilterGroup/RightPanel/RightPanel.cjs +1 -1
  32. package/dist/cjs/components/FilterGroup/RightPanel/RightPanel.cjs.map +1 -1
  33. package/dist/cjs/components/Forms/Suggestions/Suggestions.cjs +16 -13
  34. package/dist/cjs/components/Forms/Suggestions/Suggestions.cjs.map +1 -1
  35. package/dist/cjs/components/Header/Navigation/MenuItem/MenuItem.cjs +26 -15
  36. package/dist/cjs/components/Header/Navigation/MenuItem/MenuItem.cjs.map +1 -1
  37. package/dist/cjs/components/Input/Input.cjs +83 -75
  38. package/dist/cjs/components/Input/Input.cjs.map +1 -1
  39. package/dist/cjs/components/ListContainer/ListItem/ListItem.cjs +2 -2
  40. package/dist/cjs/components/ListContainer/ListItem/ListItem.cjs.map +1 -1
  41. package/dist/cjs/components/MultiButton/MultiButton.styles.cjs +10 -10
  42. package/dist/cjs/components/MultiButton/MultiButton.styles.cjs.map +1 -1
  43. package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
  44. package/dist/cjs/components/Pagination/Pagination.styles.cjs +1 -3
  45. package/dist/cjs/components/Pagination/Pagination.styles.cjs.map +1 -1
  46. package/dist/cjs/components/ScrollTo/useScrollTo.cjs.map +1 -1
  47. package/dist/cjs/components/Slider/Slider.cjs +1 -1
  48. package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
  49. package/dist/cjs/components/Snackbar/Snackbar.cjs +9 -14
  50. package/dist/cjs/components/Snackbar/Snackbar.cjs.map +1 -1
  51. package/dist/cjs/components/Snackbar/Snackbar.styles.cjs +38 -29
  52. package/dist/cjs/components/Snackbar/Snackbar.styles.cjs.map +1 -1
  53. package/dist/cjs/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.cjs +22 -18
  54. package/dist/cjs/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.cjs.map +1 -1
  55. package/dist/cjs/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.cjs +37 -89
  56. package/dist/cjs/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.cjs.map +1 -1
  57. package/dist/cjs/components/Snackbar/SnackbarProvider/SnackbarProvider.cjs +34 -64
  58. package/dist/cjs/components/Snackbar/SnackbarProvider/SnackbarProvider.cjs.map +1 -1
  59. package/dist/cjs/components/Snackbar/SnackbarProvider/SnackbarProvider.styles.cjs +28 -0
  60. package/dist/cjs/components/Snackbar/SnackbarProvider/SnackbarProvider.styles.cjs.map +1 -0
  61. package/dist/cjs/components/Table/TableCell/TableCell.cjs +6 -3
  62. package/dist/cjs/components/Table/TableCell/TableCell.cjs.map +1 -1
  63. package/dist/cjs/components/Table/TableRow/TableRow.cjs +9 -6
  64. package/dist/cjs/components/Table/TableRow/TableRow.cjs.map +1 -1
  65. package/dist/cjs/components/TagsInput/TagsInput.cjs +1 -1
  66. package/dist/cjs/components/TagsInput/TagsInput.cjs.map +1 -1
  67. package/dist/cjs/components/TextArea/TextArea.cjs +45 -43
  68. package/dist/cjs/components/TextArea/TextArea.cjs.map +1 -1
  69. package/dist/cjs/components/Typography/Typography.cjs +20 -133
  70. package/dist/cjs/components/Typography/Typography.cjs.map +1 -1
  71. package/dist/cjs/components/Typography/Typography.styles.cjs +107 -0
  72. package/dist/cjs/components/Typography/Typography.styles.cjs.map +1 -0
  73. package/dist/cjs/components/Typography/utils.cjs.map +1 -1
  74. package/dist/cjs/components/VerticalNavigation/Header/Header.cjs +1 -1
  75. package/dist/cjs/components/VerticalNavigation/Header/Header.cjs.map +1 -1
  76. package/dist/cjs/components/VerticalNavigation/Navigation/Navigation.cjs +7 -7
  77. package/dist/cjs/components/VerticalNavigation/Navigation/Navigation.cjs.map +1 -1
  78. package/dist/cjs/components/VerticalNavigation/TreeView/TreeViewItem.cjs +5 -5
  79. package/dist/cjs/components/VerticalNavigation/TreeView/TreeViewItem.cjs.map +1 -1
  80. package/dist/cjs/components/VerticalNavigation/TreeView/descendants.cjs +1 -4
  81. package/dist/cjs/components/VerticalNavigation/TreeView/descendants.cjs.map +1 -1
  82. package/dist/cjs/components/VerticalNavigation/VerticalNavigation.cjs +5 -5
  83. package/dist/cjs/components/VerticalNavigation/VerticalNavigation.cjs.map +1 -1
  84. package/dist/cjs/hooks/useWidth.cjs.map +1 -1
  85. package/dist/cjs/index.cjs +13 -10
  86. package/dist/cjs/index.cjs.map +1 -1
  87. package/dist/cjs/providers/ThemeProvider.cjs +20 -18
  88. package/dist/cjs/providers/ThemeProvider.cjs.map +1 -1
  89. package/dist/esm/components/Accordion/Accordion.js +1 -1
  90. package/dist/esm/components/Accordion/Accordion.js.map +1 -1
  91. package/dist/esm/components/AppSwitcher/AppSwitcher.js +2 -5
  92. package/dist/esm/components/AppSwitcher/AppSwitcher.js.map +1 -1
  93. package/dist/esm/components/BaseInput/BaseInput.js +1 -1
  94. package/dist/esm/components/BaseInput/BaseInput.js.map +1 -1
  95. package/dist/esm/components/Box/Box.js +2 -2
  96. package/dist/esm/components/Box/Box.js.map +1 -1
  97. package/dist/esm/components/Button/Button.js +1 -1
  98. package/dist/esm/components/Button/Button.js.map +1 -1
  99. package/dist/esm/components/Button/Button.styles.js +6 -5
  100. package/dist/esm/components/Button/Button.styles.js.map +1 -1
  101. package/dist/esm/components/Carousel/Carousel.js +9 -9
  102. package/dist/esm/components/Carousel/Carousel.js.map +1 -1
  103. package/dist/esm/components/ColorPicker/Fields/Fields.js +8 -8
  104. package/dist/esm/components/ColorPicker/Fields/Fields.js.map +1 -1
  105. package/dist/esm/components/ColorPicker/Picker/Picker.js +2 -2
  106. package/dist/esm/components/ColorPicker/Picker/Picker.js.map +1 -1
  107. package/dist/esm/components/DatePicker/DatePicker.js +2 -2
  108. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  109. package/dist/esm/components/Dialog/Dialog.js +1 -1
  110. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  111. package/dist/esm/components/DotPagination/DotPagination.js +22 -15
  112. package/dist/esm/components/DotPagination/DotPagination.js.map +1 -1
  113. package/dist/esm/components/DotPagination/DotPagination.styles.js +20 -65
  114. package/dist/esm/components/DotPagination/DotPagination.styles.js.map +1 -1
  115. package/dist/esm/components/DropDownMenu/DropDownMenu.styles.js +1 -0
  116. package/dist/esm/components/DropDownMenu/DropDownMenu.styles.js.map +1 -1
  117. package/dist/esm/components/Dropdown/List/List.js +1 -1
  118. package/dist/esm/components/Dropdown/List/List.js.map +1 -1
  119. package/dist/esm/components/FilterGroup/RightPanel/RightPanel.js +1 -1
  120. package/dist/esm/components/FilterGroup/RightPanel/RightPanel.js.map +1 -1
  121. package/dist/esm/components/Forms/Suggestions/Suggestions.js +17 -14
  122. package/dist/esm/components/Forms/Suggestions/Suggestions.js.map +1 -1
  123. package/dist/esm/components/Header/Navigation/MenuItem/MenuItem.js +26 -15
  124. package/dist/esm/components/Header/Navigation/MenuItem/MenuItem.js.map +1 -1
  125. package/dist/esm/components/Input/Input.js +84 -76
  126. package/dist/esm/components/Input/Input.js.map +1 -1
  127. package/dist/esm/components/ListContainer/ListItem/ListItem.js +2 -2
  128. package/dist/esm/components/ListContainer/ListItem/ListItem.js.map +1 -1
  129. package/dist/esm/components/MultiButton/MultiButton.styles.js +10 -10
  130. package/dist/esm/components/MultiButton/MultiButton.styles.js.map +1 -1
  131. package/dist/esm/components/Pagination/Pagination.js.map +1 -1
  132. package/dist/esm/components/Pagination/Pagination.styles.js +1 -3
  133. package/dist/esm/components/Pagination/Pagination.styles.js.map +1 -1
  134. package/dist/esm/components/ScrollTo/useScrollTo.js.map +1 -1
  135. package/dist/esm/components/Slider/Slider.js +2 -2
  136. package/dist/esm/components/Slider/Slider.js.map +1 -1
  137. package/dist/esm/components/Snackbar/Snackbar.js +12 -16
  138. package/dist/esm/components/Snackbar/Snackbar.js.map +1 -1
  139. package/dist/esm/components/Snackbar/Snackbar.styles.js +38 -26
  140. package/dist/esm/components/Snackbar/Snackbar.styles.js.map +1 -1
  141. package/dist/esm/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.js +21 -18
  142. package/dist/esm/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.js.map +1 -1
  143. package/dist/esm/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.js +37 -86
  144. package/dist/esm/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.js.map +1 -1
  145. package/dist/esm/components/Snackbar/SnackbarProvider/SnackbarProvider.js +35 -62
  146. package/dist/esm/components/Snackbar/SnackbarProvider/SnackbarProvider.js.map +1 -1
  147. package/dist/esm/components/Snackbar/SnackbarProvider/SnackbarProvider.styles.js +28 -0
  148. package/dist/esm/components/Snackbar/SnackbarProvider/SnackbarProvider.styles.js.map +1 -0
  149. package/dist/esm/components/Table/TableCell/TableCell.js +6 -3
  150. package/dist/esm/components/Table/TableCell/TableCell.js.map +1 -1
  151. package/dist/esm/components/Table/TableRow/TableRow.js +9 -6
  152. package/dist/esm/components/Table/TableRow/TableRow.js.map +1 -1
  153. package/dist/esm/components/TagsInput/TagsInput.js +1 -1
  154. package/dist/esm/components/TagsInput/TagsInput.js.map +1 -1
  155. package/dist/esm/components/TextArea/TextArea.js +46 -44
  156. package/dist/esm/components/TextArea/TextArea.js.map +1 -1
  157. package/dist/esm/components/Typography/Typography.js +23 -133
  158. package/dist/esm/components/Typography/Typography.js.map +1 -1
  159. package/dist/esm/components/Typography/Typography.styles.js +107 -0
  160. package/dist/esm/components/Typography/Typography.styles.js.map +1 -0
  161. package/dist/esm/components/Typography/utils.js.map +1 -1
  162. package/dist/esm/components/VerticalNavigation/Header/Header.js +1 -1
  163. package/dist/esm/components/VerticalNavigation/Header/Header.js.map +1 -1
  164. package/dist/esm/components/VerticalNavigation/Navigation/Navigation.js +7 -7
  165. package/dist/esm/components/VerticalNavigation/Navigation/Navigation.js.map +1 -1
  166. package/dist/esm/components/VerticalNavigation/TreeView/TreeViewItem.js +5 -5
  167. package/dist/esm/components/VerticalNavigation/TreeView/TreeViewItem.js.map +1 -1
  168. package/dist/esm/components/VerticalNavigation/TreeView/descendants.js +1 -4
  169. package/dist/esm/components/VerticalNavigation/TreeView/descendants.js.map +1 -1
  170. package/dist/esm/components/VerticalNavigation/VerticalNavigation.js +6 -6
  171. package/dist/esm/components/VerticalNavigation/VerticalNavigation.js.map +1 -1
  172. package/dist/esm/hooks/useWidth.js.map +1 -1
  173. package/dist/esm/index.js +270 -267
  174. package/dist/esm/index.js.map +1 -1
  175. package/dist/esm/providers/ThemeProvider.js +21 -19
  176. package/dist/esm/providers/ThemeProvider.js.map +1 -1
  177. package/dist/types/index.d.ts +265 -204
  178. package/package.json +3 -3
  179. package/dist/cjs/components/DotPagination/dotPaginationClasses.cjs +0 -8
  180. package/dist/cjs/components/DotPagination/dotPaginationClasses.cjs.map +0 -1
  181. package/dist/cjs/components/Snackbar/SnackbarContentWrapper/snackbarContentWrapperClasses.cjs +0 -8
  182. package/dist/cjs/components/Snackbar/SnackbarContentWrapper/snackbarContentWrapperClasses.cjs.map +0 -1
  183. package/dist/cjs/components/Snackbar/snackbarClasses.cjs +0 -8
  184. package/dist/cjs/components/Snackbar/snackbarClasses.cjs.map +0 -1
  185. package/dist/cjs/components/Typography/typographyClasses.cjs +0 -8
  186. package/dist/cjs/components/Typography/typographyClasses.cjs.map +0 -1
  187. package/dist/esm/components/DotPagination/dotPaginationClasses.js +0 -8
  188. package/dist/esm/components/DotPagination/dotPaginationClasses.js.map +0 -1
  189. package/dist/esm/components/Snackbar/SnackbarContentWrapper/snackbarContentWrapperClasses.js +0 -8
  190. package/dist/esm/components/Snackbar/SnackbarContentWrapper/snackbarContentWrapperClasses.js.map +0 -1
  191. package/dist/esm/components/Snackbar/snackbarClasses.js +0 -8
  192. package/dist/esm/components/Snackbar/snackbarClasses.js.map +0 -1
  193. package/dist/esm/components/Typography/typographyClasses.js +0 -8
  194. package/dist/esm/components/Typography/typographyClasses.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RightPanel.cjs","sources":["../../../../../src/components/FilterGroup/RightPanel/RightPanel.tsx"],"sourcesContent":["import {\n HvCheckBox,\n HvInput,\n HvList,\n HvPanel,\n HvTypography,\n} from \"@core/components\";\nimport { ExtractNames, setId } from \"@core/utils\";\nimport { useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { HvFilterGroupContext } from \"../FilterGroupContext\";\nimport { staticClasses, useClasses } from \"./RightPanel.styles\";\n\nexport { staticClasses as filterGroupRightPanelClasses };\n\nexport type HvFilterGroupRightPanelClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvFilterGroupRightPanelProps {\n id?: string;\n className?: string;\n labels?: {\n searchBoxPlaceholder?: string;\n selectAll?: string;\n multiSelectionConjunction?: string;\n };\n emptyElement?: React.ReactNode;\n classes?: HvFilterGroupRightPanelClasses;\n}\n\nexport const HvFilterGroupRightPanel = ({\n id,\n className,\n labels,\n emptyElement,\n classes: classesProp,\n}: HvFilterGroupRightPanelProps) => {\n const { classes } = useClasses(classesProp);\n const [searchStr, setSearchStr] = useState<string>(\"\");\n const [allSelected, setAllSelected] = useState<boolean>(false);\n const [anySelected, setAnySelected] = useState<boolean>(false);\n\n const {\n filterOptions,\n filterValues = [],\n setFilterValues,\n activeGroup,\n } = useContext(HvFilterGroupContext);\n\n const activeGroupOptions = useMemo(\n () => filterOptions[activeGroup]?.data.map((option) => option.id) || [],\n [filterOptions, activeGroup]\n );\n\n const activeFilterValues = useMemo(\n () =>\n filterValues[activeGroup]?.filter((value) =>\n activeGroupOptions.includes(value)\n ) || [],\n [filterValues, activeGroupOptions, activeGroup]\n );\n\n const listValues = useMemo(\n () =>\n filterOptions[activeGroup]?.data.map((option) => ({\n ...option,\n label: option.name,\n selected: filterValues[activeGroup]?.includes(option.id),\n isHidden:\n option.name.toLowerCase().indexOf(searchStr.toLowerCase()) < 0,\n })) || [],\n [filterOptions, filterValues, activeGroup, searchStr]\n );\n\n const updateSelectAll = useCallback(() => {\n const nbrSelected = activeFilterValues?.length;\n const hasSelection = nbrSelected > 0;\n const allSelect = nbrSelected === activeGroupOptions.length;\n\n setAnySelected(hasSelection);\n setAllSelected(hasSelection && allSelect);\n }, [activeFilterValues, activeGroupOptions]);\n\n useEffect(() => {\n updateSelectAll();\n }, [activeFilterValues, updateSelectAll]);\n\n useEffect(() => setSearchStr(\"\"), [activeGroup]);\n\n const onChangeHandler = (values) => {\n const newFilterValues = filterOptions.map((_, i) =>\n activeGroup === i\n ? values.filter((v) => v.selected).map((v) => v.id)\n : [...(filterValues[i] || [])]\n );\n setFilterValues(newFilterValues);\n };\n\n const handleSelectAll = useCallback(() => {\n const newFilterValues = cloneDeep(filterValues);\n newFilterValues[activeGroup] = anySelected ? [] : activeGroupOptions;\n\n setFilterValues(newFilterValues);\n }, [\n activeGroup,\n activeGroupOptions,\n anySelected,\n filterValues,\n setFilterValues,\n ]);\n\n /**\n * Create selectAll component.\n *\n * @returns {*}\n */\n const SelectAll = useCallback(() => {\n const nbrSelected = activeFilterValues?.length;\n\n const defaultLabel = (\n <HvTypography component=\"span\">\n {nbrSelected > 0 ? (\n <>\n <b>{nbrSelected}</b>\n {` ${labels?.multiSelectionConjunction} ${activeGroupOptions.length}`}\n </>\n ) : (\n <>\n <b>{labels?.selectAll}</b>\n {` (${activeGroupOptions.length})`}\n </>\n )}\n </HvTypography>\n );\n\n return (\n <div className={classes.selectAllContainer}>\n <HvCheckBox\n id={setId(id, \"select-all\")}\n label={defaultLabel}\n onChange={() => handleSelectAll()}\n className={classes.selectAll}\n indeterminate={anySelected && !allSelected}\n checked={allSelected}\n />\n </div>\n );\n }, [\n activeFilterValues?.length,\n activeGroupOptions.length,\n allSelected,\n anySelected,\n handleSelectAll,\n id,\n labels,\n ]);\n\n return (\n <HvPanel id={setId(id, \"rightPanel\")} className={className}>\n {listValues.length > 0 ? (\n <>\n <HvInput\n id={setId(id, \"search\")}\n classes={{\n root: classes.search,\n }}\n type=\"search\"\n placeholder={labels?.searchBoxPlaceholder}\n value={searchStr}\n onChange={(_, str) => setSearchStr(str)}\n />\n <SelectAll />\n <HvList\n key={activeGroup}\n id={setId(id, \"list\")}\n values={listValues}\n className={classes.list}\n multiSelect\n useSelector\n showSelectAll={false}\n onChange={onChangeHandler}\n selectable\n condensed\n hasTooltips\n />\n </>\n ) : (\n emptyElement\n )}\n </HvPanel>\n );\n};\n"],"names":["HvFilterGroupRightPanel","id","className","labels","emptyElement","classes","classesProp","useClasses","searchStr","setSearchStr","useState","allSelected","setAllSelected","anySelected","setAnySelected","filterOptions","filterValues","setFilterValues","activeGroup","useContext","HvFilterGroupContext","activeGroupOptions","useMemo","data","map","option","activeFilterValues","filter","value","includes","listValues","label","name","selected","isHidden","toLowerCase","indexOf","updateSelectAll","useCallback","nbrSelected","length","hasSelection","allSelect","useEffect","onChangeHandler","values","newFilterValues","_","i","v","handleSelectAll","cloneDeep","SelectAll","defaultLabel","HvTypography","component","children","_jsxs","_Fragment","_jsx","multiSelectionConjunction","selectAll","selectAllContainer","HvCheckBox","setId","onChange","indeterminate","checked","HvPanel","HvInput","root","search","type","placeholder","searchBoxPlaceholder","str","HvList","list","multiSelect","useSelector","showSelectAll","selectable","condensed","hasTooltips"],"mappings":"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"}
1
+ {"version":3,"file":"RightPanel.cjs","sources":["../../../../../src/components/FilterGroup/RightPanel/RightPanel.tsx"],"sourcesContent":["import {\n HvCheckBox,\n HvInput,\n HvList,\n HvPanel,\n HvTypography,\n} from \"@core/components\";\nimport { ExtractNames, setId } from \"@core/utils\";\nimport { useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { HvFilterGroupContext } from \"../FilterGroupContext\";\nimport { staticClasses, useClasses } from \"./RightPanel.styles\";\n\nexport { staticClasses as filterGroupRightPanelClasses };\n\nexport type HvFilterGroupRightPanelClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvFilterGroupRightPanelProps {\n id?: string;\n className?: string;\n labels?: {\n searchBoxPlaceholder?: string;\n selectAll?: string;\n multiSelectionConjunction?: string;\n };\n emptyElement?: React.ReactNode;\n classes?: HvFilterGroupRightPanelClasses;\n}\n\nexport const HvFilterGroupRightPanel = ({\n id,\n className,\n labels,\n emptyElement,\n classes: classesProp,\n}: HvFilterGroupRightPanelProps) => {\n const { classes } = useClasses(classesProp);\n const [searchStr, setSearchStr] = useState<string>(\"\");\n const [allSelected, setAllSelected] = useState<boolean>(false);\n const [anySelected, setAnySelected] = useState<boolean>(false);\n\n const {\n filterOptions,\n filterValues = [],\n setFilterValues,\n activeGroup,\n } = useContext(HvFilterGroupContext);\n\n const activeGroupOptions = useMemo(\n () => filterOptions[activeGroup]?.data.map((option) => option.id) || [],\n [filterOptions, activeGroup]\n );\n\n const activeFilterValues = useMemo(\n () =>\n filterValues[activeGroup]?.filter((value) =>\n activeGroupOptions.includes(value)\n ) || [],\n [filterValues, activeGroupOptions, activeGroup]\n );\n\n const listValues = useMemo(\n () =>\n filterOptions[activeGroup]?.data.map((option) => ({\n ...option,\n label: option.name,\n selected: filterValues[activeGroup]?.includes(option.id),\n isHidden:\n option.name.toLowerCase().indexOf(searchStr.toLowerCase()) < 0,\n })) || [],\n [filterOptions, filterValues, activeGroup, searchStr]\n );\n\n const updateSelectAll = useCallback(() => {\n const nbrSelected = activeFilterValues?.length;\n const hasSelection = nbrSelected > 0;\n const allSelect = nbrSelected === activeGroupOptions.length;\n\n setAnySelected(hasSelection);\n setAllSelected(hasSelection && allSelect);\n }, [activeFilterValues, activeGroupOptions]);\n\n useEffect(() => {\n updateSelectAll();\n }, [activeFilterValues, updateSelectAll]);\n\n useEffect(() => setSearchStr(\"\"), [activeGroup]);\n\n const onChangeHandler = (values) => {\n const newFilterValues = filterOptions.map((_, i) =>\n activeGroup === i\n ? values.filter((v) => v.selected).map((v) => v.id)\n : [...(filterValues[i] || [])]\n );\n setFilterValues(newFilterValues);\n };\n\n const handleSelectAll = useCallback(() => {\n const newFilterValues = cloneDeep(filterValues);\n newFilterValues[activeGroup] = anySelected ? [] : activeGroupOptions;\n\n setFilterValues(newFilterValues);\n }, [\n activeGroup,\n activeGroupOptions,\n anySelected,\n filterValues,\n setFilterValues,\n ]);\n\n /**\n * Create selectAll component.\n *\n * @returns {*}\n */\n const SelectAll = useCallback(() => {\n const nbrSelected = activeFilterValues?.length;\n\n const defaultLabel = (\n <HvTypography component=\"span\">\n {nbrSelected > 0 ? (\n <>\n <b>{nbrSelected}</b>\n {` ${labels?.multiSelectionConjunction} ${activeGroupOptions.length}`}\n </>\n ) : (\n <>\n <b>{labels?.selectAll}</b>\n {` (${activeGroupOptions.length})`}\n </>\n )}\n </HvTypography>\n );\n\n return (\n <div className={classes.selectAllContainer}>\n <HvCheckBox\n id={setId(id, \"select-all\")}\n label={defaultLabel}\n onChange={() => handleSelectAll()}\n className={classes.selectAll}\n indeterminate={anySelected && !allSelected}\n checked={allSelected}\n />\n </div>\n );\n }, [\n activeFilterValues?.length,\n activeGroupOptions.length,\n allSelected,\n anySelected,\n handleSelectAll,\n id,\n labels,\n classes?.selectAllContainer,\n classes?.selectAll,\n ]);\n\n return (\n <HvPanel id={setId(id, \"rightPanel\")} className={className}>\n {listValues.length > 0 ? (\n <>\n <HvInput\n id={setId(id, \"search\")}\n classes={{\n root: classes.search,\n }}\n type=\"search\"\n placeholder={labels?.searchBoxPlaceholder}\n value={searchStr}\n onChange={(_, str) => setSearchStr(str)}\n />\n <SelectAll />\n <HvList\n key={activeGroup}\n id={setId(id, \"list\")}\n values={listValues}\n className={classes.list}\n multiSelect\n useSelector\n showSelectAll={false}\n onChange={onChangeHandler}\n selectable\n condensed\n hasTooltips\n />\n </>\n ) : (\n emptyElement\n )}\n </HvPanel>\n );\n};\n"],"names":["HvFilterGroupRightPanel","id","className","labels","emptyElement","classes","classesProp","useClasses","searchStr","setSearchStr","useState","allSelected","setAllSelected","anySelected","setAnySelected","filterOptions","filterValues","setFilterValues","activeGroup","useContext","HvFilterGroupContext","activeGroupOptions","useMemo","data","map","option","activeFilterValues","filter","value","includes","listValues","label","name","selected","isHidden","toLowerCase","indexOf","updateSelectAll","useCallback","nbrSelected","length","hasSelection","allSelect","useEffect","onChangeHandler","values","newFilterValues","_","i","v","handleSelectAll","cloneDeep","SelectAll","defaultLabel","HvTypography","component","children","_jsxs","_Fragment","_jsx","multiSelectionConjunction","selectAll","selectAllContainer","HvCheckBox","setId","onChange","indeterminate","checked","HvPanel","HvInput","root","search","type","placeholder","searchBoxPlaceholder","str","HvList","list","multiSelect","useSelector","showSelectAll","selectable","condensed","hasTooltips"],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const clsx = require("clsx");
4
4
  const React = require("react");
5
+ const material = require("@mui/material");
5
6
  const Suggestions_styles = require("./Suggestions.styles.cjs");
6
7
  const suggestionsClasses = require("./suggestionsClasses.cjs");
7
8
  const jsxRuntime = require("@emotion/react/jsx-runtime");
@@ -9,22 +10,24 @@ const useClickOutside = require("../../../hooks/useClickOutside.cjs");
9
10
  const ListItem = require("../../ListContainer/ListItem/ListItem.cjs");
10
11
  const FormElementContext = require("../FormElement/context/FormElementContext.cjs");
11
12
  const setId = require("../../../utils/setId.cjs");
12
- const HvSuggestions = ({
13
- id,
14
- className,
15
- classes,
16
- expanded = false,
17
- anchorEl,
18
- suggestionValues = [],
19
- onClose,
20
- onSuggestionSelected,
21
- ...others
22
- }) => {
13
+ const HvSuggestions = React.forwardRef((props, extRef) => {
14
+ const {
15
+ id,
16
+ className,
17
+ classes,
18
+ expanded = false,
19
+ anchorEl,
20
+ suggestionValues = [],
21
+ onClose,
22
+ onSuggestionSelected,
23
+ ...others
24
+ } = props;
23
25
  const {
24
26
  elementId
25
27
  } = React.useContext(FormElementContext.HvFormElementContext);
26
28
  const localId = id ?? setId.setId(elementId, "suggestions");
27
29
  const ref = React.useRef(null);
30
+ const forkedRef = material.useForkRef(ref, extRef);
28
31
  const [isOpen, setIsOpen] = React.useState(expanded);
29
32
  useClickOutside.useClickOutside(ref, (event) => {
30
33
  setIsOpen(false);
@@ -35,7 +38,7 @@ const HvSuggestions = ({
35
38
  }, [expanded]);
36
39
  return /* @__PURE__ */ jsxRuntime.jsx(Suggestions_styles.StyledRoot, {
37
40
  id: localId,
38
- ref,
41
+ ref: forkedRef,
39
42
  className: clsx.clsx(className, suggestionsClasses.default.root, classes == null ? void 0 : classes.root),
40
43
  ...others,
41
44
  children: /* @__PURE__ */ jsxRuntime.jsx(Suggestions_styles.StyledPopper, {
@@ -58,6 +61,6 @@ const HvSuggestions = ({
58
61
  })
59
62
  })
60
63
  });
61
- };
64
+ });
62
65
  exports.HvSuggestions = HvSuggestions;
63
66
  //# sourceMappingURL=Suggestions.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Suggestions.cjs","sources":["../../../../../src/components/Forms/Suggestions/Suggestions.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { HvBaseProps } from \"@core/types\";\nimport { setId } from \"@core/utils\";\nimport {\n StyledRoot,\n StyledSelectionList,\n StyledPopper,\n} from \"./Suggestions.styles\";\nimport { HvFormElementContext } from \"../FormElement\";\nimport { HvListItem } from \"../../ListContainer/ListItem\";\nimport { HvClickOutsideEvent, useClickOutside } from \"../../../hooks\";\nimport suggestionsClasses, { HvSuggestionsClasses } from \"./suggestionsClasses\";\n\nexport interface HvSuggestion {\n id?: string;\n label: React.ReactNode;\n value?: string;\n disabled?: boolean;\n}\n\nexport interface HvSuggestionsProps extends HvBaseProps {\n /** Whether suggestions is visible. */\n expanded?: boolean;\n /** The HTML element Suggestions attaches to. */\n anchorEl?: HTMLElement | null;\n /** Array of { id, label, ...others } values to display in the suggestion list */\n suggestionValues?: HvSuggestion[] | null;\n /** Function called when a suggestion is selected */\n onSuggestionSelected?: (event: React.MouseEvent, value: HvSuggestion) => void;\n /** Function called when suggestion list is closed */\n onClose?: (event: HvClickOutsideEvent) => void;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvSuggestionsClasses;\n}\n\nexport const HvSuggestions = ({\n id,\n className,\n classes,\n expanded = false,\n anchorEl,\n suggestionValues = [],\n onClose,\n onSuggestionSelected,\n ...others\n}: HvSuggestionsProps) => {\n const { elementId } = useContext(HvFormElementContext);\n const localId = id ?? setId(elementId, \"suggestions\");\n\n const ref = useRef<HTMLDivElement>(null);\n const [isOpen, setIsOpen] = useState<boolean>(expanded);\n\n useClickOutside(ref, (event: HvClickOutsideEvent) => {\n setIsOpen(false);\n onClose?.(event);\n });\n\n useEffect(() => {\n setIsOpen(expanded);\n }, [expanded]);\n\n return (\n <StyledRoot\n id={localId}\n ref={ref}\n className={clsx(className, suggestionsClasses.root, classes?.root)}\n {...others}\n >\n <StyledPopper\n open={isOpen}\n disablePortal\n anchorEl={anchorEl}\n className={clsx(suggestionsClasses.popper, classes?.popper)}\n >\n <StyledSelectionList\n className={clsx(suggestionsClasses.list, classes?.list)}\n id={setId(localId, \"list\")}\n onChange={onSuggestionSelected}\n >\n {suggestionValues?.map((item, i) => {\n const itemKey = item.id || setId(\"item\", i);\n\n return (\n <HvListItem\n key={itemKey}\n value={item}\n disabled={item.disabled || undefined}\n >\n {item.label}\n </HvListItem>\n );\n })}\n </StyledSelectionList>\n </StyledPopper>\n </StyledRoot>\n );\n};\n"],"names":["HvSuggestions","id","className","classes","expanded","anchorEl","suggestionValues","onClose","onSuggestionSelected","others","elementId","useContext","HvFormElementContext","localId","setId","ref","useRef","isOpen","setIsOpen","useState","event","useEffect","StyledRoot","clsx","suggestionsClasses","root","children","StyledPopper","open","disablePortal","popper","StyledSelectionList","list","onChange","map","item","i","itemKey","HvListItem","value","disabled","undefined","label"],"mappings":";;;;;;;;;;;AAoCO,MAAMA,gBAAgBA,CAAC;AAAA,EAC5BC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC,WAAW;AAAA,EACXC;AAAAA,EACAC,mBAAmB,CAAE;AAAA,EACrBC;AAAAA,EACAC;AAAAA,EACA,GAAGC;AACe,MAAM;AAClB,QAAA;AAAA,IAAEC;AAAAA,EAAAA,IAAcC,MAAAA,WAAWC,mBAAAA,oBAAoB;AACrD,QAAMC,UAAUZ,MAAMa,MAAMJ,MAAAA,WAAW,aAAa;AAE9CK,QAAAA,MAAMC,aAAuB,IAAI;AACvC,QAAM,CAACC,QAAQC,SAAS,IAAIC,eAAkBf,QAAQ;AAEtCW,kCAAAA,KAAK,CAACK,UAA+B;AACnDF,cAAU,KAAK;AACfX,uCAAUa;AAAAA,EAAK,CAChB;AAEDC,QAAAA,UAAU,MAAM;AACdH,cAAUd,QAAQ;AAAA,EAAA,GACjB,CAACA,QAAQ,CAAC;AAEb,wCACGkB,mBAAAA,YAAU;AAAA,IACTrB,IAAIY;AAAAA,IACJE;AAAAA,IACAb,WAAWqB,KAAKrB,KAAAA,WAAWsB,mBAAmBC,QAAAA,MAAMtB,mCAASsB,IAAI;AAAA,IAAE,GAC/DhB;AAAAA,IAAMiB,yCAETC,iCAAY;AAAA,MACXC,MAAMX;AAAAA,MACNY,eAAa;AAAA,MACbxB;AAAAA,MACAH,WAAWqB,KAAAA,KAAKC,mBAAAA,QAAmBM,QAAQ3B,mCAAS2B,MAAM;AAAA,MAAEJ,yCAE3DK,wCAAmB;AAAA,QAClB7B,WAAWqB,KAAAA,KAAKC,mBAAAA,QAAmBQ,MAAM7B,mCAAS6B,IAAI;AAAA,QACtD/B,IAAIa,MAAAA,MAAMD,SAAS,MAAM;AAAA,QACzBoB,UAAUzB;AAAAA,QAAqBkB,UAE9BpB,qDAAkB4B,IAAI,CAACC,MAAMC,MAAM;AAClC,gBAAMC,UAAUF,KAAKlC,MAAMa,MAAAA,MAAM,QAAQsB,CAAC;AAE1C,gDACGE,SAAAA,YAAU;AAAA,YAETC,OAAOJ;AAAAA,YACPK,UAAUL,KAAKK,YAAYC;AAAAA,YAAUf,UAEpCS,KAAKO;AAAAA,aAJDL,OAKK;AAAA,QAAA;AAAA,MAEf,CACkB;AAAA,IAAA,CACT;AAAA,EAAA,CACJ;AAEhB;;"}
1
+ {"version":3,"file":"Suggestions.cjs","sources":["../../../../../src/components/Forms/Suggestions/Suggestions.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport React, {\n forwardRef,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useForkRef } from \"@mui/material\";\nimport { HvBaseProps } from \"@core/types\";\nimport { setId } from \"@core/utils\";\nimport {\n StyledRoot,\n StyledSelectionList,\n StyledPopper,\n} from \"./Suggestions.styles\";\nimport { HvFormElementContext } from \"../FormElement\";\nimport { HvListItem } from \"../../ListContainer/ListItem\";\nimport { HvClickOutsideEvent, useClickOutside } from \"../../../hooks\";\nimport suggestionsClasses, { HvSuggestionsClasses } from \"./suggestionsClasses\";\n\nexport interface HvSuggestion {\n id?: string;\n label: React.ReactNode;\n value?: string;\n disabled?: boolean;\n}\n\nexport interface HvSuggestionsProps extends HvBaseProps {\n /** Whether suggestions is visible. */\n expanded?: boolean;\n /** The HTML element Suggestions attaches to. */\n anchorEl?: HTMLElement | null;\n /** Array of { id, label, ...others } values to display in the suggestion list */\n suggestionValues?: HvSuggestion[] | null;\n /** Function called when a suggestion is selected */\n onSuggestionSelected?: (event: React.MouseEvent, value: HvSuggestion) => void;\n /** Function called when suggestion list is closed */\n onClose?: (event: HvClickOutsideEvent) => void;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvSuggestionsClasses;\n}\n\nexport const HvSuggestions = forwardRef((props: HvSuggestionsProps, extRef) => {\n const {\n id,\n className,\n classes,\n expanded = false,\n anchorEl,\n suggestionValues = [],\n onClose,\n onSuggestionSelected,\n ...others\n } = props;\n const { elementId } = useContext(HvFormElementContext);\n const localId = id ?? setId(elementId, \"suggestions\");\n\n const ref = useRef<HTMLDivElement>(null);\n const forkedRef = useForkRef(ref, extRef);\n\n const [isOpen, setIsOpen] = useState(expanded);\n\n useClickOutside(ref, (event) => {\n setIsOpen(false);\n onClose?.(event);\n });\n\n useEffect(() => {\n setIsOpen(expanded);\n }, [expanded]);\n\n return (\n <StyledRoot\n id={localId}\n ref={forkedRef}\n className={clsx(className, suggestionsClasses.root, classes?.root)}\n {...others}\n >\n <StyledPopper\n open={isOpen}\n disablePortal\n anchorEl={anchorEl}\n className={clsx(suggestionsClasses.popper, classes?.popper)}\n >\n <StyledSelectionList\n className={clsx(suggestionsClasses.list, classes?.list)}\n id={setId(localId, \"list\")}\n onChange={onSuggestionSelected}\n >\n {suggestionValues?.map((item, i) => {\n const itemKey = item.id || setId(\"item\", i);\n\n return (\n <HvListItem\n key={itemKey}\n value={item}\n disabled={item.disabled || undefined}\n >\n {item.label}\n </HvListItem>\n );\n })}\n </StyledSelectionList>\n </StyledPopper>\n </StyledRoot>\n );\n});\n"],"names":["HvSuggestions","forwardRef","props","extRef","id","className","classes","expanded","anchorEl","suggestionValues","onClose","onSuggestionSelected","others","elementId","useContext","HvFormElementContext","localId","setId","ref","useRef","forkedRef","useForkRef","isOpen","setIsOpen","useState","useClickOutside","event","useEffect","StyledRoot","clsx","suggestionsClasses","root","children","StyledPopper","open","disablePortal","popper","StyledSelectionList","list","onChange","map","item","i","itemKey","HvListItem","value","disabled","undefined","label"],"mappings":";;;;;;;;;;;;AA2CO,MAAMA,gBAAgBC,MAAAA,WAAW,CAACC,OAA2BC,WAAW;AACvE,QAAA;AAAA,IACJC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC,WAAW;AAAA,IACXC;AAAAA,IACAC,mBAAmB,CAAE;AAAA,IACrBC;AAAAA,IACAC;AAAAA,IACA,GAAGC;AAAAA,EACDV,IAAAA;AACE,QAAA;AAAA,IAAEW;AAAAA,EAAAA,IAAcC,MAAAA,WAAWC,mBAAAA,oBAAoB;AACrD,QAAMC,UAAUZ,MAAMa,MAAMJ,MAAAA,WAAW,aAAa;AAE9CK,QAAAA,MAAMC,aAAuB,IAAI;AACjCC,QAAAA,YAAYC,SAAAA,WAAWH,KAAKf,MAAM;AAExC,QAAM,CAACmB,QAAQC,SAAS,IAAIC,eAASjB,QAAQ;AAE7CkB,kCAAgBP,KAAMQ,CAAU,UAAA;AAC9BH,cAAU,KAAK;AACfb,uCAAUgB;AAAAA,EAAK,CAChB;AAEDC,QAAAA,UAAU,MAAM;AACdJ,cAAUhB,QAAQ;AAAA,EAAA,GACjB,CAACA,QAAQ,CAAC;AAEb,wCACGqB,mBAAAA,YAAU;AAAA,IACTxB,IAAIY;AAAAA,IACJE,KAAKE;AAAAA,IACLf,WAAWwB,KAAKxB,KAAAA,WAAWyB,mBAAmBC,QAAAA,MAAMzB,mCAASyB,IAAI;AAAA,IAAE,GAC/DnB;AAAAA,IAAMoB,yCAETC,iCAAY;AAAA,MACXC,MAAMZ;AAAAA,MACNa,eAAa;AAAA,MACb3B;AAAAA,MACAH,WAAWwB,KAAAA,KAAKC,mBAAAA,QAAmBM,QAAQ9B,mCAAS8B,MAAM;AAAA,MAAEJ,yCAE3DK,wCAAmB;AAAA,QAClBhC,WAAWwB,KAAAA,KAAKC,mBAAAA,QAAmBQ,MAAMhC,mCAASgC,IAAI;AAAA,QACtDlC,IAAIa,MAAAA,MAAMD,SAAS,MAAM;AAAA,QACzBuB,UAAU5B;AAAAA,QAAqBqB,UAE9BvB,qDAAkB+B,IAAI,CAACC,MAAMC,MAAM;AAClC,gBAAMC,UAAUF,KAAKrC,MAAMa,MAAAA,MAAM,QAAQyB,CAAC;AAE1C,gDACGE,SAAAA,YAAU;AAAA,YAETC,OAAOJ;AAAAA,YACPK,UAAUL,KAAKK,YAAYC;AAAAA,YAAUf,UAEpCS,KAAKO;AAAAA,aAJDL,OAKK;AAAA,QAAA;AAAA,MAEf,CACkB;AAAA,IAAA,CACT;AAAA,EAAA,CACJ;AAEhB,CAAC;;"}
@@ -9,6 +9,25 @@ const MenuBar = require("../MenuBar/MenuBar.cjs");
9
9
  const Typography = require("../../../Typography/Typography.cjs");
10
10
  const keyCheck = require("../../../../utils/keyboardUtils/keyCheck.cjs");
11
11
  const keyboardCodes = require("../../../../utils/keyboardUtils/keyboardCodes.cjs");
12
+ const traverseItem = (node) => {
13
+ var _a;
14
+ let href;
15
+ let target;
16
+ if (node == null ? void 0 : node.href) {
17
+ href = node == null ? void 0 : node.href;
18
+ target = node == null ? void 0 : node.target;
19
+ } else if ((node == null ? void 0 : node.data) != null && ((_a = node == null ? void 0 : node.data) == null ? void 0 : _a.length) > 0) {
20
+ let i = 0;
21
+ while (href == null && i < node.data.length) {
22
+ traverseItem(node == null ? void 0 : node.data[i]);
23
+ i += 1;
24
+ }
25
+ }
26
+ return {
27
+ href,
28
+ target
29
+ };
30
+ };
12
31
  const HvMenuItem = ({
13
32
  id,
14
33
  item,
@@ -53,21 +72,13 @@ const HvMenuItem = ({
53
72
  });
54
73
  let itemHref = item == null ? void 0 : item.href;
55
74
  let itemTarget = item == null ? void 0 : item.target;
56
- if (itemHref == null) {
57
- let traversePreOrder = function(node) {
58
- var _a;
59
- if (node == null ? void 0 : node.href) {
60
- itemHref = node == null ? void 0 : node.href;
61
- itemTarget = node == null ? void 0 : node.target;
62
- } else if ((node == null ? void 0 : node.data) != null && ((_a = node == null ? void 0 : node.data) == null ? void 0 : _a.length) > 0) {
63
- let i = 0;
64
- while (itemHref == null && i < node.data.length) {
65
- traversePreOrder(node == null ? void 0 : node.data[i]);
66
- i += 1;
67
- }
68
- }
69
- };
70
- traversePreOrder(item);
75
+ if ((item == null ? void 0 : item.href) == null) {
76
+ const {
77
+ href,
78
+ target
79
+ } = traverseItem(item);
80
+ itemHref = href;
81
+ itemTarget = target;
71
82
  }
72
83
  return /* @__PURE__ */ jsxRuntime.jsxs(MenuItem_styles.MenuItemLi, {
73
84
  id,
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.cjs","sources":["../../../../../../src/components/Header/Navigation/MenuItem/MenuItem.tsx"],"sourcesContent":["import React, { useContext } from \"react\";\nimport { HvHeaderNavigationItemProp, HvTypography } from \"@core/components\";\nimport { HvBaseProps } from \"@core/types\";\nimport { isKeypress, keyboardCodes } from \"@core/utils\";\nimport { HvMenuBar } from \"../MenuBar\";\nimport { FocusContext } from \"../utils/FocusContext\";\nimport { SelectionContext } from \"../utils/SelectionContext\";\nimport { MenuItemLabel, MenuItemLi, MenuItemLink } from \"./MenuItem.styles\";\n\nexport interface MenuItemProps extends HvBaseProps<HTMLDivElement, \"onClick\"> {\n item: HvHeaderNavigationItemProp;\n type?: string;\n onClick?: (event: MouseEvent, selection: HvHeaderNavigationItemProp) => void;\n}\n\nexport const HvMenuItem = ({ id, item, type, onClick }: MenuItemProps) => {\n const selectionPath = useContext(SelectionContext);\n const { dispatch } = useContext(FocusContext);\n\n const { data } = item;\n const hasSubLevel = data && data.length;\n const isMenu = type === \"menu\";\n const isSelected = selectionPath?.[isMenu ? 1 : 0] === item.id;\n const isCurrent = isSelected\n ? selectionPath?.length > (isMenu ? 2 : 1)\n ? true\n : \"page\"\n : undefined;\n\n const actionHandler = (event) => {\n if (\n event.type === \"click\" ||\n isKeypress(event, keyboardCodes.Enter) ||\n isKeypress(event, keyboardCodes.SpaceBar)\n ) {\n if (event.type === \"click\") {\n event.currentTarget.blur();\n }\n onClick?.(event, item);\n }\n };\n\n const handleFocus = (event: React.FocusEvent) => {\n dispatch?.({ type: \"setItemFocused\", itemFocused: event.currentTarget });\n };\n\n const itemProps = {\n onClick: actionHandler,\n onKeyDown: actionHandler,\n onFocus: handleFocus,\n };\n\n const label = (\n <HvTypography\n component=\"span\"\n variant={isSelected ? \"label\" : \"body\"}\n data-text={item.label}\n >\n {item.label}\n </HvTypography>\n );\n\n let itemHref = item?.href;\n let itemTarget = item?.target;\n if (itemHref == null) {\n // apps should configure the href even on parent items without content\n // so the fallback logic is theirs, but if not we'll do our best to find a link\n // eslint-disable-next-line no-inner-declarations\n function traversePreOrder(node: HvHeaderNavigationItemProp) {\n if (node?.href) {\n itemHref = node?.href;\n itemTarget = node?.target;\n } else if (node?.data != null && node?.data?.length > 0) {\n let i = 0;\n while (itemHref == null && i < node.data.length) {\n traversePreOrder(node?.data[i]);\n i += 1;\n }\n }\n }\n\n traversePreOrder(item);\n }\n\n return (\n <MenuItemLi\n id={id}\n key={item.label}\n $selected={!!isSelected}\n $isMenu={isMenu}\n >\n {itemHref ? (\n <MenuItemLink\n href={itemHref}\n target={itemTarget}\n {...itemProps}\n $isSelected={isSelected}\n $isMenu={isMenu}\n aria-current={isCurrent}\n >\n {label}\n </MenuItemLink>\n ) : (\n // keeping this code path for backwards compatibility, but\n // shouldn't really be used as it's not accessible\n <MenuItemLabel\n role=\"button\"\n {...itemProps}\n tabIndex={0}\n $isSelected={isSelected}\n $isMenu={isMenu}\n aria-current={isCurrent}\n >\n {label}\n </MenuItemLabel>\n )}\n {hasSubLevel && <HvMenuBar data={data} onClick={onClick} type=\"menu\" />}\n </MenuItemLi>\n );\n};\n"],"names":["HvMenuItem","id","item","type","onClick","selectionPath","useContext","SelectionContext","dispatch","FocusContext","data","hasSubLevel","length","isMenu","isSelected","isCurrent","undefined","actionHandler","event","isKeypress","keyboardCodes","Enter","SpaceBar","currentTarget","blur","handleFocus","itemFocused","itemProps","onKeyDown","onFocus","label","HvTypography","component","variant","children","itemHref","href","itemTarget","target","traversePreOrder","node","i","MenuItemLi","$selected","$isMenu","_jsx","MenuItemLink","$isSelected","MenuItemLabel","role","tabIndex","HvMenuBar"],"mappings":";;;;;;;;;;;AAeO,MAAMA,aAAaA,CAAC;AAAA,EAAEC;AAAAA,EAAIC;AAAAA,EAAMC;AAAAA,EAAMC;AAAuB,MAAM;AAClEC,QAAAA,gBAAgBC,iBAAWC,iBAAAA,gBAAgB;AAC3C,QAAA;AAAA,IAAEC;AAAAA,EAAAA,IAAaF,MAAAA,WAAWG,aAAAA,YAAY;AAEtC,QAAA;AAAA,IAAEC;AAAAA,EAASR,IAAAA;AACXS,QAAAA,cAAcD,QAAQA,KAAKE;AACjC,QAAMC,SAASV,SAAS;AACxB,QAAMW,cAAaT,+CAAgBQ,SAAS,IAAI,QAAOX,KAAKD;AACtDc,QAAAA,YAAYD,cACdT,+CAAeO,WAAUC,SAAS,IAAI,KACpC,OACA,SACFG;AAEJ,QAAMC,gBAAiBC,CAAU,UAAA;AAC/B,QACEA,MAAMf,SAAS,WACfgB,SAAAA,WAAWD,OAAOE,cAAAA,cAAcC,KAAK,KACrCF,SAAAA,WAAWD,OAAOE,cAAcE,cAAAA,QAAQ,GACxC;AACIJ,UAAAA,MAAMf,SAAS,SAAS;AAC1Be,cAAMK,cAAcC;MACtB;AACApB,yCAAUc,OAAOhB;AAAAA,IACnB;AAAA,EAAA;AAGIuB,QAAAA,cAAcA,CAACP,UAA4B;AACpC,yCAAA;AAAA,MAAEf,MAAM;AAAA,MAAkBuB,aAAaR,MAAMK;AAAAA,IAAAA;AAAAA,EAAe;AAGzE,QAAMI,YAAY;AAAA,IAChBvB,SAASa;AAAAA,IACTW,WAAWX;AAAAA,IACXY,SAASJ;AAAAA,EAAAA;AAGLK,QAAAA,uCACHC,yBAAY;AAAA,IACXC,WAAU;AAAA,IACVC,SAASnB,aAAa,UAAU;AAAA,IAChC,aAAWZ,KAAK4B;AAAAA,IAAMI,UAErBhC,KAAK4B;AAAAA,EAAAA,CACM;AAGhB,MAAIK,WAAWjC,6BAAMkC;AACrB,MAAIC,aAAanC,6BAAMoC;AACvB,MAAIH,YAAY,MAAM;AAIXI,QAAAA,mBAAT,SAA0BC,MAAkC;;AAC1D,UAAIA,6BAAMJ,MAAM;AACdD,mBAAWK,6BAAMJ;AACjBC,qBAAaG,6BAAMF;AAAAA,MAAAA,YACVE,6BAAM9B,SAAQ,UAAQ8B,kCAAM9B,SAAN8B,mBAAY5B,UAAS,GAAG;AACvD,YAAI6B,IAAI;AACR,eAAON,YAAY,QAAQM,IAAID,KAAK9B,KAAKE,QAAQ;AAC9B4B,2BAAAA,6BAAM9B,KAAK+B,EAAE;AACzB,eAAA;AAAA,QACP;AAAA,MACF;AAAA,IAAA;AAGFF,qBAAiBrC,IAAI;AAAA,EACvB;AAEA,yCACGwC,gBAAAA,YAAU;AAAA,IACTzC;AAAAA,IAEA0C,WAAW,CAAC,CAAC7B;AAAAA,IACb8B,SAAS/B;AAAAA,IAAOqB,UAEfC,CAAAA,WACCU,2BAAAA,IAACC,8BAAY;AAAA,MACXV,MAAMD;AAAAA,MACNG,QAAQD;AAAAA,MAAW,GACfV;AAAAA,MACJoB,aAAajC;AAAAA,MACb8B,SAAS/B;AAAAA,MACT,gBAAcE;AAAAA,MAAUmB,UAEvBJ;AAAAA,IAAAA,CACW;AAAA;AAAA;AAAA,qCAIbkB,gBAAAA,eAAa;AAAA,QACZC,MAAK;AAAA,QAAQ,GACTtB;AAAAA,QACJuB,UAAU;AAAA,QACVH,aAAajC;AAAAA,QACb8B,SAAS/B;AAAAA,QACT,gBAAcE;AAAAA,QAAUmB,UAEvBJ;AAAAA,MAAAA,CACY;AAAA,OAEhBnB,8CAAgBwC,mBAAS;AAAA,MAACzC;AAAAA,MAAYN;AAAAA,MAAkBD,MAAK;AAAA,IAAA,CAAQ,CAAC;AAAA,EAAA,GA7BlED,KAAK4B,KA8BA;AAEhB;;"}
1
+ {"version":3,"file":"MenuItem.cjs","sources":["../../../../../../src/components/Header/Navigation/MenuItem/MenuItem.tsx"],"sourcesContent":["import React, { useContext } from \"react\";\nimport { HvHeaderNavigationItemProp, HvTypography } from \"@core/components\";\nimport { HvBaseProps } from \"@core/types\";\nimport { isKeypress, keyboardCodes } from \"@core/utils\";\nimport { HvMenuBar } from \"../MenuBar\";\nimport { FocusContext } from \"../utils/FocusContext\";\nimport { SelectionContext } from \"../utils/SelectionContext\";\nimport { MenuItemLabel, MenuItemLi, MenuItemLink } from \"./MenuItem.styles\";\n\nexport interface MenuItemProps extends HvBaseProps<HTMLDivElement, \"onClick\"> {\n item: HvHeaderNavigationItemProp;\n type?: string;\n onClick?: (event: MouseEvent, selection: HvHeaderNavigationItemProp) => void;\n}\n\n// Traverse the tree of items and return the first href it finds\nconst traverseItem = (node: HvHeaderNavigationItemProp) => {\n let href;\n let target;\n\n if (node?.href) {\n href = node?.href;\n target = node?.target;\n } else if (node?.data != null && node?.data?.length > 0) {\n let i = 0;\n while (href == null && i < node.data.length) {\n traverseItem(node?.data[i]);\n i += 1;\n }\n }\n\n return { href, target };\n};\n\nexport const HvMenuItem = ({ id, item, type, onClick }: MenuItemProps) => {\n const selectionPath = useContext(SelectionContext);\n const { dispatch } = useContext(FocusContext);\n\n const { data } = item;\n const hasSubLevel = data && data.length;\n const isMenu = type === \"menu\";\n const isSelected = selectionPath?.[isMenu ? 1 : 0] === item.id;\n const isCurrent = isSelected\n ? selectionPath?.length > (isMenu ? 2 : 1)\n ? true\n : \"page\"\n : undefined;\n\n const actionHandler = (event) => {\n if (\n event.type === \"click\" ||\n isKeypress(event, keyboardCodes.Enter) ||\n isKeypress(event, keyboardCodes.SpaceBar)\n ) {\n if (event.type === \"click\") {\n event.currentTarget.blur();\n }\n onClick?.(event, item);\n }\n };\n\n const handleFocus = (event: React.FocusEvent) => {\n dispatch?.({ type: \"setItemFocused\", itemFocused: event.currentTarget });\n };\n\n const itemProps = {\n onClick: actionHandler,\n onKeyDown: actionHandler,\n onFocus: handleFocus,\n };\n\n const label = (\n <HvTypography\n component=\"span\"\n variant={isSelected ? \"label\" : \"body\"}\n data-text={item.label}\n >\n {item.label}\n </HvTypography>\n );\n\n let itemHref = item?.href;\n let itemTarget = item?.target;\n\n // apps should configure the href even on parent items without content\n // so the fallback logic is theirs, but if not we'll do our best to find a link\n if (item?.href == null) {\n const { href, target } = traverseItem(item);\n itemHref = href;\n itemTarget = target;\n }\n\n return (\n <MenuItemLi\n id={id}\n key={item.label}\n $selected={!!isSelected}\n $isMenu={isMenu}\n >\n {itemHref ? (\n <MenuItemLink\n href={itemHref}\n target={itemTarget}\n {...itemProps}\n $isSelected={isSelected}\n $isMenu={isMenu}\n aria-current={isCurrent}\n >\n {label}\n </MenuItemLink>\n ) : (\n // keeping this code path for backwards compatibility, but\n // shouldn't really be used as it's not accessible\n <MenuItemLabel\n role=\"button\"\n {...itemProps}\n tabIndex={0}\n $isSelected={isSelected}\n $isMenu={isMenu}\n aria-current={isCurrent}\n >\n {label}\n </MenuItemLabel>\n )}\n {hasSubLevel && <HvMenuBar data={data} onClick={onClick} type=\"menu\" />}\n </MenuItemLi>\n );\n};\n"],"names":["traverseItem","node","href","target","data","length","i","HvMenuItem","id","item","type","onClick","selectionPath","useContext","SelectionContext","dispatch","FocusContext","hasSubLevel","isMenu","isSelected","isCurrent","undefined","actionHandler","event","isKeypress","keyboardCodes","Enter","SpaceBar","currentTarget","blur","handleFocus","itemFocused","itemProps","onKeyDown","onFocus","label","HvTypography","component","variant","children","itemHref","itemTarget","MenuItemLi","$selected","$isMenu","_jsx","MenuItemLink","$isSelected","MenuItemLabel","role","tabIndex","HvMenuBar"],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
+ var _a;
2
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
4
  const React = require("react");
5
+ const material = require("@mui/material");
4
6
  const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
5
7
  const Input_styles = require("./Input.styles.cjs");
6
8
  const validationStates = require("../Forms/FormElement/validationStates.cjs");
@@ -36,65 +38,80 @@ const getFocusedElement = (event) => browser.default("ie") ? document.activeElem
36
38
  function eventTargetIsInsideContainer(container, event) {
37
39
  return container != null && container.contains(getFocusedElement(event));
38
40
  }
39
- const HvInput = ({
40
- classes: classesProp,
41
- className,
42
- id,
43
- name,
44
- value: valueProp,
45
- defaultValue = "",
46
- required = false,
47
- readOnly = false,
48
- disabled = false,
49
- label,
50
- "aria-label": ariaLabel,
51
- "aria-labelledby": ariaLabelledBy,
52
- description,
53
- "aria-describedby": ariaDescribedBy,
54
- onChange,
55
- onEnter,
56
- status,
57
- statusMessage,
58
- "aria-errormessage": ariaErrorMessage,
59
- type = "text",
60
- placeholder,
61
- autoFocus = false,
62
- labels: labelsProp,
63
- validationMessages,
64
- disableClear = false,
65
- disableRevealPassword = false,
66
- disableSearchButton = false,
67
- endAdornment,
68
- maxCharQuantity,
69
- minCharQuantity,
70
- validation,
71
- showValidationIcon = false,
72
- suggestionListCallback,
73
- inputRef: inputRefProp,
74
- onBlur,
75
- onFocus,
76
- onKeyDown,
77
- inputProps = {},
78
- ...others
79
- }) => {
80
- var _a;
41
+ const setInputValue = (_a = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value")) == null ? void 0 : _a.set;
42
+ const changeInputValue = (input, value = "") => {
43
+ const event = new Event("input", {
44
+ bubbles: true
45
+ });
46
+ setInputValue == null ? void 0 : setInputValue.call(input, value);
47
+ input == null ? void 0 : input.dispatchEvent(event);
48
+ };
49
+ const HvInput = React.forwardRef((props, ref) => {
50
+ var _a2;
51
+ const {
52
+ classes: classesProp,
53
+ className,
54
+ id,
55
+ name,
56
+ value: valueProp,
57
+ defaultValue = "",
58
+ required = false,
59
+ readOnly = false,
60
+ disabled = false,
61
+ label,
62
+ "aria-label": ariaLabel,
63
+ "aria-labelledby": ariaLabelledBy,
64
+ description,
65
+ "aria-describedby": ariaDescribedBy,
66
+ onChange,
67
+ onEnter,
68
+ status,
69
+ statusMessage,
70
+ "aria-errormessage": ariaErrorMessage,
71
+ type = "text",
72
+ placeholder,
73
+ autoFocus = false,
74
+ labels: labelsProp,
75
+ validationMessages,
76
+ disableClear = false,
77
+ disableRevealPassword = false,
78
+ disableSearchButton = false,
79
+ endAdornment,
80
+ maxCharQuantity,
81
+ minCharQuantity,
82
+ validation,
83
+ showValidationIcon = false,
84
+ suggestionListCallback,
85
+ inputRef: inputRefProp,
86
+ onBlur,
87
+ onFocus,
88
+ onKeyDown,
89
+ inputProps = {},
90
+ ...others
91
+ } = props;
81
92
  const {
82
93
  classes,
83
94
  cx
84
95
  } = Input_styles.useClasses(classesProp);
85
96
  const labels = useLabels.useLabels(DEFAULT_LABELS, labelsProp);
86
97
  const elementId = useUniqueId.default(id, "hvinput");
87
- const inputRef = React.useRef(inputRefProp || null);
98
+ const inputRef = React.useRef(null);
99
+ const forkedRef = material.useForkRef(ref, inputRef, inputRefProp);
100
+ const suggestionsRef = React.useRef(null);
88
101
  const [focused, setFocused] = React.useState(false);
89
102
  const isDirty = React.useRef(false);
90
103
  const [value, setValue] = useControlled.useControlled(valueProp, defaultValue);
91
104
  const isEmptyValue = value == null || value === "";
92
105
  const [validationState, setValidationState] = useControlled.useControlled(status, validationStates.default.standBy);
93
106
  const [validationMessage, setValidationMessage] = useControlled.useControlled(statusMessage, "");
94
- const errorMessages = React.useMemo(() => ({
95
- ...validations.DEFAULT_ERROR_MESSAGES,
96
- ...validationMessages
97
- }), [validationMessages == null ? void 0 : validationMessages.error, validationMessages == null ? void 0 : validationMessages.requiredError, validationMessages == null ? void 0 : validationMessages.minCharError, validationMessages == null ? void 0 : validationMessages.maxCharError, validationMessages == null ? void 0 : validationMessages.typeMismatchError]);
107
+ const errorMessages = React.useMemo(
108
+ () => ({
109
+ ...validations.DEFAULT_ERROR_MESSAGES,
110
+ ...validationMessages
111
+ }),
112
+ // eslint-disable-next-line react-hooks/exhaustive-deps
113
+ [validationMessages == null ? void 0 : validationMessages.error, validationMessages == null ? void 0 : validationMessages.requiredError, validationMessages == null ? void 0 : validationMessages.minCharError, validationMessages == null ? void 0 : validationMessages.maxCharError, validationMessages == null ? void 0 : validationMessages.typeMismatchError]
114
+ );
98
115
  const validationType = React.useMemo(() => validations.computeValidationType(type), [type]);
99
116
  const performValidation = React.useCallback(() => {
100
117
  const inputValidity = validations.validateInput(inputRef.current, value, required, minCharQuantity, maxCharQuantity, validationType, validation);
@@ -117,16 +134,11 @@ const HvInput = ({
117
134
  const [suggestionValues, setSuggestionValues] = React.useState(null);
118
135
  const canShowSuggestions = suggestionListCallback != null;
119
136
  const hasSuggestions = !!suggestionValues;
120
- const materialInputRef = React.useRef(null);
121
- const suggestionRef = React.useRef(null);
122
- React.useEffect(() => {
123
- suggestionRef.current = document.getElementById(setId.setId(elementId, "suggestions") || "");
124
- }, [elementId]);
125
137
  const hasLabel = label != null;
126
138
  const hasDescription = description != null;
127
139
  const focusInput = () => {
128
- var _a2;
129
- (_a2 = materialInputRef.current) == null ? void 0 : _a2.focus();
140
+ var _a3;
141
+ (_a3 = inputRef.current) == null ? void 0 : _a3.focus();
130
142
  };
131
143
  const isMounted = useIsMounted.default();
132
144
  const suggestionClearHandler = () => {
@@ -135,9 +147,9 @@ const HvInput = ({
135
147
  }
136
148
  };
137
149
  const suggestionHandler = (val) => {
138
- var _a2;
150
+ var _a3;
139
151
  const suggestionsArray = suggestionListCallback == null ? void 0 : suggestionListCallback(val);
140
- if ((_a2 = suggestionsArray == null ? void 0 : suggestionsArray[0]) == null ? void 0 : _a2.label) {
152
+ if ((_a3 = suggestionsArray == null ? void 0 : suggestionsArray[0]) == null ? void 0 : _a3.label) {
141
153
  setSuggestionValues(suggestionsArray);
142
154
  } else {
143
155
  suggestionClearHandler();
@@ -145,8 +157,7 @@ const HvInput = ({
145
157
  };
146
158
  const suggestionSelectedHandler = (event, item) => {
147
159
  const newValue = item.value || item.label;
148
- setValue(newValue);
149
- onChange == null ? void 0 : onChange(event, newValue);
160
+ changeInputValue(inputRef.current, newValue);
150
161
  focusInput();
151
162
  suggestionClearHandler();
152
163
  if (type === "search") {
@@ -162,7 +173,7 @@ const HvInput = ({
162
173
  }
163
174
  };
164
175
  const onInputBlurHandler = (event) => {
165
- if (eventTargetIsInsideContainer(suggestionRef == null ? void 0 : suggestionRef.current, event))
176
+ if (eventTargetIsInsideContainer(suggestionsRef.current, event))
166
177
  return;
167
178
  setFocused(false);
168
179
  const inputValidity = performValidation();
@@ -174,9 +185,9 @@ const HvInput = ({
174
185
  onFocus == null ? void 0 : onFocus(event, value);
175
186
  };
176
187
  const getSuggestions = (li) => {
177
- var _a2;
188
+ var _a3;
178
189
  const listEl = document.getElementById(setId.setId(elementId, "suggestions-list") || "");
179
- return li != null ? (_a2 = listEl == null ? void 0 : listEl.getElementsByTagName("li")) == null ? void 0 : _a2[li] : listEl;
190
+ return li != null ? (_a3 = listEl == null ? void 0 : listEl.getElementsByTagName("li")) == null ? void 0 : _a3[li] : listEl;
180
191
  };
181
192
  const onSuggestionKeyDown = (event) => {
182
193
  if (keyCheck.isKeypress(event, keyboardCodes.keyboardCodes.Esc)) {
@@ -208,12 +219,11 @@ const HvInput = ({
208
219
  const showClear = !disabled && !readOnly && !disableClear && !isEmptyValue && (!hasOnEnter || type !== "search" || disableSearchButton || validationState !== validationStates.default.standBy);
209
220
  const showSearchIcon = type === "search" && !disableSearchButton;
210
221
  const showRevealPasswordButton = type === "password" && !disableRevealPassword;
211
- const handleClear = React.useCallback((event) => {
222
+ const handleClear = React.useCallback(() => {
212
223
  setValidationState(validationStates.default.standBy);
213
- setValue("");
214
- onChange == null ? void 0 : onChange(event, "");
224
+ changeInputValue(inputRef.current, "");
215
225
  setTimeout(focusInput);
216
- }, [onChange, setValidationState, setValue]);
226
+ }, [setValidationState]);
217
227
  const clearButton = React.useMemo(() => {
218
228
  if (!showClear) {
219
229
  return null;
@@ -230,7 +240,7 @@ const HvInput = ({
230
240
  icon: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.CloseXS, {})
231
241
  }
232
242
  );
233
- }, [showClear, classes.adornmentButton, classes.iconClear, showSearchIcon, handleClear, labels == null ? void 0 : labels.clearButtonLabel, elementId]);
243
+ }, [showClear, classes.adornmentButton, classes.iconClear, showSearchIcon, handleClear, labels == null ? void 0 : labels.clearButtonLabel, elementId, cx]);
234
244
  const handleSearch = React.useCallback((event) => {
235
245
  onEnter == null ? void 0 : onEnter(event, value);
236
246
  }, [onEnter, value]);
@@ -282,7 +292,7 @@ const HvInput = ({
282
292
  }, [showValidationIcon, validationState, classes.icon]);
283
293
  const customIconEl = React.useMemo(() => React.isValidElement(endAdornment) && React__default.default.cloneElement(endAdornment, {
284
294
  className: cx(endAdornment.props.className, classes.icon)
285
- }), [classes.icon, endAdornment]);
295
+ }), [classes.icon, endAdornment, cx]);
286
296
  const adornments = React.useMemo(() => {
287
297
  if (!clearButton && !revealPasswordButton && !searchButton && !validationIcon && !customIconEl)
288
298
  return null;
@@ -298,10 +308,7 @@ const HvInput = ({
298
308
  }
299
309
  performValidation();
300
310
  }, [focused, isEmptyValue, performValidation]);
301
- let errorMessageId;
302
- if (isStateInvalid) {
303
- errorMessageId = canShowError ? setId.setId(elementId, "error") : ariaErrorMessage;
304
- }
311
+ const errorMessageId = isStateInvalid ? canShowError ? setId.setId(elementId, "error") : ariaErrorMessage : void 0;
305
312
  return /* @__PURE__ */ jsxRuntime.jsxs(FormElement.HvFormElement, {
306
313
  id,
307
314
  name,
@@ -355,12 +362,12 @@ const HvInput = ({
355
362
  "aria-errormessage": errorMessageId,
356
363
  "aria-describedby": ariaDescribedBy != null ? ariaDescribedBy : description ? setId.setId(elementId, "description") : void 0,
357
364
  "aria-controls": canShowSuggestions ? setId.setId(elementId, "suggestions") : void 0,
358
- ref: materialInputRef,
365
+ ref: inputRef,
359
366
  // prevent browsers auto-fill/suggestions when we have our own
360
367
  autoComplete: canShowSuggestions ? "off" : void 0,
361
368
  ...inputProps
362
369
  },
363
- inputRef: inputRefProp || inputRef,
370
+ inputRef: forkedRef,
364
371
  endAdornment: adornments,
365
372
  ...others
366
373
  }), canShowSuggestions && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
@@ -368,13 +375,14 @@ const HvInput = ({
368
375
  role: "presentation",
369
376
  className: classes.inputExtension
370
377
  }), /* @__PURE__ */ jsxRuntime.jsx(Suggestions.HvSuggestions, {
378
+ ref: suggestionsRef,
371
379
  id: setId.setId(elementId, "suggestions"),
372
380
  classes: {
373
381
  root: classes.suggestionsContainer,
374
382
  list: classes.suggestionList
375
383
  },
376
384
  expanded: hasSuggestions,
377
- anchorEl: (_a = inputRef == null ? void 0 : inputRef.current) == null ? void 0 : _a.parentElement,
385
+ anchorEl: (_a2 = inputRef.current) == null ? void 0 : _a2.parentElement,
378
386
  onClose: suggestionClearHandler,
379
387
  onKeyDown: onSuggestionKeyDown,
380
388
  onSuggestionSelected: suggestionSelectedHandler,
@@ -387,7 +395,7 @@ const HvInput = ({
387
395
  children: validationMessage
388
396
  })]
389
397
  });
390
- };
398
+ });
391
399
  exports.inputClasses = Input_styles.staticClasses;
392
400
  exports.HvInput = HvInput;
393
401
  //# sourceMappingURL=Input.cjs.map