@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.
Files changed (200) hide show
  1. package/README.md +11 -12
  2. package/dist/button/button.d.ts +2 -1
  3. package/dist/button/button.js +3 -3
  4. package/dist/calendar/calendar.js +200 -3
  5. package/dist/card/card.d.ts +1 -1
  6. package/dist/card/card.js +1 -1
  7. package/dist/card/components/cardButton/cardButton.d.ts +2 -1
  8. package/dist/card/components/cardButton/cardButton.js +5 -3
  9. package/dist/card/helpers/getIconTypeFromStatus.d.ts +1 -1
  10. package/dist/chart/barChart/getBarLegendItems.js +3 -5
  11. package/dist/chart/lineChart/getLineLegendItems.js +7 -7
  12. package/dist/chart/pieChart/centerTextPlugin.js +13 -5
  13. package/dist/chart/pieChart/getPieLegendItems.js +8 -12
  14. package/dist/chart/pieChart.js +13 -11
  15. package/dist/chart/plugins/legend/interfaces.d.ts +1 -1
  16. package/dist/commonHelpers/generateId.d.ts +8 -0
  17. package/dist/commonHelpers/generateId.js +8 -0
  18. package/dist/commonHelpers/hooks/ssrProvider.d.ts +14 -0
  19. package/dist/commonHelpers/hooks/ssrProvider.js +12 -0
  20. package/dist/commonHelpers/hooks/useClientReady.js +3 -1
  21. package/dist/commonHelpers/hooks/useDeviceType.js +6 -2
  22. package/dist/commonHelpers/hooks/useIsomorphicLayoutEffect.d.ts +2 -0
  23. package/dist/commonHelpers/hooks/useIsomorphicLayoutEffect.js +6 -0
  24. package/dist/commonHelpers/hooks/useMobile.js +4 -3
  25. package/dist/commonHelpers/hooks/usePortal.js +2 -5
  26. package/dist/commonHelpers/isDomEnv.js +1 -2
  27. package/dist/commonHelpers/useUniqueId.d.ts +6 -0
  28. package/dist/commonHelpers/useUniqueId.js +8 -2
  29. package/dist/commonHelpers/utils.d.ts +0 -1
  30. package/dist/commonHelpers/utils.js +1 -3
  31. package/dist/commonStyles/common.less +13 -1
  32. package/dist/commonStyles/fonts/notosarabic/LICENSE.txt +93 -0
  33. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Bold.woff +0 -0
  34. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Bold.woff2 +0 -0
  35. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Medium.woff +0 -0
  36. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Medium.woff2 +0 -0
  37. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Regular.woff +0 -0
  38. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Regular.woff2 +0 -0
  39. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-SemiBold.woff +0 -0
  40. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-SemiBold.woff2 +0 -0
  41. package/dist/commonStyles/fonts/notosarabic.less +43 -0
  42. package/dist/commonStyles/pillStyles/pillContent.less +2 -3
  43. package/dist/commonStyles/pillStyles/pillStyles.less +1 -2
  44. package/dist/commonStyles/pillStyles/pillTextContent.less +2 -2
  45. package/dist/commonStyles/typography/typography.less +617 -249
  46. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +5 -3
  47. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +2 -38
  48. package/dist/dateInputInner/dateInputInnerControlBlock.js +12 -8
  49. package/dist/dateRangeRaw/dateRangeRaw.js +5 -1
  50. package/dist/dialog/dialog.js +4 -3
  51. package/dist/feedbackContainer/feedbackContainer.js +4 -4
  52. package/dist/fileUpload/fileUpload.js +21 -12
  53. package/dist/filters/components/filtersSidePanel.d.ts +1 -1
  54. package/dist/filters/components/filtersSidePanel.js +123 -116
  55. package/dist/filters/filters.js +1 -2
  56. package/dist/filtersBar/filtersBar.d.ts +2 -0
  57. package/dist/filtersBar/filtersBar.js +5 -3
  58. package/dist/filtersBar/filtersBarActions/filtersBarActions.js +3 -1
  59. package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +3 -0
  60. package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.d.ts +1 -1
  61. package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +86 -80
  62. package/dist/formFieldError/formFieldError.d.ts +2 -1
  63. package/dist/formFieldError/formFieldError.js +2 -2
  64. package/dist/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +1 -1
  65. package/dist/index.css +3707 -2151
  66. package/dist/index.d.ts +3 -5
  67. package/dist/index.js +24 -29
  68. package/dist/menu/components/menuItem.js +4 -4
  69. package/dist/menu/controlledMenu.js +4 -4
  70. package/dist/nav/nav.js +10 -5
  71. package/dist/nav/navAddMenu/navAddMenu.js +1 -2
  72. package/dist/nav/navEditList/navEditListUtils.d.ts +1 -1
  73. package/dist/nav/navEditList/navEditListUtils.js +2 -1
  74. package/dist/nav/navItem/navActionItem.js +3 -3
  75. package/dist/nav/navItem/navItem.js +1 -2
  76. package/dist/pageHeader/pageHeaderActions.js +4 -3
  77. package/dist/rangeRaw/rangeRaw.js +7 -1
  78. package/dist/selectList/selectList.js +11 -7
  79. package/dist/selectRaw/selectRaw.js +1 -1
  80. package/dist/shield/shield.js +5 -3
  81. package/dist/sidePanel/sidePanel.js +9 -8
  82. package/dist/table/children/useTableChildren.d.ts +1 -1
  83. package/dist/table/children/useTableChildren.js +3 -3
  84. package/dist/table/flexible/useFlexibleColumns.js +39 -1
  85. package/dist/table/nested/useNestedRows.d.ts +1 -0
  86. package/dist/table/nested/useNestedRows.js +3 -3
  87. package/dist/table/selectable/useSelectableRows.d.ts +9 -0
  88. package/dist/table/selectable/useSelectableRows.js +18 -11
  89. package/dist/table/table.js +1 -7
  90. package/dist/{card/components → title}/title.d.ts +1 -1
  91. package/dist/title/title.js +27 -0
  92. package/dist/toggleButtonRaw/toggleButtonRaw.js +3 -1
  93. package/dist/toggleButtonRaw/types.d.ts +1 -0
  94. package/dist/tooltip/tooltip.d.ts +2 -1
  95. package/dist/tooltip/tooltip.js +68 -64
  96. package/dist/utils/localization/directionContext.d.ts +3 -0
  97. package/dist/utils/localization/directionContext.js +5 -0
  98. package/dist/utils/localization/getTextDirection.d.ts +2 -0
  99. package/dist/utils/localization/getTextDirection.js +6 -0
  100. package/dist/utils/localization/languageProvider.js +15 -1
  101. package/dist/utils/localization/translations/en-json.d.ts +2 -0
  102. package/dist/utils/localization/translations/en-json.js +3 -1
  103. package/dist/utils/localization/translations/en.json +3 -0
  104. package/dist/utils/localization/useDirection.d.ts +2 -0
  105. package/dist/utils/localization/useDirection.js +7 -0
  106. package/esm/button/button.d.ts +2 -1
  107. package/esm/button/button.js +3 -3
  108. package/esm/calendar/calendar.js +200 -3
  109. package/esm/card/card.d.ts +1 -1
  110. package/esm/card/card.js +1 -1
  111. package/esm/card/components/cardButton/cardButton.d.ts +2 -1
  112. package/esm/card/components/cardButton/cardButton.js +5 -3
  113. package/esm/card/helpers/getIconTypeFromStatus.d.ts +1 -1
  114. package/esm/chart/barChart/getBarLegendItems.js +3 -5
  115. package/esm/chart/lineChart/getLineLegendItems.js +7 -7
  116. package/esm/chart/pieChart/centerTextPlugin.js +13 -5
  117. package/esm/chart/pieChart/getPieLegendItems.js +8 -12
  118. package/esm/chart/pieChart.js +14 -12
  119. package/esm/chart/plugins/legend/interfaces.d.ts +1 -1
  120. package/esm/commonHelpers/generateId.d.ts +8 -0
  121. package/esm/commonHelpers/generateId.js +8 -0
  122. package/esm/commonHelpers/hooks/ssrProvider.d.ts +14 -0
  123. package/esm/commonHelpers/hooks/ssrProvider.js +6 -0
  124. package/esm/commonHelpers/hooks/useClientReady.js +4 -2
  125. package/esm/commonHelpers/hooks/useDeviceType.js +7 -3
  126. package/esm/commonHelpers/hooks/useIsomorphicLayoutEffect.d.ts +2 -0
  127. package/esm/commonHelpers/hooks/useIsomorphicLayoutEffect.js +3 -0
  128. package/esm/commonHelpers/hooks/useMobile.js +4 -3
  129. package/esm/commonHelpers/hooks/usePortal.js +2 -5
  130. package/esm/commonHelpers/isDomEnv.js +1 -2
  131. package/esm/commonHelpers/useUniqueId.d.ts +6 -0
  132. package/esm/commonHelpers/useUniqueId.js +7 -1
  133. package/esm/commonHelpers/utils.d.ts +0 -1
  134. package/esm/commonHelpers/utils.js +0 -1
  135. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +5 -3
  136. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +2 -38
  137. package/esm/dateInputInner/dateInputInnerControlBlock.js +13 -9
  138. package/esm/dateRangeRaw/dateRangeRaw.js +5 -1
  139. package/esm/dialog/dialog.js +4 -3
  140. package/esm/feedbackContainer/feedbackContainer.js +4 -4
  141. package/esm/fileUpload/fileUpload.js +21 -12
  142. package/esm/filters/components/filtersSidePanel.d.ts +1 -1
  143. package/esm/filters/components/filtersSidePanel.js +123 -116
  144. package/esm/filters/filters.js +2 -3
  145. package/esm/filtersBar/filtersBar.d.ts +2 -0
  146. package/esm/filtersBar/filtersBar.js +5 -3
  147. package/esm/filtersBar/filtersBarActions/filtersBarActions.js +3 -1
  148. package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +3 -0
  149. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.d.ts +1 -1
  150. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +86 -80
  151. package/esm/formFieldError/formFieldError.d.ts +2 -1
  152. package/esm/formFieldError/formFieldError.js +2 -2
  153. package/esm/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +1 -1
  154. package/esm/index.d.ts +3 -5
  155. package/esm/index.js +3 -5
  156. package/esm/menu/components/menuItem.js +1 -1
  157. package/esm/menu/controlledMenu.js +1 -1
  158. package/esm/nav/nav.js +10 -5
  159. package/esm/nav/navAddMenu/navAddMenu.js +2 -3
  160. package/esm/nav/navEditList/navEditListUtils.d.ts +1 -1
  161. package/esm/nav/navEditList/navEditListUtils.js +2 -1
  162. package/esm/nav/navItem/navActionItem.js +3 -2
  163. package/esm/nav/navItem/navItem.js +2 -3
  164. package/esm/pageHeader/pageHeaderActions.js +4 -3
  165. package/esm/rangeRaw/rangeRaw.js +7 -1
  166. package/esm/selectList/selectList.js +11 -7
  167. package/esm/selectRaw/selectRaw.js +1 -1
  168. package/esm/shield/shield.js +5 -3
  169. package/esm/sidePanel/sidePanel.js +9 -8
  170. package/esm/table/children/useTableChildren.d.ts +1 -1
  171. package/esm/table/children/useTableChildren.js +3 -3
  172. package/esm/table/flexible/useFlexibleColumns.js +39 -1
  173. package/esm/table/nested/useNestedRows.d.ts +1 -0
  174. package/esm/table/nested/useNestedRows.js +1 -1
  175. package/esm/table/selectable/useSelectableRows.d.ts +9 -0
  176. package/esm/table/selectable/useSelectableRows.js +15 -8
  177. package/esm/table/table.js +1 -7
  178. package/esm/{card/components → title}/title.d.ts +1 -1
  179. package/esm/title/title.js +23 -0
  180. package/esm/toggleButtonRaw/toggleButtonRaw.js +3 -1
  181. package/esm/toggleButtonRaw/types.d.ts +1 -0
  182. package/esm/tooltip/tooltip.d.ts +2 -1
  183. package/esm/tooltip/tooltip.js +68 -64
  184. package/esm/utils/localization/directionContext.d.ts +3 -0
  185. package/esm/utils/localization/directionContext.js +2 -0
  186. package/esm/utils/localization/getTextDirection.d.ts +2 -0
  187. package/esm/utils/localization/getTextDirection.js +2 -0
  188. package/esm/utils/localization/languageProvider.js +15 -1
  189. package/esm/utils/localization/translations/en-json.d.ts +2 -0
  190. package/esm/utils/localization/translations/en-json.js +3 -1
  191. package/esm/utils/localization/translations/en.json +3 -0
  192. package/esm/utils/localization/useDirection.d.ts +2 -0
  193. package/esm/utils/localization/useDirection.js +3 -0
  194. package/package.json +33 -31
  195. package/dist/card/components/title.js +0 -22
  196. package/dist/commonHelpers/hooks/deviceProvider.d.ts +0 -7
  197. package/dist/commonHelpers/hooks/deviceProvider.js +0 -11
  198. package/esm/card/components/title.js +0 -18
  199. package/esm/commonHelpers/hooks/deviceProvider.d.ts +0 -7
  200. package/esm/commonHelpers/hooks/deviceProvider.js +0 -4
