@geotab/zenith 3.9.0-beta.ssr.0 → 3.9.0-beta.ssr.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/card/card.d.ts +1 -1
  2. package/dist/card/card.js +1 -1
  3. package/dist/card/helpers/getIconTypeFromStatus.d.ts +1 -1
  4. package/dist/commonHelpers/generateId.d.ts +8 -0
  5. package/dist/commonHelpers/generateId.js +8 -0
  6. package/dist/commonHelpers/hooks/ssrProvider.d.ts +14 -0
  7. package/dist/commonHelpers/hooks/ssrProvider.js +12 -0
  8. package/dist/commonHelpers/hooks/useClientReady.js +3 -1
  9. package/dist/commonHelpers/hooks/useDeviceType.js +4 -1
  10. package/dist/commonHelpers/hooks/useMobile.js +4 -3
  11. package/dist/commonHelpers/hooks/usePortal.js +2 -5
  12. package/dist/commonHelpers/useUniqueId.d.ts +6 -0
  13. package/dist/commonHelpers/useUniqueId.js +6 -0
  14. package/dist/commonHelpers/utils.d.ts +8 -0
  15. package/dist/commonHelpers/utils.js +8 -0
  16. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +5 -3
  17. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +2 -38
  18. package/dist/feedbackContainer/feedbackContainer.js +4 -4
  19. package/dist/filters/components/filtersSidePanel.d.ts +1 -1
  20. package/dist/filters/components/filtersSidePanel.js +123 -116
  21. package/dist/filters/filters.js +1 -2
  22. package/dist/filtersBar/filtersBar.js +3 -1
  23. package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.d.ts +1 -1
  24. package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +86 -80
  25. package/dist/index.css +68 -51
  26. package/dist/index.d.ts +6 -3
  27. package/dist/index.js +30 -23
  28. package/dist/nav/navAddMenu/navAddMenu.js +1 -2
  29. package/dist/nav/navItem/navItem.js +1 -2
  30. package/dist/sidePanel/sidePanel.js +9 -8
  31. package/dist/table/children/useTableChildren.d.ts +1 -1
  32. package/dist/table/children/useTableChildren.js +3 -3
  33. package/dist/table/flexible/useFlexibleColumns.js +39 -1
  34. package/dist/table/nested/useNestedRows.d.ts +1 -0
  35. package/dist/table/nested/useNestedRows.js +3 -3
  36. package/dist/table/selectable/useSelectableRows.d.ts +9 -0
  37. package/dist/table/selectable/useSelectableRows.js +18 -11
  38. package/dist/table/table.js +1 -7
  39. package/dist/{card/components → title}/title.d.ts +1 -1
  40. package/dist/title/title.js +27 -0
  41. package/dist/tooltip/tooltip.js +11 -3
  42. package/dist/utils/localization/directionContext.d.ts +3 -0
  43. package/dist/utils/localization/directionContext.js +5 -0
  44. package/dist/utils/localization/getTextDirection.d.ts +2 -0
  45. package/dist/utils/localization/getTextDirection.js +6 -0
  46. package/dist/utils/localization/languageProvider.js +12 -1
  47. package/dist/utils/localization/useDirection.d.ts +2 -0
  48. package/dist/utils/localization/useDirection.js +7 -0
  49. package/esm/card/card.d.ts +1 -1
  50. package/esm/card/card.js +1 -1
  51. package/esm/card/helpers/getIconTypeFromStatus.d.ts +1 -1
  52. package/esm/commonHelpers/generateId.d.ts +8 -0
  53. package/esm/commonHelpers/generateId.js +8 -0
  54. package/esm/commonHelpers/hooks/ssrProvider.d.ts +14 -0
  55. package/esm/commonHelpers/hooks/ssrProvider.js +6 -0
  56. package/esm/commonHelpers/hooks/useClientReady.js +4 -2
  57. package/esm/commonHelpers/hooks/useDeviceType.js +4 -1
  58. package/esm/commonHelpers/hooks/useMobile.js +4 -3
  59. package/esm/commonHelpers/hooks/usePortal.js +2 -5
  60. package/esm/commonHelpers/useUniqueId.d.ts +6 -0
  61. package/esm/commonHelpers/useUniqueId.js +6 -0
  62. package/esm/commonHelpers/utils.d.ts +8 -0
  63. package/esm/commonHelpers/utils.js +8 -0
  64. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +5 -3
  65. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +2 -38
  66. package/esm/feedbackContainer/feedbackContainer.js +4 -4
  67. package/esm/filters/components/filtersSidePanel.d.ts +1 -1
  68. package/esm/filters/components/filtersSidePanel.js +123 -116
  69. package/esm/filters/filters.js +2 -3
  70. package/esm/filtersBar/filtersBar.js +3 -1
  71. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.d.ts +1 -1
  72. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +86 -80
  73. package/esm/index.d.ts +6 -3
  74. package/esm/index.js +6 -3
  75. package/esm/nav/navAddMenu/navAddMenu.js +2 -3
  76. package/esm/nav/navItem/navItem.js +2 -3
  77. package/esm/sidePanel/sidePanel.js +9 -8
  78. package/esm/table/children/useTableChildren.d.ts +1 -1
  79. package/esm/table/children/useTableChildren.js +3 -3
  80. package/esm/table/flexible/useFlexibleColumns.js +39 -1
  81. package/esm/table/nested/useNestedRows.d.ts +1 -0
  82. package/esm/table/nested/useNestedRows.js +1 -1
  83. package/esm/table/selectable/useSelectableRows.d.ts +9 -0
  84. package/esm/table/selectable/useSelectableRows.js +15 -8
  85. package/esm/table/table.js +1 -7
  86. package/esm/{card/components → title}/title.d.ts +1 -1
  87. package/esm/title/title.js +23 -0
  88. package/esm/tooltip/tooltip.js +11 -3
  89. package/esm/utils/localization/directionContext.d.ts +3 -0
  90. package/esm/utils/localization/directionContext.js +2 -0
  91. package/esm/utils/localization/getTextDirection.d.ts +2 -0
  92. package/esm/utils/localization/getTextDirection.js +2 -0
  93. package/esm/utils/localization/languageProvider.js +12 -1
  94. package/esm/utils/localization/useDirection.d.ts +2 -0
  95. package/esm/utils/localization/useDirection.js +3 -0
  96. package/package.json +1 -1
  97. package/dist/card/components/title.js +0 -26
  98. package/dist/commonHelpers/hooks/deviceProvider.d.ts +0 -7
  99. package/dist/commonHelpers/hooks/deviceProvider.js +0 -11
  100. package/esm/card/components/title.js +0 -22
  101. package/esm/commonHelpers/hooks/deviceProvider.d.ts +0 -7
  102. package/esm/commonHelpers/hooks/deviceProvider.js +0 -4
