@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
@@ -6,7 +6,8 @@ import { useUniqueId } from "../../commonHelpers/useUniqueId";
6
6
  import { useMobile } from "../../commonHelpers/hooks/useMobile";
7
7
  import { useBodyScroll } from "../../utils/useBodyScroll";
8
8
  import { Shield } from "../../shield/shield";
9
- import { createPortal } from "react-dom";
9
+ import { usePortal } from "../../commonHelpers/hooks/usePortal";
10
+ import { useClientReady } from "../../commonHelpers/hooks/useClientReady";
10
11
  import { CUSTOM_POPUP_COMPONENT_CLASSNAME, SidePanel, SidePanelCloseReason } from "../../sidePanel/sidePanel";
11
12
  import { classNames } from "../../commonHelpers/classNames/classNames";
12
13
  import { themeContext } from "../../utils/theme/themeContext";
@@ -455,131 +456,137 @@ export const FiltersSidePanel = ({
455
456
  }
456
457
  }, [isSaveModalOpen, dataShieldId, onClose]);
457
458
  const memoizedBigSizeIcon = useMemo(() => (iconMobileClassName || iconDriveClassName) !== undefined, [iconMobileClassName, iconDriveClassName]);
458
- return _jsxs(Fragment, {
459
- children: [_jsx(Shield, {
460
- className: "zen-high-level-shield",
461
- dataShieldId: dataShieldId,
462
- isVisible: isOpen
463
- }), createPortal(_jsx(SidePanel, {
464
- triggerRef: triggerRef,
465
- isOpen: isOpen,
466
- label: translate("All Filters"),
467
- onHidePanel: handleHidePanel,
468
- className: classNames(["zen-side-panel-filters", dark ? "zen-dark" : ""]),
469
- onTransitionEnd: handleReadyForFocus,
470
- children: _jsxs("div", {
471
- className: "zen-side-panel-filters-wrapper",
472
- children: [_jsxs("div", {
473
- className: "zen-side-panel-filters__header",
474
- children: [_jsx("div", {
475
- className: "zen-side-panel-filters__title-wrapper",
476
- children: _jsx("div", {
477
- className: classNames(["zen-side-panel-filters__title", "zen-ellipsis", titleMobileClassName || ""]),
478
- children: translate("All Filters")
479
- })
480
- }), _jsxs("div", {
481
- className: classNames(["zen-side-panel-filters__header-buttons", headerButtonsMobileClassName || ""]),
482
- children: [onSave && _jsx(Button, {
483
- type: "tertiary",
484
- ref: saveButtonRef,
485
- className: "zen-side-panel-filters__save-button zen-side-panel-filters__header-button",
486
- title: translate("Save"),
487
- "aria-label": translate("Save"),
488
- onClick: toggleSaveModal,
489
- children: _jsx(IconDisk, {
490
- description: translate("Save"),
491
- className: "svgIcon",
492
- size: memoizedBigSizeIcon ? "huge" : "large"
493
- })
494
- }), onPin && _jsx(Button, {
495
- type: "tertiary",
496
- className: classNames(["zen-side-panel-filters__pin-button", isPinned ? "zen-side-panel-filters__header-button--active" : "", "zen-side-panel-filters__header-button"]),
497
- title: translate("Pin"),
498
- "aria-label": translate("Pin"),
499
- onClick: onPin,
500
- children: _jsx(IconPin2, {
501
- description: translate("Pin"),
502
- className: "svgIcon",
503
- size: memoizedBigSizeIcon ? "huge" : "large"
504
- })
505
- }), _jsx(TextIconButton, {
506
- type: "tertiary-black",
507
- className: "zen-side-panel-filters__close-button",
508
- icon: IconClose,
509
- iconSize: memoizedBigSizeIcon ? "huge" : "large",
510
- onClick: externalMode ? handleExternalModeClose : onClose,
511
- iconPosition: ButtonIconPosition.Start,
512
- title: translate("Close")
513
- })]
514
- })]
515
- }), _jsx(Tabs, {
516
- activeTabId: activeTabId,
517
- className: "zen-side-panel-filters__tab-header",
518
- onTabChange: onTabChange,
519
- tabs: tabOptions
459
+ const isClientReady = useClientReady();
460
+ const modalRoot = (_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;
461
+ const portal = usePortal(_jsx(SidePanel, {
462
+ triggerRef: triggerRef,
463
+ isOpen: isOpen,
464
+ label: translate("All Filters"),
465
+ onHidePanel: handleHidePanel,
466
+ className: classNames(["zen-side-panel-filters", dark ? "zen-dark" : ""]),
467
+ onTransitionEnd: handleReadyForFocus,
468
+ children: _jsxs("div", {
469
+ className: "zen-side-panel-filters-wrapper",
470
+ children: [_jsxs("div", {
471
+ className: "zen-side-panel-filters__header",
472
+ children: [_jsx("div", {
473
+ className: "zen-side-panel-filters__title-wrapper",
474
+ children: _jsx("div", {
475
+ className: classNames(["zen-side-panel-filters__title", "zen-ellipsis", titleMobileClassName || ""]),
476
+ children: translate("All Filters")
477
+ })
520
478
  }), _jsxs("div", {
521
- className: "zen-side-panel-filters__content",
522
- children: [_jsx("div", {
523
- id: `panel-${ALL_SELECT_OPTION_ID}`,
524
- className: classNames(["zen-side-panel-filters__tab-content", activeTabId === ALL_SELECT_OPTION_ID ? "zen-side-panel-filters__tab-content--active" : "zen-side-panel-filters__tab-content--hidden"]),
525
- role: "tabpanel",
526
- "aria-labelledby": ALL_SELECT_OPTION_ID,
527
- children: activeTabId === ALL_SELECT_OPTION_ID ? tabsContent : null
528
- }), _jsx("div", {
529
- id: `panel-${SELECTED_TAB_ID}`,
530
- className: 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"]),
531
- role: "tabpanel",
532
- "aria-labelledby": SELECTED_TAB_ID,
533
- children: activeTabId === SELECTED_TAB_ID ? selectedTabsContent : null
479
+ className: classNames(["zen-side-panel-filters__header-buttons", headerButtonsMobileClassName || ""]),
480
+ children: [onSave && _jsx(Button, {
481
+ type: "tertiary",
482
+ ref: saveButtonRef,
483
+ className: "zen-side-panel-filters__save-button zen-side-panel-filters__header-button",
484
+ title: translate("Save"),
485
+ "aria-label": translate("Save"),
486
+ onClick: toggleSaveModal,
487
+ children: _jsx(IconDisk, {
488
+ description: translate("Save"),
489
+ className: "svgIcon",
490
+ size: memoizedBigSizeIcon ? "huge" : "large"
491
+ })
492
+ }), onPin && _jsx(Button, {
493
+ type: "tertiary",
494
+ className: classNames(["zen-side-panel-filters__pin-button", isPinned ? "zen-side-panel-filters__header-button--active" : "", "zen-side-panel-filters__header-button"]),
495
+ title: translate("Pin"),
496
+ "aria-label": translate("Pin"),
497
+ onClick: onPin,
498
+ children: _jsx(IconPin2, {
499
+ description: translate("Pin"),
500
+ className: "svgIcon",
501
+ size: memoizedBigSizeIcon ? "huge" : "large"
502
+ })
503
+ }), _jsx(TextIconButton, {
504
+ type: "tertiary-black",
505
+ className: "zen-side-panel-filters__close-button",
506
+ icon: IconClose,
507
+ iconSize: memoizedBigSizeIcon ? "huge" : "large",
508
+ onClick: externalMode ? handleExternalModeClose : onClose,
509
+ iconPosition: ButtonIconPosition.Start,
510
+ title: translate("Close")
534
511
  })]
512
+ })]
513
+ }), _jsx(Tabs, {
514
+ activeTabId: activeTabId,
515
+ className: "zen-side-panel-filters__tab-header",
516
+ onTabChange: onTabChange,
517
+ tabs: tabOptions
518
+ }), _jsxs("div", {
519
+ className: "zen-side-panel-filters__content",
520
+ children: [_jsx("div", {
521
+ id: `panel-${ALL_SELECT_OPTION_ID}`,
522
+ className: classNames(["zen-side-panel-filters__tab-content", activeTabId === ALL_SELECT_OPTION_ID ? "zen-side-panel-filters__tab-content--active" : "zen-side-panel-filters__tab-content--hidden"]),
523
+ role: "tabpanel",
524
+ "aria-labelledby": ALL_SELECT_OPTION_ID,
525
+ children: activeTabId === ALL_SELECT_OPTION_ID ? tabsContent : null
535
526
  }), _jsx("div", {
536
- className: classNames(["zen-side-panel-filters__footer", isMobile ? "zen-side-panel-filters__footer--mobile" : "", isLongTextLanguages && !isMobile ? "zen-side-panel-filters__footer--long-text" : ""]),
537
- children: isMobile ? _jsxs(FooterButtons, {
527
+ id: `panel-${SELECTED_TAB_ID}`,
528
+ className: 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"]),
529
+ role: "tabpanel",
530
+ "aria-labelledby": SELECTED_TAB_ID,
531
+ children: activeTabId === SELECTED_TAB_ID ? selectedTabsContent : null
532
+ })]
533
+ }), _jsx("div", {
534
+ className: classNames(["zen-side-panel-filters__footer", isMobile ? "zen-side-panel-filters__footer--mobile" : "", isLongTextLanguages && !isMobile ? "zen-side-panel-filters__footer--long-text" : ""]),
535
+ children: isMobile ? _jsxs(FooterButtons, {
536
+ children: [_jsx(Button, {
537
+ className: "zen-side-panel-filters__apply-button",
538
+ onClick: handleApplyClick,
539
+ type: "primary",
540
+ disabled: errorItems.size > 0,
541
+ children: translate("Apply")
542
+ }), _jsx(Button, {
543
+ className: "zen-side-panel-filters__cancel-button",
544
+ type: "secondary",
545
+ onClick: handleCancelClick,
546
+ children: translate("Cancel")
547
+ }), _jsx(Button, {
548
+ className: "zen-side-panel-filters__clear-button",
549
+ onClick: handleClearClick,
550
+ type: "tertiary",
551
+ children: translate("Reset")
552
+ })]
553
+ }) : _jsxs(_Fragment, {
554
+ children: [_jsx("div", {
555
+ className: "zen-side-panel-filters__footer-section",
556
+ children: _jsx(Button, {
557
+ type: "tertiary",
558
+ className: "zen-side-panel-filters__clear-button",
559
+ onClick: handleClearClick,
560
+ children: translate("Reset")
561
+ })
562
+ }), _jsxs("div", {
563
+ className: "zen-side-panel-filters__footer-section",
538
564
  children: [_jsx(Button, {
539
- className: "zen-side-panel-filters__apply-button",
540
- onClick: handleApplyClick,
541
- type: "primary",
542
- disabled: errorItems.size > 0,
543
- children: translate("Apply")
544
- }), _jsx(Button, {
545
565
  className: "zen-side-panel-filters__cancel-button",
546
566
  type: "secondary",
547
567
  onClick: handleCancelClick,
548
568
  children: translate("Cancel")
549
569
  }), _jsx(Button, {
550
- className: "zen-side-panel-filters__clear-button",
551
- onClick: handleClearClick,
552
- type: "tertiary",
553
- children: translate("Reset")
554
- })]
555
- }) : _jsxs(_Fragment, {
556
- children: [_jsx("div", {
557
- className: "zen-side-panel-filters__footer-section",
558
- children: _jsx(Button, {
559
- type: "tertiary",
560
- className: "zen-side-panel-filters__clear-button",
561
- onClick: handleClearClick,
562
- children: translate("Reset")
563
- })
564
- }), _jsxs("div", {
565
- className: "zen-side-panel-filters__footer-section",
566
- children: [_jsx(Button, {
567
- className: "zen-side-panel-filters__cancel-button",
568
- type: "secondary",
569
- onClick: handleCancelClick,
570
- children: translate("Cancel")
571
- }), _jsx(Button, {
572
- className: "zen-side-panel-filters__apply-button zen-side-panel-filters__apply-button--desktop",
573
- onClick: handleApplyClick,
574
- type: "primary",
575
- disabled: errorItems.size > 0,
576
- children: translate("Apply")
577
- })]
570
+ className: "zen-side-panel-filters__apply-button zen-side-panel-filters__apply-button--desktop",
571
+ onClick: handleApplyClick,
572
+ type: "primary",
573
+ disabled: errorItems.size > 0,
574
+ children: translate("Apply")
578
575
  })]
579
- })
580
- })]
581
- })
582
- }), (_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), _jsx(FiltersSaveModal, {
576
+ })]
577
+ })
578
+ })]
579
+ })
580
+ }), modalRoot !== null && modalRoot !== void 0 ? modalRoot : undefined);
581
+ if (!isClientReady) {
582
+ return null;
583
+ }
584
+ return _jsxs(Fragment, {
585
+ children: [_jsx(Shield, {
586
+ className: "zen-high-level-shield",
587
+ dataShieldId: dataShieldId,
588
+ isVisible: isOpen
589
+ }), portal, _jsx(FiltersSaveModal, {
583
590
  className: CUSTOM_POPUP_COMPONENT_CLASSNAME,
584
591
  isOpen: isSaveModalOpen,
585
592
  onClose: toggleSaveModal,
@@ -1,7 +1,7 @@
1
1
  import { injectString } from "../utils/localization/translationsDictionary";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  /* eslint-disable @typescript-eslint/no-explicit-any */
4
- import { useCallback, useEffect, useMemo, useState } from "react";
4
+ import { useCallback, useEffect, useId, useMemo, useState } from "react";
5
5
  import { flushSync } from "react-dom";
6
6
  import React from "react";
7
7
  import { ALL_SELECT_OPTION_ID, FiltersSelect, getAllOption, getFiltersSearchTypeAllOption } from "./components/filtersSelect";
@@ -21,7 +21,6 @@ import { ChipStatusProvider } from "../chip/chipStatusProvider";
21
21
  import { FiltersSavedItemsProvider } from "./components/filtersSavedItemsProvider";
22
22
  import { createStateObject, getArrayOfElements, useCombineData, processChildrenWithMetaData } from "./filtersHelper";
23
23
  import { FiltersSearch } from "./components/filtersSearch";
24
- import { useUniqueId } from "../commonHelpers/useUniqueId";
25
24
  import { isElementsEqual } from "../utils/compareElementsUtils/isElementsEqual";
26
25
  import { IconFilter } from "../icons/iconFilter";
27
26
  import { FiltersSidePanel } from "./components/filtersSidePanel";
@@ -252,7 +251,7 @@ export const Filters = ({
252
251
  const isSavedFiltersMode = Boolean(savedFilters && onRemoveSavedFilter && onSaveFilter);
253
252
  const isPinMode = Boolean(typeof isPinned === "boolean" && onPinChange);
254
253
  const isRecentSearchesMode = Boolean(recentSearches && onRemoveRecentSearchItem && onSaveRecentSearch);
255
- const uniqueKey = useUniqueId();
254
+ const uniqueKey = useId();
256
255
  const popupId = `${uniqueKey}_popup`;
257
256
  const isMobile = useMobile();
258
257
  const [isSidePanelOpen, setIsSidePanelOpen] = 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
@@ -60,7 +60,7 @@ const mergeStates = (initialState, newState) => {
60
60
  });
61
61
  return state;
62
62
  };
63
- export const FiltersBar = ({ className, children, isAllFiltersVisible, hideAllFiltersButton, parentElement, selectedQuantity, ignoreNewFunctionality, pillName, pillIcon, pillType, toggleAllFilters, getDefaultFiltersState, onClearAllFilters, onApplyAllFilters }) => {
63
+ export const FiltersBar = ({ className, children, isAllFiltersVisible, hideAllFiltersButton, parentElement, selectedQuantity, trailingContent, ignoreNewFunctionality, pillName, pillIcon, pillType, toggleAllFilters, getDefaultFiltersState, onClearAllFilters, onApplyAllFilters }) => {
64
64
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions
65
65
  ignoreNewFunctionality; // TODO: remove after deprecated ignoreNewFunctionality removed
66
66
  const allFiltersRef = useRef(null);
@@ -131,7 +131,9 @@ export const FiltersBar = ({ className, children, isAllFiltersVisible, hideAllFi
131
131
  }
132
132
  }, [filterBarChildren, memoizedShouldUpdate, sidePanelState, stateFromChildren]);
133
133
  const searchChild = childrenArray.find(child => child && typeof child === "object" && "type" in child && child.type === FiltersBarSearch);
134
- setSearchComponent(searchChild);
134
+ useEffect(() => {
135
+ setSearchComponent(searchChild);
136
+ }, [searchChild, setSearchComponent]);
135
137
  useEffect(() => {
136
138
  setFiltersBarToggleAllFiltersFn(toggleAllFilters);
137
139
  }, [toggleAllFilters, setFiltersBarToggleAllFiltersFn]);
@@ -233,7 +235,7 @@ export const FiltersBar = ({ className, children, isAllFiltersVisible, hideAllFi
233
235
  if (!isClientReady) {
234
236
  return null;
235
237
  }
236
- return (_jsxs(_Fragment, { children: [!isMobile && (_jsxs("div", { ref: toolbarRef, className: classNames(["zen-filters-toolbar", noActions ? "zen-filters-toolbar--no-actions" : "", className !== null && className !== void 0 ? className : ""]), children: [_jsx(FiltersContainer, { children: filterBarChildren }), _jsx(FiltersBarActions, { allFiltersRef: allFiltersRef, onShowAllFilters: () => toggleAllFiltersCallback(true), onClearFilters: handleClearClick, selectedQuantity: selectedQuantity !== undefined ? selectedQuantity : filtersBarState.currentNumberOfChangedFilters, selectedQuantityToDisplay: selectedQuantity !== undefined ? selectedQuantity : filtersBarState.numberOfChangedFilters, hideAllFiltersButton: isAllFiltersButtonHidden, onApplyButtonClick: onApplyAllFilters ? handleApplyAllFilters(false) : undefined, isApplyButtonShown: isApplyButtonShown })] })), !isAllFiltersButtonHidden ? sidePanel : null] }));
238
+ return (_jsxs(_Fragment, { children: [!isMobile && (_jsxs("div", { ref: toolbarRef, className: classNames(["zen-filters-toolbar", noActions ? "zen-filters-toolbar--no-actions" : "", className !== null && className !== void 0 ? className : ""]), children: [_jsx(FiltersContainer, { children: filterBarChildren }), _jsx(FiltersBarActions, { allFiltersRef: allFiltersRef, onShowAllFilters: () => toggleAllFiltersCallback(true), onClearFilters: handleClearClick, selectedQuantity: selectedQuantity !== undefined ? selectedQuantity : filtersBarState.currentNumberOfChangedFilters, selectedQuantityToDisplay: selectedQuantity !== undefined ? selectedQuantity : filtersBarState.numberOfChangedFilters, hideAllFiltersButton: isAllFiltersButtonHidden, onApplyButtonClick: onApplyAllFilters ? handleApplyAllFilters(false) : undefined, isApplyButtonShown: isApplyButtonShown }), trailingContent && _jsx("div", { className: "zen-filters-toolbar__trailing-content", children: trailingContent })] })), !isAllFiltersButtonHidden ? sidePanel : null] }));
237
239
  };
238
240
  FiltersBar.Search = FiltersBarSearch;
239
241
  FiltersBar.Dropdown = FiltersBarDropdown;
@@ -6,6 +6,7 @@ import { ButtonType } from "../../button/buttonType";
6
6
  import { ButtonIconPosition, TextIconButton } from "../../textIconButton/textIconButton";
7
7
  import { useLanguage } from "../../utils/localization/useLanguage";
8
8
  import { IconSettings6 } from "../../icons/iconSettings6";
9
+ injectString("en", "Active filters: {}", "Active filters: {}");
9
10
  injectString("cs", "Filters", "Filtry");
10
11
  injectString("da-DK", "Filters", "Filtre");
11
12
  injectString("de", "Filters", "Filter");
@@ -110,6 +111,7 @@ export const FiltersBarActions = ({
110
111
  onClick: onShowAllFilters,
111
112
  icon: IconSettings6,
112
113
  iconPosition: ButtonIconPosition.Start,
114
+ "aria-label": selectedQuantityToDisplay && selectedQuantityToDisplay > 0 ? translate("Active filters: {}").replace("{}", selectedQuantityToDisplay.toString()) : translate("Filters"),
113
115
  children: _jsxs("span", {
114
116
  className: "zen-filters-toolbar__action-label",
115
117
  children: [translate("Filters"), selectedQuantityToDisplay && selectedQuantityToDisplay > 0 ? _jsx("span", {
@@ -134,4 +136,4 @@ export const FiltersBarActions = ({
134
136
  }) : null]
135
137
  });
136
138
  };
137
- export const TRANSLATIONS = ["Filters", "Clear", "Search"];
139
+ export const TRANSLATIONS = ["Filters", "Clear", "Search", "Active filters: {}"];
@@ -78,6 +78,7 @@ export const FiltersBarSidePanelRange = ({
78
78
  }) => {
79
79
  const generatedId = useId();
80
80
  const intId = id || generatedId;
81
+ const rangeErrorId = `${intId}-error`;
81
82
  const [currentValue, setCurrentValue] = useState(value);
82
83
  const [errorType, setErrorType] = useState(undefined);
83
84
  const prevValueRef = useRef(value);
@@ -152,11 +153,13 @@ export const FiltersBarSidePanelRange = ({
152
153
  return _jsxs("div", {
153
154
  ref: setFieldsContainerRef,
154
155
  id: intId,
156
+ "aria-describedby": errorType !== undefined && directionState === "row" ? rangeErrorId : undefined,
155
157
  className: classNames(["zen-filters-bar-side-panel-range", className || ""]),
156
158
  children: [_jsxs("div", {
157
159
  className: rangeFieldContainerClasses,
158
160
  children: [memoizedMinRangeField, memoizedMaxRangeField]
159
161
  }), errorType !== undefined && directionState === "row" ? _jsx(FormFieldError, {
162
+ id: rangeErrorId,
160
163
  className: "zen-filters-bar-side-panel-range__error",
161
164
  error: [getErrorString("min", currentValue.min, translate, errorType, min, max) || "", getErrorString("max", currentValue.max, translate, errorType, min, max) || ""]
162
165
  }) : null]
@@ -20,7 +20,7 @@ interface IFiltersBarSidePanelInternal extends IZenComponentProps {
20
20
  }
21
21
  export interface IFiltersBarSidePanel extends Pick<IFiltersBarSidePanelInternal, "className" | "children" | "state" | "dispatch"> {
22
22
  }
23
- export declare const FiltersBarSidePanel: ({ isOpen, className, children, triggerRef, parentElement, pillName, pillIcon, pillType, onClosePanel, getDefaultFiltersState, state, dispatch, onApplyAllFilters }: IFiltersBarSidePanelInternal) => import("react/jsx-runtime").JSX.Element;
23
+ export declare const FiltersBarSidePanel: ({ isOpen, className, children, triggerRef, parentElement, pillName, pillIcon, pillType, onClosePanel, getDefaultFiltersState, state, dispatch, onApplyAllFilters }: IFiltersBarSidePanelInternal) => import("react/jsx-runtime").JSX.Element | null;
24
24
  export declare const FiltersBarSidePanelContainer: (_: IFiltersBarSidePanel) => import("react/jsx-runtime").JSX.Element;
25
25
  export declare const TRANSLATIONS: string[];
26
26
  export {};
@@ -20,8 +20,9 @@ import { useUniqueId } from "../../commonHelpers/useUniqueId";
20
20
  import { useBodyScroll } from "../../utils/useBodyScroll";
21
21
  import { FooterButtons } from "../../footerButtons/footerButtons";
22
22
  import { Pill } from "../../pill/pill";
23
- import { createPortal } from "react-dom";
24
23
  import { zen } from "../../utils/zen";
24
+ import { usePortal } from "../../commonHelpers/hooks/usePortal";
25
+ import { useClientReady } from "../../commonHelpers/hooks/useClientReady";
25
26
  injectString("cs", "Reset All", "Obnovit v\u0161e");
26
27
  injectString("da-DK", "Reset All", "Nulstil alle");
27
28
  injectString("de", "Reset All", "Alles zur\xFCcksetzen");
@@ -301,95 +302,100 @@ export const FiltersBarSidePanel = ({
301
302
  handleClose();
302
303
  };
303
304
  }, [isOpen, setScrollHidden, resetScroll]);
304
- return _jsxs(Fragment, {
305
- children: [_jsx(Shield, {
306
- className: "zen-high-level-shield",
307
- dataShieldId: dataShieldId,
308
- isVisible: isOpen
309
- }), createPortal(_jsx(SidePanel, {
310
- triggerRef: triggerRef,
311
- isOpen: isOpen,
312
- label: translate("All Filters"),
313
- onHidePanel: onCloseAction,
314
- className: classNames(["zen-side-panel-filters-bar", dark ? "zen-dark" : "", className !== null && className !== void 0 ? className : ""]),
315
- onTransitionEnd: handleReadyForFocus,
316
- children: _jsxs("div", {
317
- className: "zen-side-panel-filters-bar-wrapper",
305
+ const isClientReady = useClientReady();
306
+ const portal = usePortal(_jsx(SidePanel, {
307
+ triggerRef: triggerRef,
308
+ isOpen: isOpen,
309
+ label: translate("All Filters"),
310
+ onHidePanel: onCloseAction,
311
+ className: classNames(["zen-side-panel-filters-bar", dark ? "zen-dark" : "", className !== null && className !== void 0 ? className : ""]),
312
+ onTransitionEnd: handleReadyForFocus,
313
+ children: _jsxs("div", {
314
+ className: "zen-side-panel-filters-bar-wrapper",
315
+ children: [_jsxs("div", {
316
+ className: "zen-side-panel-filters-bar__header",
318
317
  children: [_jsxs("div", {
319
- className: "zen-side-panel-filters-bar__header",
320
- children: [_jsxs("div", {
321
- className: "zen-side-panel-filters-bar__title-wrapper",
322
- children: [_jsx("div", {
323
- className: "zen-side-panel-filters-bar__title zen-ellipsis",
324
- children: translate("All Filters")
325
- }), pillName ? _jsx("div", {
326
- className: "zen-side-panel-filters-bar__title-pill",
327
- children: _jsx(Pill, {
328
- type: pillType,
329
- icon: pillIcon,
330
- children: pillName
331
- })
332
- }) : null]
333
- }), _jsx(TextIconButton, {
334
- type: "tertiary-black",
335
- className: "zen-side-panel-filters-bar__close-button",
336
- icon: IconClose,
337
- iconSize: isMobile ? "huge" : "large",
318
+ className: "zen-side-panel-filters-bar__title-wrapper",
319
+ children: [_jsx("div", {
320
+ className: "zen-side-panel-filters-bar__title zen-ellipsis",
321
+ children: translate("All Filters")
322
+ }), pillName ? _jsx("div", {
323
+ className: "zen-side-panel-filters-bar__title-pill",
324
+ children: _jsx(Pill, {
325
+ type: pillType,
326
+ icon: pillIcon,
327
+ children: pillName
328
+ })
329
+ }) : null]
330
+ }), _jsx(TextIconButton, {
331
+ type: "tertiary-black",
332
+ className: "zen-side-panel-filters-bar__close-button",
333
+ icon: IconClose,
334
+ iconSize: isMobile ? "huge" : "large",
335
+ onClick: onClosePanel,
336
+ iconPosition: ButtonIconPosition.Start,
337
+ title: translate("Close")
338
+ })]
339
+ }), _jsx("div", {
340
+ className: "zen-side-panel-filters-bar__content",
341
+ children: newChildren
342
+ }), _jsx("div", {
343
+ className: classNames(["zen-side-panel-filters-bar__footer", isMobile ? "zen-side-panel-filters-bar__footer--mobile" : "", isLongTextLanguages && !isMobile ? "zen-side-panel-filters-bar__footer--long-text" : ""]),
344
+ children: isMobile ? _jsxs(FooterButtons, {
345
+ children: [_jsx(Button, {
346
+ className: "zen-side-panel-filters-bar__apply-button",
347
+ disabled: applyDisabled,
348
+ onClick: onApplyFilters,
349
+ type: "primary",
350
+ children: translate("Apply")
351
+ }), _jsx(Button, {
352
+ className: "zen-side-panel-filters-bar__cancel-button",
353
+ type: "secondary",
338
354
  onClick: onClosePanel,
339
- iconPosition: ButtonIconPosition.Start,
340
- title: translate("Close")
355
+ children: translate("Cancel")
356
+ }), _jsx(Button, {
357
+ className: "zen-side-panel-filters-bar__clear-button",
358
+ onClick: onResetFilters,
359
+ type: "tertiary",
360
+ children: translate("Reset All")
341
361
  })]
342
- }), _jsx("div", {
343
- className: "zen-side-panel-filters-bar__content",
344
- children: newChildren
345
- }), _jsx("div", {
346
- className: classNames(["zen-side-panel-filters-bar__footer", isMobile ? "zen-side-panel-filters-bar__footer--mobile" : "", isLongTextLanguages && !isMobile ? "zen-side-panel-filters-bar__footer--long-text" : ""]),
347
- children: isMobile ? _jsxs(FooterButtons, {
362
+ }) : _jsxs(_Fragment, {
363
+ children: [_jsx("div", {
364
+ className: "zen-side-panel-filters-bar__footer-section",
365
+ children: _jsx(Button, {
366
+ type: "tertiary",
367
+ className: "zen-side-panel-filters-bar__clear-button",
368
+ onClick: onResetFilters,
369
+ children: translate("Reset All")
370
+ })
371
+ }), _jsxs("div", {
372
+ className: "zen-side-panel-filters-bar__footer-section",
348
373
  children: [_jsx(Button, {
349
- className: "zen-side-panel-filters-bar__apply-button",
350
- disabled: applyDisabled,
351
- onClick: onApplyFilters,
352
- type: "primary",
353
- children: translate("Apply")
354
- }), _jsx(Button, {
355
374
  className: "zen-side-panel-filters-bar__cancel-button",
356
375
  type: "secondary",
357
376
  onClick: onClosePanel,
358
377
  children: translate("Cancel")
359
378
  }), _jsx(Button, {
360
- className: "zen-side-panel-filters-bar__clear-button",
361
- onClick: onResetFilters,
362
- type: "tertiary",
363
- children: translate("Reset All")
364
- })]
365
- }) : _jsxs(_Fragment, {
366
- children: [_jsx("div", {
367
- className: "zen-side-panel-filters-bar__footer-section",
368
- children: _jsx(Button, {
369
- type: "tertiary",
370
- className: "zen-side-panel-filters-bar__clear-button",
371
- onClick: onResetFilters,
372
- children: translate("Reset All")
373
- })
374
- }), _jsxs("div", {
375
- className: "zen-side-panel-filters-bar__footer-section",
376
- children: [_jsx(Button, {
377
- className: "zen-side-panel-filters-bar__cancel-button",
378
- type: "secondary",
379
- onClick: onClosePanel,
380
- children: translate("Cancel")
381
- }), _jsx(Button, {
382
- className: "zen-side-panel-filters-bar__apply-button zen-side-panel-filters-bar__apply-button--desktop",
383
- disabled: applyDisabled,
384
- onClick: onApplyFilters,
385
- type: "primary",
386
- children: translate("Apply")
387
- })]
379
+ className: "zen-side-panel-filters-bar__apply-button zen-side-panel-filters-bar__apply-button--desktop",
380
+ disabled: applyDisabled,
381
+ onClick: onApplyFilters,
382
+ type: "primary",
383
+ children: translate("Apply")
388
384
  })]
389
- })
390
- })]
391
- })
392
- }), (_b = parentElement !== null && parentElement !== void 0 ? parentElement : (_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)]
385
+ })]
386
+ })
387
+ })]
388
+ })
389
+ }), (_b = parentElement !== null && parentElement !== void 0 ? parentElement : (_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);
390
+ if (!isClientReady) {
391
+ return null;
392
+ }
393
+ return _jsxs(Fragment, {
394
+ children: [_jsx(Shield, {
395
+ className: "zen-high-level-shield",
396
+ dataShieldId: dataShieldId,
397
+ isVisible: isOpen
398
+ }), portal]
393
399
  });
394
400
  };
395
401
  export const FiltersBarSidePanelContainer = _ => _jsx(_Fragment, {});
@@ -1,7 +1,8 @@
1
1
  import "./formFieldError.less";
2
2
  interface IFormFieldError {
3
+ id?: string;
3
4
  className?: string;
4
5
  error?: string | string[];
5
6
  }
6
- export declare const FormFieldError: ({ className, error }: IFormFieldError) => import("react/jsx-runtime").JSX.Element | null;
7
+ export declare const FormFieldError: ({ id, className, error }: IFormFieldError) => import("react/jsx-runtime").JSX.Element | null;
7
8
  export {};
@@ -3,11 +3,11 @@ import { classNames } from "../commonHelpers/classNames/classNames";
3
3
  import { IconException } from "../icons/iconException";
4
4
  import { useDrive } from "../utils/theme/useDrive";
5
5
  import { useDriveClassName } from "../utils/theme/useDriveClassName";
6
- export const FormFieldError = ({ className, error }) => {
6
+ export const FormFieldError = ({ id, className, error }) => {
7
7
  const driveComponentClass = useDriveClassName("zen-form-field-error");
8
8
  const isDrive = useDrive();
9
9
  const errorStrings = Array.isArray(error)
10
10
  ? error.filter(el => el).map((erStr, ind) => _jsx("div", { children: erStr }, `error_str_${ind}`))
11
11
  : error && _jsx("div", { children: error });
12
- return error ? (_jsxs("div", { className: classNames(["zen-form-field-error", driveComponentClass || "", className || ""]), children: [_jsx("div", { className: "zen-form-field-error__icon-container", children: _jsx(IconException, { className: "zen-form-field-error__error-icon", size: isDrive ? "large" : "bigger" }) }), _jsx("div", { className: "zen-form-field-error__error-text", children: errorStrings })] })) : null;
12
+ return error ? (_jsxs("span", { id: id, className: classNames(["zen-form-field-error", driveComponentClass || "", className || ""]), children: [_jsx(IconException, { className: "zen-form-field-error__error-icon", size: isDrive ? "large" : "bigger" }), _jsx("span", { className: "zen-form-field-error__error-text", children: errorStrings })] })) : null;
13
13
  };
@@ -33,7 +33,7 @@ export const handleCustomMenuWrapper = (reactNode, content, menuItems) => {
33
33
  const el = createElement(Menu.Item, {
34
34
  id: reactNode.props.id || menu.props.id,
35
35
  key: reactNode.props.id || menu.props.id,
36
- name: reactNode.props.name || "",
36
+ name: reactNode.props.name || menu.props.name || "",
37
37
  disabled: reactNode.props.disabled || menu.props.disabled,
38
38
  link: reactNode.props.link || menu.props.link,
39
39
  target: reactNode.props.target || menu.props.target,