@geotab/zenith 3.8.0 → 3.9.0-beta.1
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/README.md +11 -12
- package/dist/button/button.d.ts +2 -1
- package/dist/button/button.js +3 -3
- package/dist/calendar/calendar.js +200 -3
- package/dist/card/card.d.ts +1 -1
- package/dist/card/card.js +1 -1
- package/dist/card/components/cardButton/cardButton.d.ts +2 -1
- package/dist/card/components/cardButton/cardButton.js +5 -3
- package/dist/card/helpers/getIconTypeFromStatus.d.ts +1 -1
- package/dist/chart/barChart/getBarLegendItems.js +3 -5
- package/dist/chart/lineChart/getLineLegendItems.js +7 -7
- package/dist/chart/pieChart/centerTextPlugin.js +13 -5
- package/dist/chart/pieChart/getPieLegendItems.js +8 -12
- package/dist/chart/pieChart.js +13 -11
- package/dist/chart/plugins/legend/interfaces.d.ts +1 -1
- package/dist/commonHelpers/generateId.d.ts +8 -0
- package/dist/commonHelpers/generateId.js +8 -0
- package/dist/commonHelpers/hooks/ssrProvider.d.ts +14 -0
- package/dist/commonHelpers/hooks/ssrProvider.js +12 -0
- package/dist/commonHelpers/hooks/useClientReady.js +3 -1
- package/dist/commonHelpers/hooks/useDeviceType.js +6 -2
- package/dist/commonHelpers/hooks/useIsomorphicLayoutEffect.d.ts +2 -0
- package/dist/commonHelpers/hooks/useIsomorphicLayoutEffect.js +6 -0
- package/dist/commonHelpers/hooks/useMobile.js +4 -3
- package/dist/commonHelpers/hooks/usePortal.js +2 -5
- package/dist/commonHelpers/isDomEnv.js +1 -2
- package/dist/commonHelpers/useUniqueId.d.ts +6 -0
- package/dist/commonHelpers/useUniqueId.js +8 -2
- package/dist/commonHelpers/utils.d.ts +0 -1
- package/dist/commonHelpers/utils.js +1 -3
- package/dist/commonStyles/common.less +13 -1
- package/dist/commonStyles/fonts/notosarabic/LICENSE.txt +93 -0
- package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Bold.woff +0 -0
- package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Bold.woff2 +0 -0
- package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Medium.woff +0 -0
- package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Medium.woff2 +0 -0
- package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Regular.woff +0 -0
- package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Regular.woff2 +0 -0
- package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-SemiBold.woff +0 -0
- package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-SemiBold.woff2 +0 -0
- package/dist/commonStyles/fonts/notosarabic.less +43 -0
- package/dist/commonStyles/pillStyles/pillContent.less +2 -3
- package/dist/commonStyles/pillStyles/pillStyles.less +1 -2
- package/dist/commonStyles/pillStyles/pillTextContent.less +2 -2
- package/dist/commonStyles/typography/typography.less +617 -249
- package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +5 -3
- package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +2 -38
- package/dist/dateInputInner/dateInputInnerControlBlock.js +12 -8
- package/dist/dateRangeRaw/dateRangeRaw.js +5 -1
- package/dist/dialog/dialog.js +4 -3
- package/dist/feedbackContainer/feedbackContainer.js +4 -4
- package/dist/fileUpload/fileUpload.js +21 -12
- package/dist/filters/components/filtersSidePanel.d.ts +1 -1
- package/dist/filters/components/filtersSidePanel.js +123 -116
- package/dist/filters/filters.js +1 -2
- package/dist/filtersBar/filtersBar.d.ts +2 -0
- package/dist/filtersBar/filtersBar.js +5 -3
- package/dist/filtersBar/filtersBarActions/filtersBarActions.js +3 -1
- package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +3 -0
- package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.d.ts +1 -1
- package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +86 -80
- package/dist/formFieldError/formFieldError.d.ts +2 -1
- package/dist/formFieldError/formFieldError.js +2 -2
- package/dist/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +1 -1
- package/dist/index.css +3707 -2151
- package/dist/index.d.ts +3 -5
- package/dist/index.js +24 -29
- package/dist/menu/components/menuItem.js +4 -4
- package/dist/menu/controlledMenu.js +4 -4
- package/dist/nav/nav.js +10 -5
- package/dist/nav/navAddMenu/navAddMenu.js +1 -2
- package/dist/nav/navEditList/navEditListUtils.d.ts +1 -1
- package/dist/nav/navEditList/navEditListUtils.js +2 -1
- package/dist/nav/navItem/navActionItem.js +3 -3
- package/dist/nav/navItem/navItem.js +1 -2
- package/dist/pageHeader/pageHeaderActions.js +4 -3
- package/dist/rangeRaw/rangeRaw.js +7 -1
- package/dist/selectList/selectList.js +11 -7
- package/dist/selectRaw/selectRaw.js +1 -1
- package/dist/shield/shield.js +5 -3
- package/dist/sidePanel/sidePanel.js +9 -8
- package/dist/table/children/useTableChildren.d.ts +1 -1
- package/dist/table/children/useTableChildren.js +3 -3
- package/dist/table/flexible/useFlexibleColumns.js +39 -1
- package/dist/table/nested/useNestedRows.d.ts +1 -0
- package/dist/table/nested/useNestedRows.js +3 -3
- package/dist/table/selectable/useSelectableRows.d.ts +9 -0
- package/dist/table/selectable/useSelectableRows.js +18 -11
- package/dist/table/table.js +1 -7
- package/dist/{card/components → title}/title.d.ts +1 -1
- package/dist/title/title.js +27 -0
- package/dist/toggleButtonRaw/toggleButtonRaw.js +3 -1
- package/dist/toggleButtonRaw/types.d.ts +1 -0
- package/dist/tooltip/tooltip.d.ts +2 -1
- package/dist/tooltip/tooltip.js +68 -64
- package/dist/utils/localization/directionContext.d.ts +3 -0
- package/dist/utils/localization/directionContext.js +5 -0
- package/dist/utils/localization/getTextDirection.d.ts +2 -0
- package/dist/utils/localization/getTextDirection.js +6 -0
- package/dist/utils/localization/languageProvider.js +15 -1
- package/dist/utils/localization/translations/en-json.d.ts +2 -0
- package/dist/utils/localization/translations/en-json.js +3 -1
- package/dist/utils/localization/translations/en.json +3 -0
- package/dist/utils/localization/useDirection.d.ts +2 -0
- package/dist/utils/localization/useDirection.js +7 -0
- package/esm/button/button.d.ts +2 -1
- package/esm/button/button.js +3 -3
- package/esm/calendar/calendar.js +200 -3
- package/esm/card/card.d.ts +1 -1
- package/esm/card/card.js +1 -1
- package/esm/card/components/cardButton/cardButton.d.ts +2 -1
- package/esm/card/components/cardButton/cardButton.js +5 -3
- package/esm/card/helpers/getIconTypeFromStatus.d.ts +1 -1
- package/esm/chart/barChart/getBarLegendItems.js +3 -5
- package/esm/chart/lineChart/getLineLegendItems.js +7 -7
- package/esm/chart/pieChart/centerTextPlugin.js +13 -5
- package/esm/chart/pieChart/getPieLegendItems.js +8 -12
- package/esm/chart/pieChart.js +14 -12
- package/esm/chart/plugins/legend/interfaces.d.ts +1 -1
- package/esm/commonHelpers/generateId.d.ts +8 -0
- package/esm/commonHelpers/generateId.js +8 -0
- package/esm/commonHelpers/hooks/ssrProvider.d.ts +14 -0
- package/esm/commonHelpers/hooks/ssrProvider.js +6 -0
- package/esm/commonHelpers/hooks/useClientReady.js +4 -2
- package/esm/commonHelpers/hooks/useDeviceType.js +7 -3
- package/esm/commonHelpers/hooks/useIsomorphicLayoutEffect.d.ts +2 -0
- package/esm/commonHelpers/hooks/useIsomorphicLayoutEffect.js +3 -0
- package/esm/commonHelpers/hooks/useMobile.js +4 -3
- package/esm/commonHelpers/hooks/usePortal.js +2 -5
- package/esm/commonHelpers/isDomEnv.js +1 -2
- package/esm/commonHelpers/useUniqueId.d.ts +6 -0
- package/esm/commonHelpers/useUniqueId.js +7 -1
- package/esm/commonHelpers/utils.d.ts +0 -1
- package/esm/commonHelpers/utils.js +0 -1
- package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +5 -3
- package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +2 -38
- package/esm/dateInputInner/dateInputInnerControlBlock.js +13 -9
- package/esm/dateRangeRaw/dateRangeRaw.js +5 -1
- package/esm/dialog/dialog.js +4 -3
- package/esm/feedbackContainer/feedbackContainer.js +4 -4
- package/esm/fileUpload/fileUpload.js +21 -12
- package/esm/filters/components/filtersSidePanel.d.ts +1 -1
- package/esm/filters/components/filtersSidePanel.js +123 -116
- package/esm/filters/filters.js +2 -3
- package/esm/filtersBar/filtersBar.d.ts +2 -0
- package/esm/filtersBar/filtersBar.js +5 -3
- package/esm/filtersBar/filtersBarActions/filtersBarActions.js +3 -1
- package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +3 -0
- package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.d.ts +1 -1
- package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +86 -80
- package/esm/formFieldError/formFieldError.d.ts +2 -1
- package/esm/formFieldError/formFieldError.js +2 -2
- package/esm/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +1 -1
- package/esm/index.d.ts +3 -5
- package/esm/index.js +3 -5
- package/esm/menu/components/menuItem.js +1 -1
- package/esm/menu/controlledMenu.js +1 -1
- package/esm/nav/nav.js +10 -5
- package/esm/nav/navAddMenu/navAddMenu.js +2 -3
- package/esm/nav/navEditList/navEditListUtils.d.ts +1 -1
- package/esm/nav/navEditList/navEditListUtils.js +2 -1
- package/esm/nav/navItem/navActionItem.js +3 -2
- package/esm/nav/navItem/navItem.js +2 -3
- package/esm/pageHeader/pageHeaderActions.js +4 -3
- package/esm/rangeRaw/rangeRaw.js +7 -1
- package/esm/selectList/selectList.js +11 -7
- package/esm/selectRaw/selectRaw.js +1 -1
- package/esm/shield/shield.js +5 -3
- package/esm/sidePanel/sidePanel.js +9 -8
- package/esm/table/children/useTableChildren.d.ts +1 -1
- package/esm/table/children/useTableChildren.js +3 -3
- package/esm/table/flexible/useFlexibleColumns.js +39 -1
- package/esm/table/nested/useNestedRows.d.ts +1 -0
- package/esm/table/nested/useNestedRows.js +1 -1
- package/esm/table/selectable/useSelectableRows.d.ts +9 -0
- package/esm/table/selectable/useSelectableRows.js +15 -8
- package/esm/table/table.js +1 -7
- package/esm/{card/components → title}/title.d.ts +1 -1
- package/esm/title/title.js +23 -0
- package/esm/toggleButtonRaw/toggleButtonRaw.js +3 -1
- package/esm/toggleButtonRaw/types.d.ts +1 -0
- package/esm/tooltip/tooltip.d.ts +2 -1
- package/esm/tooltip/tooltip.js +68 -64
- package/esm/utils/localization/directionContext.d.ts +3 -0
- package/esm/utils/localization/directionContext.js +2 -0
- package/esm/utils/localization/getTextDirection.d.ts +2 -0
- package/esm/utils/localization/getTextDirection.js +2 -0
- package/esm/utils/localization/languageProvider.js +15 -1
- package/esm/utils/localization/translations/en-json.d.ts +2 -0
- package/esm/utils/localization/translations/en-json.js +3 -1
- package/esm/utils/localization/translations/en.json +3 -0
- package/esm/utils/localization/useDirection.d.ts +2 -0
- package/esm/utils/localization/useDirection.js +3 -0
- package/package.json +33 -31
- package/dist/card/components/title.js +0 -22
- package/dist/commonHelpers/hooks/deviceProvider.d.ts +0 -7
- package/dist/commonHelpers/hooks/deviceProvider.js +0 -11
- package/esm/card/components/title.js +0 -18
- package/esm/commonHelpers/hooks/deviceProvider.d.ts +0 -7
- package/esm/commonHelpers/hooks/deviceProvider.js +0 -4
package/esm/index.d.ts
CHANGED
|
@@ -20,7 +20,6 @@ export { type ICardButton, CardButton } from "./card/components/cardButton/cardB
|
|
|
20
20
|
export { type ICardToggle, CardToggle } from "./card/components/cardToggle/cardToggle";
|
|
21
21
|
export { type IContent, Content } from "./card/components/content";
|
|
22
22
|
export { type TCardStatus, Status } from "./card/components/status";
|
|
23
|
-
export { Title } from "./card/components/title";
|
|
24
23
|
export { TitleLink } from "./card/components/titleLink";
|
|
25
24
|
export { getDefaultFullWidthValue } from "./card/helpers/getDefaultFullWidthValue";
|
|
26
25
|
export { getIconFromStatus } from "./card/helpers/getIconFromStatus";
|
|
@@ -48,8 +47,8 @@ export { classNames } from "./commonHelpers/classNames/classNames";
|
|
|
48
47
|
export { hexToRGBA } from "./commonHelpers/colorUtils";
|
|
49
48
|
export { type IEntityWithId } from "./commonHelpers/entity";
|
|
50
49
|
export { generateId } from "./commonHelpers/generateId";
|
|
51
|
-
export { DeviceContext, DeviceProvider } from "./commonHelpers/hooks/deviceProvider";
|
|
52
50
|
export { DeviceType } from "./commonHelpers/hooks/deviceType";
|
|
51
|
+
export { SSRProvider } from "./commonHelpers/hooks/ssrProvider";
|
|
53
52
|
export { useDebounce } from "./commonHelpers/hooks/useDebounce";
|
|
54
53
|
export { useDebouncedMemo } from "./commonHelpers/hooks/useDebouncedMemo";
|
|
55
54
|
export { useDeviceType } from "./commonHelpers/hooks/useDeviceType";
|
|
@@ -74,8 +73,6 @@ export { useDropdownState } from "./dropdown/useDropdownState";
|
|
|
74
73
|
export { type IEmptyState, EmptyState } from "./emptyState/emptyState";
|
|
75
74
|
export { type IFavoriteButton, FavoriteButton } from "./favoriteButton/favoriteButton";
|
|
76
75
|
export { FeedbackProvider } from "./feedbackProvider/feedbackProvider";
|
|
77
|
-
export { TemplateDownloadSection } from "./fileUpload/components/templateDownloadSection";
|
|
78
|
-
export { UploadedFilesSection } from "./fileUpload/components/uploadedFilesSection";
|
|
79
76
|
export { FileUpload } from "./fileUpload/fileUpload";
|
|
80
77
|
export { type IUploadedFile, type ITemplateDownload, type IFileUploadMeta, type IFileUpload } from "./fileUpload/fileUploadType";
|
|
81
78
|
export { type TFilterButton, type IFilterButton, FilterButton } from "./filterButton/filterButton";
|
|
@@ -760,6 +757,7 @@ export { type ITextInputRaw, TextInputRaw } from "./textInputRaw/textInputRaw";
|
|
|
760
757
|
export { type ITextarea, Textarea } from "./textarea/textarea";
|
|
761
758
|
export { type ITextareaRaw, TextareaRaw } from "./textareaRaw/textareaRaw";
|
|
762
759
|
export { type ITimePicker, type TTimePicker, TimePicker } from "./timePicker/timePicker";
|
|
760
|
+
export { Title } from "./title/title";
|
|
763
761
|
export { type IShowToast, useToast } from "./toast/hooks/useToast";
|
|
764
762
|
export { type IToast, Toast } from "./toast/toast";
|
|
765
763
|
export { type IToggleButton, type TToggleButton, ToggleButton } from "./toggleButton/toggleButton";
|
|
@@ -773,7 +771,7 @@ export { HeaderButtonsProvider } from "./utils/headerButtons/headerButtonsProvid
|
|
|
773
771
|
export { getNewFocusableItem, getFirstFocusableItem } from "./utils/keyboardHelpers";
|
|
774
772
|
export { LanguageProvider } from "./utils/localization/languageProvider";
|
|
775
773
|
export { dictionaries, injectString } from "./utils/localization/translationsDictionary";
|
|
776
|
-
export {
|
|
774
|
+
export { useDirection } from "./utils/localization/useDirection";
|
|
777
775
|
export { ThemeDark } from "./utils/theme/themeDark";
|
|
778
776
|
export { ThemeDrive } from "./utils/theme/themeDrive";
|
|
779
777
|
export { ThemeProvider } from "./utils/theme/themeProvider";
|
package/esm/index.js
CHANGED
|
@@ -21,7 +21,6 @@ export { CardButton } from "./card/components/cardButton/cardButton";
|
|
|
21
21
|
export { CardToggle } from "./card/components/cardToggle/cardToggle";
|
|
22
22
|
export { Content } from "./card/components/content";
|
|
23
23
|
export { Status } from "./card/components/status";
|
|
24
|
-
export { Title } from "./card/components/title";
|
|
25
24
|
export { TitleLink } from "./card/components/titleLink";
|
|
26
25
|
export { getDefaultFullWidthValue } from "./card/helpers/getDefaultFullWidthValue";
|
|
27
26
|
export { getIconFromStatus } from "./card/helpers/getIconFromStatus";
|
|
@@ -48,8 +47,8 @@ export { getCheckboxState } from "./checkbox/checkboxUtils";
|
|
|
48
47
|
export { classNames } from "./commonHelpers/classNames/classNames";
|
|
49
48
|
export { hexToRGBA } from "./commonHelpers/colorUtils";
|
|
50
49
|
export { generateId } from "./commonHelpers/generateId";
|
|
51
|
-
export { DeviceContext, DeviceProvider } from "./commonHelpers/hooks/deviceProvider";
|
|
52
50
|
export { DeviceType } from "./commonHelpers/hooks/deviceType";
|
|
51
|
+
export { SSRProvider } from "./commonHelpers/hooks/ssrProvider";
|
|
53
52
|
export { useDebounce } from "./commonHelpers/hooks/useDebounce";
|
|
54
53
|
export { useDebouncedMemo } from "./commonHelpers/hooks/useDebouncedMemo";
|
|
55
54
|
export { useDeviceType } from "./commonHelpers/hooks/useDeviceType";
|
|
@@ -73,8 +72,6 @@ export { useDropdownState } from "./dropdown/useDropdownState";
|
|
|
73
72
|
export { EmptyState } from "./emptyState/emptyState";
|
|
74
73
|
export { FavoriteButton } from "./favoriteButton/favoriteButton";
|
|
75
74
|
export { FeedbackProvider } from "./feedbackProvider/feedbackProvider";
|
|
76
|
-
export { TemplateDownloadSection } from "./fileUpload/components/templateDownloadSection";
|
|
77
|
-
export { UploadedFilesSection } from "./fileUpload/components/uploadedFilesSection";
|
|
78
75
|
export { FileUpload } from "./fileUpload/fileUpload";
|
|
79
76
|
export { FilterButton } from "./filterButton/filterButton";
|
|
80
77
|
export { FiltersChip } from "./filters/components/filtersChip";
|
|
@@ -745,6 +742,7 @@ export { TextInputRaw } from "./textInputRaw/textInputRaw";
|
|
|
745
742
|
export { Textarea } from "./textarea/textarea";
|
|
746
743
|
export { TextareaRaw } from "./textareaRaw/textareaRaw";
|
|
747
744
|
export { TimePicker } from "./timePicker/timePicker";
|
|
745
|
+
export { Title } from "./title/title";
|
|
748
746
|
export { useToast } from "./toast/hooks/useToast";
|
|
749
747
|
export { Toast } from "./toast/toast";
|
|
750
748
|
export { ToggleButton } from "./toggleButton/toggleButton";
|
|
@@ -757,7 +755,7 @@ export { HeaderButtonsProvider } from "./utils/headerButtons/headerButtonsProvid
|
|
|
757
755
|
export { getNewFocusableItem, getFirstFocusableItem } from "./utils/keyboardHelpers";
|
|
758
756
|
export { LanguageProvider } from "./utils/localization/languageProvider";
|
|
759
757
|
export { dictionaries, injectString } from "./utils/localization/translationsDictionary";
|
|
760
|
-
export {
|
|
758
|
+
export { useDirection } from "./utils/localization/useDirection";
|
|
761
759
|
export { ThemeDark } from "./utils/theme/themeDark";
|
|
762
760
|
export { ThemeDrive } from "./utils/theme/themeDrive";
|
|
763
761
|
export { ThemeProvider } from "./utils/theme/themeProvider";
|
|
@@ -6,7 +6,7 @@ import { ControlledMenu } from "../controlledMenu";
|
|
|
6
6
|
import { ControlledPopup } from "../../controlledPopup/controlledPopup";
|
|
7
7
|
import { PathContext } from "../contexts/pathContext";
|
|
8
8
|
import { classNames } from "../../commonHelpers/classNames/classNames";
|
|
9
|
-
import { generateId } from "../../commonHelpers/
|
|
9
|
+
import { generateId } from "../../commonHelpers/generateId";
|
|
10
10
|
import { MenuAlignmentContext } from "../../header/headerContext";
|
|
11
11
|
import { isSeparator } from "./menuSeparator";
|
|
12
12
|
export const isMenuItem = (element) => {
|
|
@@ -16,7 +16,7 @@ import { ControlledPopup } from "../controlledPopup/controlledPopup";
|
|
|
16
16
|
import { MobileSheet } from "../mobileSheet/mobileSheet";
|
|
17
17
|
import { DeviceType } from "../commonHelpers/hooks/deviceType";
|
|
18
18
|
import { useDeviceType } from "../commonHelpers/hooks/useDeviceType";
|
|
19
|
-
import { generateId } from "../commonHelpers/
|
|
19
|
+
import { generateId } from "../commonHelpers/generateId";
|
|
20
20
|
import { PathProvider } from "./contexts/pathProvider";
|
|
21
21
|
import { isSeparator, MenuSeparator } from "./components/menuSeparator";
|
|
22
22
|
import { FOCUSABLE_SELECTOR } from "../utils/focusableSelector";
|
package/esm/nav/nav.js
CHANGED
|
@@ -5,7 +5,7 @@ import { Children, cloneElement, Fragment, useCallback, useEffect, useLayoutEffe
|
|
|
5
5
|
import { NavDivider } from "./navDivider/navDivider";
|
|
6
6
|
import { detectOverlayScrollbar, filterPrimaryNavItems, collectNavItems } from "./utils/navUtils";
|
|
7
7
|
import { useResize } from "../commonHelpers/hooks/useResize";
|
|
8
|
-
import {
|
|
8
|
+
import { usePortal } from "../commonHelpers/hooks/usePortal";
|
|
9
9
|
import { NavMobileBar } from "./navMobileBar/navMobileBar";
|
|
10
10
|
import { useMobile } from "../commonHelpers/hooks/useMobile";
|
|
11
11
|
import { FOCUSABLE_SELECTOR } from "../utils/focusableSelector";
|
|
@@ -132,6 +132,7 @@ export const Nav = ({ children, className, collapsed = false, onCollapseToggle,
|
|
|
132
132
|
useEffect(() => {
|
|
133
133
|
onMenuVisibilityToggle === null || onMenuVisibilityToggle === void 0 ? void 0 : onMenuVisibilityToggle(!isMobile || isMobileMenuOpen);
|
|
134
134
|
}, [isMobile, isMobileMenuOpen, onMenuVisibilityToggle]);
|
|
135
|
+
const navMobileBarPortal = usePortal(_jsx(NavMobileBar, { onMenuToggle: onMobileMenuToggle, isMenuOpen: isMobileMenuOpen, children: isEditState ? editListItems : primaryItems }), mobileBarContainer !== null && mobileBarContainer !== void 0 ? mobileBarContainer : undefined);
|
|
135
136
|
return (_jsxs(NavContext, { value: {
|
|
136
137
|
collapsed,
|
|
137
138
|
onCollapseToggle,
|
|
@@ -142,13 +143,17 @@ export const Nav = ({ children, className, collapsed = false, onCollapseToggle,
|
|
|
142
143
|
searchTerm,
|
|
143
144
|
onSearch: setSearchTerm,
|
|
144
145
|
onNavigate: () => onIsMobileMenuOpenToggle && onIsMobileMenuOpenToggle(false)
|
|
145
|
-
}, children: [!isMobile || isMobileMenuOpen ? (_jsxs("div", { ref: menuRef, className: classNames([
|
|
146
|
+
}, children: [!isMobile || isMobileMenuOpen ? (_jsxs("div", { ref: menuRef, className: classNames([
|
|
147
|
+
"zen-nav",
|
|
148
|
+
isMobile ? "zen-nav--mobile" : "",
|
|
149
|
+
isMobile && isEditState ? "zen-nav--mobile-edit" : "",
|
|
150
|
+
collapsed ? "zen-nav--collapsed" : "",
|
|
151
|
+
className || ""
|
|
152
|
+
]), children: [header
|
|
146
153
|
? cloneElement(header, Object.assign(Object.assign({}, header.props), { className: classNames(["zen-nav__header", header.props.className || ""]) }))
|
|
147
154
|
: null, _jsx(NavContent, { children: isEditState
|
|
148
155
|
? editListItems
|
|
149
156
|
: sectionsToRender.map((section, index) => (_jsxs(Fragment, { children: [cloneElement(section, {
|
|
150
157
|
className: classNames(["zen-nav__section", section.props.className || ""])
|
|
151
|
-
}), isMobile || index < sectionsToRender.length - 1 ? _jsx(NavDivider, {}) : null] }, index))) }), footerToRender] })) : null, mobileBarContainer &&
|
|
152
|
-
isMobile &&
|
|
153
|
-
createPortal(_jsx(NavMobileBar, { onMenuToggle: onMobileMenuToggle, isMenuOpen: isMobileMenuOpen, children: isEditState ? editListItems : primaryItems }), mobileBarContainer)] }));
|
|
158
|
+
}), isMobile || index < sectionsToRender.length - 1 ? _jsx(NavDivider, {}) : null] }, index))) }), footerToRender] })) : null, mobileBarContainer && isMobile && navMobileBarPortal] }));
|
|
154
159
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Children, cloneElement, useRef, useState } from "react";
|
|
2
|
+
import { Children, cloneElement, useId, useRef, useState } from "react";
|
|
3
3
|
import { classNames } from "../../commonHelpers/classNames/classNames";
|
|
4
4
|
import { NavItemContext } from "../navItem/navItem";
|
|
5
5
|
import { useMobile } from "../../commonHelpers/hooks/useMobile";
|
|
@@ -9,13 +9,12 @@ import { IconClose } from "../../icons/iconClose";
|
|
|
9
9
|
import { IconPlus } from "../../icons/iconPlus";
|
|
10
10
|
import { Tooltip } from "../../tooltip/tooltip";
|
|
11
11
|
import { useNavContext } from "../context/nav.context";
|
|
12
|
-
import { generateId } from "../../commonHelpers/utils";
|
|
13
12
|
export const NavAddMenu = ({ title, alignment, className, children }) => {
|
|
14
13
|
const [isOpen, setIsOpen] = useState(false);
|
|
15
14
|
const isMobile = useMobile();
|
|
16
15
|
const { collapsed } = useNavContext();
|
|
17
16
|
const triggerRef = useRef(null);
|
|
18
|
-
const triggerId =
|
|
17
|
+
const triggerId = useId();
|
|
19
18
|
const validChildren = Children.toArray(children)
|
|
20
19
|
.filter((child) => {
|
|
21
20
|
const element = child;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { PointerEvent, ReactElement } from "react";
|
|
2
2
|
import { INavActionItem } from "../navItem/navActionItem";
|
|
3
|
-
export declare const attachDndHandler: (item: ReactElement<INavActionItem>, onPointerDown: (e: PointerEvent<
|
|
3
|
+
export declare const attachDndHandler: (item: ReactElement<INavActionItem>, onPointerDown: (e: PointerEvent<HTMLDivElement>) => void) => ReactElement<INavActionItem>;
|
|
@@ -4,7 +4,8 @@ import { NavActionItem } from "../navItem/navActionItem";
|
|
|
4
4
|
import { IconGrab } from "../../icons/iconGrab";
|
|
5
5
|
export const attachDndHandler = (item, onPointerDown) => {
|
|
6
6
|
if (item.type === NavActionItem) {
|
|
7
|
-
|
|
7
|
+
const navActionItem = item;
|
|
8
|
+
return cloneElement(navActionItem, Object.assign(Object.assign({}, navActionItem.props), { onLeftContentPointerDown: onPointerDown, startNode: (_jsx("div", { className: "zen-nav-item__dnd", children: _jsx(IconGrab, { size: "large" }) })) }));
|
|
8
9
|
}
|
|
9
10
|
return item;
|
|
10
11
|
};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { classNames } from "../../commonHelpers/classNames/classNames";
|
|
3
|
-
|
|
3
|
+
const NavActionItemComponent = ({ title, id, icon, className, startNode, endButtonIcon, endButtonTitle, onEndButtonClick, onLeftContentPointerDown }) => {
|
|
4
4
|
const PrimaryIconComponent = typeof icon === "function" ? icon : null;
|
|
5
5
|
const EndButtonIconComponent = typeof endButtonIcon === "function" ? endButtonIcon : null;
|
|
6
6
|
const itemClasses = classNames(["zen-nav-item", className || ""]);
|
|
7
|
-
return (_jsxs("div", { className: itemClasses, id: id, children: [_jsx("div", { className: "zen-nav-item__main", children: _jsxs("div", { className: "zen-nav-item__content-left", children: [startNode ? _jsx("span", { className: "zen-nav-item__icon", children: startNode }) : null, PrimaryIconComponent ? _jsx(PrimaryIconComponent, { size: "huge" }) : null, _jsx("span", { className: "zen-nav-item__title", children: _jsx("span", { className: "zen-nav-item__title-text", children: title }) })] }) }), EndButtonIconComponent && endButtonTitle && onEndButtonClick ? (_jsx("button", { type: "button", className: "zen-nav-item__action", "aria-label": endButtonTitle, title: endButtonTitle, onClick: onEndButtonClick, children: _jsx(EndButtonIconComponent, { size: "huge" }) })) : null] }));
|
|
7
|
+
return (_jsxs("div", { className: itemClasses, id: id, children: [_jsx("div", { className: "zen-nav-item__main", children: _jsxs("div", { className: "zen-nav-item__content-left", onPointerDown: onLeftContentPointerDown, children: [startNode ? _jsx("span", { className: "zen-nav-item__icon", children: startNode }) : null, PrimaryIconComponent ? _jsx(PrimaryIconComponent, { size: "huge" }) : null, _jsx("span", { className: "zen-nav-item__title", children: _jsx("span", { className: "zen-nav-item__title-text", children: title }) })] }) }), EndButtonIconComponent && endButtonTitle && onEndButtonClick ? (_jsx("button", { type: "button", className: "zen-nav-item__action", "aria-label": endButtonTitle, title: endButtonTitle, onClick: onEndButtonClick, children: _jsx(EndButtonIconComponent, { size: "huge" }) })) : null] }));
|
|
8
8
|
};
|
|
9
|
+
export const NavActionItem = NavActionItemComponent;
|
|
9
10
|
NavActionItem.displayName = "NavActionItem";
|
|
@@ -11,7 +11,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
11
11
|
};
|
|
12
12
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
13
|
import { classNames } from "../../commonHelpers/classNames/classNames";
|
|
14
|
-
import { useRef, useState, useEffect, Children, cloneElement, createContext, useContext } from "react";
|
|
14
|
+
import { useRef, useState, useEffect, Children, cloneElement, createContext, useContext, useId } from "react";
|
|
15
15
|
import { IconBeta } from "../../icons/iconBeta";
|
|
16
16
|
import { IconChevronRight } from "../../icons/iconChevronRight";
|
|
17
17
|
import { IconOpen2 } from "../../icons/iconOpen2";
|
|
@@ -19,7 +19,6 @@ import { Tooltip } from "../../tooltip/tooltip";
|
|
|
19
19
|
import { ControlledMenu } from "../../menu/controlledMenu";
|
|
20
20
|
import { useNavContext } from "../context/nav.context";
|
|
21
21
|
import { useMobile } from "../../commonHelpers/hooks/useMobile";
|
|
22
|
-
import { generateId } from "../../commonHelpers/utils";
|
|
23
22
|
const ICON_SIZE = "huge";
|
|
24
23
|
const SUBMENU_ICON_SIZE = "large";
|
|
25
24
|
export const NavItemContext = createContext({ parentLevel: 0 });
|
|
@@ -101,7 +100,7 @@ const ButtonNavItem = (_a) => {
|
|
|
101
100
|
};
|
|
102
101
|
const isMobile = useMobile();
|
|
103
102
|
const isActive = active || (hasNestedItems && menuOpen);
|
|
104
|
-
const triggerId =
|
|
103
|
+
const triggerId = useId();
|
|
105
104
|
const buttonElement = (_jsx("button", { id: triggerId, ref: triggerRef, "aria-label": title, title: title, tabIndex: tabIndex, role: isMenuItem ? "menuitem" : undefined, className: "zen-nav-item__main", onClick: handleClick, onKeyDown: handleKeyPress, children: _jsx(NavItemContent, Object.assign({ title: title, collapsed: collapsed, hasSubmenu: hasNestedItems, level: currentLevel }, rest, { children: _jsx("span", { className: "zen-nav-item__title-text", children: title }) })) }));
|
|
106
105
|
const trigger = collapsed ? (_jsx(Tooltip, { trigger: buttonElement, alignment: tooltipAlignment, children: title })) : (buttonElement);
|
|
107
106
|
if (hasNestedItems) {
|
|
@@ -8,7 +8,7 @@ import { PageToolbarCollapsedItemsControl } from "../header/components/collapsed
|
|
|
8
8
|
import { PageHeaderButtonDisplayName } from "./pageHeaderButton";
|
|
9
9
|
import { PageHeaderMenuDisplayName } from "./pageHeaderMenu";
|
|
10
10
|
import { getItemsFromFragments } from "./pageHeaderHelpers";
|
|
11
|
-
import {
|
|
11
|
+
import { usePortal } from "../commonHelpers/hooks/usePortal";
|
|
12
12
|
import { zen } from "../utils/zen";
|
|
13
13
|
export const PageHeaderActions = ({ className = "", children }) => {
|
|
14
14
|
var _a, _b;
|
|
@@ -32,10 +32,11 @@ export const PageHeaderActions = ({ className = "", children }) => {
|
|
|
32
32
|
isMobile ? "zen-page-header-component__actions--mobile-portal" : "",
|
|
33
33
|
className
|
|
34
34
|
]), children: [nonFittingElements.length > 0 ? moreButton : null, fittingElements] })) : null;
|
|
35
|
+
const modalRoot = ((_a = zen.document) === null || _a === void 0 ? void 0 : _a.fullscreenElement) || ((_b = zen.document) === null || _b === void 0 ? void 0 : _b.body);
|
|
36
|
+
const portal = usePortal(actionsContent, modalRoot);
|
|
35
37
|
// For mobile, render actions in a portal at the bottom center of viewport
|
|
36
38
|
if (isMobile && actionsContent) {
|
|
37
|
-
|
|
38
|
-
return createPortal(actionsContent, modalRoot);
|
|
39
|
+
return portal;
|
|
39
40
|
}
|
|
40
41
|
return actionsContent;
|
|
41
42
|
};
|
package/esm/rangeRaw/rangeRaw.js
CHANGED
|
@@ -252,6 +252,9 @@ export const RangeRaw = props => {
|
|
|
252
252
|
} else {
|
|
253
253
|
defaultValueInner = defaultValue;
|
|
254
254
|
}
|
|
255
|
+
const generatedId = useId();
|
|
256
|
+
const intId = id || generatedId;
|
|
257
|
+
const rangeErrorId = `${intId}-error`;
|
|
255
258
|
const [isOpen, setIsOpen] = useState(false);
|
|
256
259
|
const [currentValue, setCurrentValue] = useState(value);
|
|
257
260
|
const [errorType, setErrorType] = useState(undefined);
|
|
@@ -400,14 +403,17 @@ export const RangeRaw = props => {
|
|
|
400
403
|
const memoizedContent = useMemo(() => _jsxs("div", {
|
|
401
404
|
className: "zen-range__fields-wrapper",
|
|
402
405
|
children: [_jsxs("div", {
|
|
406
|
+
id: intId,
|
|
403
407
|
ref: setFieldsContainerRef,
|
|
408
|
+
"aria-describedby": errorType !== undefined && directionState === "row" ? rangeErrorId : undefined,
|
|
404
409
|
className: classNames(["zen-range__fields-container", directionState === "row" ? "zen-range__fields-container--row" : "zen-range__fields-container--column"]),
|
|
405
410
|
children: [memoizedMinRangeField, memoizedMaxRangeField]
|
|
406
411
|
}), errorType !== undefined && directionState === "row" ? _jsx(FormFieldError, {
|
|
412
|
+
id: rangeErrorId,
|
|
407
413
|
className: "zen-range__error",
|
|
408
414
|
error: [getErrorString("min", currentValue.min, translate, errorType, min, max) || "", getErrorString("max", currentValue.max, translate, errorType, min, max) || ""]
|
|
409
415
|
}) : null]
|
|
410
|
-
}), [setFieldsContainerRef, directionState, memoizedMinRangeField, memoizedMaxRangeField, errorType, currentValue.min, currentValue.max, translate, min, max]);
|
|
416
|
+
}), [setFieldsContainerRef, directionState, memoizedMinRangeField, memoizedMaxRangeField, errorType, currentValue.min, currentValue.max, translate, min, max, intId, rangeErrorId]);
|
|
411
417
|
const memoizedDesktopView = useMemo(() => _jsx(ControlledPopup, {
|
|
412
418
|
isOpen: isOpen,
|
|
413
419
|
className: classNames(["zen-range-popup zen-shadow-dropdown-default", className ? className : ""]),
|
|
@@ -45,7 +45,7 @@ export const SelectList = (_a) => {
|
|
|
45
45
|
dispatchState({ type: ListAction.Reset, payload: { items, value: new Map(parsedValue), multiselect } });
|
|
46
46
|
}, [innerValue, multiselect, items]);
|
|
47
47
|
useEffect(() => {
|
|
48
|
-
if (!multiselect) {
|
|
48
|
+
if (!multiselect && selectItemOnFocus) {
|
|
49
49
|
dispatchState({ type: ListAction.FocusFirst, payload: { items } });
|
|
50
50
|
}
|
|
51
51
|
dispatchState({ type: ListAction.Focus, payload: { items, multiselect } });
|
|
@@ -56,14 +56,18 @@ export const SelectList = (_a) => {
|
|
|
56
56
|
const onChangeItem = useCallback((updatedId, updatedState) => {
|
|
57
57
|
dispatchState({ type: ListAction.ChangeItemState, payload: { updatedId, updatedState, multiselect } });
|
|
58
58
|
}, [multiselect]);
|
|
59
|
+
const hasScrolledToInitial = useRef(false);
|
|
59
60
|
useEffect(() => {
|
|
60
61
|
var _a;
|
|
61
|
-
if (state.activeIndex >= 0 &&
|
|
62
|
-
((_a = zen.document) === null || _a === void 0 ? void 0 : _a.activeElement) &&
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
if (state.activeIndex >= 0 && listRef.current) {
|
|
63
|
+
const isFocusInList = ((_a = zen.document) === null || _a === void 0 ? void 0 : _a.activeElement) && isChildOf(zen.document.activeElement, listRef.current);
|
|
64
|
+
if (isFocusInList || !hasScrolledToInitial.current) {
|
|
65
|
+
const itemEl = listRef.current.querySelector(`.zen-select-list__item:nth-child(${state.activeIndex + 1})`);
|
|
66
|
+
itemEl === null || itemEl === void 0 ? void 0 : itemEl.scrollIntoView({ block: "nearest" });
|
|
67
|
+
if (itemEl) {
|
|
68
|
+
hasScrolledToInitial.current = true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
67
71
|
}
|
|
68
72
|
}, [state.activeIndex]);
|
|
69
73
|
useEffect(() => {
|
|
@@ -147,6 +147,6 @@ export const SelectRaw = (props) => {
|
|
|
147
147
|
"zen-ellipsis",
|
|
148
148
|
"zen-caption__content",
|
|
149
149
|
!selectValue ? "zen-select__text--placeholder" : ""
|
|
150
|
-
]), children: text }), _jsx(IconChevronDownSmall, { className: "zen-select__arrow zen-caption__post-content", size: "large" })] }), _jsx(Absolute, { recalculateOnScroll: true, className: classNames(["zen-select__popup", classNamePopup || ""]), triggerRef: innerTriggerRef, id: popupId, isOpen: isOpen, onOpenChange: onPopupVisibilityChange, children: _jsx(PassiveSelectListComp, { id: listId, title: title, disabled: disabled, multiselect: false, items: items.map(item => (Object.assign(Object.assign({}, item), { state: selectValue === item.id ? CheckboxState.On : CheckboxState.Off }))), value: new Map(items.map(item => [item.id, selectValue === item.id ? CheckboxState.On : CheckboxState.Off])), activeIndex: state.activeIndex, size: pageSize, onChangeItem: onChangeItem, style: { width, minWidth, maxWidth } }) })] }));
|
|
150
|
+
]), children: text }), _jsx(IconChevronDownSmall, { className: "zen-select__arrow zen-caption__post-content", size: "large" })] }), _jsx(Absolute, { recalculateOnScroll: true, className: classNames(["zen-select__popup", classNamePopup || ""]), triggerRef: innerTriggerRef, id: popupId, isOpen: isOpen, onOpenChange: onPopupVisibilityChange, focusOnOpen: false, children: _jsx(PassiveSelectListComp, { id: listId, title: title, disabled: disabled, multiselect: false, items: items.map(item => (Object.assign(Object.assign({}, item), { state: selectValue === item.id ? CheckboxState.On : CheckboxState.Off }))), value: new Map(items.map(item => [item.id, selectValue === item.id ? CheckboxState.On : CheckboxState.Off])), activeIndex: state.activeIndex, size: pageSize, onChangeItem: onChangeItem, style: { width, minWidth, maxWidth } }) })] }));
|
|
151
151
|
};
|
|
152
152
|
SelectRaw.displayName = "SelectRaw";
|
package/esm/shield/shield.js
CHANGED
|
@@ -2,16 +2,18 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect } from "react";
|
|
3
3
|
import { classNames } from "../commonHelpers/classNames/classNames";
|
|
4
4
|
import { useFadeComponent } from "../utils/useFadeComponent";
|
|
5
|
-
import {
|
|
5
|
+
import { usePortal } from "../commonHelpers/hooks/usePortal";
|
|
6
6
|
import { zen } from "../utils/zen";
|
|
7
7
|
export const Shield = ({ className, dataShieldId, isVisible }) => {
|
|
8
|
-
var _a, _b;
|
|
8
|
+
var _a, _b, _c, _d;
|
|
9
9
|
const { renderComponent, showContent, setIsOpen, handleTransitionEnd } = useFadeComponent(isVisible || false);
|
|
10
|
+
const container = (_d = (_b = (_a = zen.document) === null || _a === void 0 ? void 0 : _a.fullscreenElement) !== null && _b !== void 0 ? _b : (_c = zen.document) === null || _c === void 0 ? void 0 : _c.body) !== null && _d !== void 0 ? _d : undefined;
|
|
11
|
+
const portal = usePortal(_jsx("div", { onTransitionEnd: handleTransitionEnd, className: classNames(["zen-shield", "zen-shield-faded", showContent ? "zen-shield-faded--visible" : "", className !== null && className !== void 0 ? className : ""]), "data-shield-id": dataShieldId || "" }), container);
|
|
10
12
|
useEffect(() => {
|
|
11
13
|
setIsOpen(isVisible || false);
|
|
12
14
|
}, [isVisible, setIsOpen]);
|
|
13
15
|
if (!renderComponent && !isVisible) {
|
|
14
16
|
return isVisible === undefined ? (_jsx("div", { className: classNames(["zen-shield", className !== null && className !== void 0 ? className : ""]), "data-shield-id": dataShieldId || "" })) : null;
|
|
15
17
|
}
|
|
16
|
-
return
|
|
18
|
+
return portal;
|
|
17
19
|
};
|
|
@@ -18,7 +18,7 @@ import { isModalTarget } from "../modal/utils/isModalTarget";
|
|
|
18
18
|
import { isBannerTarget } from "../banner/utils/isBannerTarget";
|
|
19
19
|
import { useClientReady } from "../commonHelpers/hooks/useClientReady";
|
|
20
20
|
import { zen } from "../utils/zen";
|
|
21
|
-
import {
|
|
21
|
+
import { usePortal } from "../commonHelpers/hooks/usePortal";
|
|
22
22
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
23
23
|
const OVERLAY_TARGET_CHECKS = [isAlertTarget, isToastTarget, isModalTarget, isBannerTarget];
|
|
24
24
|
export const isChildPopup = (target, stopElement) => {
|
|
@@ -171,14 +171,8 @@ export const SidePanel = ({ label, className, id, isOpen, onHidePanel, children,
|
|
|
171
171
|
}
|
|
172
172
|
return attributes;
|
|
173
173
|
}, [role, label]);
|
|
174
|
-
if (!renderComponent && !isOpen) {
|
|
175
|
-
return null;
|
|
176
|
-
}
|
|
177
|
-
if (!isClientReady) {
|
|
178
|
-
return undefined;
|
|
179
|
-
}
|
|
180
174
|
const portalContainer = ((_a = zen.document) === null || _a === void 0 ? void 0 : _a.fullscreenElement) || ((_b = zen.document) === null || _b === void 0 ? void 0 : _b.body);
|
|
181
|
-
|
|
175
|
+
const portal = usePortal(_jsx("div", Object.assign({ ref: sidePanelRef, id: popupId }, memoizedStyles, roleAttributes, { onTransitionEnd: handleTransitionEnd, className: classNames([
|
|
182
176
|
"zen-side-panel",
|
|
183
177
|
driveClassName || "",
|
|
184
178
|
dark ? "zen-dark" : "",
|
|
@@ -186,5 +180,12 @@ export const SidePanel = ({ label, className, id, isOpen, onHidePanel, children,
|
|
|
186
180
|
positioningClass,
|
|
187
181
|
className !== null && className !== void 0 ? className : ""
|
|
188
182
|
]), children: memoizedChildForRender })), portalContainer);
|
|
183
|
+
if (!renderComponent && !isOpen) {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
if (!isClientReady) {
|
|
187
|
+
return undefined;
|
|
188
|
+
}
|
|
189
|
+
return portal;
|
|
189
190
|
};
|
|
190
191
|
SidePanel.Cell = SidePanelCell;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReactElement, ReactNode, RefObject } from "react";
|
|
2
|
-
export declare const useTableChildren: (children: ReactNode, isMobile: boolean, selected: number, allSelected: boolean, clearSelection: () => void,
|
|
2
|
+
export declare const useTableChildren: (children: ReactNode, isMobile: boolean, selected: number, allSelected: boolean, clearSelection: () => void, activeId?: string, gridRef?: RefObject<HTMLElement | null>, onCloseDetailPanel?: () => void) => {
|
|
3
3
|
bulkActions: ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | undefined;
|
|
4
4
|
pagination: ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | undefined;
|
|
5
5
|
activePage: number | undefined;
|
|
@@ -24,7 +24,7 @@ const isChildElement = function (child, expectedType) {
|
|
|
24
24
|
}
|
|
25
25
|
return false;
|
|
26
26
|
};
|
|
27
|
-
export const useTableChildren = (children, isMobile, selected, allSelected, clearSelection,
|
|
27
|
+
export const useTableChildren = (children, isMobile, selected, allSelected, clearSelection, activeId, gridRef, onCloseDetailPanel) => useMemo(() => {
|
|
28
28
|
let bulkActions = undefined;
|
|
29
29
|
let tablePagination = undefined;
|
|
30
30
|
let activePage = undefined;
|
|
@@ -39,7 +39,7 @@ export const useTableChildren = (children, isMobile, selected, allSelected, clea
|
|
|
39
39
|
}
|
|
40
40
|
if (isChildElement(child, TableBulkActions.displayName)) {
|
|
41
41
|
const bulkActionButtons = child.props.children || [];
|
|
42
|
-
bulkActions = (_jsx(BulkActions, { gridType: isMobile ? DeviceType.Mobile : DeviceType.Desktop, selected: selected, allSelected: allSelected, onClearSelection: clearSelection,
|
|
42
|
+
bulkActions = (_jsx(BulkActions, { gridType: isMobile ? DeviceType.Mobile : DeviceType.Desktop, selected: selected, allSelected: allSelected, onClearSelection: clearSelection, children: bulkActionButtons }));
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
45
|
if (isChildElement(child, TablePagination.displayName)) {
|
|
@@ -100,4 +100,4 @@ export const useTableChildren = (children, isMobile, selected, allSelected, clea
|
|
|
100
100
|
detailPanel: detailPanel,
|
|
101
101
|
other: other
|
|
102
102
|
};
|
|
103
|
-
}, [children, clearSelection, isMobile, selected, gridRef, allSelected,
|
|
103
|
+
}, [children, clearSelection, isMobile, selected, gridRef, allSelected, activeId, onCloseDetailPanel]);
|
|
@@ -10,6 +10,8 @@ import { ColumnSettingsStorage } from "./columnSettingsStorage";
|
|
|
10
10
|
import { ActionsColumn } from "../../dataGrid/columns/actionsColumn/actionsColumn";
|
|
11
11
|
import { mergeColumnsSettings } from "./mergeColumnSettings";
|
|
12
12
|
import { zen } from "../../utils/zen";
|
|
13
|
+
import { SelectableWrapperName } from "../selectable/useSelectableRows";
|
|
14
|
+
import { NestedWrapperName } from "../nested/useNestedRows";
|
|
13
15
|
export const getColumnSettings = (pageName, defaultValue) => {
|
|
14
16
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
15
17
|
const storage = new ColumnSettingsStorage(pageName || "", zen === null || zen === void 0 ? void 0 : zen.localStorage, defaultValue);
|
|
@@ -42,11 +44,12 @@ export const useFlexibleColumns = (columns, flexible, gridRef, columnsPopupRef,
|
|
|
42
44
|
onChangeColumnSettings(newSettings);
|
|
43
45
|
}, [onChangeColumnSettings, saveSettingsToTheStorage]);
|
|
44
46
|
const flexibleColumns = useMemo(() => {
|
|
47
|
+
var _a, _b, _c, _d, _e;
|
|
45
48
|
if (!flexible) {
|
|
46
49
|
return columns;
|
|
47
50
|
}
|
|
48
51
|
const visibleColumnsMap = new Map(columns.map(c => [c.id, c]));
|
|
49
|
-
|
|
52
|
+
const result = columnSettings
|
|
50
53
|
.map((s, index) => {
|
|
51
54
|
var _a;
|
|
52
55
|
const column = visibleColumnsMap.get(s.name);
|
|
@@ -63,6 +66,41 @@ export const useFlexibleColumns = (columns, flexible, gridRef, columnsPopupRef,
|
|
|
63
66
|
return Object.assign(Object.assign({}, column), { meta: Object.assign(Object.assign({}, (column.meta || {})), { defaultWidth: width }), wrappers: [...wrappers, wrapper] });
|
|
64
67
|
})
|
|
65
68
|
.filter(c => c !== undefined);
|
|
69
|
+
// Ensure selectable and nested wrappers are always on the first visible column
|
|
70
|
+
if (result.length > 0) {
|
|
71
|
+
const pinnedWrapperWidth = 32;
|
|
72
|
+
let widthDelta = 0;
|
|
73
|
+
let donorCol = undefined;
|
|
74
|
+
for (const wrapperName of [NestedWrapperName, SelectableWrapperName]) {
|
|
75
|
+
if ((_a = result[0].wrappers) === null || _a === void 0 ? void 0 : _a.some(w => w.name === wrapperName)) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
let pinnedWrapper;
|
|
79
|
+
for (const col of result.slice(1)) {
|
|
80
|
+
if (col.wrappers) {
|
|
81
|
+
const found = col.wrappers.find(w => w.name === wrapperName);
|
|
82
|
+
if (found) {
|
|
83
|
+
pinnedWrapper = found;
|
|
84
|
+
donorCol = donorCol !== null && donorCol !== void 0 ? donorCol : col;
|
|
85
|
+
widthDelta += pinnedWrapperWidth;
|
|
86
|
+
col.wrappers = col.wrappers.filter(w => w.name !== wrapperName);
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (pinnedWrapper) {
|
|
92
|
+
result[0].wrappers = [...(result[0].wrappers || []), pinnedWrapper];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (widthDelta > 0) {
|
|
96
|
+
result[0] = Object.assign(Object.assign({}, result[0]), { meta: Object.assign(Object.assign({}, (result[0].meta || {})), { defaultWidth: ((_c = (_b = result[0].meta) === null || _b === void 0 ? void 0 : _b.defaultWidth) !== null && _c !== void 0 ? _c : 0) + widthDelta }) });
|
|
97
|
+
if (donorCol) {
|
|
98
|
+
const donorIndex = result.indexOf(donorCol);
|
|
99
|
+
result[donorIndex] = Object.assign(Object.assign({}, donorCol), { meta: Object.assign(Object.assign({}, (donorCol.meta || {})), { defaultWidth: Math.max(0, ((_e = (_d = donorCol.meta) === null || _d === void 0 ? void 0 : _d.defaultWidth) !== null && _e !== void 0 ? _e : 0) - widthDelta) }) });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
66
104
|
}, [columnSettings, columns, flexible]);
|
|
67
105
|
const columnsPopup = useMemo(() => {
|
|
68
106
|
if (!flexible) {
|
|
@@ -3,6 +3,7 @@ import { IListColumn } from "../../dataGrid/listColumn";
|
|
|
3
3
|
import { IRowEntity } from "../../dataGrid/row/row";
|
|
4
4
|
import "./nestedButton.less";
|
|
5
5
|
import { IEntityWithId } from "../../commonHelpers/entity";
|
|
6
|
+
export declare const NestedWrapperName = "Nested";
|
|
6
7
|
export declare const useNestedRows: <T extends IRowEntity<N>, N extends IEntityWithId>(expandedRows: string[] | undefined, onExpand: ((id: string, isExpanded: boolean) => void) | undefined, columns: IListColumn<T, N>[], isMobile: boolean) => {
|
|
7
8
|
nestedColumns: {
|
|
8
9
|
id: string;
|
|
@@ -58,7 +58,7 @@ injectString("zh-Hans", "Expand", "\u5C55\u5F00");
|
|
|
58
58
|
injectString("zh-TW", "Expand", "\u5C55\u958B");
|
|
59
59
|
injectString("ro-RO", "Expand", "Extinde\u021Bi");
|
|
60
60
|
injectString("ar-SA", "Expand", "\u062A\u0648\u0633\u064A\u0639");
|
|
61
|
-
const NestedWrapperName = "Nested";
|
|
61
|
+
export const NestedWrapperName = "Nested";
|
|
62
62
|
export const useNestedRows = (expandedRows, onExpand, columns, isMobile) => {
|
|
63
63
|
const {
|
|
64
64
|
translate
|
|
@@ -16,6 +16,14 @@ export interface ISelectableRowsOptions<T extends IRowEntity<N>, N extends IEnti
|
|
|
16
16
|
checkboxTitle?: (entity: T | N) => string;
|
|
17
17
|
headerTitle?: (state: SelectionState) => string;
|
|
18
18
|
turnOffSelectAll?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* When `true`, the header checkbox emits the current page's IDs instead of `{ all: true }`.
|
|
21
|
+
* When `undefined`, falls back to `turnOffSelectAll` for backward compatibility.
|
|
22
|
+
*
|
|
23
|
+
* Note: avoid setting this to `false` alongside `turnOffSelectAll: true` — the checkbox
|
|
24
|
+
* will emit `{ all: true }` while the dropdown hides the "Select all" option, which is inconsistent.
|
|
25
|
+
*/
|
|
26
|
+
checkboxSelectsCurrentPage?: boolean;
|
|
19
27
|
checkboxPlaceholder?: boolean;
|
|
20
28
|
strategy?: TSelectionStrategy;
|
|
21
29
|
selectAll?: boolean;
|
|
@@ -24,6 +32,7 @@ export declare const getEmptySelection: () => {
|
|
|
24
32
|
all: boolean;
|
|
25
33
|
selected: string[];
|
|
26
34
|
};
|
|
35
|
+
export declare const SelectableWrapperName = "Selectable";
|
|
27
36
|
export declare const useSelectableRows: <T extends IRowEntity<N>, N extends IEntityWithId>(columns: IListColumn<T, N>[], entities: T[], isMobile: boolean, selectMode: boolean, setSelectMode: (value: boolean) => void, selectable?: ISelectableRowsOptions<T, N>) => {
|
|
28
37
|
selectableColumns: IListColumn<T, N>[];
|
|
29
38
|
selectableFeedWrapper: (primaryData: ReactNode, secondaryData: ReactNode, entity: T | N, isNested: boolean) => [ReactNode, ReactNode];
|
|
@@ -68,7 +68,7 @@ export const getEmptySelection = () => ({
|
|
|
68
68
|
all: false,
|
|
69
69
|
selected: []
|
|
70
70
|
});
|
|
71
|
-
const SelectableWrapperName = "Selectable";
|
|
71
|
+
export const SelectableWrapperName = "Selectable";
|
|
72
72
|
export const useSelectableRows = (columns, entities, isMobile, selectMode, setSelectMode, selectable) => {
|
|
73
73
|
var _a;
|
|
74
74
|
const {
|
|
@@ -157,7 +157,6 @@ export const useSelectableRows = (columns, entities, isMobile, selectMode, setSe
|
|
|
157
157
|
return;
|
|
158
158
|
}
|
|
159
159
|
const newSelections = getCurrentPageSelection(entities, selectable);
|
|
160
|
-
setState(newState);
|
|
161
160
|
const newValue = {
|
|
162
161
|
selected: [...newSelections],
|
|
163
162
|
all: false
|
|
@@ -176,8 +175,16 @@ export const useSelectableRows = (columns, entities, isMobile, selectMode, setSe
|
|
|
176
175
|
return translate("Deselect all");
|
|
177
176
|
}, [selectable, selectableState, state, translate]);
|
|
178
177
|
const isEntityChecked = useCallback((entity, isNested) => isRowChecked(selections, state, selectable === null || selectable === void 0 ? void 0 : selectable.strategy, entity, isNested), [selections, state, selectable === null || selectable === void 0 ? void 0 : selectable.strategy]);
|
|
178
|
+
const hasSelectable = !!selectable;
|
|
179
|
+
const selectableCheckboxSelectsCurrentPage = selectable === null || selectable === void 0 ? void 0 : selectable.checkboxSelectsCurrentPage;
|
|
180
|
+
const selectableTurnOffSelectAll = selectable === null || selectable === void 0 ? void 0 : selectable.turnOffSelectAll;
|
|
181
|
+
const selectableCheckboxInHeader = selectable === null || selectable === void 0 ? void 0 : selectable.checkboxInHeader;
|
|
182
|
+
const selectableSelectionLimit = selectable === null || selectable === void 0 ? void 0 : selectable.selectionLimit;
|
|
183
|
+
const selectableHeader = selectable === null || selectable === void 0 ? void 0 : selectable.header;
|
|
184
|
+
const checkboxEmitsCurrentPage = selectableCheckboxSelectsCurrentPage !== null && selectableCheckboxSelectsCurrentPage !== void 0 ? selectableCheckboxSelectsCurrentPage : selectableTurnOffSelectAll;
|
|
185
|
+
const checkboxInHeaderValue = selectableCheckboxInHeader !== undefined ? selectableCheckboxInHeader : selectableSelectionLimit !== undefined ? false : undefined;
|
|
179
186
|
const wrapper = useMemo(() => {
|
|
180
|
-
if (!
|
|
187
|
+
if (!hasSelectable) {
|
|
181
188
|
return null;
|
|
182
189
|
}
|
|
183
190
|
return {
|
|
@@ -219,23 +226,23 @@ export const useSelectableRows = (columns, entities, isMobile, selectMode, setSe
|
|
|
219
226
|
checked: state === SelectionState.CurrentPage || state === SelectionState.All,
|
|
220
227
|
indeterminate: state === SelectionState.Partial,
|
|
221
228
|
onChange: newValue => {
|
|
222
|
-
const newState = newValue ?
|
|
229
|
+
const newState = newValue ? checkboxEmitsCurrentPage ? SelectionState.CurrentPage : SelectionState.All : SelectionState.None;
|
|
223
230
|
setState(newState);
|
|
224
231
|
onChangeSelectionState(newState);
|
|
225
232
|
},
|
|
226
233
|
calculateSelectionState: () => selectableState,
|
|
227
|
-
checkboxInHeader:
|
|
228
|
-
header:
|
|
234
|
+
checkboxInHeader: checkboxInHeaderValue,
|
|
235
|
+
header: selectableHeader,
|
|
229
236
|
onSelect: newState => {
|
|
230
237
|
setState(newState);
|
|
231
238
|
onChangeSelectionState(newState);
|
|
232
239
|
},
|
|
233
|
-
turnOffSelectAll:
|
|
240
|
+
turnOffSelectAll: selectableTurnOffSelectAll
|
|
234
241
|
});
|
|
235
242
|
return cell;
|
|
236
243
|
}
|
|
237
244
|
};
|
|
238
|
-
}, [checkboxDisabled, checkboxTitle, checkboxVisible, headerTitle, onChangeSelectionState, onSelectListener,
|
|
245
|
+
}, [checkboxDisabled, checkboxTitle, checkboxVisible, headerTitle, onChangeSelectionState, onSelectListener, hasSelectable, checkboxEmitsCurrentPage, checkboxInHeaderValue, selectableHeader, selectableTurnOffSelectAll, selectableState, state, isMobile, checkboxPlaceholder, isEntityChecked]);
|
|
239
246
|
const selectableFeedWrapper = useCallback((primaryData, secondaryData, entity, isNested) => {
|
|
240
247
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
241
248
|
if (!entity) {
|