@@ -1,7 +1,7 @@
1
1
  import React, { FC, FunctionComponent, ReactNode } from "react";
2
2
  import { IAbsoluteSize, TContainerSize } from "../cardContainer/cardContainer";
3
3
  import { TCardStatus } from "./components/status";
4
- import { TIconType } from "./components/title";
4
+ import { TIconType } from "../title/title";
5
5
  import { IActions } from "./components/actions";
6
6
  import { IContent } from "./components/content";
7
7
  import "./card.less";
package/dist/card/card.js CHANGED
@@ -71,7 +71,7 @@ const cardContainer_1 = require("../cardContainer/cardContainer");
71
71
  const deviceType_1 = require("../commonHelpers/hooks/deviceType");
72
72
  const useDeviceType_1 = require("../commonHelpers/hooks/useDeviceType");
73
73
  const status_1 = require("./components/status");
74
- const title_1 = require("./components/title");
74
+ const title_1 = require("../title/title");
75
75
  const actions_1 = require("./components/actions");
76
76
  const content_1 = require("./components/content");
77
77
  const useCardSize_1 = require("./hooks/useCardSize");
@@ -1,3 +1,3 @@
1
1
  import { TCardStatus } from "../components/status";
2
- import { TIconType } from "../components/title";
2
+ import { TIconType } from "../../title/title";
3
3
  export declare const getIconTypeFromStatus: (status: TCardStatus) => TIconType | undefined;
@@ -1 +1,9 @@
1
+ /**
2
+ * Generates a random unique ID string.
3
+ *
4
+ * @remarks
5
+ * **Prefer `React.useId()`** inside React components. `useId` produces IDs that are
6
+ * stable across server and client renders, preventing SSR hydration mismatches.
7
+ * Use `generateId` only outside of a React component context where `useId` is not available.
8
+ */
1
9
  export declare function generateId(): string;
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateId = void 0;
4
+ /**
5
+ * Generates a random unique ID string.
6
+ *
7
+ * @remarks
8
+ * **Prefer `React.useId()`** inside React components. `useId` produces IDs that are
9
+ * stable across server and client renders, preventing SSR hydration mismatches.
10
+ * Use `generateId` only outside of a React component context where `useId` is not available.
11
+ */
4
12
  function generateId() {
5
13
  return "id" + Math.random().toString().substring(2) + Math.random().toString().substring(2);
6
14
  }
@@ -0,0 +1,14 @@
1
+ import { PropsWithChildren } from "react";
2
+ import { DeviceType } from "./deviceType";
3
+ interface ISSRContext {
4
+ isClientReady: boolean;
5
+ deviceType?: DeviceType;
6
+ }
7
+ export declare const SSRContext: import("react").Context<ISSRContext | null>;
8
+ export declare const SSRProvider: ({ deviceType, isClientReady, children }: PropsWithChildren<{
9
+ deviceType?: DeviceType;
10
+ isClientReady?: boolean;
11
+ }>) => import("react/jsx-runtime").JSX.Element;
12
+ export declare const useSSRContext: () => ISSRContext | null;
13
+ export declare const useIsSSRProviderMounted: () => boolean;
14
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useIsSSRProviderMounted = exports.useSSRContext = exports.SSRProvider = exports.SSRContext = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ exports.SSRContext = (0, react_1.createContext)(null);
7
+ const SSRProvider = ({ deviceType, isClientReady = false, children }) => ((0, jsx_runtime_1.jsx)(exports.SSRContext.Provider, { value: { isClientReady, deviceType }, children: children }));
8
+ exports.SSRProvider = SSRProvider;
9
+ const useSSRContext = () => (0, react_1.useContext)(exports.SSRContext);
10
+ exports.useSSRContext = useSSRContext;
11
+ const useIsSSRProviderMounted = () => (0, react_1.useContext)(exports.SSRContext) !== null;
12
+ exports.useIsSSRProviderMounted = useIsSSRProviderMounted;
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useClientReady = void 0;
4
4
  const react_1 = require("react");
5
5
  const isDomEnv_1 = require("../isDomEnv");
