@geotab/zenith 3.8.0-beta.1 → 3.9.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +201 -4
- 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 +440 -305
- 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 +3210 -2238
- 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/summaryTile/summaryTile.d.ts +1 -3
- package/dist/summaryTile/summaryTile.js +1 -2
- 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 +201 -4
- 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/summaryTile/summaryTile.d.ts +1 -3
- package/esm/summaryTile/summaryTile.js +1 -2
- 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;
|
|
@@ -54,8 +54,6 @@ export interface ISummaryTile extends IZenComponentProps, IZenGridItem {
|
|
|
54
54
|
tooltipSize?: TooltipSize;
|
|
55
55
|
/** When `true`, shows a skeleton placeholder while data is being fetched — two skeleton elements replace the title and content areas. */
|
|
56
56
|
isLoading?: boolean;
|
|
57
|
-
/** When `true` and the tile is interactive, sets `aria-current="page"` on the tile. */
|
|
58
|
-
isSelected?: boolean;
|
|
59
57
|
/** Analytics identifier applied as `data-analytics-id`. Defaults to a kebab-cased version of `title`. */
|
|
60
58
|
dataAnalyticsId?: string;
|
|
61
59
|
}
|
|
@@ -75,6 +73,6 @@ export declare const SummaryTileDisplayName = "SummaryTile";
|
|
|
75
73
|
* Use inside `SummaryTileBar` to group multiple tiles in a scrollable row.
|
|
76
74
|
*/
|
|
77
75
|
export declare const SummaryTile: {
|
|
78
|
-
({ className, children, size, title, tileType, id, onClick, tooltipText, tooltipAlignment, isLoading,
|
|
76
|
+
({ className, children, size, title, tileType, id, onClick, tooltipText, tooltipAlignment, isLoading, dataAnalyticsId }: ISummaryTile): import("react/jsx-runtime").JSX.Element;
|
|
79
77
|
displayName: string;
|
|
80
78
|
};
|
|
@@ -83,7 +83,6 @@ export const SummaryTile = ({
|
|
|
83
83
|
tooltipText,
|
|
84
84
|
tooltipAlignment = "top",
|
|
85
85
|
isLoading = false,
|
|
86
|
-
isSelected = false,
|
|
87
86
|
dataAnalyticsId
|
|
88
87
|
}) => {
|
|
89
88
|
const {
|
|
@@ -139,7 +138,7 @@ export const SummaryTile = ({
|
|
|
139
138
|
}),
|
|
140
139
|
children: tooltipText
|
|
141
140
|
}) : null;
|
|
142
|
-
const ariaCurrentProps =
|
|
141
|
+
const ariaCurrentProps = tileType === SummaryTileType.Active && isInteractive ? {
|
|
143
142
|
"aria-current": "page"
|
|
144
143
|
} : {};
|
|
145
144
|
// When both onClick and tooltipText are present, the tooltip trigger
|
|
@@ -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];
|