@@ -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, {
@@ -87,23 +87,28 @@ const DateInputInnerControlBlock = props => {
87
87
  assistiveText,
88
88
  ref
89
89
  } = props;
90
+ const generatedId = (0, react_1.useId)();
91
+ const fieldId = id || generatedId;
90
92
  const {
91
93
  translate
92
94
  } = (0, useLanguage_1.useLanguage)();
93
95
  const driveAssistiveClass = (0, useDriveClassName_1.useDriveClassName)("zen-form-field__text");
94
96
  const isHasDateError = requireSelection && !dateText;
95
97
  const isHasTimeError = requireSelection && !timePickerValue;
98
+ const dateErrorId = `${fieldId}-date-error`;
99
+ const timeErrorId = `${fieldId}-time-error`;
96
100
  const memoizedDateInput = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(textInputRaw_1.TextInputRaw, {
97
101
  className: (0, classNames_1.classNames)(["zen-date-input-inner__text-input", isActiveField ? "zen-date-input-inner__text-input--active" : ""]),
98
- id: id,
102
+ id: fieldId,
99
103
  value: dateText,
100
104
  onChange: handleSetDateText,
101
105
  onBlur: onBlurDateChangeHandler,
102
106
  placeholder: placeholder,
103
107
  autocomplete: "off",
104
108
  isError: isHasDateError,
109
+ ariaDescribedby: isHasDateError ? dateErrorId : undefined,
105
110
  ref: ref
106
- }), [dateText, handleSetDateText, id, isActiveField, isHasDateError, onBlurDateChangeHandler, placeholder, ref]);
111
+ }), [dateText, handleSetDateText, fieldId, isActiveField, isHasDateError, onBlurDateChangeHandler, placeholder, ref, dateErrorId]);
107
112
  const memoizedTimeSelect = (0, react_1.useMemo)(() => selectTime ? (0, jsx_runtime_1.jsxs)("div", {
108
113
  className: "zen-date-input-inner__inputs-block-item",
109
114
  children: [(0, jsx_runtime_1.jsx)(timePicker_1.TimePicker, {
@@ -111,18 +116,16 @@ const DateInputInnerControlBlock = props => {
111
116
  value: timePickerValue,
112
117
  onChange: timeChangeHandler,
113
118
  isMobileView: isMobileView,
114
- fullWidth: true,
115
- // eslint-disable-next-line
116
- // @ts-ignore
117
- dataTimeId: id
119
+ fullWidth: true
118
120
  }), isHasTimeError ? (0, jsx_runtime_1.jsx)(formFieldError_1.FormFieldError, {
121
+ id: timeErrorId,
119
122
  error: translate("The time must be set")
120
123
  }) : null]
121
- }) : null, [isActiveField, isHasTimeError, isMobileView, selectTime, timeChangeHandler, timePickerValue, translate, id]);
124
+ }) : null, [isActiveField, isHasTimeError, isMobileView, selectTime, timeChangeHandler, timePickerValue, translate, timeErrorId]);
122
125
  return (0, jsx_runtime_1.jsxs)("div", {
123
126
  className: (0, classNames_1.classNames)(["zen-date-input-inner__control-block", className || ""]),
124
127
  children: [title ? (0, jsx_runtime_1.jsx)("label", {
125
- htmlFor: id,
128
+ htmlFor: fieldId,
126
129
  className: "zen-date-input-inner__label",
127
130
  children: title
128
131
  }) : null, (0, jsx_runtime_1.jsxs)("div", {
@@ -130,6 +133,7 @@ const DateInputInnerControlBlock = props => {
130
133
  children: [(0, jsx_runtime_1.jsxs)("div", {
131
134
  className: "zen-date-input-inner__inputs-block-item",
132
135
  children: [memoizedDateInput, isHasDateError ? (0, jsx_runtime_1.jsx)(formFieldError_1.FormFieldError, {
136
+ id: dateErrorId,
133
137
  error: translate("The date must be set")
134
138
  }) : null]
135
139
  }), memoizedTimeSelect]
@@ -197,6 +197,7 @@ injectString("zh-Hans", "Previous", "\u524D\u4E00");
197
197
  injectString("zh-TW", "Previous", "\u4E0A\u4E00\u500B");
198
198
  injectString("ro-RO", "Previous", "\xCEnapoi");
199
199
  injectString("ar-SA", "Previous", "\u0627\u0644\u0633\u0627\u0628\u0642");
200
+ injectString("en", "Previous date period", "Previous date period");
200
201
  injectString("cs", "Next", "Dal\u0161\xED");
201
202
  injectString("da-DK", "Next", "N\xE6ste");
202
203
  injectString("de", "Next", "N\xE4chstes");
@@ -224,6 +225,7 @@ injectString("zh-Hans", "Next", "\u4E0B\u4E00\u4E2A");
224
225
  injectString("zh-TW", "Next", "\u4E0B\u4E00\u6B65");
225
226
  injectString("ro-RO", "Next", "\xCEnainte");
226
227
  injectString("ar-SA", "Next", "\u0627\u0644\u062A\u0627\u0644\u064A");
228
+ injectString("en", "Next date period", "Next date period");
227
229
  const textIconButton_1 = require("../textIconButton/textIconButton");
228
230
  const button_1 = require("../button/button");
229
231
  const iconCalendar_1 = require("../icons/iconCalendar");
@@ -701,6 +703,7 @@ const DateRangeRaw = props => {
701
703
  onClick: decreaseRange,
702
704
  className: (0, classNames_1.classNames)(["zen-date-range__stepper", "zen-date-range__stepper--left"]),
703
705
  title: translate("Previous"),
706
+ "aria-label": translate("Previous date period"),
704
707
  children: (0, jsx_runtime_1.jsx)(iconChevronLeftSmall_1.IconChevronLeftSmall, {
705
708
  size: isDrive || isMobile ? "huge" : "large"
706
709
  })
@@ -710,6 +713,7 @@ const DateRangeRaw = props => {
710
713
  onClick: increaseRange,
711
714
  className: (0, classNames_1.classNames)(["zen-date-range__stepper", "zen-date-range__stepper--right"]),
712
715
  title: translate("Next"),
716
+ "aria-label": translate("Next date period"),
713
717
  children: (0, jsx_runtime_1.jsx)(iconChevronRightSmall_1.IconChevronRightSmall, {
714
718
  size: isDrive || isMobile ? "huge" : "large"
715
719
  })
@@ -718,4 +722,4 @@ const DateRangeRaw = props => {
718
722
  });
719
723
  };
720
724
  exports.DateRangeRaw = DateRangeRaw;
721
- exports.TRANSLATIONS = ["Custom", "Date range", "Clear", "Cancel", "Apply", "Reset", "Today", "Next", "Previous", "Choose dates", "Date range not available", "Choose your date range", "Some of the dates you selected aren't available. Please try a different range.", "Please select the dates you want to view."];
725
+ exports.TRANSLATIONS = ["Custom", "Date range", "Clear", "Cancel", "Apply", "Reset", "Today", "Next", "Previous", "Choose dates", "Date range not available", "Choose your date range", "Some of the dates you selected arent available. Please try a different range.", "Please select the dates you want to view.", "Previous date period", "Next date period"];
@@ -10,7 +10,7 @@ const classNames_1 = require("../commonHelpers/classNames/classNames");
10
10
  const useBodyScroll_1 = require("../utils/useBodyScroll");
11
11
  const useClientReady_1 = require("../commonHelpers/hooks/useClientReady");
12
12
  const zen_1 = require("../utils/zen");
13
- const react_dom_1 = require("react-dom");
13
+ const usePortal_1 = require("../commonHelpers/hooks/usePortal");
14
14
  /**
15
15
  * @deprecated - use Modal instead
16
16
  */
@@ -45,10 +45,11 @@ const Dialog = ({ isOpen, children, isElementVisible }) => {
45
45
  const labeledId = (0, react_1.useId)();
46
46
  const darkClass = dark ? "zen-dark" : "";
47
47
  const createDialog = id => ((0, jsx_runtime_1.jsxs)("div", { className: (0, classNames_1.classNames)(["zen-dialog", darkClass]), "aria-modal": "true", role: "dialog", "aria-labelledby": labeledId, style: { top: `${zen_1.zen.pageYOffset || 0}px` }, children: [(0, jsx_runtime_1.jsx)(dialogContent_1.DialogContent, Object.assign({}, children.props, { labeledId: id, isElementVisible: isElementVisible })), (0, jsx_runtime_1.jsx)("div", { className: "zen-dialog__shield" })] }));
48
+ const modalRoot = ((_b = zen_1.zen.document) === null || _b === void 0 ? void 0 : _b.fullscreenElement) || ((_c = zen_1.zen.document) === null || _c === void 0 ? void 0 : _c.body);
49
+ const portal = (0, usePortal_1.usePortal)(isOpen && (0, react_1.isValidElement)(children) ? createDialog(labeledId) : null, modalRoot, "ModalPortal");
48
50
  if (!isClientReady) {
49
51
  return null;
50
52
  }
51
- const modalRoot = ((_b = zen_1.zen.document) === null || _b === void 0 ? void 0 : _b.fullscreenElement) || ((_c = zen_1.zen.document) === null || _c === void 0 ? void 0 : _c.body);
52
- return (0, react_dom_1.createPortal)(isOpen && (0, react_1.isValidElement)(children) ? createDialog(labeledId) : null, modalRoot);
53
+ return portal;
53
54
  };
54
55
  exports.Dialog = Dialog;
@@ -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;
@@ -212,28 +212,37 @@ const FileUpload = ({
212
212
  const pendingFocusIndexRef = (0, react_1.useRef)(null);
213
213
  const driveClasses = (0, useDriveClassName_1.useDriveClassName)("zen-file-upload");
214
214
  const classes = (0, react_1.useMemo)(() => (0, classNames_1.classNames)(["zen-file-upload", `zen-file-upload--${size}`, isMobile ? "zen-file-upload--mobile" : "", driveClasses || "", disabled ? "zen-file-upload--disabled" : "", className !== null && className !== void 0 ? className : ""]), [size, isMobile, driveClasses, disabled, className]);
215
- const hasReachedLimit = !allowMultiple && value.length > 0;
216
- const isUploadDisabled = disabled || hasReachedLimit;
215
+ const isUploadDisabled = disabled;
217
216
  const isInteractionDisabled = isUploadDisabled || isUploading;
218
217
  const dropZoneClasses = (0, react_1.useMemo)(() => (0, classNames_1.classNames)(["zen-file-upload__drop-zone", `zen-file-upload__drop-zone--${size}`, isMobile ? "zen-file-upload__drop-zone--mobile" : "", isDragOver ? "zen-file-upload__drop-zone--drag-over" : "", isInteractionDisabled ? "zen-file-upload__drop-zone--disabled" : ""]), [size, isMobile, isDragOver, isInteractionDisabled]);
219
218
  const handleFilesAdded = (0, react_1.useCallback)(fileList => {
220
219
  if (!onChange) {
221
220
  return;
222
221
  }
223
- const newFiles = createUploadedFiles(fileList);
224
- const merged = [...value, ...newFiles];
222
+ let newFiles = createUploadedFiles(fileList);
223
+ let addedFiles = fileList;
224
+ // when allowMultiple is false, only take first file
225
+ if (!allowMultiple && newFiles.length > 1) {
226
+ newFiles = [newFiles[0]];
227
+ const firstFile = fileList[0];
228
+ const singleFileArray = [firstFile];
229
+ addedFiles = Object.assign(singleFileArray, {
230
+ item: index => singleFileArray[index] || null
231
+ });
232
+ }
233
+ const merged = allowMultiple ? [...value, ...newFiles] : newFiles;
225
234
  onChange(merged, {
226
235
  action: "add",
227
- addedFiles: fileList
236
+ addedFiles
228
237
  });
229
- }, [onChange, value]);
238
+ }, [onChange, value, allowMultiple]);
230
239
  const handleDragOver = (0, react_1.useCallback)(e => {
231
240
  e.preventDefault();
232
241
  e.stopPropagation();
233
- if (!disabled && !isUploading && !hasReachedLimit) {
242
+ if (!disabled && !isUploading) {
234
243
  setIsDragOver(true);
235
244
  }
236
- }, [disabled, isUploading, hasReachedLimit]);
245
+ }, [disabled, isUploading]);
237
246
  const handleDragLeave = (0, react_1.useCallback)(e => {
238
247
  e.preventDefault();
239
248
  e.stopPropagation();
@@ -243,7 +252,7 @@ const FileUpload = ({
243
252
  e.preventDefault();
244
253
  e.stopPropagation();
245
254
  setIsDragOver(false);
246
- if (!disabled && !isUploading && !hasReachedLimit && onChange && e.dataTransfer.files.length > 0) {
255
+ if (!disabled && !isUploading && onChange && e.dataTransfer.files.length > 0) {
247
256
  // DataTransfer.files becomes inaccessible after event, so preserve it
248
257
  const filesArray = Array.from(e.dataTransfer.files);
249
258
  // Create a simple FileList-like object
@@ -252,12 +261,12 @@ const FileUpload = ({
252
261
  });
253
262
  handleFilesAdded(fileList);
254
263
  }
255
- }, [disabled, isUploading, hasReachedLimit, onChange, handleFilesAdded]);
264
+ }, [disabled, isUploading, onChange, handleFilesAdded]);
256
265
  const handleBrowseClick = (0, react_1.useCallback)(() => {
257
- if (!disabled && !isUploading && !hasReachedLimit && fileInputRef.current) {
266
+ if (!disabled && !isUploading && fileInputRef.current) {
258
267
  fileInputRef.current.click();
259
268
  }
260
- }, [disabled, isUploading, hasReachedLimit]);
269
+ }, [disabled, isUploading]);
261
270
  const handleFileInputChange = (0, react_1.useCallback)(e => {
262
271
  if (e.target.files && e.target.files.length > 0 && onChange) {
263
272
  handleFilesAdded(e.target.files);
@@ -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);
@@ -18,6 +18,8 @@ export interface IFiltersBar extends IZenComponentProps {
18
18
  toggleAllFilters: (isAllFilters: boolean) => void;
19
19
  parentElement?: HTMLElement;
20
20
  getDefaultFiltersState: () => IFiltersBarChildrenState;
21
+ /** A single component rendered flush to the right side of the filters bar */
22
+ trailingContent?: ReactElement;
21
23
  /**
22
24
  * @deprecated
23
25
  * @param onClearAllFilters - will be removed in the next major release