6
+ const ssrProvider_1 = require("./ssrProvider");
6
7
  const useClientReady = () => {
7
- const [isClientReady, setIsClientReady] = (0, react_1.useState)(true);
8
+ const ctx = (0, react_1.useContext)(ssrProvider_1.SSRContext);
9
+ const [isClientReady, setIsClientReady] = (0, react_1.useState)(ctx !== null ? ctx.isClientReady : true);
8
10
  (0, react_1.useEffect)(() => {
9
11
  if ((0, isDomEnv_1.isDomEnv)()) {
10
12
  setIsClientReady(true);
@@ -7,6 +7,7 @@ const deviceType_1 = require("./deviceType");
7
7
  const topWindowContext_1 = require("../../utils/topWindow/topWindowContext");
8
8
  const getParentWindow_1 = require("../../utils/getParentWindow");
9
9
  const zen_1 = require("../../utils/zen");
10
+ const ssrProvider_1 = require("./ssrProvider");
10
11
  const MobileMaxWidth = 640;
11
12
  const getDeviceType = (width) => {
12
13
  if (width > MobileMaxWidth) {
@@ -16,9 +17,11 @@ const getDeviceType = (width) => {
16
17
  };
17
18
  exports.getDeviceType = getDeviceType;
18
19
  const useDeviceType = (callback) => {
20
+ const ctx = (0, react_1.useContext)(ssrProvider_1.SSRContext);
21
+ const ssrDeviceType = ctx === null || ctx === void 0 ? void 0 : ctx.deviceType;
19
22
  const { topWindow } = (0, react_1.useContext)(topWindowContext_1.topWindowContext);
20
23
  const win = (0, react_1.useMemo)(() => topWindow || (0, getParentWindow_1.getParentWindow)(zen_1.zen), [topWindow]);
21
- const [deviceType, setDeviceType] = (0, react_1.useState)((0, exports.getDeviceType)(win.innerWidth));
24
+ const [deviceType, setDeviceType] = (0, react_1.useState)(ssrDeviceType !== null && ssrDeviceType !== void 0 ? ssrDeviceType : (0, exports.getDeviceType)(win.innerWidth));
22
25
  (0, useResize_1.useResize)(() => {
23
26
  setDeviceType((0, exports.getDeviceType)(win.innerWidth));
24
27
  }, true);
@@ -5,13 +5,14 @@ const react_1 = require("react");
5
5
  const deviceType_1 = require("./deviceType");
6
6
  const useDeviceType_1 = require("./useDeviceType");
7
7
  const getParentWindow_1 = require("../../utils/getParentWindow");
8
- const deviceProvider_1 = require("./deviceProvider");
8
+ const ssrProvider_1 = require("./ssrProvider");
9
9
  const zen_1 = require("../../utils/zen");
10
10
  const initialParent = (0, getParentWindow_1.getParentWindow)(zen_1.zen);
11
11
  exports.initialValue = (0, useDeviceType_1.getDeviceType)(initialParent.innerWidth);
12
12
  const useMobile = () => {
13
- const deviceTypeFromProvider = (0, react_1.useContext)(deviceProvider_1.DeviceContext);
14
- const [deviceType, setDeviceType] = (0, react_1.useState)(deviceTypeFromProvider || exports.initialValue);
13
+ var _a;
14
+ const ctx = (0, react_1.useContext)(ssrProvider_1.SSRContext);
15
+ const [deviceType, setDeviceType] = (0, react_1.useState)((_a = ctx === null || ctx === void 0 ? void 0 : ctx.deviceType) !== null && _a !== void 0 ? _a : exports.initialValue);
15
16
  (0, useDeviceType_1.useDeviceType)(setDeviceType);
16
17
  const isMobile = (0, react_1.useMemo)(() => deviceType === deviceType_1.DeviceType.Mobile, [deviceType]);
17
18
  return isMobile;
@@ -4,13 +4,10 @@ exports.usePortal = void 0;
4
4
  const react_1 = require("react");
5
5
  const react_dom_1 = require("react-dom");
6
6
  const usePortal = (children, container, key) => {
7
- const [portalContainer, setPortalContainer] = (0, react_1.useState)(container);
7
+ const [portalContainer, setPortalContainer] = (0, react_1.useState)(undefined);
8
8
  (0, react_1.useEffect)(() => {
9
- if (portalContainer || !container) {
10
- return;
11
- }
12
9
  setPortalContainer(container);
13
- }, [portalContainer, container]);
10
+ }, [container]);
14
11
  return portalContainer ? (0, react_dom_1.createPortal)(children, portalContainer, key) : null;
15
12
  };
16
13
  exports.usePortal = usePortal;
@@ -6,6 +6,12 @@
6
6
  * component. This can be particularly useful for assigning unique keys to elements
7
7
  * in a list, or for generating unique identifiers for form inputs, labels, etc.
8
8
  *
9
+ * @remarks
10
+ * **Prefer `React.useId()`** when possible. `useId` generates IDs that are stable
11
+ * across server and client renders, preventing SSR hydration mismatches.
12
+ * Use `useUniqueId` only when `useId` is not suitable — for example, when the ID
13
+ * must be truly random and is never rendered during SSR.
14
+ *
9
15
  * @returns {string} A unique identifier.
10
16
  *
11
17
  * Example usage:
@@ -11,6 +11,12 @@ const utils_1 = require("./utils");
11
11
  * component. This can be particularly useful for assigning unique keys to elements
12
12
  * in a list, or for generating unique identifiers for form inputs, labels, etc.
13
13
  *
14
+ * @remarks
15
+ * **Prefer `React.useId()`** when possible. `useId` generates IDs that are stable
16
+ * across server and client renders, preventing SSR hydration mismatches.
17
+ * Use `useUniqueId` only when `useId` is not suitable — for example, when the ID
18
+ * must be truly random and is never rendered during SSR.
19
+ *
14
20
  * @returns {string} A unique identifier.
15
21
  *
16
22
  * Example usage:
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Generates a random unique ID string.
3
+ *
4
+ * @remarks
5
+ * **Prefer `React.useId()`** inside React components. `useId` produces IDs that are
6
+ * stable across server and client renders, preventing SSR hydration mismatches.
7
+ * Use `generateId` only outside of a React component context where `useId` is not available.
8
+ */
1
9
  export declare const generateId: () => string;
2
10
  export declare const echo: <T = unknown>(_: T) => T;
3
11
  export declare function flattenArrays<T>(arrayOfArrays: T[][]): T[];
@@ -2,6 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.deepClone = exports.deepMerge = exports.flattenArrays = exports.echo = exports.generateId = void 0;
4
4
  const zen_1 = require("../utils/zen");
5
+ /**
6
+ * Generates a random unique ID string.
7
+ *
8
+ * @remarks
9
+ * **Prefer `React.useId()`** inside React components. `useId` produces IDs that are
10
+ * stable across server and client renders, preventing SSR hydration mismatches.
11
+ * Use `generateId` only outside of a React component context where `useId` is not available.
12
+ */
5
13
  const generateId = () => "id" + Math.random().toString().substring(2);
6
14
  exports.generateId = generateId;
7
15
  const echo = (_) => _;
@@ -7,19 +7,21 @@ import { DeviceType } from "../../../../commonHelpers/hooks/deviceType";
7
7
  type TBulkAction = IBulkActionLink | IBulkActionButton;
8
8
  export interface IBulkActionsProps extends IZenComponentProps {
9
9
  selected: number;
10
+ /**
11
+ * When `true`, displays "All selected" instead of a count, and enables action buttons
12
+ * even when `selected` is 0 (i.e., cross-page "select all" is active).
13
+ */
10
14
  allSelected?: boolean;
11
15
  onClearSelection: () => void;
12
- onSelectAll?: () => void;
13
16
  gridType?: DeviceType;
14
17
  children?: ReactElement<TBulkAction> | null | (ReactElement<TBulkAction> | null)[];
15
- turnOffSelectAll?: boolean;
16
18
  }
17
19
  export interface IBulkActions extends IBulkActionsProps {
18
20
  ActionLink: (props: IBulkActionLink) => ReactNode;
19
21
  ActionButton: (props: IBulkActionButton) => ReactNode;
20
22
  }
21
23
  export declare const BulkActions: {
22
- ({ selected, allSelected, className, onClearSelection, onSelectAll, gridType, children, turnOffSelectAll }: IBulkActionsProps): import("react/jsx-runtime").JSX.Element;
24
+ ({ selected, allSelected, className, onClearSelection, gridType, children }: IBulkActionsProps): import("react/jsx-runtime").JSX.Element;
23
25
  ActionLink: ({ title, icon, link, disabled, type, ref }: IBulkActionLink) => import("react/jsx-runtime").JSX.Element;
24
26
  ActionButton: ({ title, icon, clickHandler, onClick, disabled, type, ref }: IBulkActionButton) => import("react/jsx-runtime").JSX.Element;
25
27
  translations: string[];
@@ -89,33 +89,6 @@ injectString("zh-Hans", "Clear selection", "\u6E05\u9664\u9009\u62E9");
89
89
  injectString("zh-TW", "Clear selection", "\u6E05\u9664\u9078\u53D6\u9805\u76EE");
90
90
  injectString("ro-RO", "Clear selection", "\u0218terge\u021Bi selec\u021Bia");
91
91
  injectString("ar-SA", "Clear selection", "\u0645\u0633\u062D \u0627\u0644\u062A\u062D\u062F\u064A\u062F");
92
- injectString("cs", "Select all", "Vybrat v\u0161e");
93
- injectString("da-DK", "Select all", "V\xE6lg alle");
94
- injectString("de", "Select all", "Alle ausw\xE4hlen");
95
- injectString("en", "Select all", "Select all");
96
- injectString("es", "Select all", "Seleccionar todo");
97
- injectString("fi-FI", "Select all", "Valitse kaikki");
98
- injectString("fr", "Select all", "S\xE9lectionner tout");
99
- injectString("fr-FR", "Select all", "S\xE9lectionner tout");
100
- injectString("hu-HU", "Select all", "V\xE1laszd ki az \xF6sszeset.");
101
- injectString("id", "Select all", "Pilih semua");
102
- injectString("it", "Select all", "Selezionare tutto");
103
- injectString("ja", "Select all", "\u3059\u3079\u3066\u9078\u629E");
104
- injectString("ko-KR", "Select all", "\uBAA8\uB450 \uC120\uD0DD");
105
- injectString("ms", "Select all", "Pilih semua");
106
- injectString("nb-NO", "Select all", "Velg alle");
107
- injectString("nl", "Select all", "Alles selecteren");
108
- injectString("pl", "Select all", "Wybierz wszystko");
109
- injectString("pt-BR", "Select all", "Selecionar tudo");
110
- injectString("pt-PT", "Select all", "Selecionar tudo");
111
- injectString("sk-SK", "Select all", "Vyber v\u0161etko.");
112
- injectString("sv", "Select all", "V\xE4lj alla");
113
- injectString("th", "Select all", "\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14");
114
- injectString("tr", "Select all", "T\xFCm\xFCn\xFC se\xE7");
115
- injectString("zh-Hans", "Select all", "\u5168\u9009");
116
- injectString("zh-TW", "Select all", "\u5168\u9078");
117
- injectString("ro-RO", "Select all", "Selecta\u021Bi tot");
118
- injectString("ar-SA", "Select all", "\u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0643\u0644");
119
92
  injectString("cs", "More", "V\xEDce");
120
93
  injectString("da-DK", "More", "Mere");
121
94
  injectString("de", "More", "Mehr");
@@ -155,16 +128,13 @@ const useNonFittingElements_1 = require("../../../../header/hooks/useNonFittingE
155
128
  const useResizeObserver_1 = require("../../../../commonHelpers/hooks/useResizeObserver");
156
129
  const menu_1 = require("../../../../menu/menu");
157
130
  const iconDotVertical_1 = require("../../../../icons/iconDotVertical");
158
- const button_1 = require("../../../../button/button");
159
131
  const BulkActions = ({
160
132
  selected,
161
133
  allSelected,
162
134
  className,
163
135
  onClearSelection,
164
- onSelectAll,
165
136
  gridType = deviceType_1.DeviceType.Desktop,
166
- children,
167
- turnOffSelectAll
137
+ children
168
138
  }) => {
169
139
  var _a;
170
140
  const {
@@ -208,13 +178,7 @@ const BulkActions = ({
208
178
  }), (0, jsx_runtime_1.jsx)("span", {
209
179
  className: "zen-bulk-actions__number-of-selected ellipsis",
210
180
  children: text
211
- }), onSelectAll && !turnOffSelectAll ? (0, jsx_runtime_1.jsx)(button_1.Button, {
212
- type: "tertiary",
213
- className: "zen-bulk-actions__select-all",
214
- disabled: allSelected,
215
- onClick: onSelectAll,
216
- children: translate("Select all")
217
- }) : null, (0, jsx_runtime_1.jsxs)("div", {
181
+ }), (0, jsx_runtime_1.jsxs)("div", {
218
182
  className: "zen-bulk-actions__action-button-holder",
219
183
  ref: buttonHolder,
220
184
  children: [react_1.Children.map(visibleElements, element => (0, react_1.cloneElement)(element, {
@@ -35,9 +35,9 @@ const getAlertAnimation_1 = require("./utils/getAlertAnimation");
35
35
  const getToastAnimation_1 = require("./utils/getToastAnimation");
36
36
  const useClientReady_1 = require("../commonHelpers/hooks/useClientReady");
37
37
  const zen_1 = require("../utils/zen");
38
- const react_dom_1 = require("react-dom");
38
+ const usePortal_1 = require("../commonHelpers/hooks/usePortal");
39
39
  const FeedbackContainer = () => {
40
- var _a, _b;
40
+ var _a, _b, _c, _d;
41
41
  const { alerts, removeAlert, toasts, removeToast, activeFeedback, removedAlertId, removedToastId, mode } = react_1.default.useContext(feedbackContext_1.FeedbackContext);
42
42
  const prevAlertsLength = react_1.default.useRef(alerts.length);
43
43
  const prevToastsLength = react_1.default.useRef(toasts.length);
@@ -74,11 +74,11 @@ const FeedbackContainer = () => {
74
74
  removedToastId.current = indx;
75
75
  toast.onClose();
76
76
  }, type: toast.type, hasIcon: toast.hasIcon, action: toast.action }, toast.id))), [toasts, sameToastsLength, isToastAdded, removedToastId, isMobile, activeFeedback, removeToast]);
77
+ const alertsPortal = (0, usePortal_1.usePortal)((0, jsx_runtime_1.jsx)("div", { className: alertClasses, children: alertsToRender }), (_b = (_a = zen_1.zen.document) === null || _a === void 0 ? void 0 : _a.body) !== null && _b !== void 0 ? _b : undefined);
78
+ const toastsPortal = (0, usePortal_1.usePortal)((0, jsx_runtime_1.jsx)("div", { className: toastClasses, children: toastsToRender }), (_d = (_c = zen_1.zen.document) === null || _c === void 0 ? void 0 : _c.body) !== null && _d !== void 0 ? _d : undefined);
77
79
  if (!isClientReady) {
78
80
  return null;
79
81
  }
80
- const alertsPortal = ((_a = zen_1.zen.document) === null || _a === void 0 ? void 0 : _a.body) ? (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)("div", { className: alertClasses, children: alertsToRender }), zen_1.zen.document.body) : null;
81
- const toastsPortal = ((_b = zen_1.zen.document) === null || _b === void 0 ? void 0 : _b.body) ? (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)("div", { className: toastClasses, children: toastsToRender }), zen_1.zen.document.body) : null;
82
82
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [!isAPIMode && alertsPortal, !isAPIMode && toastsPortal] }));
83
83
  };
84
84
  exports.FeedbackContainer = FeedbackContainer;
@@ -12,4 +12,4 @@ export interface IFiltersSidePanel {
12
12
  setExternalState?: (newState: Partial<Record<string, TFiltersComponentsItemState>>) => void;
13
13
  triggerRef: React.RefObject<HTMLElement>;
14
14
  }
15
- export declare const FiltersSidePanel: ({ isOpen, onApply, onClose, onPin, isPinned, filters, externalState, setExternalState, triggerRef }: IFiltersSidePanel) => import("react/jsx-runtime").JSX.Element;
15
+ export declare const FiltersSidePanel: ({ isOpen, onApply, onClose, onPin, isPinned, filters, externalState, setExternalState, triggerRef }: IFiltersSidePanel) => import("react/jsx-runtime").JSX.Element | null;
@@ -14,7 +14,8 @@ const useUniqueId_1 = require("../../commonHelpers/useUniqueId");
14
14
  const useMobile_1 = require("../../commonHelpers/hooks/useMobile");
15
15
  const useBodyScroll_1 = require("../../utils/useBodyScroll");
16
16
  const shield_1 = require("../../shield/shield");
17
- const react_dom_1 = require("react-dom");
17
+ const usePortal_1 = require("../../commonHelpers/hooks/usePortal");
18
+ const useClientReady_1 = require("../../commonHelpers/hooks/useClientReady");
18
19
  const sidePanel_1 = require("../../sidePanel/sidePanel");
19
20
  const classNames_1 = require("../../commonHelpers/classNames/classNames");
20
21
  const themeContext_1 = require("../../utils/theme/themeContext");
@@ -463,131 +464,137 @@ const FiltersSidePanel = ({
463
464
  }
464
465
  }, [isSaveModalOpen, dataShieldId, onClose]);
465
466
  const memoizedBigSizeIcon = (0, react_1.useMemo)(() => (iconMobileClassName || iconDriveClassName) !== undefined, [iconMobileClassName, iconDriveClassName]);
466
- return (0, jsx_runtime_1.jsxs)(react_1.Fragment, {
467
- children: [(0, jsx_runtime_1.jsx)(shield_1.Shield, {
468
- className: "zen-high-level-shield",
469
- dataShieldId: dataShieldId,
470
- isVisible: isOpen
471
- }), (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)(sidePanel_1.SidePanel, {
472
- triggerRef: triggerRef,
473
- isOpen: isOpen,
474
- label: translate("All Filters"),
475
- onHidePanel: handleHidePanel,
476
- className: (0, classNames_1.classNames)(["zen-side-panel-filters", dark ? "zen-dark" : ""]),
477
- onTransitionEnd: handleReadyForFocus,
478
- children: (0, jsx_runtime_1.jsxs)("div", {
479
- className: "zen-side-panel-filters-wrapper",
480
- children: [(0, jsx_runtime_1.jsxs)("div", {
481
- className: "zen-side-panel-filters__header",
482
- children: [(0, jsx_runtime_1.jsx)("div", {
483
- className: "zen-side-panel-filters__title-wrapper",
484
- children: (0, jsx_runtime_1.jsx)("div", {
485
- className: (0, classNames_1.classNames)(["zen-side-panel-filters__title", "zen-ellipsis", titleMobileClassName || ""]),
486
- children: translate("All Filters")
487
- })
488
- }), (0, jsx_runtime_1.jsxs)("div", {
489
- className: (0, classNames_1.classNames)(["zen-side-panel-filters__header-buttons", headerButtonsMobileClassName || ""]),
490
- children: [onSave && (0, jsx_runtime_1.jsx)(button_1.Button, {
491
- type: "tertiary",
492
- ref: saveButtonRef,
493
- className: "zen-side-panel-filters__save-button zen-side-panel-filters__header-button",
494
- title: translate("Save"),
495
- "aria-label": translate("Save"),
496
- onClick: toggleSaveModal,
497
- children: (0, jsx_runtime_1.jsx)(iconDisk_1.IconDisk, {
498
- description: translate("Save"),
499
- className: "svgIcon",
500
- size: memoizedBigSizeIcon ? "huge" : "large"
501
- })
502
- }), onPin && (0, jsx_runtime_1.jsx)(button_1.Button, {
503
- type: "tertiary",
504
- className: (0, classNames_1.classNames)(["zen-side-panel-filters__pin-button", isPinned ? "zen-side-panel-filters__header-button--active" : "", "zen-side-panel-filters__header-button"]),
505
- title: translate("Pin"),
506
- "aria-label": translate("Pin"),
507
- onClick: onPin,
508
- children: (0, jsx_runtime_1.jsx)(iconPin2_1.IconPin2, {
509
- description: translate("Pin"),
510
- className: "svgIcon",
511
- size: memoizedBigSizeIcon ? "huge" : "large"
512
- })
513
- }), (0, jsx_runtime_1.jsx)(textIconButton_1.TextIconButton, {
514
- type: "tertiary-black",
515
- className: "zen-side-panel-filters__close-button",
516
- icon: iconClose_1.IconClose,
517
- iconSize: memoizedBigSizeIcon ? "huge" : "large",
518
- onClick: externalMode ? handleExternalModeClose : onClose,
519
- iconPosition: textIconButton_1.ButtonIconPosition.Start,
520
- title: translate("Close")
521
- })]
522
- })]
523
- }), (0, jsx_runtime_1.jsx)(tabs_1.Tabs, {
524
- activeTabId: activeTabId,
525
- className: "zen-side-panel-filters__tab-header",
526
- onTabChange: onTabChange,
527
- tabs: tabOptions
467
+ const isClientReady = (0, useClientReady_1.useClientReady)();
468
+ const modalRoot = (_b = (_a = zen_1.zen.document) === null || _a === void 0 ? void 0 : _a.fullscreenElement) !== null && _b !== void 0 ? _b : (_c = zen_1.zen.document) === null || _c === void 0 ? void 0 : _c.body;
469
+ const portal = (0, usePortal_1.usePortal)((0, jsx_runtime_1.jsx)(sidePanel_1.SidePanel, {
470
+ triggerRef: triggerRef,
471
+ isOpen: isOpen,
472
+ label: translate("All Filters"),
473
+ onHidePanel: handleHidePanel,
474
+ className: (0, classNames_1.classNames)(["zen-side-panel-filters", dark ? "zen-dark" : ""]),
475
+ onTransitionEnd: handleReadyForFocus,
476
+ children: (0, jsx_runtime_1.jsxs)("div", {
477
+ className: "zen-side-panel-filters-wrapper",
478
+ children: [(0, jsx_runtime_1.jsxs)("div", {
479
+ className: "zen-side-panel-filters__header",
480
+ children: [(0, jsx_runtime_1.jsx)("div", {
481
+ className: "zen-side-panel-filters__title-wrapper",
482
+ children: (0, jsx_runtime_1.jsx)("div", {
483
+ className: (0, classNames_1.classNames)(["zen-side-panel-filters__title", "zen-ellipsis", titleMobileClassName || ""]),
484
+ children: translate("All Filters")
485
+ })
528
486
  }), (0, jsx_runtime_1.jsxs)("div", {
529
- className: "zen-side-panel-filters__content",
530
- children: [(0, jsx_runtime_1.jsx)("div", {
531
- id: `panel-${filtersSelect_1.ALL_SELECT_OPTION_ID}`,
532
- className: (0, classNames_1.classNames)(["zen-side-panel-filters__tab-content", activeTabId === filtersSelect_1.ALL_SELECT_OPTION_ID ? "zen-side-panel-filters__tab-content--active" : "zen-side-panel-filters__tab-content--hidden"]),
533
- role: "tabpanel",
534
- "aria-labelledby": filtersSelect_1.ALL_SELECT_OPTION_ID,
535
- children: activeTabId === filtersSelect_1.ALL_SELECT_OPTION_ID ? tabsContent : null
536
- }), (0, jsx_runtime_1.jsx)("div", {
537
- id: `panel-${SELECTED_TAB_ID}`,
538
- className: (0, classNames_1.classNames)(["zen-side-panel-filters__tab-content", activeTabId === SELECTED_TAB_ID ? "zen-side-panel-filters__tab-content--active" : "zen-side-panel-filters__tab-content--hidden"]),
539
- role: "tabpanel",
540
- "aria-labelledby": SELECTED_TAB_ID,
541
- children: activeTabId === SELECTED_TAB_ID ? selectedTabsContent : null
487
+ className: (0, classNames_1.classNames)(["zen-side-panel-filters__header-buttons", headerButtonsMobileClassName || ""]),
488
+ children: [onSave && (0, jsx_runtime_1.jsx)(button_1.Button, {
489
+ type: "tertiary",
490
+ ref: saveButtonRef,
491
+ className: "zen-side-panel-filters__save-button zen-side-panel-filters__header-button",
492
+ title: translate("Save"),
493
+ "aria-label": translate("Save"),
494
+ onClick: toggleSaveModal,
495
+ children: (0, jsx_runtime_1.jsx)(iconDisk_1.IconDisk, {
496
+ description: translate("Save"),
497
+ className: "svgIcon",
498
+ size: memoizedBigSizeIcon ? "huge" : "large"
499
+ })
500
+ }), onPin && (0, jsx_runtime_1.jsx)(button_1.Button, {
501
+ type: "tertiary",
502
+ className: (0, classNames_1.classNames)(["zen-side-panel-filters__pin-button", isPinned ? "zen-side-panel-filters__header-button--active" : "", "zen-side-panel-filters__header-button"]),
503
+ title: translate("Pin"),
504
+ "aria-label": translate("Pin"),
505
+ onClick: onPin,
506
+ children: (0, jsx_runtime_1.jsx)(iconPin2_1.IconPin2, {
507
+ description: translate("Pin"),
508
+ className: "svgIcon",
509
+ size: memoizedBigSizeIcon ? "huge" : "large"
510
+ })
511
+ }), (0, jsx_runtime_1.jsx)(textIconButton_1.TextIconButton, {
512
+ type: "tertiary-black",
513
+ className: "zen-side-panel-filters__close-button",
514
+ icon: iconClose_1.IconClose,
515
+ iconSize: memoizedBigSizeIcon ? "huge" : "large",
516
+ onClick: externalMode ? handleExternalModeClose : onClose,
517
+ iconPosition: textIconButton_1.ButtonIconPosition.Start,
518
+ title: translate("Close")
542
519
  })]
520
+ })]
521
+ }), (0, jsx_runtime_1.jsx)(tabs_1.Tabs, {
522
+ activeTabId: activeTabId,
523
+ className: "zen-side-panel-filters__tab-header",
524
+ onTabChange: onTabChange,
525
+ tabs: tabOptions
526
+ }), (0, jsx_runtime_1.jsxs)("div", {
527
+ className: "zen-side-panel-filters__content",
528
+ children: [(0, jsx_runtime_1.jsx)("div", {
529
+ id: `panel-${filtersSelect_1.ALL_SELECT_OPTION_ID}`,
530
+ className: (0, classNames_1.classNames)(["zen-side-panel-filters__tab-content", activeTabId === filtersSelect_1.ALL_SELECT_OPTION_ID ? "zen-side-panel-filters__tab-content--active" : "zen-side-panel-filters__tab-content--hidden"]),
531
+ role: "tabpanel",
532
+ "aria-labelledby": filtersSelect_1.ALL_SELECT_OPTION_ID,
533
+ children: activeTabId === filtersSelect_1.ALL_SELECT_OPTION_ID ? tabsContent : null
543
534
  }), (0, jsx_runtime_1.jsx)("div", {
544
- className: (0, classNames_1.classNames)(["zen-side-panel-filters__footer", isMobile ? "zen-side-panel-filters__footer--mobile" : "", isLongTextLanguages && !isMobile ? "zen-side-panel-filters__footer--long-text" : ""]),
545
- children: isMobile ? (0, jsx_runtime_1.jsxs)(footerButtons_1.FooterButtons, {
535
+ id: `panel-${SELECTED_TAB_ID}`,
536
+ className: (0, classNames_1.classNames)(["zen-side-panel-filters__tab-content", activeTabId === SELECTED_TAB_ID ? "zen-side-panel-filters__tab-content--active" : "zen-side-panel-filters__tab-content--hidden"]),
537
+ role: "tabpanel",
538
+ "aria-labelledby": SELECTED_TAB_ID,
539
+ children: activeTabId === SELECTED_TAB_ID ? selectedTabsContent : null
540
+ })]
541
+ }), (0, jsx_runtime_1.jsx)("div", {
542
+ className: (0, classNames_1.classNames)(["zen-side-panel-filters__footer", isMobile ? "zen-side-panel-filters__footer--mobile" : "", isLongTextLanguages && !isMobile ? "zen-side-panel-filters__footer--long-text" : ""]),
543
+ children: isMobile ? (0, jsx_runtime_1.jsxs)(footerButtons_1.FooterButtons, {
544
+ children: [(0, jsx_runtime_1.jsx)(button_1.Button, {
545
+ className: "zen-side-panel-filters__apply-button",
546
+ onClick: handleApplyClick,
547
+ type: "primary",
548
+ disabled: errorItems.size > 0,
549
+ children: translate("Apply")
550
+ }), (0, jsx_runtime_1.jsx)(button_1.Button, {
551
+ className: "zen-side-panel-filters__cancel-button",
552
+ type: "secondary",
553
+ onClick: handleCancelClick,
554
+ children: translate("Cancel")
555
+ }), (0, jsx_runtime_1.jsx)(button_1.Button, {
556
+ className: "zen-side-panel-filters__clear-button",
557
+ onClick: handleClearClick,
558
+ type: "tertiary",
559
+ children: translate("Reset")
560
+ })]
561
+ }) : (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
562
+ children: [(0, jsx_runtime_1.jsx)("div", {
563
+ className: "zen-side-panel-filters__footer-section",
564
+ children: (0, jsx_runtime_1.jsx)(button_1.Button, {
565
+ type: "tertiary",
566
+ className: "zen-side-panel-filters__clear-button",
567
+ onClick: handleClearClick,
568
+ children: translate("Reset")
569
+ })
570
+ }), (0, jsx_runtime_1.jsxs)("div", {
571
+ className: "zen-side-panel-filters__footer-section",
546
572
  children: [(0, jsx_runtime_1.jsx)(button_1.Button, {
547
- className: "zen-side-panel-filters__apply-button",
548
- onClick: handleApplyClick,
549
- type: "primary",
550
- disabled: errorItems.size > 0,
551
- children: translate("Apply")
552
- }), (0, jsx_runtime_1.jsx)(button_1.Button, {
553
573
  className: "zen-side-panel-filters__cancel-button",
554
574
  type: "secondary",
555
575
  onClick: handleCancelClick,
556
576
  children: translate("Cancel")
557
577
  }), (0, jsx_runtime_1.jsx)(button_1.Button, {
558
- className: "zen-side-panel-filters__clear-button",
559
- onClick: handleClearClick,
560
- type: "tertiary",
561
- children: translate("Reset")
562
- })]
563
- }) : (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
564
- children: [(0, jsx_runtime_1.jsx)("div", {
565
- className: "zen-side-panel-filters__footer-section",
566
- children: (0, jsx_runtime_1.jsx)(button_1.Button, {
567
- type: "tertiary",
568
- className: "zen-side-panel-filters__clear-button",
569
- onClick: handleClearClick,
570
- children: translate("Reset")
571
- })
572
- }), (0, jsx_runtime_1.jsxs)("div", {
573
- className: "zen-side-panel-filters__footer-section",
574
- children: [(0, jsx_runtime_1.jsx)(button_1.Button, {
575
- className: "zen-side-panel-filters__cancel-button",
576
- type: "secondary",
577
- onClick: handleCancelClick,
578
- children: translate("Cancel")
579
- }), (0, jsx_runtime_1.jsx)(button_1.Button, {
580
- className: "zen-side-panel-filters__apply-button zen-side-panel-filters__apply-button--desktop",
581
- onClick: handleApplyClick,
582
- type: "primary",
583
- disabled: errorItems.size > 0,
584
- children: translate("Apply")
585
- })]
578
+ className: "zen-side-panel-filters__apply-button zen-side-panel-filters__apply-button--desktop",
579
+ onClick: handleApplyClick,
580
+ type: "primary",
581
+ disabled: errorItems.size > 0,
582
+ children: translate("Apply")
586
583
  })]
587
- })
588
- })]
589
- })
590
- }), (_b = (_a = zen_1.zen.document) === null || _a === void 0 ? void 0 : _a.fullscreenElement) !== null && _b !== void 0 ? _b : (_c = zen_1.zen.document) === null || _c === void 0 ? void 0 : _c.body), (0, jsx_runtime_1.jsx)(filtersSaveModal_1.FiltersSaveModal, {
584
+ })]
585
+ })
586
+ })]
587
+ })
588
+ }), modalRoot !== null && modalRoot !== void 0 ? modalRoot : undefined);
589
+ if (!isClientReady) {
590
+ return null;
591
+ }
592
+ return (0, jsx_runtime_1.jsxs)(react_1.Fragment, {
593
+ children: [(0, jsx_runtime_1.jsx)(shield_1.Shield, {
594
+ className: "zen-high-level-shield",
595
+ dataShieldId: dataShieldId,
596
+ isVisible: isOpen
597
+ }), portal, (0, jsx_runtime_1.jsx)(filtersSaveModal_1.FiltersSaveModal, {
591
598
  className: sidePanel_1.CUSTOM_POPUP_COMPONENT_CLASSNAME,
592
599
  isOpen: isSaveModalOpen,
593
600
  onClose: toggleSaveModal,
@@ -223,7 +223,6 @@ const chipStatusProvider_1 = require("../chip/chipStatusProvider");
223
223
  const filtersSavedItemsProvider_1 = require("./components/filtersSavedItemsProvider");
224
224
  const filtersHelper_1 = require("./filtersHelper");
225
225
  const filtersSearch_1 = require("./components/filtersSearch");
226
- const useUniqueId_1 = require("../commonHelpers/useUniqueId");
227
226
  const isElementsEqual_1 = require("../utils/compareElementsUtils/isElementsEqual");
228
227
  const iconFilter_1 = require("../icons/iconFilter");
229
228
  const filtersSidePanel_1 = require("./components/filtersSidePanel");
@@ -265,7 +264,7 @@ const Filters = ({
265
264
  const isSavedFiltersMode = Boolean(savedFilters && onRemoveSavedFilter && onSaveFilter);
266
265
  const isPinMode = Boolean(typeof isPinned === "boolean" && onPinChange);
267
266
  const isRecentSearchesMode = Boolean(recentSearches && onRemoveRecentSearchItem && onSaveRecentSearch);
268
- const uniqueKey = (0, useUniqueId_1.useUniqueId)();
267
+ const uniqueKey = (0, react_1.useId)();
269
268
  const popupId = `${uniqueKey}_popup`;
270
269
  const isMobile = (0, useMobile_1.useMobile)();
271
270
  const [isSidePanelOpen, setIsSidePanelOpen] = (0, react_1.useState)(false);