@hitachivantara/uikit-react-core 5.58.1 → 5.58.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Accordion/Accordion.cjs +1 -1
- package/dist/cjs/Accordion/Accordion.cjs.map +1 -1
- package/dist/cjs/AppSwitcher/Action/Action.cjs +1 -1
- package/dist/cjs/AppSwitcher/Action/Action.cjs.map +1 -1
- package/dist/cjs/Avatar/Avatar.cjs.map +1 -1
- package/dist/cjs/Badge/Badge.styles.cjs.map +1 -1
- package/dist/cjs/BaseCheckBox/BaseCheckBox.cjs.map +1 -1
- package/dist/cjs/BaseDropdown/BaseDropdown.cjs +2 -3
- package/dist/cjs/BaseDropdown/BaseDropdown.cjs.map +1 -1
- package/dist/cjs/BaseInput/BaseInput.styles.cjs.map +1 -1
- package/dist/cjs/BaseInput/validations.cjs.map +1 -1
- package/dist/cjs/BaseRadio/BaseRadio.cjs.map +1 -1
- package/dist/cjs/BaseSwitch/BaseSwitch.cjs.map +1 -1
- package/dist/cjs/BreadCrumb/BreadCrumb.cjs.map +1 -1
- package/dist/cjs/BreadCrumb/Page/Page.cjs.map +1 -1
- package/dist/cjs/BreadCrumb/utils.cjs.map +1 -1
- package/dist/cjs/Calendar/Calendar.cjs.map +1 -1
- package/dist/cjs/Calendar/SingleCalendar/CalendarCell.cjs.map +1 -1
- package/dist/cjs/Card/Media/Media.cjs.map +1 -1
- package/dist/cjs/Carousel/Carousel.cjs.map +1 -1
- package/dist/cjs/Carousel/CarouselControls.cjs.map +1 -1
- package/dist/cjs/Carousel/CarouselSlide/CarouselSlide.cjs.map +1 -1
- package/dist/cjs/Carousel/CarouselThumbnails.cjs.map +1 -1
- package/dist/cjs/CheckBox/CheckBox.cjs +1 -1
- package/dist/cjs/CheckBox/CheckBox.cjs.map +1 -1
- package/dist/cjs/CheckBoxGroup/CheckBoxGroup.cjs +1 -1
- package/dist/cjs/CheckBoxGroup/CheckBoxGroup.cjs.map +1 -1
- package/dist/cjs/ColorPicker/ColorPicker.cjs +1 -1
- package/dist/cjs/ColorPicker/ColorPicker.cjs.map +1 -1
- package/dist/cjs/Controls/Controls.cjs.map +1 -1
- package/dist/cjs/DatePicker/DatePicker.cjs +1 -1
- package/dist/cjs/DatePicker/DatePicker.cjs.map +1 -1
- package/dist/cjs/DropDownMenu/DropDownMenu.cjs +1 -1
- package/dist/cjs/DropDownMenu/DropDownMenu.cjs.map +1 -1
- package/dist/cjs/Dropdown/Dropdown.cjs +1 -1
- package/dist/cjs/Dropdown/Dropdown.cjs.map +1 -1
- package/dist/cjs/Dropdown/List/List.cjs.map +1 -1
- package/dist/cjs/FileUploader/DropZone/DropZone.cjs +1 -1
- package/dist/cjs/FileUploader/DropZone/DropZone.cjs.map +1 -1
- package/dist/cjs/FileUploader/DropZone/DropZone.styles.cjs.map +1 -1
- package/dist/cjs/FileUploader/FileList/FileList.cjs +1 -1
- package/dist/cjs/FileUploader/FileList/FileList.cjs.map +1 -1
- package/dist/cjs/FilterGroup/FilterGroup.cjs +1 -1
- package/dist/cjs/FilterGroup/FilterGroup.cjs.map +1 -1
- package/dist/cjs/Focus/Focus.cjs +1 -3
- package/dist/cjs/Focus/Focus.cjs.map +1 -1
- package/dist/cjs/Forms/Adornment/Adornment.cjs.map +1 -1
- package/dist/cjs/Forms/FormElement/FormElement.cjs +1 -1
- package/dist/cjs/Forms/FormElement/FormElement.cjs.map +1 -1
- package/dist/cjs/Forms/Suggestions/Suggestions.cjs.map +1 -1
- package/dist/cjs/Header/Navigation/MenuBar/MenuBar.cjs.map +1 -1
- package/dist/cjs/Header/Navigation/MenuItem/MenuItem.cjs.map +1 -1
- package/dist/cjs/Header/Navigation/Navigation.cjs.map +1 -1
- package/dist/cjs/Header/Navigation/utils/FocusContext.cjs.map +1 -1
- package/dist/cjs/InlineEditor/InlineEditor.cjs.map +1 -1
- package/dist/cjs/Input/Input.cjs +2 -4
- package/dist/cjs/Input/Input.cjs.map +1 -1
- package/dist/cjs/ListContainer/ListContainer.cjs +3 -5
- package/dist/cjs/ListContainer/ListContainer.cjs.map +1 -1
- package/dist/cjs/ListContainer/ListItem/ListItem.cjs +4 -6
- package/dist/cjs/ListContainer/ListItem/ListItem.cjs.map +1 -1
- package/dist/cjs/MultiButton/MultiButton.cjs +4 -6
- package/dist/cjs/MultiButton/MultiButton.cjs.map +1 -1
- package/dist/cjs/Pagination/Pagination.cjs.map +1 -1
- package/dist/cjs/Pagination/Pagination.styles.cjs.map +1 -1
- package/dist/cjs/Pagination/Select.cjs.map +1 -1
- package/dist/cjs/Radio/Radio.cjs +1 -1
- package/dist/cjs/Radio/Radio.cjs.map +1 -1
- package/dist/cjs/RadioGroup/RadioGroup.cjs +1 -1
- package/dist/cjs/RadioGroup/RadioGroup.cjs.map +1 -1
- package/dist/cjs/ScrollTo/Horizontal/ScrollToHorizontal.cjs +1 -1
- package/dist/cjs/ScrollTo/Horizontal/ScrollToHorizontal.cjs.map +1 -1
- package/dist/cjs/ScrollTo/Vertical/ScrollToVertical.cjs +1 -1
- package/dist/cjs/ScrollTo/Vertical/ScrollToVertical.cjs.map +1 -1
- package/dist/cjs/Section/Section.cjs +1 -1
- package/dist/cjs/Section/Section.cjs.map +1 -1
- package/dist/cjs/Select/Select.cjs.map +1 -1
- package/dist/cjs/SelectionList/SelectionList.cjs +5 -7
- package/dist/cjs/SelectionList/SelectionList.cjs.map +1 -1
- package/dist/cjs/Skeleton/Skeleton.cjs +49 -0
- package/dist/cjs/Skeleton/Skeleton.cjs.map +1 -0
- package/dist/cjs/Skeleton/Skeleton.styles.cjs +81 -0
- package/dist/cjs/Skeleton/Skeleton.styles.cjs.map +1 -0
- package/dist/cjs/Slider/Slider.cjs +1 -1
- package/dist/cjs/Slider/Slider.cjs.map +1 -1
- package/dist/cjs/Slider/Slider.styles.cjs.map +1 -1
- package/dist/cjs/Slider/utils.cjs.map +1 -1
- package/dist/cjs/Snackbar/Snackbar.cjs.map +1 -1
- package/dist/cjs/SnackbarProvider/SnackbarProvider.cjs.map +1 -1
- package/dist/cjs/Stack/Stack.cjs +2 -3
- package/dist/cjs/Stack/Stack.cjs.map +1 -1
- package/dist/cjs/Switch/Switch.cjs +1 -1
- package/dist/cjs/Switch/Switch.cjs.map +1 -1
- package/dist/cjs/Tab/Tab.styles.cjs.map +1 -1
- package/dist/cjs/Table/Table.cjs.map +1 -1
- package/dist/cjs/Table/TableBody/TableBody.cjs.map +1 -1
- package/dist/cjs/Table/TableCell/TableCell.cjs.map +1 -1
- package/dist/cjs/Table/TableCell/TableCell.styles.cjs.map +1 -1
- package/dist/cjs/Table/TableHeader/TableHeader.cjs.map +1 -1
- package/dist/cjs/Table/hooks/useHeaderGroups.cjs.map +1 -1
- package/dist/cjs/Table/hooks/useResizeColumns.cjs.map +1 -1
- package/dist/cjs/Table/hooks/useRowExpand.cjs.map +1 -1
- package/dist/cjs/Table/hooks/useRowSelection.cjs.map +1 -1
- package/dist/cjs/Table/hooks/useSticky.cjs.map +1 -1
- package/dist/cjs/Table/hooks/useTableStyles.cjs.map +1 -1
- package/dist/cjs/TableSection/TableSection.cjs +1 -1
- package/dist/cjs/TableSection/TableSection.cjs.map +1 -1
- package/dist/cjs/Tag/Tag.cjs.map +1 -1
- package/dist/cjs/Tag/Tag.styles.cjs.map +1 -1
- package/dist/cjs/TagsInput/TagsInput.cjs +1 -1
- package/dist/cjs/TagsInput/TagsInput.cjs.map +1 -1
- package/dist/cjs/TextArea/TextArea.cjs +1 -1
- package/dist/cjs/TextArea/TextArea.cjs.map +1 -1
- package/dist/cjs/TimePicker/TimePicker.cjs +1 -1
- package/dist/cjs/TimePicker/TimePicker.cjs.map +1 -1
- package/dist/cjs/Tooltip/Tooltip.cjs.map +1 -1
- package/dist/cjs/TreeView/TreeItem/DefaultContent.cjs.map +1 -1
- package/dist/cjs/TreeView/TreeItem/TreeItem.cjs.map +1 -1
- package/dist/cjs/VerticalNavigation/Actions/Action.cjs.map +1 -1
- package/dist/cjs/VerticalNavigation/Header/Header.cjs.map +1 -1
- package/dist/cjs/VerticalNavigation/TreeView/TreeView.cjs +1 -1
- package/dist/cjs/VerticalNavigation/TreeView/TreeView.cjs.map +1 -1
- package/dist/cjs/VerticalNavigation/VerticalNavigation.cjs.map +1 -1
- package/dist/cjs/VerticalNavigation/VerticalNavigationContext.cjs.map +1 -1
- package/dist/cjs/hooks/useClickOutside.cjs.map +1 -1
- package/dist/cjs/hooks/useUniqueId.cjs.map +1 -1
- package/dist/cjs/index.cjs +4 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/providers/Provider.cjs +2 -1
- package/dist/cjs/providers/Provider.cjs.map +1 -1
- package/dist/cjs/utils/setId.cjs.map +1 -1
- package/dist/esm/Accordion/Accordion.js +1 -1
- package/dist/esm/Accordion/Accordion.js.map +1 -1
- package/dist/esm/AppSwitcher/Action/Action.js +1 -1
- package/dist/esm/AppSwitcher/Action/Action.js.map +1 -1
- package/dist/esm/Avatar/Avatar.js.map +1 -1
- package/dist/esm/Badge/Badge.styles.js.map +1 -1
- package/dist/esm/BaseCheckBox/BaseCheckBox.js.map +1 -1
- package/dist/esm/BaseDropdown/BaseDropdown.js +3 -3
- package/dist/esm/BaseDropdown/BaseDropdown.js.map +1 -1
- package/dist/esm/BaseInput/BaseInput.styles.js.map +1 -1
- package/dist/esm/BaseInput/validations.js.map +1 -1
- package/dist/esm/BaseRadio/BaseRadio.js.map +1 -1
- package/dist/esm/BaseSwitch/BaseSwitch.js.map +1 -1
- package/dist/esm/BreadCrumb/BreadCrumb.js.map +1 -1
- package/dist/esm/BreadCrumb/Page/Page.js.map +1 -1
- package/dist/esm/BreadCrumb/utils.js.map +1 -1
- package/dist/esm/Calendar/Calendar.js.map +1 -1
- package/dist/esm/Calendar/SingleCalendar/CalendarCell.js.map +1 -1
- package/dist/esm/Card/Media/Media.js.map +1 -1
- package/dist/esm/Carousel/Carousel.js.map +1 -1
- package/dist/esm/Carousel/CarouselControls.js.map +1 -1
- package/dist/esm/Carousel/CarouselSlide/CarouselSlide.js.map +1 -1
- package/dist/esm/Carousel/CarouselThumbnails.js.map +1 -1
- package/dist/esm/CheckBox/CheckBox.js +1 -1
- package/dist/esm/CheckBox/CheckBox.js.map +1 -1
- package/dist/esm/CheckBoxGroup/CheckBoxGroup.js +1 -1
- package/dist/esm/CheckBoxGroup/CheckBoxGroup.js.map +1 -1
- package/dist/esm/ColorPicker/ColorPicker.js +1 -1
- package/dist/esm/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/esm/Controls/Controls.js.map +1 -1
- package/dist/esm/DatePicker/DatePicker.js +1 -1
- package/dist/esm/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/DropDownMenu/DropDownMenu.js +1 -1
- package/dist/esm/DropDownMenu/DropDownMenu.js.map +1 -1
- package/dist/esm/Dropdown/Dropdown.js +1 -1
- package/dist/esm/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/Dropdown/List/List.js.map +1 -1
- package/dist/esm/FileUploader/DropZone/DropZone.js +1 -1
- package/dist/esm/FileUploader/DropZone/DropZone.js.map +1 -1
- package/dist/esm/FileUploader/DropZone/DropZone.styles.js.map +1 -1
- package/dist/esm/FileUploader/FileList/FileList.js +1 -1
- package/dist/esm/FileUploader/FileList/FileList.js.map +1 -1
- package/dist/esm/FilterGroup/FilterGroup.js +1 -1
- package/dist/esm/FilterGroup/FilterGroup.js.map +1 -1
- package/dist/esm/Focus/Focus.js +2 -2
- package/dist/esm/Focus/Focus.js.map +1 -1
- package/dist/esm/Forms/Adornment/Adornment.js.map +1 -1
- package/dist/esm/Forms/FormElement/FormElement.js +1 -1
- package/dist/esm/Forms/FormElement/FormElement.js.map +1 -1
- package/dist/esm/Forms/Suggestions/Suggestions.js.map +1 -1
- package/dist/esm/Header/Navigation/MenuBar/MenuBar.js.map +1 -1
- package/dist/esm/Header/Navigation/MenuItem/MenuItem.js.map +1 -1
- package/dist/esm/Header/Navigation/Navigation.js.map +1 -1
- package/dist/esm/Header/Navigation/utils/FocusContext.js.map +1 -1
- package/dist/esm/InlineEditor/InlineEditor.js.map +1 -1
- package/dist/esm/Input/Input.js +3 -3
- package/dist/esm/Input/Input.js.map +1 -1
- package/dist/esm/ListContainer/ListContainer.js +4 -4
- package/dist/esm/ListContainer/ListContainer.js.map +1 -1
- package/dist/esm/ListContainer/ListItem/ListItem.js +5 -5
- package/dist/esm/ListContainer/ListItem/ListItem.js.map +1 -1
- package/dist/esm/MultiButton/MultiButton.js +5 -5
- package/dist/esm/MultiButton/MultiButton.js.map +1 -1
- package/dist/esm/Pagination/Pagination.js.map +1 -1
- package/dist/esm/Pagination/Pagination.styles.js.map +1 -1
- package/dist/esm/Pagination/Select.js.map +1 -1
- package/dist/esm/Radio/Radio.js +1 -1
- package/dist/esm/Radio/Radio.js.map +1 -1
- package/dist/esm/RadioGroup/RadioGroup.js +1 -1
- package/dist/esm/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/esm/ScrollTo/Horizontal/ScrollToHorizontal.js +1 -1
- package/dist/esm/ScrollTo/Horizontal/ScrollToHorizontal.js.map +1 -1
- package/dist/esm/ScrollTo/Vertical/ScrollToVertical.js +1 -1
- package/dist/esm/ScrollTo/Vertical/ScrollToVertical.js.map +1 -1
- package/dist/esm/Section/Section.js +1 -1
- package/dist/esm/Section/Section.js.map +1 -1
- package/dist/esm/Select/Select.js.map +1 -1
- package/dist/esm/SelectionList/SelectionList.js +6 -6
- package/dist/esm/SelectionList/SelectionList.js.map +1 -1
- package/dist/esm/Skeleton/Skeleton.js +50 -0
- package/dist/esm/Skeleton/Skeleton.js.map +1 -0
- package/dist/esm/Skeleton/Skeleton.styles.js +81 -0
- package/dist/esm/Skeleton/Skeleton.styles.js.map +1 -0
- package/dist/esm/Slider/Slider.js +1 -1
- package/dist/esm/Slider/Slider.js.map +1 -1
- package/dist/esm/Slider/Slider.styles.js.map +1 -1
- package/dist/esm/Slider/utils.js.map +1 -1
- package/dist/esm/Snackbar/Snackbar.js.map +1 -1
- package/dist/esm/SnackbarProvider/SnackbarProvider.js.map +1 -1
- package/dist/esm/Stack/Stack.js +3 -3
- package/dist/esm/Stack/Stack.js.map +1 -1
- package/dist/esm/Switch/Switch.js +1 -1
- package/dist/esm/Switch/Switch.js.map +1 -1
- package/dist/esm/Tab/Tab.styles.js.map +1 -1
- package/dist/esm/Table/Table.js.map +1 -1
- package/dist/esm/Table/TableBody/TableBody.js.map +1 -1
- package/dist/esm/Table/TableCell/TableCell.js.map +1 -1
- package/dist/esm/Table/TableCell/TableCell.styles.js.map +1 -1
- package/dist/esm/Table/TableHeader/TableHeader.js.map +1 -1
- package/dist/esm/Table/hooks/useHeaderGroups.js.map +1 -1
- package/dist/esm/Table/hooks/useResizeColumns.js.map +1 -1
- package/dist/esm/Table/hooks/useRowExpand.js.map +1 -1
- package/dist/esm/Table/hooks/useRowSelection.js.map +1 -1
- package/dist/esm/Table/hooks/useSticky.js.map +1 -1
- package/dist/esm/Table/hooks/useTableStyles.js.map +1 -1
- package/dist/esm/TableSection/TableSection.js +1 -1
- package/dist/esm/TableSection/TableSection.js.map +1 -1
- package/dist/esm/Tag/Tag.js.map +1 -1
- package/dist/esm/Tag/Tag.styles.js.map +1 -1
- package/dist/esm/TagsInput/TagsInput.js +1 -1
- package/dist/esm/TagsInput/TagsInput.js.map +1 -1
- package/dist/esm/TextArea/TextArea.js +1 -1
- package/dist/esm/TextArea/TextArea.js.map +1 -1
- package/dist/esm/TimePicker/TimePicker.js +1 -1
- package/dist/esm/TimePicker/TimePicker.js.map +1 -1
- package/dist/esm/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/TreeView/TreeItem/DefaultContent.js.map +1 -1
- package/dist/esm/TreeView/TreeItem/TreeItem.js.map +1 -1
- package/dist/esm/VerticalNavigation/Actions/Action.js.map +1 -1
- package/dist/esm/VerticalNavigation/Header/Header.js.map +1 -1
- package/dist/esm/VerticalNavigation/TreeView/TreeView.js +1 -1
- package/dist/esm/VerticalNavigation/TreeView/TreeView.js.map +1 -1
- package/dist/esm/VerticalNavigation/VerticalNavigation.js.map +1 -1
- package/dist/esm/VerticalNavigation/VerticalNavigationContext.js.map +1 -1
- package/dist/esm/hooks/useClickOutside.js.map +1 -1
- package/dist/esm/hooks/useUniqueId.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/providers/Provider.js +2 -1
- package/dist/esm/providers/Provider.js.map +1 -1
- package/dist/esm/utils/setId.js.map +1 -1
- package/dist/types/index.d.ts +205 -178
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Action.cjs","sources":["../../../../src/VerticalNavigation/Actions/Action.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Action.cjs","sources":["../../../../src/VerticalNavigation/Actions/Action.tsx"],"sourcesContent":["import { useCallback, useContext } from \"react\";\n\nimport { isKey } from \"../../utils/keyboardUtils\";\nimport { setId } from \"../../utils/setId\";\n\nimport { ExtractNames } from \"../../utils/classes\";\nimport { HvTypography } from \"../../Typography\";\n\nimport { VerticalNavigationContext } from \"../VerticalNavigationContext\";\nimport { staticClasses, useClasses } from \"./Action.styles\";\n\nexport { staticClasses as actionClasses };\n\nexport type HvVerticalNavigationActionClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvVerticalNavigationActionProps {\n /**\n * Class names to be applied.\n */\n className?: string;\n /**\n * A Jss Object used to override or extend the styles applied to the component.\n */\n classes?: HvVerticalNavigationActionClasses;\n /**\n * Id to be applied to the action.\n */\n id?: string;\n /**\n * Visual label.\n */\n label?: string;\n /**\n * Icon.\n */\n icon?: React.ReactNode;\n /**\n * Callback called when clicked.\n */\n onClick?: React.MouseEventHandler<HTMLElement>;\n}\n\nexport const HvVerticalNavigationAction = ({\n className,\n classes: classesProp,\n id,\n label = \"\",\n icon,\n onClick,\n ...others\n}: HvVerticalNavigationActionProps) => {\n const { isOpen } = useContext(VerticalNavigationContext);\n\n const { classes, cx } = useClasses(classesProp);\n\n const handleKeyDown = useCallback(\n (event) => {\n if (\n onClick == null ||\n (!isKey(event, \"Enter\") && !isKey(event, \"Space\"))\n ) {\n return;\n }\n\n onClick(event);\n },\n [onClick]\n );\n\n return (\n <HvTypography\n id={setId(id, \"button\")}\n component=\"div\"\n role=\"button\"\n className={cx(\n classes.action,\n {\n [classes.noIcon]: !icon,\n [classes.minimized]: !isOpen,\n },\n className\n )}\n tabIndex={0}\n {...(!isOpen && { \"aria-label\": label })}\n onKeyDown={handleKeyDown}\n onClick={onClick}\n {...others}\n >\n {icon}\n {isOpen && label}\n </HvTypography>\n );\n};\n"],"names":["useContext","VerticalNavigationContext","useClasses","useCallback","isKey","jsxs","HvTypography","setId"],"mappings":";;;;;;;;;AA0CO,MAAM,6BAA6B,CAAC;AAAA,EACzC;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAuC;AACrC,QAAM,EAAE,OAAA,IAAWA,MAAA,WAAWC,0BAAyB,yBAAA;AAEvD,QAAM,EAAE,SAAS,GAAG,IAAIC,yBAAW,WAAW;AAE9C,QAAM,gBAAgBC,MAAA;AAAA,IACpB,CAAC,UAAU;AAEP,UAAA,WAAW,QACV,CAACC,cAAAA,MAAM,OAAO,OAAO,KAAK,CAACA,cAAA,MAAM,OAAO,OAAO,GAChD;AACA;AAAA,MACF;AAEA,cAAQ,KAAK;AAAA,IACf;AAAA,IACA,CAAC,OAAO;AAAA,EAAA;AAIR,SAAAC,2BAAA;AAAA,IAACC,WAAA;AAAA,IAAA;AAAA,MACC,IAAIC,MAAAA,MAAM,IAAI,QAAQ;AAAA,MACtB,WAAU;AAAA,MACV,MAAK;AAAA,MACL,WAAW;AAAA,QACT,QAAQ;AAAA,QACR;AAAA,UACE,CAAC,QAAQ,MAAM,GAAG,CAAC;AAAA,UACnB,CAAC,QAAQ,SAAS,GAAG,CAAC;AAAA,QACxB;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAU;AAAA,MACT,GAAI,CAAC,UAAU,EAAE,cAAc,MAAM;AAAA,MACtC,WAAW;AAAA,MACX;AAAA,MACC,GAAG;AAAA,MAEH,UAAA;AAAA,QAAA;AAAA,QACA,UAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGjB;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.cjs","sources":["../../../../src/VerticalNavigation/Header/Header.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Header.cjs","sources":["../../../../src/VerticalNavigation/Header/Header.tsx"],"sourcesContent":["import { useContext, useMemo } from \"react\";\nimport { Backwards, Forwards, Menu } from \"@hitachivantara/uikit-react-icons\";\n\nimport { ExtractNames } from \"../../utils/classes\";\nimport { HvTypography } from \"../../Typography\";\nimport { HvButton, HvButtonProps } from \"../../Button\";\n\nimport { VerticalNavigationContext } from \"../VerticalNavigationContext\";\nimport { staticClasses, useClasses } from \"./Header.styles\";\n\nexport { staticClasses as verticalNavigationHeaderClasses };\n\nexport type HvVerticalNavigationHeaderClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvVerticalNavigationHeaderProps {\n /**\n * Id to be applied to the root node.\n */\n id?: string;\n /**\n * The title text to show on Header.\n */\n title?: string;\n /**\n * Icon to show when Vertical Navigation is collapsed.\n */\n openIcon?: React.ReactNode;\n /**\n * Icon to show when Vertical Navigation is expanded.\n */\n closeIcon?: React.ReactNode;\n /**\n * Props for the collapse button.\n */\n collapseButtonProps?: HvButtonProps;\n /**\n * Props for the back button.\n */\n backButtonProps?: HvButtonProps;\n /**\n * Class names to be applied.\n */\n className?: string;\n /**\n * A Jss Object used to override or extend the styles applied to the component.\n */\n classes?: HvVerticalNavigationHeaderClasses;\n /**\n * Handler for the collapse button.\n */\n onCollapseButtonClick?: React.MouseEventHandler<HTMLElement>;\n}\n\nexport const HvVerticalNavigationHeader = ({\n title,\n openIcon: openIconProp,\n closeIcon: closeIconProp,\n collapseButtonProps,\n backButtonProps,\n className,\n classes: classesProp,\n onCollapseButtonClick,\n ...others\n}: HvVerticalNavigationHeaderProps) => {\n const {\n isOpen,\n useIcons,\n headerTitle,\n slider,\n navigateToParentHandler,\n parentItem,\n } = useContext(VerticalNavigationContext);\n\n const { classes, cx } = useClasses(classesProp);\n\n const openIcon = openIconProp ?? (!useIcons ? <Menu /> : <Forwards />);\n const closeIcon = closeIconProp ?? <Backwards />;\n\n const backButtonClickHandler = () => {\n if (navigateToParentHandler) navigateToParentHandler();\n };\n\n // whenever we're in a sublevel, the parentItem is always a single item.\n // In the first level it's always an array with the first level elements.\n const shouldShowTitle = useMemo(\n () => !slider || (slider && !Array.isArray(parentItem)),\n [parentItem, slider]\n );\n\n return shouldShowTitle ? (\n <div\n className={cx(classes.root, { [classes.minimized]: !isOpen }, className)}\n {...others}\n >\n {isOpen && headerTitle && slider && (\n <HvButton\n icon\n onClick={backButtonClickHandler}\n aria-label=\"Back\"\n {...backButtonProps}\n >\n <Backwards iconSize=\"XS\" />\n </HvButton>\n )}\n {isOpen && (\n <HvTypography variant={slider ? \"label\" : \"title3\"}>\n {headerTitle && slider ? headerTitle : title}\n </HvTypography>\n )}\n {onCollapseButtonClick && (\n <HvButton\n icon\n onClick={onCollapseButtonClick}\n className={classes.collapseButton}\n classes={{\n root: isOpen ? \"\" : classes.minimized,\n }}\n {...collapseButtonProps}\n >\n {isOpen ? closeIcon : openIcon}\n </HvButton>\n )}\n </div>\n ) : null;\n};\n"],"names":["useContext","VerticalNavigationContext","useClasses","Menu","Forwards","jsx","Backwards","useMemo","jsxs","HvButton","HvTypography"],"mappings":";;;;;;;;;AAqDO,MAAM,6BAA6B,CAAC;AAAA,EACzC;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,GAAG;AACL,MAAuC;AAC/B,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACEA,MAAAA,WAAWC,0BAAAA,yBAAyB;AAExC,QAAM,EAAE,SAAS,GAAG,IAAIC,yBAAW,WAAW;AAExC,QAAA,WAAW,iBAAiB,CAAC,0CAAYC,gBAAAA,MAAK,CAAA,CAAA,mCAAMC,0BAAS,CAAA,CAAA;AAC7D,QAAA,YAAY,iBAAiBC,2BAAA,IAACC,gBAAU,WAAA,CAAA,CAAA;AAE9C,QAAM,yBAAyB,MAAM;AAC/B,QAAA;AAAiD;EAAA;AAKvD,QAAM,kBAAkBC,MAAA;AAAA,IACtB,MAAM,CAAC,UAAW,UAAU,CAAC,MAAM,QAAQ,UAAU;AAAA,IACrD,CAAC,YAAY,MAAM;AAAA,EAAA;AAGrB,SAAO,kBACLC,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAG,QAAQ,MAAM,EAAE,CAAC,QAAQ,SAAS,GAAG,CAAC,OAAO,GAAG,SAAS;AAAA,MACtE,GAAG;AAAA,MAEH,UAAA;AAAA,QAAA,UAAU,eAAe,UACxBH,2BAAA;AAAA,UAACI,OAAA;AAAA,UAAA;AAAA,YACC,MAAI;AAAA,YACJ,SAAS;AAAA,YACT,cAAW;AAAA,YACV,GAAG;AAAA,YAEJ,UAAAJ,2BAAAA,IAACC,gBAAAA,WAAU,EAAA,UAAS,KAAK,CAAA;AAAA,UAAA;AAAA,QAC3B;AAAA,QAED,UACED,2BAAAA,IAAAK,WAAAA,cAAA,EAAa,SAAS,SAAS,UAAU,UACvC,UAAA,eAAe,SAAS,cAAc,MACzC,CAAA;AAAA,QAED,yBACCL,2BAAA;AAAA,UAACI,OAAA;AAAA,UAAA;AAAA,YACC,MAAI;AAAA,YACJ,SAAS;AAAA,YACT,WAAW,QAAQ;AAAA,YACnB,SAAS;AAAA,cACP,MAAM,SAAS,KAAK,QAAQ;AAAA,YAC9B;AAAA,YACC,GAAG;AAAA,YAEH,mBAAS,YAAY;AAAA,UAAA;AAAA,QACxB;AAAA,MAAA;AAAA,IAAA;AAAA,EAGF,IAAA;AACN;;;"}
|
|
@@ -48,7 +48,7 @@ const HvVerticalNavigationTreeView = React.forwardRef(
|
|
|
48
48
|
const { classes, cx } = TreeView_styles.useClasses(classesProp);
|
|
49
49
|
const treeviewMode = mode === "treeview";
|
|
50
50
|
const multiSelect = selectable && multiSelectProp;
|
|
51
|
-
const treeId = useUniqueId.useUniqueId(idProp
|
|
51
|
+
const treeId = useUniqueId.useUniqueId(idProp);
|
|
52
52
|
const treeRef = React.useRef(null);
|
|
53
53
|
const handleRef = useForkRef.useForkRef(treeRef, ref);
|
|
54
54
|
const [expanded, setExpandedState] = useControlled.useControlled(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeView.cjs","sources":["../../../../src/VerticalNavigation/TreeView/TreeView.tsx"],"sourcesContent":["import { forwardRef, useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { useControlled } from \"../../hooks/useControlled\";\nimport { useUniqueId } from \"../../hooks/useUniqueId\";\nimport { useForkRef } from \"../../hooks/useForkRef\";\n\nimport { ExtractNames } from \"../../utils/classes\";\n\nimport {\n NavigationMode,\n TreeViewControlContext,\n TreeViewStateContext,\n} from \"./TreeViewContext\";\nimport { DescendantProvider } from \"./descendants\";\nimport { staticClasses, useClasses } from \"./TreeView.styles\";\n\nexport { staticClasses as treeViewClasses };\n\nexport type HvVerticalNavigationTreeViewClasses = ExtractNames<\n typeof useClasses\n>;\n\nexport interface HvVerticalNavigationTreeViewProps {\n /**\n * Id to be applied to the root node.\n */\n id?: string;\n /**\n * Class names to be applied.\n */\n className?: string;\n /**\n * A Jss Object used to override or extend the styles applied to the component.\n */\n classes?: HvVerticalNavigationTreeViewClasses;\n /**\n * Modus operandi (role) of the widget instance.\n */\n mode?: NavigationMode;\n /**\n * Enables selection.\n * @default false\n */\n selectable?: boolean;\n /**\n * Enables the simultaneous selection of multiple items.\n * @default false\n */\n multiSelect?: boolean;\n /**\n * The selected nodes' ids.\n *\n * When `multiSelect` is true this takes an array of strings; when false (default) a string.\n */\n selected?: string[] | string;\n /**\n * When uncontrolled, defines the initial selected nodes' ids.\n *\n * When `multiSelect` is true this takes an array of strings; when false (default) a string.\n * @default []\n */\n defaultSelected?: string[] | string;\n /**\n * Can non-leaf nodes be collapsed / expanded.\n */\n collapsible?: boolean;\n /**\n * Callback fired when a tree item is selected.\n *\n * @param {object} event The event source of the callback.\n * @param {string} nodeId The id of the selected node.\n */\n onChange?: any;\n /**\n * Expanded nodes' ids.\n */\n expanded?: string[];\n /**\n * When uncontrolled, defines the initial expanded nodes' ids.\n * @default []\n */\n defaultExpanded?: string[];\n /**\n * Callback fired when tree items are expanded/collapsed.\n *\n * @param {object} event The event source of the callback.\n * @param {array} nodeIds The ids of the expanded nodes (old and new).\n */\n onToggle?: (event, nodeIds) => void;\n /**\n * If `true`, will allow focus on disabled items.\n * @default false\n */\n disabledItemsFocusable?: boolean;\n /**\n * @ignore\n */\n onFocus?: (event: React.FocusEvent<any>) => void;\n /**\n * @ignore\n */\n onBlur?: (event: any) => void;\n /**\n * @ignore\n */\n onKeyDown?: (event: KeyboardEvent) => void;\n /**\n * The content of the component.\n */\n children?: React.ReactNode;\n}\n\nfunction isPrintableCharacter(string) {\n return string && string.length === 1 && string.match(/\\S/);\n}\n\nfunction findNextFirstChar(firstChars, startIndex, char) {\n for (let i = startIndex; i < firstChars.length; i += 1) {\n if (char === firstChars[i]) {\n return i;\n }\n }\n return -1;\n}\n\nfunction noopSelection() {\n return false;\n}\n\nexport const HvVerticalNavigationTreeView = forwardRef(\n (props: HvVerticalNavigationTreeViewProps, ref) => {\n const {\n id: idProp,\n className,\n classes: classesProp,\n\n mode = \"treeview\",\n\n collapsible = false,\n expanded: expandedProp,\n defaultExpanded = [],\n onToggle,\n\n selectable = false,\n multiSelect: multiSelectProp = false,\n selected: selectedProp,\n defaultSelected = [],\n onChange,\n\n disabledItemsFocusable = false,\n\n onFocus,\n onBlur,\n onKeyDown,\n\n children,\n\n ...others\n } = props;\n\n const { classes, cx } = useClasses(classesProp);\n\n const treeviewMode = mode === \"treeview\";\n const multiSelect = selectable && multiSelectProp;\n\n const treeId = useUniqueId(idProp, \"hvtreeview\");\n const treeRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(treeRef, ref);\n\n const [expanded, setExpandedState] = useControlled(\n expandedProp,\n defaultExpanded\n );\n\n const [selected, setSelectedState] = useControlled(\n selectedProp,\n defaultSelected\n );\n\n const [focusedNodeId, setFocusedNodeId] = useState<string | null>(null);\n\n const nodeMap = useRef({});\n\n const firstCharMap = useRef({});\n\n /*\n * Status Helpers\n */\n const isExpanded = useCallback(\n (id) =>\n !collapsible ||\n (Array.isArray(expanded) ? expanded.indexOf(id) !== -1 : false),\n [collapsible, expanded]\n );\n\n const isExpandable = useCallback(\n (id) =>\n collapsible && nodeMap.current[id] && nodeMap.current[id].expandable,\n [collapsible]\n );\n\n const isSelected = useCallback(\n (id) =>\n selectable &&\n (Array.isArray(selected)\n ? selected.indexOf(id) !== -1\n : selected === id),\n [selectable, selected]\n );\n\n const isSelectable = useCallback(\n (id) =>\n selectable && nodeMap.current[id] && nodeMap.current[id].selectable,\n [selectable]\n );\n\n const isDisabled = useCallback((id) => {\n let node = nodeMap.current[id];\n\n // This can be called before the node has been added to the node map.\n if (!node) {\n return false;\n }\n\n if (node.disabled) {\n return true;\n }\n\n while (node.parentId != null) {\n node = nodeMap.current[node.parentId];\n if (node.disabled) {\n return true;\n }\n }\n\n return false;\n }, []);\n\n const isFocused = useCallback(\n (id) => focusedNodeId === id,\n [focusedNodeId]\n );\n\n const isChildSelected = useCallback(\n // the second part of the condition is to ensure that the id we're\n // looking at is actually of a child (ie, there's at least one \"-\")\n (id) => selected.startsWith(id) && selected.includes(\"-\"),\n [selected]\n );\n\n /*\n * Child Helpers\n */\n const getChildrenIds = (id: string | null) =>\n Object.keys(nodeMap.current)\n .map((key) => {\n return nodeMap.current[key];\n })\n .filter((node) => node.parentId === id)\n .sort((a, b) => a.index - b.index)\n .map((child) => child.id);\n\n const getNavigableChildrenIds = useCallback(\n (id: string | null) => {\n let childrenIds = getChildrenIds(id);\n\n if (!disabledItemsFocusable) {\n childrenIds = childrenIds.filter((node) => !isDisabled(node));\n }\n return childrenIds;\n },\n [disabledItemsFocusable, isDisabled]\n );\n\n /*\n * Node Helpers\n */\n const getNextNode = useCallback(\n (id: string) => {\n // If expanded get first child\n if (isExpanded(id) && getNavigableChildrenIds(id).length > 0) {\n return getNavigableChildrenIds(id)[0];\n }\n\n let node = nodeMap.current[id];\n while (node != null) {\n // Try to get next sibling\n const siblings = getNavigableChildrenIds(node.parentId);\n const nextSibling = siblings[siblings.indexOf(node.id) + 1];\n\n if (nextSibling) {\n return nextSibling;\n }\n\n // If the sibling does not exist, go up a level to the parent and try again.\n node = nodeMap.current[node.parentId];\n }\n\n return null;\n },\n [getNavigableChildrenIds, isExpanded]\n );\n\n const getPreviousNode = (id: string) => {\n const node = nodeMap.current[id];\n const siblings = getNavigableChildrenIds(node.parentId);\n const nodeIndex = siblings.indexOf(id);\n\n if (nodeIndex === 0) {\n return node.parentId;\n }\n\n let currentNode = siblings[nodeIndex - 1];\n while (\n isExpanded(currentNode) &&\n getNavigableChildrenIds(currentNode).length > 0\n ) {\n currentNode = getNavigableChildrenIds(currentNode).pop();\n }\n\n return currentNode;\n };\n\n const getLastNode = () => {\n let lastNode = getNavigableChildrenIds(null).pop();\n\n while (isExpanded(lastNode)) {\n lastNode = getNavigableChildrenIds(lastNode).pop();\n }\n return lastNode;\n };\n const getFirstNode = () => getNavigableChildrenIds(null)[0];\n const getParent = (id) => nodeMap.current[id].parentId;\n\n /**\n * This is used to determine the start and end of a selection range so\n * we can get the nodes between the two border nodes.\n *\n * It finds the nodes' common ancestor using\n * a naive implementation of a lowest common ancestor algorithm\n * (https://en.wikipedia.org/wiki/Lowest_common_ancestor).\n * Then compares the ancestor's 2 children that are ancestors of nodeA and NodeB\n * so we can compare their indexes to work out which node comes first in a depth first search.\n * (https://en.wikipedia.org/wiki/Depth-first_search)\n *\n * Another way to put it is which node is shallower in a trémaux tree\n * https://en.wikipedia.org/wiki/Tr%C3%A9maux_tree\n */\n const findOrderInTremauxTree = useCallback(\n (nodeAId: string, nodeBId: string) => {\n if (nodeAId === nodeBId) {\n return [nodeAId, nodeBId];\n }\n\n const nodeA = nodeMap.current[nodeAId];\n const nodeB = nodeMap.current[nodeBId];\n\n if (nodeA.parentId === nodeB.id || nodeB.parentId === nodeA.id) {\n return nodeB.parentId === nodeA.id\n ? [nodeA.id, nodeB.id]\n : [nodeB.id, nodeA.id];\n }\n\n const aFamily = [nodeA.id];\n const bFamily = [nodeB.id];\n\n let aAncestor = nodeA.parentId;\n let bAncestor = nodeB.parentId;\n\n let aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;\n let bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;\n\n let continueA = true;\n let continueB = true;\n\n while (!bAncestorIsCommon && !aAncestorIsCommon) {\n if (continueA) {\n aFamily.push(aAncestor);\n aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;\n continueA = aAncestor !== null;\n if (!aAncestorIsCommon && continueA) {\n aAncestor = nodeMap.current[aAncestor].parentId;\n }\n }\n\n if (continueB && !aAncestorIsCommon) {\n bFamily.push(bAncestor);\n bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;\n continueB = bAncestor !== null;\n if (!bAncestorIsCommon && continueB) {\n bAncestor = nodeMap.current[bAncestor].parentId;\n }\n }\n }\n\n const commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;\n const ancestorFamily = getChildrenIds(commonAncestor);\n\n const aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];\n const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];\n\n return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide)\n ? [nodeAId, nodeBId]\n : [nodeBId, nodeAId];\n },\n []\n );\n\n const getNodesInRange = useCallback(\n (nodeA, nodeB) => {\n if (nodeA && nodeB) {\n const [first, last] = findOrderInTremauxTree(nodeA, nodeB);\n const nodes = [first];\n\n let current = first;\n\n while (current !== last) {\n current = getNextNode(current);\n nodes.push(current);\n }\n\n return nodes;\n }\n return [];\n },\n [findOrderInTremauxTree, getNextNode]\n );\n\n /*\n * Focus Helpers\n */\n const focus = (event, id) => {\n if (id) {\n setFocusedNodeId(id);\n\n if (nodeMap.current[id]?.onFocus) {\n nodeMap.current[id].onFocus(event);\n }\n }\n };\n\n const focusNextNode = (event, id) => focus(event, getNextNode(id));\n const focusPreviousNode = (event, id) => focus(event, getPreviousNode(id));\n const focusFirstNode = (event) => focus(event, getFirstNode());\n const focusLastNode = (event) => focus(event, getLastNode());\n\n const focusByFirstCharacter = (event, id, char) => {\n let start;\n let index;\n const lowercaseChar = char.toLowerCase();\n\n const firstCharIds: string[] = [];\n const firstChars: string[] = [];\n // This really only works since the ids are strings\n Object.keys(firstCharMap.current).forEach((nodeId) => {\n const firstChar = firstCharMap.current[nodeId];\n const map = nodeMap.current[nodeId];\n const visible = map.parentId ? isExpanded(map.parentId) : true;\n const shouldBeSkipped = disabledItemsFocusable\n ? false\n : isDisabled(nodeId);\n\n if (visible && !shouldBeSkipped) {\n firstCharIds.push(nodeId);\n firstChars.push(firstChar);\n }\n });\n\n // Get start index for search based on position of currentItem\n start = firstCharIds.indexOf(id) + 1;\n if (start >= firstCharIds.length) {\n start = 0;\n }\n\n // Check remaining slots in the menu\n index = findNextFirstChar(firstChars, start, lowercaseChar);\n\n // If not found in remaining slots, check from beginning\n if (index === -1) {\n index = findNextFirstChar(firstChars, 0, lowercaseChar);\n }\n\n // If match was found...\n if (index > -1) {\n focus(event, firstCharIds[index]);\n }\n };\n\n /*\n * Expansion Helpers\n */\n const toggleExpansion = useCallback(\n (event, value = focusedNodeId) => {\n let newExpanded;\n\n if (expanded.indexOf(value) !== -1) {\n newExpanded = expanded.filter((id) => id !== value);\n } else {\n newExpanded = [value].concat(expanded);\n }\n\n if (onToggle) {\n onToggle(event, newExpanded);\n }\n\n setExpandedState(newExpanded);\n },\n [expanded, focusedNodeId, onToggle, setExpandedState]\n );\n\n const expandAllSiblings = (event, id) => {\n const map = nodeMap.current[id];\n const siblings = getChildrenIds(map.parentId);\n\n const diff = siblings.filter(\n (child) => isExpandable(child) && !isExpanded(child)\n );\n\n const newExpanded = expanded.concat(diff);\n\n if (diff.length > 0) {\n setExpandedState(newExpanded);\n\n if (onToggle) {\n onToggle(event, newExpanded);\n }\n }\n };\n\n /*\n * Selection Helpers\n */\n const lastSelectedNode = useRef<HTMLDivElement | null>(null);\n const lastSelectionWasRange = useRef(false);\n const currentRangeSelection = useRef<HTMLDivElement[]>([]);\n\n const isDivElement = (element): element is HTMLDivElement => {\n return (element as HTMLDivElement).nodeType === 1;\n };\n\n const handleRangeArrowSelect = useCallback(\n (event, nodes: { start?; next?; current? }) => {\n let base = selected.slice();\n const { start, next, current } = nodes;\n\n if (!next || !current) {\n return;\n }\n\n if (\n isDivElement(current) &&\n currentRangeSelection.current.indexOf(current) === -1\n ) {\n currentRangeSelection.current = [];\n }\n\n if (lastSelectionWasRange.current) {\n if (\n isDivElement(next) &&\n currentRangeSelection.current.indexOf(next) !== -1\n ) {\n base = base.filter((id) => id === start || id !== current);\n currentRangeSelection.current =\n currentRangeSelection.current.filter(\n (id) => id === start || id !== current\n );\n } else {\n base.push(next);\n currentRangeSelection.current.push(next);\n }\n } else {\n base.push(next);\n currentRangeSelection.current.push(current, next);\n }\n\n if (onChange) {\n onChange(\n event,\n base,\n base.map((id) => nodeMap.current[id]?.payload)\n );\n }\n\n setSelectedState(base);\n },\n [onChange, selected, setSelectedState]\n );\n\n const handleRangeSelect = useCallback(\n (event, nodes: { start?; end?; current? }) => {\n let base = selected.slice();\n const { start, end } = nodes;\n // If last selection was a range selection ignore nodes that were selected.\n if (lastSelectionWasRange.current) {\n base = base.filter(\n (id) => currentRangeSelection.current.indexOf(id) === -1\n );\n }\n\n let range = getNodesInRange(start, end);\n range = range.filter((node) => !isDisabled(node));\n currentRangeSelection.current = range;\n let newSelected = base.concat(range);\n newSelected = newSelected.filter(\n (id, i) => newSelected.indexOf(id) === i\n );\n\n if (onChange) {\n onChange(\n event,\n newSelected,\n newSelected.map((id) => nodeMap.current[id]?.payload)\n );\n }\n\n setSelectedState(newSelected);\n },\n [getNodesInRange, isDisabled, onChange, selected, setSelectedState]\n );\n\n const handleMultipleSelect = useCallback(\n (event, value) => {\n let newSelected;\n if (selected.indexOf(value) !== -1) {\n newSelected = selected.filter((id) => id !== value);\n } else {\n newSelected = [value].concat(selected);\n }\n\n if (onChange) {\n onChange(\n event,\n newSelected,\n newSelected.map((id) => nodeMap.current[id]?.payload)\n );\n }\n\n setSelectedState(newSelected);\n },\n [onChange, selected, setSelectedState]\n );\n\n const handleSingleSelect = useCallback(\n (event, value) => {\n const newSelected = multiSelect ? [value] : value;\n if (onChange) {\n const nodeValue = nodeMap.current[newSelected]?.payload;\n onChange(event, newSelected, multiSelect ? [nodeValue] : nodeValue);\n }\n\n setSelectedState(newSelected);\n },\n [multiSelect, onChange, setSelectedState]\n );\n\n const selectNode = useCallback(\n (event, id, multiple = false) => {\n if (id && isSelectable(id)) {\n if (multiple) {\n handleMultipleSelect(event, id);\n } else {\n handleSingleSelect(event, id);\n }\n lastSelectedNode.current = id;\n lastSelectionWasRange.current = false;\n currentRangeSelection.current = [];\n\n return true;\n }\n return false;\n },\n [handleMultipleSelect, handleSingleSelect, isSelectable]\n );\n\n const selectRange = useCallback(\n (\n event,\n nodes: { start?; end?; current?: HTMLDivElement | null },\n stacked = false\n ) => {\n const { start = lastSelectedNode.current, end, current } = nodes;\n if (stacked) {\n handleRangeArrowSelect(event, { start, next: end, current });\n } else if (start != null && end != null) {\n handleRangeSelect(event, { start, end });\n }\n lastSelectionWasRange.current = true;\n },\n [handleRangeArrowSelect, handleRangeSelect]\n );\n\n const rangeSelectToFirst = (event, id) => {\n if (!lastSelectedNode.current) {\n lastSelectedNode.current = id;\n }\n\n const start = lastSelectionWasRange.current\n ? lastSelectedNode.current\n : id;\n\n selectRange(event, {\n start,\n end: getFirstNode(),\n });\n };\n\n const rangeSelectToLast = (event: any, id) => {\n if (!lastSelectedNode.current) {\n lastSelectedNode.current = id;\n }\n\n const start = lastSelectionWasRange.current\n ? lastSelectedNode.current\n : id;\n\n selectRange(event, {\n start,\n end: getLastNode(),\n });\n };\n\n const selectNextNode = (event, id) => {\n if (!isDisabled(getNextNode(id))) {\n selectRange(\n event,\n {\n end: getNextNode(id),\n current: id,\n },\n true\n );\n }\n };\n\n const selectPreviousNode = (event, id) => {\n if (!isDisabled(getPreviousNode(id))) {\n selectRange(\n event,\n {\n end: getPreviousNode(id),\n current: id,\n },\n true\n );\n }\n };\n\n const selectAllNodes = (event) => {\n selectRange(event, { start: getFirstNode(), end: getLastNode() });\n };\n\n /*\n * Mapping Helpers\n */\n const registerNode = useCallback((node) => {\n const {\n id,\n index,\n parentId,\n expandable,\n idAttribute,\n disabled,\n selectable: nodeSelectable,\n onFocus: nodeOnFocus,\n payload,\n } = node;\n\n nodeMap.current[id] = {\n id,\n index,\n parentId,\n expandable,\n idAttribute,\n disabled,\n selectable: nodeSelectable,\n onFocus: nodeOnFocus,\n payload,\n };\n }, []);\n\n const unregisterNode = useCallback((id) => {\n const newMap = { ...nodeMap.current };\n delete newMap[id];\n nodeMap.current = newMap;\n\n setFocusedNodeId((oldFocusedNodeId) => {\n if (\n oldFocusedNodeId === id &&\n treeRef.current &&\n treeRef.current ===\n (treeRef.current.ownerDocument || document).activeElement\n ) {\n return getChildrenIds(null)[0];\n }\n return oldFocusedNodeId;\n });\n }, []);\n\n const mapFirstChar = useCallback((id, firstChar) => {\n firstCharMap.current[id] = firstChar;\n }, []);\n\n const unMapFirstChar = useCallback((id) => {\n const newMap = { ...firstCharMap.current };\n delete newMap[id];\n firstCharMap.current = newMap;\n }, []);\n\n /**\n * Event handlers and Navigation\n */\n const handleNextArrow = (event) => {\n if (isExpandable(focusedNodeId)) {\n if (isExpanded(focusedNodeId)) {\n focusNextNode(event, focusedNodeId);\n } else if (!isDisabled(focusedNodeId)) {\n toggleExpansion(event);\n }\n }\n return true;\n };\n\n const handlePreviousArrow = (event) => {\n if (isExpanded(focusedNodeId) && !isDisabled(focusedNodeId)) {\n toggleExpansion(event, focusedNodeId);\n return true;\n }\n\n const parent = getParent(focusedNodeId);\n if (parent) {\n focus(event, parent);\n return true;\n }\n return false;\n };\n\n const handleKeyDown = (event) => {\n let flag = false;\n const { key } = event;\n\n // If the tree is empty there will be no focused node\n if (\n event.altKey ||\n event.currentTarget !== event.target ||\n !focusedNodeId\n ) {\n return;\n }\n\n const ctrlPressed = event.ctrlKey || event.metaKey;\n switch (key) {\n case \" \":\n if (isSelectable(focusedNodeId) && !isDisabled(focusedNodeId)) {\n if (multiSelect && event.shiftKey) {\n selectRange(event, { end: focusedNodeId });\n flag = true;\n } else if (multiSelect) {\n flag = selectNode(event, focusedNodeId, true);\n } else {\n flag = selectNode(event, focusedNodeId);\n }\n }\n event.stopPropagation();\n break;\n case \"Enter\":\n if (!isDisabled(focusedNodeId)) {\n if (isExpandable(focusedNodeId)) {\n toggleExpansion(event);\n flag = true;\n } else if (isSelectable(focusedNodeId)) {\n if (multiSelect && event.shiftKey) {\n selectRange(event, { end: focusedNodeId });\n flag = true;\n } else if (multiSelect) {\n flag = selectNode(event, focusedNodeId, true);\n } else {\n flag = selectNode(event, focusedNodeId);\n }\n }\n }\n event.stopPropagation();\n break;\n case \"ArrowDown\":\n if (multiSelect && event.shiftKey) {\n selectNextNode(event, focusedNodeId);\n }\n focusNextNode(event, focusedNodeId);\n flag = true;\n break;\n case \"ArrowUp\":\n if (multiSelect && event.shiftKey) {\n selectPreviousNode(event, focusedNodeId);\n }\n focusPreviousNode(event, focusedNodeId);\n flag = true;\n break;\n case \"ArrowRight\":\n flag = handleNextArrow(event);\n break;\n case \"ArrowLeft\":\n flag = handlePreviousArrow(event);\n break;\n case \"Home\":\n if (\n multiSelect &&\n ctrlPressed &&\n event.shiftKey &&\n !isDisabled(focusedNodeId)\n ) {\n rangeSelectToFirst(event, focusedNodeId);\n }\n focusFirstNode(event);\n flag = true;\n break;\n case \"End\":\n if (\n multiSelect &&\n ctrlPressed &&\n event.shiftKey &&\n !isDisabled(focusedNodeId)\n ) {\n rangeSelectToLast(event, focusedNodeId);\n }\n focusLastNode(event);\n flag = true;\n break;\n default:\n if (key === \"*\") {\n expandAllSiblings(event, focusedNodeId);\n flag = true;\n } else if (multiSelect && ctrlPressed && key.toLowerCase() === \"a\") {\n selectAllNodes(event);\n flag = true;\n } else if (\n !ctrlPressed &&\n !event.shiftKey &&\n isPrintableCharacter(key)\n ) {\n focusByFirstCharacter(event, focusedNodeId, key);\n flag = true;\n }\n }\n\n if (flag) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n }\n };\n\n const handleFocus = (event) => {\n // if the event bubbled (which is React specific) we don't want to steal focus\n if (event.target === event.currentTarget) {\n const firstSelected = Array.isArray(selected) ? selected[0] : selected;\n focus(event, firstSelected || getNavigableChildrenIds(null)[0]);\n }\n\n if (onFocus) {\n onFocus(event);\n }\n };\n\n const handleBlur = (event) => {\n setFocusedNodeId(null);\n\n if (onBlur) {\n onBlur(event);\n }\n };\n\n const activeDescendant =\n focusedNodeId && nodeMap.current[focusedNodeId]\n ? nodeMap.current[focusedNodeId].idAttribute\n : null;\n\n const treeControlContext = useMemo(\n () => ({\n treeId,\n mode,\n collapsible,\n toggleExpansion,\n multiSelect,\n selectNode: selectable ? selectNode : noopSelection,\n selectRange: selectable ? selectRange : noopSelection,\n disabledItemsFocusable,\n registerNode,\n unregisterNode,\n mapFirstChar,\n unMapFirstChar,\n focus,\n }),\n [\n registerNode,\n unregisterNode,\n mapFirstChar,\n unMapFirstChar,\n toggleExpansion,\n selectable,\n selectNode,\n selectRange,\n mode,\n collapsible,\n multiSelect,\n disabledItemsFocusable,\n treeId,\n ]\n );\n\n const treeStateContext = useMemo(\n () => ({\n isExpanded,\n isSelected,\n isFocused,\n isDisabled,\n isChildSelected,\n }),\n [isDisabled, isExpanded, isFocused, isSelected, isChildSelected]\n );\n\n return (\n <TreeViewControlContext.Provider value={treeControlContext}>\n <TreeViewStateContext.Provider value={treeStateContext}>\n <DescendantProvider>\n <ul\n ref={handleRef}\n id={idProp}\n className={cx(classes.root, className)}\n {...(treeviewMode && {\n id: treeId,\n role: \"tree\",\n \"aria-multiselectable\": multiSelect,\n \"aria-activedescendant\": activeDescendant,\n tabIndex: 0,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n })}\n {...others}\n >\n {children}\n </ul>\n </DescendantProvider>\n </TreeViewStateContext.Provider>\n </TreeViewControlContext.Provider>\n );\n }\n);\n"],"names":["forwardRef","useClasses","useUniqueId","useRef","useForkRef","useControlled","useState","useCallback","useMemo","jsx","TreeViewControlContext","TreeViewStateContext","DescendantProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeView.cjs","sources":["../../../../src/VerticalNavigation/TreeView/TreeView.tsx"],"sourcesContent":["import { forwardRef, useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { useControlled } from \"../../hooks/useControlled\";\nimport { useUniqueId } from \"../../hooks/useUniqueId\";\nimport { useForkRef } from \"../../hooks/useForkRef\";\n\nimport { ExtractNames } from \"../../utils/classes\";\n\nimport {\n NavigationMode,\n TreeViewControlContext,\n TreeViewStateContext,\n} from \"./TreeViewContext\";\nimport { DescendantProvider } from \"./descendants\";\nimport { staticClasses, useClasses } from \"./TreeView.styles\";\n\nexport { staticClasses as treeViewClasses };\n\nexport type HvVerticalNavigationTreeViewClasses = ExtractNames<\n typeof useClasses\n>;\n\nexport interface HvVerticalNavigationTreeViewProps {\n /**\n * Id to be applied to the root node.\n */\n id?: string;\n /**\n * Class names to be applied.\n */\n className?: string;\n /**\n * A Jss Object used to override or extend the styles applied to the component.\n */\n classes?: HvVerticalNavigationTreeViewClasses;\n /**\n * Modus operandi (role) of the widget instance.\n */\n mode?: NavigationMode;\n /**\n * Enables selection.\n * @default false\n */\n selectable?: boolean;\n /**\n * Enables the simultaneous selection of multiple items.\n * @default false\n */\n multiSelect?: boolean;\n /**\n * The selected nodes' ids.\n *\n * When `multiSelect` is true this takes an array of strings; when false (default) a string.\n */\n selected?: string[] | string;\n /**\n * When uncontrolled, defines the initial selected nodes' ids.\n *\n * When `multiSelect` is true this takes an array of strings; when false (default) a string.\n * @default []\n */\n defaultSelected?: string[] | string;\n /**\n * Can non-leaf nodes be collapsed / expanded.\n */\n collapsible?: boolean;\n /**\n * Callback fired when a tree item is selected.\n *\n * @param {object} event The event source of the callback.\n * @param {string} nodeId The id of the selected node.\n */\n onChange?: any;\n /**\n * Expanded nodes' ids.\n */\n expanded?: string[];\n /**\n * When uncontrolled, defines the initial expanded nodes' ids.\n * @default []\n */\n defaultExpanded?: string[];\n /**\n * Callback fired when tree items are expanded/collapsed.\n *\n * @param {object} event The event source of the callback.\n * @param {array} nodeIds The ids of the expanded nodes (old and new).\n */\n onToggle?: (event, nodeIds) => void;\n /**\n * If `true`, will allow focus on disabled items.\n * @default false\n */\n disabledItemsFocusable?: boolean;\n /**\n * @ignore\n */\n onFocus?: (event: React.FocusEvent<any>) => void;\n /**\n * @ignore\n */\n onBlur?: (event: any) => void;\n /**\n * @ignore\n */\n onKeyDown?: (event: KeyboardEvent) => void;\n /**\n * The content of the component.\n */\n children?: React.ReactNode;\n}\n\nfunction isPrintableCharacter(string) {\n return string && string.length === 1 && string.match(/\\S/);\n}\n\nfunction findNextFirstChar(firstChars, startIndex, char) {\n for (let i = startIndex; i < firstChars.length; i += 1) {\n if (char === firstChars[i]) {\n return i;\n }\n }\n return -1;\n}\n\nfunction noopSelection() {\n return false;\n}\n\nexport const HvVerticalNavigationTreeView = forwardRef(\n (props: HvVerticalNavigationTreeViewProps, ref) => {\n const {\n id: idProp,\n className,\n classes: classesProp,\n\n mode = \"treeview\",\n\n collapsible = false,\n expanded: expandedProp,\n defaultExpanded = [],\n onToggle,\n\n selectable = false,\n multiSelect: multiSelectProp = false,\n selected: selectedProp,\n defaultSelected = [],\n onChange,\n\n disabledItemsFocusable = false,\n\n onFocus,\n onBlur,\n onKeyDown,\n\n children,\n\n ...others\n } = props;\n\n const { classes, cx } = useClasses(classesProp);\n\n const treeviewMode = mode === \"treeview\";\n const multiSelect = selectable && multiSelectProp;\n\n const treeId = useUniqueId(idProp);\n const treeRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(treeRef, ref);\n\n const [expanded, setExpandedState] = useControlled(\n expandedProp,\n defaultExpanded\n );\n\n const [selected, setSelectedState] = useControlled(\n selectedProp,\n defaultSelected\n );\n\n const [focusedNodeId, setFocusedNodeId] = useState<string | null>(null);\n\n const nodeMap = useRef({});\n\n const firstCharMap = useRef({});\n\n /*\n * Status Helpers\n */\n const isExpanded = useCallback(\n (id) =>\n !collapsible ||\n (Array.isArray(expanded) ? expanded.indexOf(id) !== -1 : false),\n [collapsible, expanded]\n );\n\n const isExpandable = useCallback(\n (id) =>\n collapsible && nodeMap.current[id] && nodeMap.current[id].expandable,\n [collapsible]\n );\n\n const isSelected = useCallback(\n (id) =>\n selectable &&\n (Array.isArray(selected)\n ? selected.indexOf(id) !== -1\n : selected === id),\n [selectable, selected]\n );\n\n const isSelectable = useCallback(\n (id) =>\n selectable && nodeMap.current[id] && nodeMap.current[id].selectable,\n [selectable]\n );\n\n const isDisabled = useCallback((id) => {\n let node = nodeMap.current[id];\n\n // This can be called before the node has been added to the node map.\n if (!node) {\n return false;\n }\n\n if (node.disabled) {\n return true;\n }\n\n while (node.parentId != null) {\n node = nodeMap.current[node.parentId];\n if (node.disabled) {\n return true;\n }\n }\n\n return false;\n }, []);\n\n const isFocused = useCallback(\n (id) => focusedNodeId === id,\n [focusedNodeId]\n );\n\n const isChildSelected = useCallback(\n // the second part of the condition is to ensure that the id we're\n // looking at is actually of a child (ie, there's at least one \"-\")\n (id) => selected.startsWith(id) && selected.includes(\"-\"),\n [selected]\n );\n\n /*\n * Child Helpers\n */\n const getChildrenIds = (id: string | null) =>\n Object.keys(nodeMap.current)\n .map((key) => {\n return nodeMap.current[key];\n })\n .filter((node) => node.parentId === id)\n .sort((a, b) => a.index - b.index)\n .map((child) => child.id);\n\n const getNavigableChildrenIds = useCallback(\n (id: string | null) => {\n let childrenIds = getChildrenIds(id);\n\n if (!disabledItemsFocusable) {\n childrenIds = childrenIds.filter((node) => !isDisabled(node));\n }\n return childrenIds;\n },\n [disabledItemsFocusable, isDisabled]\n );\n\n /*\n * Node Helpers\n */\n const getNextNode = useCallback(\n (id: string) => {\n // If expanded get first child\n if (isExpanded(id) && getNavigableChildrenIds(id).length > 0) {\n return getNavigableChildrenIds(id)[0];\n }\n\n let node = nodeMap.current[id];\n while (node != null) {\n // Try to get next sibling\n const siblings = getNavigableChildrenIds(node.parentId);\n const nextSibling = siblings[siblings.indexOf(node.id) + 1];\n\n if (nextSibling) {\n return nextSibling;\n }\n\n // If the sibling does not exist, go up a level to the parent and try again.\n node = nodeMap.current[node.parentId];\n }\n\n return null;\n },\n [getNavigableChildrenIds, isExpanded]\n );\n\n const getPreviousNode = (id: string) => {\n const node = nodeMap.current[id];\n const siblings = getNavigableChildrenIds(node.parentId);\n const nodeIndex = siblings.indexOf(id);\n\n if (nodeIndex === 0) {\n return node.parentId;\n }\n\n let currentNode = siblings[nodeIndex - 1];\n while (\n isExpanded(currentNode) &&\n getNavigableChildrenIds(currentNode).length > 0\n ) {\n currentNode = getNavigableChildrenIds(currentNode).pop();\n }\n\n return currentNode;\n };\n\n const getLastNode = () => {\n let lastNode = getNavigableChildrenIds(null).pop();\n\n while (isExpanded(lastNode)) {\n lastNode = getNavigableChildrenIds(lastNode).pop();\n }\n return lastNode;\n };\n const getFirstNode = () => getNavigableChildrenIds(null)[0];\n const getParent = (id) => nodeMap.current[id].parentId;\n\n /**\n * This is used to determine the start and end of a selection range so\n * we can get the nodes between the two border nodes.\n *\n * It finds the nodes' common ancestor using\n * a naive implementation of a lowest common ancestor algorithm\n * (https://en.wikipedia.org/wiki/Lowest_common_ancestor).\n * Then compares the ancestor's 2 children that are ancestors of nodeA and NodeB\n * so we can compare their indexes to work out which node comes first in a depth first search.\n * (https://en.wikipedia.org/wiki/Depth-first_search)\n *\n * Another way to put it is which node is shallower in a trémaux tree\n * https://en.wikipedia.org/wiki/Tr%C3%A9maux_tree\n */\n const findOrderInTremauxTree = useCallback(\n (nodeAId: string, nodeBId: string) => {\n if (nodeAId === nodeBId) {\n return [nodeAId, nodeBId];\n }\n\n const nodeA = nodeMap.current[nodeAId];\n const nodeB = nodeMap.current[nodeBId];\n\n if (nodeA.parentId === nodeB.id || nodeB.parentId === nodeA.id) {\n return nodeB.parentId === nodeA.id\n ? [nodeA.id, nodeB.id]\n : [nodeB.id, nodeA.id];\n }\n\n const aFamily = [nodeA.id];\n const bFamily = [nodeB.id];\n\n let aAncestor = nodeA.parentId;\n let bAncestor = nodeB.parentId;\n\n let aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;\n let bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;\n\n let continueA = true;\n let continueB = true;\n\n while (!bAncestorIsCommon && !aAncestorIsCommon) {\n if (continueA) {\n aFamily.push(aAncestor);\n aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;\n continueA = aAncestor !== null;\n if (!aAncestorIsCommon && continueA) {\n aAncestor = nodeMap.current[aAncestor].parentId;\n }\n }\n\n if (continueB && !aAncestorIsCommon) {\n bFamily.push(bAncestor);\n bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;\n continueB = bAncestor !== null;\n if (!bAncestorIsCommon && continueB) {\n bAncestor = nodeMap.current[bAncestor].parentId;\n }\n }\n }\n\n const commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;\n const ancestorFamily = getChildrenIds(commonAncestor);\n\n const aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];\n const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];\n\n return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide)\n ? [nodeAId, nodeBId]\n : [nodeBId, nodeAId];\n },\n []\n );\n\n const getNodesInRange = useCallback(\n (nodeA, nodeB) => {\n if (nodeA && nodeB) {\n const [first, last] = findOrderInTremauxTree(nodeA, nodeB);\n const nodes = [first];\n\n let current = first;\n\n while (current !== last) {\n current = getNextNode(current);\n nodes.push(current);\n }\n\n return nodes;\n }\n return [];\n },\n [findOrderInTremauxTree, getNextNode]\n );\n\n /*\n * Focus Helpers\n */\n const focus = (event, id) => {\n if (id) {\n setFocusedNodeId(id);\n\n if (nodeMap.current[id]?.onFocus) {\n nodeMap.current[id].onFocus(event);\n }\n }\n };\n\n const focusNextNode = (event, id) => focus(event, getNextNode(id));\n const focusPreviousNode = (event, id) => focus(event, getPreviousNode(id));\n const focusFirstNode = (event) => focus(event, getFirstNode());\n const focusLastNode = (event) => focus(event, getLastNode());\n\n const focusByFirstCharacter = (event, id, char) => {\n let start;\n let index;\n const lowercaseChar = char.toLowerCase();\n\n const firstCharIds: string[] = [];\n const firstChars: string[] = [];\n // This really only works since the ids are strings\n Object.keys(firstCharMap.current).forEach((nodeId) => {\n const firstChar = firstCharMap.current[nodeId];\n const map = nodeMap.current[nodeId];\n const visible = map.parentId ? isExpanded(map.parentId) : true;\n const shouldBeSkipped = disabledItemsFocusable\n ? false\n : isDisabled(nodeId);\n\n if (visible && !shouldBeSkipped) {\n firstCharIds.push(nodeId);\n firstChars.push(firstChar);\n }\n });\n\n // Get start index for search based on position of currentItem\n start = firstCharIds.indexOf(id) + 1;\n if (start >= firstCharIds.length) {\n start = 0;\n }\n\n // Check remaining slots in the menu\n index = findNextFirstChar(firstChars, start, lowercaseChar);\n\n // If not found in remaining slots, check from beginning\n if (index === -1) {\n index = findNextFirstChar(firstChars, 0, lowercaseChar);\n }\n\n // If match was found...\n if (index > -1) {\n focus(event, firstCharIds[index]);\n }\n };\n\n /*\n * Expansion Helpers\n */\n const toggleExpansion = useCallback(\n (event, value = focusedNodeId) => {\n let newExpanded;\n\n if (expanded.indexOf(value) !== -1) {\n newExpanded = expanded.filter((id) => id !== value);\n } else {\n newExpanded = [value].concat(expanded);\n }\n\n if (onToggle) {\n onToggle(event, newExpanded);\n }\n\n setExpandedState(newExpanded);\n },\n [expanded, focusedNodeId, onToggle, setExpandedState]\n );\n\n const expandAllSiblings = (event, id) => {\n const map = nodeMap.current[id];\n const siblings = getChildrenIds(map.parentId);\n\n const diff = siblings.filter(\n (child) => isExpandable(child) && !isExpanded(child)\n );\n\n const newExpanded = expanded.concat(diff);\n\n if (diff.length > 0) {\n setExpandedState(newExpanded);\n\n if (onToggle) {\n onToggle(event, newExpanded);\n }\n }\n };\n\n /*\n * Selection Helpers\n */\n const lastSelectedNode = useRef<HTMLDivElement | null>(null);\n const lastSelectionWasRange = useRef(false);\n const currentRangeSelection = useRef<HTMLDivElement[]>([]);\n\n const isDivElement = (element): element is HTMLDivElement => {\n return (element as HTMLDivElement).nodeType === 1;\n };\n\n const handleRangeArrowSelect = useCallback(\n (event, nodes: { start?; next?; current? }) => {\n let base = selected.slice();\n const { start, next, current } = nodes;\n\n if (!next || !current) {\n return;\n }\n\n if (\n isDivElement(current) &&\n currentRangeSelection.current.indexOf(current) === -1\n ) {\n currentRangeSelection.current = [];\n }\n\n if (lastSelectionWasRange.current) {\n if (\n isDivElement(next) &&\n currentRangeSelection.current.indexOf(next) !== -1\n ) {\n base = base.filter((id) => id === start || id !== current);\n currentRangeSelection.current =\n currentRangeSelection.current.filter(\n (id) => id === start || id !== current\n );\n } else {\n base.push(next);\n currentRangeSelection.current.push(next);\n }\n } else {\n base.push(next);\n currentRangeSelection.current.push(current, next);\n }\n\n if (onChange) {\n onChange(\n event,\n base,\n base.map((id) => nodeMap.current[id]?.payload)\n );\n }\n\n setSelectedState(base);\n },\n [onChange, selected, setSelectedState]\n );\n\n const handleRangeSelect = useCallback(\n (event, nodes: { start?; end?; current? }) => {\n let base = selected.slice();\n const { start, end } = nodes;\n // If last selection was a range selection ignore nodes that were selected.\n if (lastSelectionWasRange.current) {\n base = base.filter(\n (id) => currentRangeSelection.current.indexOf(id) === -1\n );\n }\n\n let range = getNodesInRange(start, end);\n range = range.filter((node) => !isDisabled(node));\n currentRangeSelection.current = range;\n let newSelected = base.concat(range);\n newSelected = newSelected.filter(\n (id, i) => newSelected.indexOf(id) === i\n );\n\n if (onChange) {\n onChange(\n event,\n newSelected,\n newSelected.map((id) => nodeMap.current[id]?.payload)\n );\n }\n\n setSelectedState(newSelected);\n },\n [getNodesInRange, isDisabled, onChange, selected, setSelectedState]\n );\n\n const handleMultipleSelect = useCallback(\n (event, value) => {\n let newSelected;\n if (selected.indexOf(value) !== -1) {\n newSelected = selected.filter((id) => id !== value);\n } else {\n newSelected = [value].concat(selected);\n }\n\n if (onChange) {\n onChange(\n event,\n newSelected,\n newSelected.map((id) => nodeMap.current[id]?.payload)\n );\n }\n\n setSelectedState(newSelected);\n },\n [onChange, selected, setSelectedState]\n );\n\n const handleSingleSelect = useCallback(\n (event, value) => {\n const newSelected = multiSelect ? [value] : value;\n if (onChange) {\n const nodeValue = nodeMap.current[newSelected]?.payload;\n onChange(event, newSelected, multiSelect ? [nodeValue] : nodeValue);\n }\n\n setSelectedState(newSelected);\n },\n [multiSelect, onChange, setSelectedState]\n );\n\n const selectNode = useCallback(\n (event, id, multiple = false) => {\n if (id && isSelectable(id)) {\n if (multiple) {\n handleMultipleSelect(event, id);\n } else {\n handleSingleSelect(event, id);\n }\n lastSelectedNode.current = id;\n lastSelectionWasRange.current = false;\n currentRangeSelection.current = [];\n\n return true;\n }\n return false;\n },\n [handleMultipleSelect, handleSingleSelect, isSelectable]\n );\n\n const selectRange = useCallback(\n (\n event,\n nodes: { start?; end?; current?: HTMLDivElement | null },\n stacked = false\n ) => {\n const { start = lastSelectedNode.current, end, current } = nodes;\n if (stacked) {\n handleRangeArrowSelect(event, { start, next: end, current });\n } else if (start != null && end != null) {\n handleRangeSelect(event, { start, end });\n }\n lastSelectionWasRange.current = true;\n },\n [handleRangeArrowSelect, handleRangeSelect]\n );\n\n const rangeSelectToFirst = (event, id) => {\n if (!lastSelectedNode.current) {\n lastSelectedNode.current = id;\n }\n\n const start = lastSelectionWasRange.current\n ? lastSelectedNode.current\n : id;\n\n selectRange(event, {\n start,\n end: getFirstNode(),\n });\n };\n\n const rangeSelectToLast = (event: any, id) => {\n if (!lastSelectedNode.current) {\n lastSelectedNode.current = id;\n }\n\n const start = lastSelectionWasRange.current\n ? lastSelectedNode.current\n : id;\n\n selectRange(event, {\n start,\n end: getLastNode(),\n });\n };\n\n const selectNextNode = (event, id) => {\n if (!isDisabled(getNextNode(id))) {\n selectRange(\n event,\n {\n end: getNextNode(id),\n current: id,\n },\n true\n );\n }\n };\n\n const selectPreviousNode = (event, id) => {\n if (!isDisabled(getPreviousNode(id))) {\n selectRange(\n event,\n {\n end: getPreviousNode(id),\n current: id,\n },\n true\n );\n }\n };\n\n const selectAllNodes = (event) => {\n selectRange(event, { start: getFirstNode(), end: getLastNode() });\n };\n\n /*\n * Mapping Helpers\n */\n const registerNode = useCallback((node) => {\n const {\n id,\n index,\n parentId,\n expandable,\n idAttribute,\n disabled,\n selectable: nodeSelectable,\n onFocus: nodeOnFocus,\n payload,\n } = node;\n\n nodeMap.current[id] = {\n id,\n index,\n parentId,\n expandable,\n idAttribute,\n disabled,\n selectable: nodeSelectable,\n onFocus: nodeOnFocus,\n payload,\n };\n }, []);\n\n const unregisterNode = useCallback((id) => {\n const newMap = { ...nodeMap.current };\n delete newMap[id];\n nodeMap.current = newMap;\n\n setFocusedNodeId((oldFocusedNodeId) => {\n if (\n oldFocusedNodeId === id &&\n treeRef.current &&\n treeRef.current ===\n (treeRef.current.ownerDocument || document).activeElement\n ) {\n return getChildrenIds(null)[0];\n }\n return oldFocusedNodeId;\n });\n }, []);\n\n const mapFirstChar = useCallback((id, firstChar) => {\n firstCharMap.current[id] = firstChar;\n }, []);\n\n const unMapFirstChar = useCallback((id) => {\n const newMap = { ...firstCharMap.current };\n delete newMap[id];\n firstCharMap.current = newMap;\n }, []);\n\n /**\n * Event handlers and Navigation\n */\n const handleNextArrow = (event) => {\n if (isExpandable(focusedNodeId)) {\n if (isExpanded(focusedNodeId)) {\n focusNextNode(event, focusedNodeId);\n } else if (!isDisabled(focusedNodeId)) {\n toggleExpansion(event);\n }\n }\n return true;\n };\n\n const handlePreviousArrow = (event) => {\n if (isExpanded(focusedNodeId) && !isDisabled(focusedNodeId)) {\n toggleExpansion(event, focusedNodeId);\n return true;\n }\n\n const parent = getParent(focusedNodeId);\n if (parent) {\n focus(event, parent);\n return true;\n }\n return false;\n };\n\n const handleKeyDown = (event) => {\n let flag = false;\n const { key } = event;\n\n // If the tree is empty there will be no focused node\n if (\n event.altKey ||\n event.currentTarget !== event.target ||\n !focusedNodeId\n ) {\n return;\n }\n\n const ctrlPressed = event.ctrlKey || event.metaKey;\n switch (key) {\n case \" \":\n if (isSelectable(focusedNodeId) && !isDisabled(focusedNodeId)) {\n if (multiSelect && event.shiftKey) {\n selectRange(event, { end: focusedNodeId });\n flag = true;\n } else if (multiSelect) {\n flag = selectNode(event, focusedNodeId, true);\n } else {\n flag = selectNode(event, focusedNodeId);\n }\n }\n event.stopPropagation();\n break;\n case \"Enter\":\n if (!isDisabled(focusedNodeId)) {\n if (isExpandable(focusedNodeId)) {\n toggleExpansion(event);\n flag = true;\n } else if (isSelectable(focusedNodeId)) {\n if (multiSelect && event.shiftKey) {\n selectRange(event, { end: focusedNodeId });\n flag = true;\n } else if (multiSelect) {\n flag = selectNode(event, focusedNodeId, true);\n } else {\n flag = selectNode(event, focusedNodeId);\n }\n }\n }\n event.stopPropagation();\n break;\n case \"ArrowDown\":\n if (multiSelect && event.shiftKey) {\n selectNextNode(event, focusedNodeId);\n }\n focusNextNode(event, focusedNodeId);\n flag = true;\n break;\n case \"ArrowUp\":\n if (multiSelect && event.shiftKey) {\n selectPreviousNode(event, focusedNodeId);\n }\n focusPreviousNode(event, focusedNodeId);\n flag = true;\n break;\n case \"ArrowRight\":\n flag = handleNextArrow(event);\n break;\n case \"ArrowLeft\":\n flag = handlePreviousArrow(event);\n break;\n case \"Home\":\n if (\n multiSelect &&\n ctrlPressed &&\n event.shiftKey &&\n !isDisabled(focusedNodeId)\n ) {\n rangeSelectToFirst(event, focusedNodeId);\n }\n focusFirstNode(event);\n flag = true;\n break;\n case \"End\":\n if (\n multiSelect &&\n ctrlPressed &&\n event.shiftKey &&\n !isDisabled(focusedNodeId)\n ) {\n rangeSelectToLast(event, focusedNodeId);\n }\n focusLastNode(event);\n flag = true;\n break;\n default:\n if (key === \"*\") {\n expandAllSiblings(event, focusedNodeId);\n flag = true;\n } else if (multiSelect && ctrlPressed && key.toLowerCase() === \"a\") {\n selectAllNodes(event);\n flag = true;\n } else if (\n !ctrlPressed &&\n !event.shiftKey &&\n isPrintableCharacter(key)\n ) {\n focusByFirstCharacter(event, focusedNodeId, key);\n flag = true;\n }\n }\n\n if (flag) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n }\n };\n\n const handleFocus = (event) => {\n // if the event bubbled (which is React specific) we don't want to steal focus\n if (event.target === event.currentTarget) {\n const firstSelected = Array.isArray(selected) ? selected[0] : selected;\n focus(event, firstSelected || getNavigableChildrenIds(null)[0]);\n }\n\n if (onFocus) {\n onFocus(event);\n }\n };\n\n const handleBlur = (event) => {\n setFocusedNodeId(null);\n\n if (onBlur) {\n onBlur(event);\n }\n };\n\n const activeDescendant =\n focusedNodeId && nodeMap.current[focusedNodeId]\n ? nodeMap.current[focusedNodeId].idAttribute\n : null;\n\n const treeControlContext = useMemo(\n () => ({\n treeId,\n mode,\n collapsible,\n toggleExpansion,\n multiSelect,\n selectNode: selectable ? selectNode : noopSelection,\n selectRange: selectable ? selectRange : noopSelection,\n disabledItemsFocusable,\n registerNode,\n unregisterNode,\n mapFirstChar,\n unMapFirstChar,\n focus,\n }),\n [\n registerNode,\n unregisterNode,\n mapFirstChar,\n unMapFirstChar,\n toggleExpansion,\n selectable,\n selectNode,\n selectRange,\n mode,\n collapsible,\n multiSelect,\n disabledItemsFocusable,\n treeId,\n ]\n );\n\n const treeStateContext = useMemo(\n () => ({\n isExpanded,\n isSelected,\n isFocused,\n isDisabled,\n isChildSelected,\n }),\n [isDisabled, isExpanded, isFocused, isSelected, isChildSelected]\n );\n\n return (\n <TreeViewControlContext.Provider value={treeControlContext}>\n <TreeViewStateContext.Provider value={treeStateContext}>\n <DescendantProvider>\n <ul\n ref={handleRef}\n id={idProp}\n className={cx(classes.root, className)}\n {...(treeviewMode && {\n id: treeId,\n role: \"tree\",\n \"aria-multiselectable\": multiSelect,\n \"aria-activedescendant\": activeDescendant,\n tabIndex: 0,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n })}\n {...others}\n >\n {children}\n </ul>\n </DescendantProvider>\n </TreeViewStateContext.Provider>\n </TreeViewControlContext.Provider>\n );\n }\n);\n"],"names":["forwardRef","useClasses","useUniqueId","useRef","useForkRef","useControlled","useState","useCallback","useMemo","jsx","TreeViewControlContext","TreeViewStateContext","DescendantProvider"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VerticalNavigation.cjs","sources":["../../../src/VerticalNavigation/VerticalNavigation.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { useDefaultProps } from \"../hooks/useDefaultProps\";\n\nimport { ExtractNames } from \"../utils/classes\";\n\nimport {\n VerticalNavigationContext,\n NavigationData,\n} from \"./VerticalNavigationContext\";\nimport {\n fillDataWithParentId,\n getNavigationItemById,\n getParentItemById,\n} from \"./NavigationSlider/utils\";\nimport { hasChildNavigationItems } from \"./utils/VerticalNavigation.utils\";\n\nimport { staticClasses, useClasses } from \"./VerticalNavigation.styles\";\n\nexport { staticClasses as verticalNavigationClasses };\n\nexport type HvVerticalNavigationClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvVerticalNavigationProps {\n /**\n *
|
|
1
|
+
{"version":3,"file":"VerticalNavigation.cjs","sources":["../../../src/VerticalNavigation/VerticalNavigation.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { useDefaultProps } from \"../hooks/useDefaultProps\";\n\nimport { ExtractNames } from \"../utils/classes\";\n\nimport {\n VerticalNavigationContext,\n NavigationData,\n} from \"./VerticalNavigationContext\";\nimport {\n fillDataWithParentId,\n getNavigationItemById,\n getParentItemById,\n} from \"./NavigationSlider/utils\";\nimport { hasChildNavigationItems } from \"./utils/VerticalNavigation.utils\";\n\nimport { staticClasses, useClasses } from \"./VerticalNavigation.styles\";\nimport { HvBaseProps } from \"../types/generic\";\n\nexport { staticClasses as verticalNavigationClasses };\n\nexport type HvVerticalNavigationClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvVerticalNavigationProps extends HvBaseProps<HTMLDivElement> {\n /**\n * A Jss Object used to override or extend the styles applied to the component.\n */\n classes?: HvVerticalNavigationClasses;\n /**\n * Current State of the Vertical Navigation Collapse\n */\n open?: boolean;\n /**\n * Collapsed Mode for the Vertical Navigation, the default value is \"simple\".\n *\n * @deprecated - `useIcons` property should be used instead.\n */\n collapsedMode?: HvVerticalNavigationMode;\n /**\n * Boolean to determine if treeview is in slider mode (for mobile navigation), the default value is false.\n */\n slider?: boolean;\n /**\n * Boolean to determine if icons should be displayed in the navigation menu.\n * When `true` a icon will always be displayed, if no icon is provided the first letter of the label will be\n * displayed inside an Avatar component.\n * When `false` no icons will be shown, even if an icon is provided.\n */\n useIcons?: boolean;\n}\n\n/**\n * Navigation enables users to move through an app to complete tasks.\n *\n * It is recommended to use vertical navigation when your application requires global navigation that is displayed on the left.\n * While vertical navigation menus generally consume more space than their horizontal counterparts, they have become more popular as desktop monitors move to wide-screen formats.\n *\n * Although both the hierarchically organized data and the visual style resemble a treeview-like structure, the [Treeview Design Pattern](https://w3c.github.io/aria-practices/#TreeView)\n * isn't necessarily the most appropriate.\n *\n * The tree role provides complex functionality that is not needed for typical site navigation, and changes the most common keyboard navigation using TAB.\n *\n * The [Disclosure Design Pattern](https://w3c.github.io/aria-practices/#disclosure) is more suited for typical site navigation, with expandable groups of links.\n * However it can be tedious to TAB through all navigation items to reach the actions panel.\n *\n * Both modes are available via the `mode` property and each app should choose the most appropriate.\n */\nexport const HvVerticalNavigation = (props: HvVerticalNavigationProps) => {\n const {\n id,\n className,\n classes: classesProp,\n\n children,\n\n open = true,\n\n slider = false,\n\n useIcons = false,\n\n ...others\n } = useDefaultProps(\"HvVerticalNavigation\", props);\n const { classes, cx } = useClasses(classesProp);\n\n const [parentData, setParentData] = useState<NavigationData[]>([]);\n\n const [parentSelected, setParentSelected] = useState();\n\n const [headerTitle, setHeaderTitle] = useState<string | undefined>();\n\n // navigationSlider\n const withParentData = useMemo(\n () => fillDataWithParentId(parentData),\n [parentData]\n );\n\n const initialParentItem = useMemo(\n () => getParentItemById(withParentData, parentSelected),\n [withParentData, parentSelected]\n );\n\n const [parentItem, setParentItem] = useState(initialParentItem);\n\n const hasAnyChildWithData = useMemo(\n () => hasChildNavigationItems(parentData),\n [parentData]\n );\n\n useEffect(\n () => setHeaderTitle(parentItem?.label),\n [parentItem, setParentItem]\n );\n\n const navigateToParentHandler = useCallback(() => {\n setParentItem(getParentItemById(withParentData, parentItem.id));\n }, [parentItem, setParentItem, withParentData]);\n\n const navigateToChildHandler = useCallback(\n (event, item) => {\n setParentItem(getNavigationItemById(withParentData, item.id));\n event.stopPropagation();\n },\n [setParentItem, withParentData]\n );\n\n const value = useMemo(\n () => ({\n isOpen: open,\n useIcons,\n slider,\n headerTitle,\n setHeaderTitle,\n\n parentItem,\n setParentItem,\n withParentData,\n navigateToChildHandler,\n navigateToParentHandler,\n\n parentData,\n setParentData,\n parentSelected,\n setParentSelected,\n hasAnyChildWithData,\n }),\n [\n open,\n useIcons,\n slider,\n headerTitle,\n setHeaderTitle,\n parentItem,\n setParentItem,\n withParentData,\n navigateToChildHandler,\n navigateToParentHandler,\n hasAnyChildWithData,\n parentData,\n parentSelected,\n ]\n );\n\n const content = (\n <VerticalNavigationContext.Provider value={value}>\n <div\n id={id}\n className={cx(\n classes.root,\n {\n [classes.collapsed]: !open,\n [classes.slider]: slider,\n [classes.childData]: hasAnyChildWithData,\n },\n className\n )}\n {...others}\n >\n {children}\n </div>\n </VerticalNavigationContext.Provider>\n );\n\n return content;\n};\n\nexport type HvVerticalNavigationMode = \"icon\" | \"simple\";\n\nexport type HvVerticalNavigationPosition =\n | \"static\"\n | \"relative\"\n | \"fixed\"\n | \"absolute\";\n"],"names":["useDefaultProps","useClasses","useState","useMemo","fillDataWithParentId","getParentItemById","hasChildNavigationItems","useEffect","useCallback","getNavigationItemById","jsx","VerticalNavigationContext"],"mappings":";;;;;;;;;AAoEa,MAAA,uBAAuB,CAAC,UAAqC;AAClE,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IAET;AAAA,IAEA,OAAO;AAAA,IAEP,SAAS;AAAA,IAET,WAAW;AAAA,IAEX,GAAG;AAAA,EAAA,IACDA,gBAAgB,gBAAA,wBAAwB,KAAK;AACjD,QAAM,EAAE,SAAS,GAAG,IAAIC,qCAAW,WAAW;AAE9C,QAAM,CAAC,YAAY,aAAa,IAAIC,MAAA,SAA2B,CAAE,CAAA;AAEjE,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,MAAS,SAAA;AAErD,QAAM,CAAC,aAAa,cAAc,IAAIA,MAA6B,SAAA;AAGnE,QAAM,iBAAiBC,MAAA;AAAA,IACrB,MAAMC,uBAAAA,qBAAqB,UAAU;AAAA,IACrC,CAAC,UAAU;AAAA,EAAA;AAGb,QAAM,oBAAoBD,MAAA;AAAA,IACxB,MAAME,uBAAkB,kBAAA,gBAAgB,cAAc;AAAA,IACtD,CAAC,gBAAgB,cAAc;AAAA,EAAA;AAGjC,QAAM,CAAC,YAAY,aAAa,IAAIH,eAAS,iBAAiB;AAE9D,QAAM,sBAAsBC,MAAA;AAAA,IAC1B,MAAMG,yBAAAA,wBAAwB,UAAU;AAAA,IACxC,CAAC,UAAU;AAAA,EAAA;AAGbC,QAAA;AAAA,IACE,MAAM,eAAe,YAAY,KAAK;AAAA,IACtC,CAAC,YAAY,aAAa;AAAA,EAAA;AAGtB,QAAA,0BAA0BC,MAAAA,YAAY,MAAM;AAChD,kBAAcH,uBAAAA,kBAAkB,gBAAgB,WAAW,EAAE,CAAC;AAAA,EAC7D,GAAA,CAAC,YAAY,eAAe,cAAc,CAAC;AAE9C,QAAM,yBAAyBG,MAAA;AAAA,IAC7B,CAAC,OAAO,SAAS;AACf,oBAAcC,uBAAAA,sBAAsB,gBAAgB,KAAK,EAAE,CAAC;AAC5D,YAAM,gBAAgB;AAAA,IACxB;AAAA,IACA,CAAC,eAAe,cAAc;AAAA,EAAA;AAGhC,QAAM,QAAQN,MAAA;AAAA,IACZ,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAGF,QAAM,UACJO,2BAAAA,IAACC,0BAA0B,0BAAA,UAA1B,EAAmC,OAClC,UAAAD,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT,QAAQ;AAAA,QACR;AAAA,UACE,CAAC,QAAQ,SAAS,GAAG,CAAC;AAAA,UACtB,CAAC,QAAQ,MAAM,GAAG;AAAA,UAClB,CAAC,QAAQ,SAAS,GAAG;AAAA,QACvB;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,IAAA;AAAA,EAEL,EAAA,CAAA;AAGK,SAAA;AACT;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VerticalNavigationContext.cjs","sources":["../../../src/VerticalNavigation/VerticalNavigationContext.tsx"],"sourcesContent":["import { createContext
|
|
1
|
+
{"version":3,"file":"VerticalNavigationContext.cjs","sources":["../../../src/VerticalNavigation/VerticalNavigationContext.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\nexport type NavigationData<T extends React.ElementType = \"a\"> =\n React.ComponentProps<T> &\n Record<string, any> & {\n /** The id to be applied to the root element. */\n id: string;\n /** The label to be rendered on the menu item. */\n label: string;\n /** The icon to be rendered. */\n icon?: React.ReactNode;\n /** The Data children subset. */\n data?: NavigationData<T>[];\n /** Whether the item is disabled and not interactive. */\n disabled?: boolean;\n /** Whether the item has a selected state. */\n selectable?: boolean;\n };\n\ninterface VerticalNavigationContextValue {\n isOpen: boolean;\n useIcons: boolean;\n slider?: boolean;\n headerTitle?: string;\n setHeaderTitle?: React.Dispatch<React.SetStateAction<string | undefined>>;\n\n parentItem?;\n setParentItem?: React.Dispatch<React.SetStateAction<any>>;\n withParentData?;\n navigateToChildHandler?: (event, item) => void;\n navigateToParentHandler?: () => void;\n\n parentData?: NavigationData[];\n setParentData?: React.Dispatch<React.SetStateAction<any>>;\n parentSelected?;\n setParentSelected?: React.Dispatch<React.SetStateAction<any>>;\n\n hasAnyChildWithData?: boolean;\n}\n\nconst VerticalNavigationContext = createContext<VerticalNavigationContextValue>(\n {\n isOpen: true,\n useIcons: false,\n slider: false,\n }\n);\n\nexport { VerticalNavigationContext };\n"],"names":["createContext"],"mappings":";;;AAwCA,MAAM,4BAA4BA,MAAA;AAAA,EAChC;AAAA,IACE,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useClickOutside.cjs","sources":["../../../src/hooks/useClickOutside.ts"],"sourcesContent":["import { useEffect
|
|
1
|
+
{"version":3,"file":"useClickOutside.cjs","sources":["../../../src/hooks/useClickOutside.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\nexport type HvClickOutsideEvent = MouseEvent | KeyboardEvent | TouchEvent;\n\nexport const useClickOutside = <T extends HTMLElement = HTMLElement>(\n ref: React.RefObject<T>,\n handler: (event: HvClickOutsideEvent) => void\n) => {\n useEffect(() => {\n const listener = (event: HvClickOutsideEvent) => {\n const el = ref?.current;\n const isKeyUp = event.type === \"keyup\";\n const isEscape = (event as KeyboardEvent).key === \"Escape\";\n\n if (!el || el.contains((event?.target as Node) || null)) {\n return {};\n }\n\n return isKeyUp ? (isEscape ? handler(event) : null) : handler(event);\n };\n\n document.addEventListener(\"click\", listener);\n document.addEventListener(\"touchstart\", listener);\n document.addEventListener(\"keyup\", listener);\n\n return () => {\n document.removeEventListener(\"click\", listener);\n document.removeEventListener(\"touchstart\", listener);\n document.removeEventListener(\"keyup\", listener);\n };\n }, [ref, handler]);\n};\n"],"names":["useEffect"],"mappings":";;;AAIa,MAAA,kBAAkB,CAC7B,KACA,YACG;AACHA,QAAAA,UAAU,MAAM;AACR,UAAA,WAAW,CAAC,UAA+B;AAC/C,YAAM,KAAK,KAAK;AACV,YAAA,UAAU,MAAM,SAAS;AACzB,YAAA,WAAY,MAAwB,QAAQ;AAElD,UAAI,CAAC,MAAM,GAAG,SAAU,OAAO,UAAmB,IAAI,GAAG;AACvD,eAAO;MACT;AAEA,aAAO,UAAW,WAAW,QAAQ,KAAK,IAAI,OAAQ,QAAQ,KAAK;AAAA,IAAA;AAG5D,aAAA,iBAAiB,SAAS,QAAQ;AAClC,aAAA,iBAAiB,cAAc,QAAQ;AACvC,aAAA,iBAAiB,SAAS,QAAQ;AAE3C,WAAO,MAAM;AACF,eAAA,oBAAoB,SAAS,QAAQ;AACrC,eAAA,oBAAoB,cAAc,QAAQ;AAC1C,eAAA,oBAAoB,SAAS,QAAQ;AAAA,IAAA;AAAA,EAChD,GACC,CAAC,KAAK,OAAO,CAAC;AACnB;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUniqueId.cjs","sources":["../../../src/hooks/useUniqueId.ts"],"sourcesContent":["import * as React from \"react\"; // this can be optimized when react 17 support is dropped\n\n/** Credit: https://github.com/radix-ui/primitives/blob/main/packages/react/id/src/id.tsx\n * Modified slightly to suit our purposes.\n */\n// We `toString()` to prevent bundlers from trying to `import { useId } from 'react';`\nconst useReactId = (React as any)[\"useId\".toString()] || (() => undefined);\nlet count = 0;\n\nexport const useUniqueId = (\n deterministicId?: string,\n idPrefix?: string
|
|
1
|
+
{"version":3,"file":"useUniqueId.cjs","sources":["../../../src/hooks/useUniqueId.ts"],"sourcesContent":["import * as React from \"react\"; // this can be optimized when react 17 support is dropped\n\n/** Credit: https://github.com/radix-ui/primitives/blob/main/packages/react/id/src/id.tsx\n * Modified slightly to suit our purposes.\n */\n// We `toString()` to prevent bundlers from trying to `import { useId } from 'react';`\nconst useReactId = (React as any)[\"useId\".toString()] || (() => undefined);\nlet count = 0;\n\nexport const useUniqueId = (\n deterministicId?: string,\n /**\n * @deprecated\n * Users should pick between a fully deterministic or fully generated id\n * @example\n * useUniqueId(setId(idPrefix, deterministicId))\n * */\n idPrefix?: string,\n): string => {\n const [id, setId] = React.useState<string | undefined>(useReactId());\n\n React.useLayoutEffect(() => {\n // eslint-disable-next-line no-plusplus\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId, idPrefix]);\n\n return deterministicId || (idPrefix ? idPrefix + id : id ?? \"\");\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAMA,MAAM,aAAcA,iBAAc,QAAQ,SAAU,CAAA,MAAM,MAAM;AAChE,IAAI,QAAQ;AAEC,MAAA,cAAc,CACzB,iBAOA,aACW;AACX,QAAM,CAAC,IAAI,KAAK,IAAIA,iBAAM,SAA6B,YAAY;AAEnEA,mBAAM,gBAAgB,MAAM;AAE1B,QAAI,CAAC;AAAiB,YAAM,CAAC,YAAY,WAAW,OAAO,OAAO,CAAC;AAAA,EAAA,GAClE,CAAC,iBAAiB,QAAQ,CAAC;AAE9B,SAAO,oBAAoB,WAAW,WAAW,KAAK,MAAM;AAC9D;;"}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -309,6 +309,8 @@ const VerticalNavigationContext = require("./VerticalNavigation/VerticalNavigati
|
|
|
309
309
|
const TableSection_styles = require("./TableSection/TableSection.styles.cjs");
|
|
310
310
|
const TableSection = require("./TableSection/TableSection.cjs");
|
|
311
311
|
const IconButton = require("./IconButton/IconButton.cjs");
|
|
312
|
+
const Skeleton_styles = require("./Skeleton/Skeleton.styles.cjs");
|
|
313
|
+
const Skeleton = require("./Skeleton/Skeleton.cjs");
|
|
312
314
|
const uikitReactShared = require("@hitachivantara/uikit-react-shared");
|
|
313
315
|
Object.defineProperty(exports, "ds3", {
|
|
314
316
|
enumerable: true,
|
|
@@ -693,6 +695,8 @@ exports.VerticalNavigationContext = VerticalNavigationContext.VerticalNavigation
|
|
|
693
695
|
exports.tableSectionClasses = TableSection_styles.staticClasses;
|
|
694
696
|
exports.HvTableSection = TableSection.HvTableSection;
|
|
695
697
|
exports.HvIconButton = IconButton.HvIconButton;
|
|
698
|
+
exports.skeletonClasses = Skeleton_styles.staticClasses;
|
|
699
|
+
exports.HvSkeleton = Skeleton.HvSkeleton;
|
|
696
700
|
Object.defineProperty(exports, "EmotionContext", {
|
|
697
701
|
enumerable: true,
|
|
698
702
|
get: () => uikitReactShared.EmotionContext
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -24,7 +24,8 @@ const HvProvider = ({
|
|
|
24
24
|
emotionCache: emotionCacheProp,
|
|
25
25
|
classNameKey = uikitReactShared.defaultCacheKey
|
|
26
26
|
}) => {
|
|
27
|
-
const
|
|
27
|
+
const generatedId = useUniqueId.useUniqueId();
|
|
28
|
+
const scopedRootId = `${scopedRootPrefix}-${generatedId}`;
|
|
28
29
|
const themesList = theme.processThemes(themes);
|
|
29
30
|
const emotionCache = React.useMemo(() => {
|
|
30
31
|
if (emotionCacheProp)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Provider.cjs","sources":["../../../src/providers/Provider.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Provider.cjs","sources":["../../../src/providers/Provider.tsx"],"sourcesContent":["import { useMemo } from \"react\";\n\nimport createCache, { EmotionCache } from \"@emotion/cache\";\nimport {\n css as cssReact,\n Global,\n CacheProvider,\n ClassNames,\n} from \"@emotion/react\";\n\nimport {\n CssBaseline,\n CssScopedBaseline,\n getThemesVars,\n HvThemeStructure,\n} from \"@hitachivantara/uikit-styles\";\n\nimport { getElementById } from \"../utils/document\";\nimport { processThemes } from \"../utils/theme\";\nimport { HvTheme } from \"../types/theme\";\nimport { useUniqueId } from \"../hooks/useUniqueId\";\n\nimport {\n HvThemeProvider,\n defaultCacheKey,\n defaultEmotionCache,\n} from \"./ThemeProvider\";\n\n// Provider props\nexport interface HvProviderProps {\n /**\n * Your component tree.\n */\n children?: React.ReactNode;\n /**\n * Id of your root element.\n */\n rootElementId?: string;\n /**\n * By default the baseline styles are applied globally, `global`, to the application for the UI Kit components to work properly.\n * If you need to scope the baseline styles to avoid styling conflicts, you can set this property to `scoped`.\n * To scope the baseline to your root, you need to add the `rootElementId` property.\n * If the `rootElementId` property is not set, the baseline will be scoped to a new container, `hv-uikit-scoped-root*`, created around your content.\n * If you are providing your own baseline styles, you can set this property to `none` to disable the baseline styles.\n */\n cssBaseline?: \"global\" | \"scoped\" | \"none\";\n /**\n * By default the theme styles are applied globally, `global`, to the application.\n * If you need to scope the theme styles to avoid styling conflicts, you can set this property to `scoped`.\n * To scope the theme to your root, you need to add the `rootElementId` property.\n * If the `rootElementId` property is not set, the theme will be scoped to a new container, `hv-uikit-scoped-root*`, created around your content.\n */\n cssTheme?: \"global\" | \"scoped\";\n /**\n * The string used to prefix the class names and uniquely identify them. The key can only contain lower case alphabetical characters.\n * This is useful to avoid class name collisions.\n *\n * If `emotionCache` is passed, this is value is ignored.\n *\n * @default \"hv\"\n */\n classNameKey?: string;\n /**\n * The emotion cache instance to use. If no value is provided, the default cache is used.\n */\n emotionCache?: EmotionCache;\n /**\n * List of themes to be used by UI Kit.\n * You can provide your own themes created with the `createTheme` utility and/or the default themes `ds3` and `ds5` provided by UI Kit.\n *\n * If no value is provided, the `ds5` theme will be used.\n */\n themes?: (HvTheme | HvThemeStructure)[];\n /**\n * The active theme. It must be one of the themes passed to `themes`.\n *\n * If no value is provided, the first theme from the `themes` list is used. If no `themes` list is provided, the `ds5` theme will be used.\n */\n theme?: string;\n /**\n * The active color mode. It must be one of the color modes of the active theme.\n *\n * If no value is provided, the first color mode defined in the active theme is used.\n * For the default themes `ds3` and `ds5`, the `dawn` color mode is the one used.\n */\n colorMode?: string;\n}\n\nconst scopedRootPrefix = \"hv-uikit-scoped-root\" as const;\n\n/**\n * Enables theming capabilities and makes cross-component theme properties available down the tree.\n */\nexport const HvProvider = ({\n children,\n rootElementId,\n cssBaseline = \"global\",\n cssTheme = \"global\",\n themes,\n theme,\n colorMode,\n emotionCache: emotionCacheProp,\n classNameKey = defaultCacheKey,\n}: HvProviderProps) => {\n const generatedId = useUniqueId();\n const scopedRootId = `${scopedRootPrefix}-${generatedId}`;\n\n // Themes\n const themesList: (HvTheme | HvThemeStructure)[] = processThemes(themes);\n\n // Emotion cache\n // Moves UI Kit styles to the top of the <head> so they're loaded first\n // This enables users to override the UI Kit styles if necessary\n const emotionCache = useMemo(() => {\n if (emotionCacheProp) return emotionCacheProp;\n // reuse the default shared cache if `classNameKey` is the same\n if (classNameKey === defaultCacheKey) return defaultEmotionCache;\n\n return createCache({ key: classNameKey, prepend: true });\n }, [classNameKey, emotionCacheProp]);\n\n return (\n <CacheProvider value={emotionCache}>\n <Global\n styles={cssReact`\n ${\n cssBaseline === \"global\" && {\n [`@layer hv-uikit-baseline`]: {\n ...CssBaseline,\n },\n }\n }\n ${getThemesVars(themesList)}\n `}\n />\n <HvThemeProvider\n themes={themesList}\n theme={theme || themesList[0].name}\n emotionCache={emotionCache}\n colorMode={colorMode || Object.keys(themesList[0].colors.modes)[0]}\n themeRootId={\n cssTheme === \"scoped\" ? rootElementId || scopedRootId : undefined\n }\n >\n <ClassNames>\n {({ css }) => {\n if (cssBaseline === \"scoped\") {\n const rootElement = getElementById(rootElementId);\n\n if (rootElement) {\n rootElement.classList.add(\n css({\n [`@layer ${rootElementId}-baseline`]: {\n ...CssScopedBaseline,\n },\n })\n );\n }\n }\n\n return (cssTheme === \"scoped\" || cssBaseline === \"scoped\") &&\n !rootElementId ? (\n <div\n id={scopedRootId}\n className={\n cssBaseline === \"scoped\"\n ? css({\n [`@layer ${rootElementId}-baseline`]: {\n ...CssScopedBaseline,\n },\n })\n : undefined\n }\n >\n {children}\n </div>\n ) : (\n children\n );\n }}\n </ClassNames>\n </HvThemeProvider>\n </CacheProvider>\n );\n};\n"],"names":["theme","defaultCacheKey","useUniqueId","processThemes","useMemo","defaultEmotionCache","createCache","jsxs","CacheProvider","jsx","Global","cssReact","CssBaseline","getThemesVars","HvThemeProvider","ClassNames","getElementById","CssScopedBaseline"],"mappings":";;;;;;;;;;;;;;AAwFA,MAAM,mBAAmB;AAKlB,MAAM,aAAa,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AAAA,EACX;AAAA,EAAA,OACAA;AAAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,eAAeC,iBAAA;AACjB,MAAuB;AACrB,QAAM,cAAcC,YAAAA;AACpB,QAAM,eAAe,GAAG,gBAAgB,IAAI,WAAW;AAGjD,QAAA,aAA6CC,oBAAc,MAAM;AAKjE,QAAA,eAAeC,MAAAA,QAAQ,MAAM;AAC7B,QAAA;AAAyB,aAAA;AAE7B,QAAI,iBAAiBH,iBAAA;AAAwB,aAAAI;AAE7C,WAAOC,qBAAAA,QAAY,EAAE,KAAK,cAAc,SAAS,MAAM;AAAA,EAAA,GACtD,CAAC,cAAc,gBAAgB,CAAC;AAGjC,SAAAC,2BAAA,KAACC,MAAc,eAAA,EAAA,OAAO,cACpB,UAAA;AAAA,IAAAC,2BAAA;AAAA,MAACC,MAAA;AAAA,MAAA;AAAA,QACC,QAAQC,MAAAA;AAAAA,YAEJ,gBAAgB,YAAY;AAAA,UAC1B,CAAC,0BAA0B,GAAG;AAAA,YAC5B,GAAGC,YAAA;AAAA,UACL;AAAA,QAAA,CAEJ;AAAA,YACEC,YAAAA,cAAc,UAAU,CAAC;AAAA;AAAA,MAAA;AAAA,IAE/B;AAAA,IACAJ,2BAAA;AAAA,MAACK,cAAA;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QACR,OAAOd,WAAS,WAAW,CAAC,EAAE;AAAA,QAC9B;AAAA,QACA,WAAW,aAAa,OAAO,KAAK,WAAW,CAAC,EAAE,OAAO,KAAK,EAAE,CAAC;AAAA,QACjE,aACE,aAAa,WAAW,iBAAiB,eAAe;AAAA,QAG1D,UAACS,2BAAA,IAAAM,MAAA,YAAA,EACE,UAAC,CAAA,EAAE,UAAU;AACZ,cAAI,gBAAgB,UAAU;AACtB,kBAAA,cAAcC,wBAAe,aAAa;AAEhD,gBAAI,aAAa;AACf,0BAAY,UAAU;AAAA,gBACpB,IAAI;AAAA,kBACF,CAAC,UAAU,aAAa,WAAW,GAAG;AAAA,oBACpC,GAAGC,YAAA;AAAA,kBACL;AAAA,gBAAA,CACD;AAAA,cAAA;AAAA,YAEL;AAAA,UACF;AAEA,kBAAQ,aAAa,YAAY,gBAAgB,aAC/C,CAAC,gBACDR,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,cACJ,WACE,gBAAgB,WACZ,IAAI;AAAA,gBACF,CAAC,UAAU,aAAa,WAAW,GAAG;AAAA,kBACpC,GAAGQ,YAAA;AAAA,gBACL;AAAA,cACD,CAAA,IACD;AAAA,cAGL;AAAA,YAAA;AAAA,UAGH,IAAA;AAAA,QAAA,GAGN;AAAA,MAAA;AAAA,IACF;AAAA,EACF,EAAA,CAAA;AAEJ;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setId.cjs","sources":["../../../src/utils/setId.ts"],"sourcesContent":["import { uniqueId } from \"./helpers\";\n\nexport const setId = (...args: any[]) =>\n args.some((arg) => arg == null) ? undefined : args.join(\"-\");\n\nexport const setUid = (id: string, suffix: string) => {\n const uid = setId(id, suffix);\n return uid ? uniqueId(uid) : undefined;\n};\n"],"names":["uniqueId"],"mappings":";;;AAEO,MAAM,QAAQ,IAAI,SACvB,KAAK,KAAK,CAAC,QAAQ,OAAO,IAAI,IAAI,SAAY,KAAK,KAAK,GAAG;
|
|
1
|
+
{"version":3,"file":"setId.cjs","sources":["../../../src/utils/setId.ts"],"sourcesContent":["import { uniqueId } from \"./helpers\";\n\nexport const setId = (...args: any[]) =>\n args.some((arg) => arg == null) ? undefined : args.join(\"-\");\n\n/** @deprecated use `useUniqueId` instead */\nexport const setUid = (id: string, suffix: string) => {\n const uid = setId(id, suffix);\n return uid ? uniqueId(uid) : undefined;\n};\n"],"names":["uniqueId"],"mappings":";;;AAEO,MAAM,QAAQ,IAAI,SACvB,KAAK,KAAK,CAAC,QAAQ,OAAO,IAAI,IAAI,SAAY,KAAK,KAAK,GAAG;AAGhD,MAAA,SAAS,CAAC,IAAY,WAAmB;AAC9C,QAAA,MAAM,MAAM,IAAI,MAAM;AACrB,SAAA,MAAMA,QAAS,SAAA,GAAG,IAAI;AAC/B;;;"}
|
|
@@ -24,7 +24,7 @@ const HvAccordion = (props) => {
|
|
|
24
24
|
labelVariant = "label",
|
|
25
25
|
...others
|
|
26
26
|
} = useDefaultProps("HvAccordion", props);
|
|
27
|
-
const id = useUniqueId(idProp
|
|
27
|
+
const id = useUniqueId(idProp);
|
|
28
28
|
const { classes, cx } = useClasses(classesProp);
|
|
29
29
|
const [isOpen, setIsOpen] = useControlled(expanded, Boolean(defaultExpanded));
|
|
30
30
|
const handleAction = useCallback(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.js","sources":["../../../src/Accordion/Accordion.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Accordion.js","sources":["../../../src/Accordion/Accordion.tsx"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\n\nimport { DropDownXS, DropUpXS } from \"@hitachivantara/uikit-react-icons\";\n\nimport { useDefaultProps } from \"../hooks/useDefaultProps\";\nimport { useControlled } from \"../hooks/useControlled\";\nimport { useUniqueId } from \"../hooks/useUniqueId\";\n\nimport { HvBaseProps } from \"../types/generic\";\nimport { setId } from \"../utils/setId\";\nimport { HvTypographyVariants, HvTypography } from \"../Typography\";\nimport { ExtractNames } from \"../utils/classes\";\n\nimport { staticClasses, useClasses } from \"./Accordion.styles\";\n\nexport { staticClasses as accordionClasses };\n\nexport type HvAccordionClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvAccordionProps\n extends HvBaseProps<HTMLDivElement, \"onChange\" | \"children\"> {\n /**\n * Content to be rendered\n */\n children: React.ReactNode;\n /**\n * The accordion label button.\n */\n label?: string;\n /**\n * The function that will be executed whenever the accordion toggles it will receive the state of the accordion\n */\n onChange?: (event: React.SyntheticEvent, value: boolean) => void;\n /**\n * Whether the accordion is open or not, if this property is defined the accordion must be fully controlled.\n */\n expanded?: boolean;\n /**\n * When uncontrolled, defines the initial expanded state.\n */\n defaultExpanded?: boolean;\n /**\n * An object containing props to be passed onto container holding the accordion children.\n */\n containerProps?: React.HTMLAttributes<HTMLDivElement>;\n /**\n * Heading Level to apply to accordion button if ´undefined´ the button won't have a header wrapper.\n */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * Is the accordion disabled.\n */\n disabled?: boolean;\n /**\n * Typography variant for the label.\n */\n labelVariant?: HvTypographyVariants;\n /**\n * A Jss Object used to override or extend the styles applied.\n */\n classes?: HvAccordionClasses;\n}\n\n/**\n * A accordion is a design element that expands in place to expose hidden information.\n */\nexport const HvAccordion = (props: HvAccordionProps) => {\n const {\n id: idProp,\n className,\n classes: classesProp,\n disabled = false,\n label,\n onChange,\n children,\n expanded,\n headingLevel,\n defaultExpanded = false,\n containerProps,\n labelVariant = \"label\",\n ...others\n } = useDefaultProps(\"HvAccordion\", props);\n\n const id = useUniqueId(idProp);\n\n const { classes, cx } = useClasses(classesProp);\n\n const [isOpen, setIsOpen] = useControlled(expanded, Boolean(defaultExpanded));\n\n const handleAction = useCallback(\n (event: React.SyntheticEvent) => {\n if (!disabled) {\n onChange?.(event, isOpen);\n setIsOpen(!isOpen);\n return true;\n }\n return false;\n },\n [disabled, onChange, isOpen, setIsOpen]\n );\n\n const handleClick = useCallback(\n (event: React.SyntheticEvent) => {\n handleAction(event);\n event.preventDefault();\n event.stopPropagation();\n },\n [handleAction]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n let isEventHandled = false;\n const { key } = event;\n\n if (\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.currentTarget !== event.target\n ) {\n return;\n }\n switch (key) {\n case \"Enter\":\n case \" \":\n isEventHandled = handleAction(event);\n break;\n default:\n return;\n }\n\n if (isEventHandled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [handleAction]\n );\n\n const accordionHeaderId = setId(id, \"button\");\n const accordionContainer = setId(id, \"container\");\n const accordionHeader = useMemo(() => {\n const color = disabled ? \"secondary_60\" : undefined;\n\n const accordionButton = (\n <HvTypography\n id={accordionHeaderId}\n component=\"div\"\n role=\"button\"\n className={cx(classes.label, { [classes.disabled]: disabled })}\n disabled={disabled}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n variant={labelVariant}\n aria-expanded={isOpen}\n aria-disabled={disabled}\n >\n {isOpen ? <DropUpXS color={color} /> : <DropDownXS color={color} />}\n {label}\n </HvTypography>\n );\n\n return headingLevel === undefined ? (\n accordionButton\n ) : (\n <HvTypography component={`h${headingLevel}`} variant={labelVariant}>\n {accordionButton}\n </HvTypography>\n );\n }, [\n cx,\n classes,\n handleClick,\n handleKeyDown,\n label,\n accordionHeaderId,\n disabled,\n headingLevel,\n isOpen,\n labelVariant,\n ]);\n\n return (\n <div id={id} className={cx(classes.root, className)} {...others}>\n {accordionHeader}\n <div\n id={accordionContainer}\n role=\"region\"\n aria-labelledby={accordionHeaderId}\n className={cx(classes.container, { [classes.hidden]: !isOpen })}\n hidden={!isOpen}\n {...containerProps}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAkEa,MAAA,cAAc,CAAC,UAA4B;AAChD,QAAA;AAAA,IACJ,IAAI;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,IACA,eAAe;AAAA,IACf,GAAG;AAAA,EAAA,IACD,gBAAgB,eAAe,KAAK;AAElC,QAAA,KAAK,YAAY,MAAM;AAE7B,QAAM,EAAE,SAAS,GAAG,IAAI,WAAW,WAAW;AAExC,QAAA,CAAC,QAAQ,SAAS,IAAI,cAAc,UAAU,QAAQ,eAAe,CAAC;AAE5E,QAAM,eAAe;AAAA,IACnB,CAAC,UAAgC;AAC/B,UAAI,CAAC,UAAU;AACb,mBAAW,OAAO,MAAM;AACxB,kBAAU,CAAC,MAAM;AACV,eAAA;AAAA,MACT;AACO,aAAA;AAAA,IACT;AAAA,IACA,CAAC,UAAU,UAAU,QAAQ,SAAS;AAAA,EAAA;AAGxC,QAAM,cAAc;AAAA,IAClB,CAAC,UAAgC;AAC/B,mBAAa,KAAK;AAClB,YAAM,eAAe;AACrB,YAAM,gBAAgB;AAAA,IACxB;AAAA,IACA,CAAC,YAAY;AAAA,EAAA;AAGf,QAAM,gBAAgB;AAAA,IACpB,CAAC,UAA+C;AAC9C,UAAI,iBAAiB;AACf,YAAA,EAAE,IAAQ,IAAA;AAGd,UAAA,MAAM,UACN,MAAM,WACN,MAAM,WACN,MAAM,kBAAkB,MAAM,QAC9B;AACA;AAAA,MACF;AACA,cAAQ,KAAK;AAAA,QACX,KAAK;AAAA,QACL,KAAK;AACH,2BAAiB,aAAa,KAAK;AACnC;AAAA,QACF;AACE;AAAA,MACJ;AAEA,UAAI,gBAAgB;AAClB,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,YAAY;AAAA,EAAA;AAGT,QAAA,oBAAoB,MAAM,IAAI,QAAQ;AACtC,QAAA,qBAAqB,MAAM,IAAI,WAAW;AAC1C,QAAA,kBAAkB,QAAQ,MAAM;AAC9B,UAAA,QAAQ,WAAW,iBAAiB;AAE1C,UAAM,kBACJ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,QACJ,WAAU;AAAA,QACV,MAAK;AAAA,QACL,WAAW,GAAG,QAAQ,OAAO,EAAE,CAAC,QAAQ,QAAQ,GAAG,UAAU;AAAA,QAC7D;AAAA,QACA,UAAU;AAAA,QACV,WAAW;AAAA,QACX,SAAS;AAAA,QACT,SAAS;AAAA,QACT,iBAAe;AAAA,QACf,iBAAe;AAAA,QAEd,UAAA;AAAA,UAAA,6BAAU,UAAS,EAAA,MAAA,CAAc,IAAK,oBAAC,cAAW,OAAc;AAAA,UAChE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAIE,WAAA,iBAAiB,SACtB,kBAEC,oBAAA,cAAA,EAAa,WAAW,IAAI,YAAY,IAAI,SAAS,cACnD,UACH,gBAAA,CAAA;AAAA,EAAA,GAED;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAGC,SAAA,qBAAC,OAAI,EAAA,IAAQ,WAAW,GAAG,QAAQ,MAAM,SAAS,GAAI,GAAG,QACtD,UAAA;AAAA,IAAA;AAAA,IACD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,QACJ,MAAK;AAAA,QACL,mBAAiB;AAAA,QACjB,WAAW,GAAG,QAAQ,WAAW,EAAE,CAAC,QAAQ,MAAM,GAAG,CAAC,QAAQ;AAAA,QAC9D,QAAQ,CAAC;AAAA,QACR,GAAG;AAAA,QAEH;AAAA,MAAA;AAAA,IACH;AAAA,EACF,EAAA,CAAA;AAEJ;"}
|
|
@@ -56,7 +56,7 @@ const HvAppSwitcherAction = ({
|
|
|
56
56
|
[application, disabled, isSelected, onClickCallback]
|
|
57
57
|
);
|
|
58
58
|
const isLink = url != null;
|
|
59
|
-
const descriptionElementId = useUniqueId(id
|
|
59
|
+
const descriptionElementId = useUniqueId(id);
|
|
60
60
|
const renderApplication = useCallback(
|
|
61
61
|
(children) => {
|
|
62
62
|
const typographyProps = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Action.js","sources":["../../../../src/AppSwitcher/Action/Action.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nimport { theme, getColor, HvColorAny } from \"@hitachivantara/uikit-styles\";\nimport { Info } from \"@hitachivantara/uikit-react-icons\";\n\nimport { HvAvatar } from \"../../Avatar\";\nimport { HvListItem } from \"../../ListContainer\";\nimport { HvTypography } from \"../../Typography\";\nimport { HvTooltip } from \"../../Tooltip\";\nimport { HvOverflowTooltip } from \"../../OverflowTooltip\";\nimport { HvBaseProps } from \"../../types/generic\";\nimport { useUniqueId } from \"../../hooks/useUniqueId\";\nimport { ExtractNames } from \"../../utils/classes\";\n\nimport { useClasses, staticClasses } from \"./Action.styles\";\n\nexport { staticClasses as appSwitcherActionClasses };\n\nexport type HvAppSwitcherActionClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvAppSwitcherActionApplication {\n /** Id of the application. */\n id?: string;\n /** Name of the application, this is the value that will be displayed on the component. */\n name: string;\n /** URL with the icon location to be used to represent the application. iconUrl will only be used if no iconElement is provided. */\n iconUrl?: string;\n /** Element to be added as the icon representing the application. The iconElement will be the primary option to be displayed. */\n iconElement?: React.ReactElement;\n /** Small description of the application. */\n description?: string;\n /** URL where the application is accessible. */\n url?: string;\n /** Defines if the application should be opened in the same tab or in a new one. */\n target?: \"_top\" | \"_blank\";\n /** If true, the item will be disabled. */\n disabled?: boolean;\n /** True when the application is selected, false otherwise. */\n isSelected?: boolean;\n /** The color of the application. */\n color?: HvColorAny;\n}\n\nexport interface HvAppSwitcherActionProps extends HvBaseProps {\n /** The application data to be used to render the Action object. */\n application: HvAppSwitcherActionApplication;\n /** Callback triggered when the action is clicked. */\n onClickCallback?: (\n event: React.MouseEvent,\n application: HvAppSwitcherActionApplication\n ) => void;\n /** Must return a boolean stating if the action element is selected or not. */\n isSelectedCallback?: (application: HvAppSwitcherActionApplication) => boolean;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvAppSwitcherActionClasses;\n}\n\nexport const HvAppSwitcherAction = ({\n id,\n className,\n classes: classesProp,\n application,\n onClickCallback = () => {},\n isSelectedCallback = () => false,\n}: HvAppSwitcherActionProps) => {\n const { classes, cx } = useClasses(classesProp);\n\n const { name, description, disabled, iconElement, iconUrl, url, target } =\n application;\n\n const color = disabled\n ? theme.colors.secondary_60\n : getColor(application?.color, theme.colors.secondary);\n\n const [validIconUrl, setValidIconUrl] = useState<boolean>(true);\n\n const renderApplicationIcon = () => {\n if (iconElement) {\n return iconElement;\n }\n\n if (iconUrl && validIconUrl) {\n return (\n <img\n className={classes.iconUrl}\n src={iconUrl}\n onError={() => {\n setValidIconUrl(false);\n }}\n alt={description}\n />\n );\n }\n\n const brokenTitle = name.split(\" \");\n const initials =\n brokenTitle[0].substring(0, 1) +\n (brokenTitle[1] ? brokenTitle[1].substring(0, 1) : \"\");\n\n return (\n <HvAvatar size=\"sm\" backgroundColor={color} variant=\"square\" aria-hidden>\n {initials}\n </HvAvatar>\n );\n };\n\n const isSelected = isSelectedCallback(application);\n\n /**\n * Handles the onClick event and triggers the appropriate callback if it exists.\n */\n const handleOnClick = useCallback(\n (event: React.MouseEvent) => {\n if (disabled) {\n event.preventDefault();\n return;\n }\n\n onClickCallback?.(event, { ...application, isSelected });\n },\n [application, disabled, isSelected, onClickCallback]\n );\n\n const isLink = url != null;\n const descriptionElementId = useUniqueId(id
|
|
1
|
+
{"version":3,"file":"Action.js","sources":["../../../../src/AppSwitcher/Action/Action.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nimport { theme, getColor, HvColorAny } from \"@hitachivantara/uikit-styles\";\nimport { Info } from \"@hitachivantara/uikit-react-icons\";\n\nimport { HvAvatar } from \"../../Avatar\";\nimport { HvListItem } from \"../../ListContainer\";\nimport { HvTypography } from \"../../Typography\";\nimport { HvTooltip } from \"../../Tooltip\";\nimport { HvOverflowTooltip } from \"../../OverflowTooltip\";\nimport { HvBaseProps } from \"../../types/generic\";\nimport { useUniqueId } from \"../../hooks/useUniqueId\";\nimport { ExtractNames } from \"../../utils/classes\";\n\nimport { useClasses, staticClasses } from \"./Action.styles\";\n\nexport { staticClasses as appSwitcherActionClasses };\n\nexport type HvAppSwitcherActionClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvAppSwitcherActionApplication {\n /** Id of the application. */\n id?: string;\n /** Name of the application, this is the value that will be displayed on the component. */\n name: string;\n /** URL with the icon location to be used to represent the application. iconUrl will only be used if no iconElement is provided. */\n iconUrl?: string;\n /** Element to be added as the icon representing the application. The iconElement will be the primary option to be displayed. */\n iconElement?: React.ReactElement;\n /** Small description of the application. */\n description?: string;\n /** URL where the application is accessible. */\n url?: string;\n /** Defines if the application should be opened in the same tab or in a new one. */\n target?: \"_top\" | \"_blank\";\n /** If true, the item will be disabled. */\n disabled?: boolean;\n /** True when the application is selected, false otherwise. */\n isSelected?: boolean;\n /** The color of the application. */\n color?: HvColorAny;\n}\n\nexport interface HvAppSwitcherActionProps extends HvBaseProps {\n /** The application data to be used to render the Action object. */\n application: HvAppSwitcherActionApplication;\n /** Callback triggered when the action is clicked. */\n onClickCallback?: (\n event: React.MouseEvent,\n application: HvAppSwitcherActionApplication\n ) => void;\n /** Must return a boolean stating if the action element is selected or not. */\n isSelectedCallback?: (application: HvAppSwitcherActionApplication) => boolean;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvAppSwitcherActionClasses;\n}\n\nexport const HvAppSwitcherAction = ({\n id,\n className,\n classes: classesProp,\n application,\n onClickCallback = () => {},\n isSelectedCallback = () => false,\n}: HvAppSwitcherActionProps) => {\n const { classes, cx } = useClasses(classesProp);\n\n const { name, description, disabled, iconElement, iconUrl, url, target } =\n application;\n\n const color = disabled\n ? theme.colors.secondary_60\n : getColor(application?.color, theme.colors.secondary);\n\n const [validIconUrl, setValidIconUrl] = useState<boolean>(true);\n\n const renderApplicationIcon = () => {\n if (iconElement) {\n return iconElement;\n }\n\n if (iconUrl && validIconUrl) {\n return (\n <img\n className={classes.iconUrl}\n src={iconUrl}\n onError={() => {\n setValidIconUrl(false);\n }}\n alt={description}\n />\n );\n }\n\n const brokenTitle = name.split(\" \");\n const initials =\n brokenTitle[0].substring(0, 1) +\n (brokenTitle[1] ? brokenTitle[1].substring(0, 1) : \"\");\n\n return (\n <HvAvatar size=\"sm\" backgroundColor={color} variant=\"square\" aria-hidden>\n {initials}\n </HvAvatar>\n );\n };\n\n const isSelected = isSelectedCallback(application);\n\n /**\n * Handles the onClick event and triggers the appropriate callback if it exists.\n */\n const handleOnClick = useCallback(\n (event: React.MouseEvent) => {\n if (disabled) {\n event.preventDefault();\n return;\n }\n\n onClickCallback?.(event, { ...application, isSelected });\n },\n [application, disabled, isSelected, onClickCallback]\n );\n\n const isLink = url != null;\n const descriptionElementId = useUniqueId(id);\n\n const renderApplication = useCallback(\n (children: React.ReactNode) => {\n const typographyProps = {\n className: classes.typography,\n onClick: handleOnClick,\n style: { borderColor: color },\n \"aria-label\": name,\n ...(description && { \"aria-describedby\": descriptionElementId }),\n };\n\n if (isLink) {\n return (\n <HvTypography\n component=\"a\"\n href={url}\n target={target || \"_top\"}\n {...typographyProps}\n >\n {children}\n </HvTypography>\n );\n }\n\n return (\n <HvTypography component=\"button\" {...typographyProps}>\n {children}\n </HvTypography>\n );\n },\n [\n classes.typography,\n color,\n description,\n descriptionElementId,\n handleOnClick,\n isLink,\n name,\n target,\n url,\n ]\n );\n\n return (\n <HvListItem\n id={id}\n interactive\n tabIndex={0}\n selected={isSelected}\n disabled={disabled}\n className={cx(\n classes.root,\n { [classes.disabled]: disabled, [classes.selected]: isSelected },\n className\n )}\n >\n {/* As HvTooltip don't have the id prop, is not possible to use the aria-labelledby to reference it.\n In substitution is used the aria-label with the \"title\" value */}\n {renderApplication(\n <>\n <div className={classes.icon}>{renderApplicationIcon()}</div>\n\n <HvOverflowTooltip\n paragraphOverflow\n className={classes.title}\n placement=\"top-start\"\n data={name}\n classes={{\n tooltipAnchorParagraph: classes.titleAnchor,\n }}\n />\n\n {description && (\n <HvTooltip\n disableFocusListener\n disableTouchListener\n title={description}\n >\n <div>\n <Info\n className={classes.iconInfo}\n role=\"img\"\n aria-label={description}\n id={descriptionElementId}\n />\n </div>\n </HvTooltip>\n )}\n </>\n )}\n </HvListItem>\n );\n};\n"],"names":[],"mappings":"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"}
|