@geotab/zenith 3.8.0-beta.1 → 3.9.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) 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 +201 -4
  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 +440 -305
  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 +3210 -2238
  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/summaryTile/summaryTile.d.ts +1 -3
  83. package/dist/summaryTile/summaryTile.js +1 -2
  84. package/dist/table/children/useTableChildren.d.ts +1 -1
  85. package/dist/table/children/useTableChildren.js +3 -3
  86. package/dist/table/flexible/useFlexibleColumns.js +39 -1
  87. package/dist/table/nested/useNestedRows.d.ts +1 -0
  88. package/dist/table/nested/useNestedRows.js +3 -3
  89. package/dist/table/selectable/useSelectableRows.d.ts +9 -0
  90. package/dist/table/selectable/useSelectableRows.js +18 -11
  91. package/dist/table/table.js +1 -7
  92. package/dist/{card/components → title}/title.d.ts +1 -1
  93. package/dist/title/title.js +27 -0
  94. package/dist/toggleButtonRaw/toggleButtonRaw.js +3 -1
  95. package/dist/toggleButtonRaw/types.d.ts +1 -0
  96. package/dist/tooltip/tooltip.d.ts +2 -1
  97. package/dist/tooltip/tooltip.js +68 -64
  98. package/dist/utils/localization/directionContext.d.ts +3 -0
  99. package/dist/utils/localization/directionContext.js +5 -0
  100. package/dist/utils/localization/getTextDirection.d.ts +2 -0
  101. package/dist/utils/localization/getTextDirection.js +6 -0
  102. package/dist/utils/localization/languageProvider.js +15 -1
  103. package/dist/utils/localization/translations/en-json.d.ts +2 -0
  104. package/dist/utils/localization/translations/en-json.js +3 -1
  105. package/dist/utils/localization/translations/en.json +3 -0
  106. package/dist/utils/localization/useDirection.d.ts +2 -0
  107. package/dist/utils/localization/useDirection.js +7 -0
  108. package/esm/button/button.d.ts +2 -1
  109. package/esm/button/button.js +3 -3
  110. package/esm/calendar/calendar.js +201 -4
  111. package/esm/card/card.d.ts +1 -1
  112. package/esm/card/card.js +1 -1
  113. package/esm/card/components/cardButton/cardButton.d.ts +2 -1
  114. package/esm/card/components/cardButton/cardButton.js +5 -3
  115. package/esm/card/helpers/getIconTypeFromStatus.d.ts +1 -1
  116. package/esm/chart/barChart/getBarLegendItems.js +3 -5
  117. package/esm/chart/lineChart/getLineLegendItems.js +7 -7
  118. package/esm/chart/pieChart/centerTextPlugin.js +13 -5
  119. package/esm/chart/pieChart/getPieLegendItems.js +8 -12
  120. package/esm/chart/pieChart.js +14 -12
  121. package/esm/chart/plugins/legend/interfaces.d.ts +1 -1
  122. package/esm/commonHelpers/generateId.d.ts +8 -0
  123. package/esm/commonHelpers/generateId.js +8 -0
  124. package/esm/commonHelpers/hooks/ssrProvider.d.ts +14 -0
  125. package/esm/commonHelpers/hooks/ssrProvider.js +6 -0
  126. package/esm/commonHelpers/hooks/useClientReady.js +4 -2
  127. package/esm/commonHelpers/hooks/useDeviceType.js +7 -3
  128. package/esm/commonHelpers/hooks/useIsomorphicLayoutEffect.d.ts +2 -0
  129. package/esm/commonHelpers/hooks/useIsomorphicLayoutEffect.js +3 -0
  130. package/esm/commonHelpers/hooks/useMobile.js +4 -3
  131. package/esm/commonHelpers/hooks/usePortal.js +2 -5
  132. package/esm/commonHelpers/isDomEnv.js +1 -2
  133. package/esm/commonHelpers/useUniqueId.d.ts +6 -0
  134. package/esm/commonHelpers/useUniqueId.js +7 -1
  135. package/esm/commonHelpers/utils.d.ts +0 -1
  136. package/esm/commonHelpers/utils.js +0 -1
  137. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +5 -3
  138. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +2 -38
  139. package/esm/dateInputInner/dateInputInnerControlBlock.js +13 -9
  140. package/esm/dateRangeRaw/dateRangeRaw.js +5 -1
  141. package/esm/dialog/dialog.js +4 -3
  142. package/esm/feedbackContainer/feedbackContainer.js +4 -4
  143. package/esm/fileUpload/fileUpload.js +21 -12
  144. package/esm/filters/components/filtersSidePanel.d.ts +1 -1
  145. package/esm/filters/components/filtersSidePanel.js +123 -116
  146. package/esm/filters/filters.js +2 -3
  147. package/esm/filtersBar/filtersBar.d.ts +2 -0
  148. package/esm/filtersBar/filtersBar.js +5 -3
  149. package/esm/filtersBar/filtersBarActions/filtersBarActions.js +3 -1
  150. package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +3 -0
  151. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.d.ts +1 -1
  152. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +86 -80
  153. package/esm/formFieldError/formFieldError.d.ts +2 -1
  154. package/esm/formFieldError/formFieldError.js +2 -2
  155. package/esm/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +1 -1
  156. package/esm/index.d.ts +3 -5
  157. package/esm/index.js +3 -5
  158. package/esm/menu/components/menuItem.js +1 -1
  159. package/esm/menu/controlledMenu.js +1 -1
  160. package/esm/nav/nav.js +10 -5
  161. package/esm/nav/navAddMenu/navAddMenu.js +2 -3
  162. package/esm/nav/navEditList/navEditListUtils.d.ts +1 -1
  163. package/esm/nav/navEditList/navEditListUtils.js +2 -1
  164. package/esm/nav/navItem/navActionItem.js +3 -2
  165. package/esm/nav/navItem/navItem.js +2 -3
  166. package/esm/pageHeader/pageHeaderActions.js +4 -3
  167. package/esm/rangeRaw/rangeRaw.js +7 -1
  168. package/esm/selectList/selectList.js +11 -7
  169. package/esm/selectRaw/selectRaw.js +1 -1
  170. package/esm/shield/shield.js +5 -3
  171. package/esm/sidePanel/sidePanel.js +9 -8
  172. package/esm/summaryTile/summaryTile.d.ts +1 -3
  173. package/esm/summaryTile/summaryTile.js +1 -2
  174. package/esm/table/children/useTableChildren.d.ts +1 -1
  175. package/esm/table/children/useTableChildren.js +3 -3
  176. package/esm/table/flexible/useFlexibleColumns.js +39 -1
  177. package/esm/table/nested/useNestedRows.d.ts +1 -0
  178. package/esm/table/nested/useNestedRows.js +1 -1
  179. package/esm/table/selectable/useSelectableRows.d.ts +9 -0
  180. package/esm/table/selectable/useSelectableRows.js +15 -8
  181. package/esm/table/table.js +1 -7
  182. package/esm/{card/components → title}/title.d.ts +1 -1
  183. package/esm/title/title.js +23 -0
  184. package/esm/toggleButtonRaw/toggleButtonRaw.js +3 -1
  185. package/esm/toggleButtonRaw/types.d.ts +1 -0
  186. package/esm/tooltip/tooltip.d.ts +2 -1
  187. package/esm/tooltip/tooltip.js +68 -64
  188. package/esm/utils/localization/directionContext.d.ts +3 -0
  189. package/esm/utils/localization/directionContext.js +2 -0
  190. package/esm/utils/localization/getTextDirection.d.ts +2 -0
  191. package/esm/utils/localization/getTextDirection.js +2 -0
  192. package/esm/utils/localization/languageProvider.js +15 -1
  193. package/esm/utils/localization/translations/en-json.d.ts +2 -0
  194. package/esm/utils/localization/translations/en-json.js +3 -1
  195. package/esm/utils/localization/translations/en.json +3 -0
  196. package/esm/utils/localization/useDirection.d.ts +2 -0
  197. package/esm/utils/localization/useDirection.js +3 -0
  198. package/package.json +33 -31
  199. package/dist/card/components/title.js +0 -22
  200. package/dist/commonHelpers/hooks/deviceProvider.d.ts +0 -7
  201. package/dist/commonHelpers/hooks/deviceProvider.js +0 -11
  202. package/esm/card/components/title.js +0 -18
  203. package/esm/commonHelpers/hooks/deviceProvider.d.ts +0 -7
  204. package/esm/commonHelpers/hooks/deviceProvider.js +0 -4
@@ -122,7 +122,6 @@ const SummaryTile = ({
122
122
  tooltipText,
123
123
  tooltipAlignment = "top",
124
124
  isLoading = false,
125
- isSelected = false,
126
125
  dataAnalyticsId
127
126
  }) => {
128
127
  const {
@@ -178,7 +177,7 @@ const SummaryTile = ({
178
177
  }),
179
178
  children: tooltipText
180
179
  }) : null;
181
- const ariaCurrentProps = isSelected && isInteractive ? {
180
+ const ariaCurrentProps = tileType === SummaryTileType.Active && isInteractive ? {
182
181
  "aria-current": "page"
183
182
  } : {};
184
183
  // When both onClick and tooltipText are present, the tooltip trigger
@@ -1,5 +1,5 @@
1
1
  import { ReactElement, ReactNode, RefObject } from "react";
2
- export declare const useTableChildren: (children: ReactNode, isMobile: boolean, selected: number, allSelected: boolean, clearSelection: () => void, selectAll: () => void, turnOffSelectAll?: boolean, activeId?: string, gridRef?: RefObject<HTMLElement | null>, onCloseDetailPanel?: () => void) => {
2
+ export declare const useTableChildren: (children: ReactNode, isMobile: boolean, selected: number, allSelected: boolean, clearSelection: () => void, activeId?: string, gridRef?: RefObject<HTMLElement | null>, onCloseDetailPanel?: () => void) => {
3
3
  bulkActions: ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | undefined;
4
4
  pagination: ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | undefined;
5
5
  activePage: number | undefined;
@@ -27,7 +27,7 @@ const isChildElement = function (child, expectedType) {
27
27
  }
28
28
  return false;
29
29
  };
30
- const useTableChildren = (children, isMobile, selected, allSelected, clearSelection, selectAll, turnOffSelectAll, activeId, gridRef, onCloseDetailPanel) => (0, react_1.useMemo)(() => {
30
+ const useTableChildren = (children, isMobile, selected, allSelected, clearSelection, activeId, gridRef, onCloseDetailPanel) => (0, react_1.useMemo)(() => {
31
31
  let bulkActions = undefined;
32
32
  let tablePagination = undefined;
33
33
  let activePage = undefined;
@@ -42,7 +42,7 @@ const useTableChildren = (children, isMobile, selected, allSelected, clearSelect
42
42
  }
43
43
  if (isChildElement(child, tableBulkActions_1.TableBulkActions.displayName)) {
44
44
  const bulkActionButtons = child.props.children || [];
45
- bulkActions = ((0, jsx_runtime_1.jsx)(bulkActions_1.BulkActions, { gridType: isMobile ? deviceType_1.DeviceType.Mobile : deviceType_1.DeviceType.Desktop, selected: selected, allSelected: allSelected, onClearSelection: clearSelection, onSelectAll: selectAll, turnOffSelectAll: turnOffSelectAll, children: bulkActionButtons }));
45
+ bulkActions = ((0, jsx_runtime_1.jsx)(bulkActions_1.BulkActions, { gridType: isMobile ? deviceType_1.DeviceType.Mobile : deviceType_1.DeviceType.Desktop, selected: selected, allSelected: allSelected, onClearSelection: clearSelection, children: bulkActionButtons }));
46
46
  return;
47
47
  }
48
48
  if (isChildElement(child, tablePagination_1.TablePagination.displayName)) {
@@ -103,5 +103,5 @@ const useTableChildren = (children, isMobile, selected, allSelected, clearSelect
103
103
  detailPanel: detailPanel,
104
104
  other: other
105
105
  };
106
- }, [children, clearSelection, isMobile, selected, gridRef, allSelected, selectAll, turnOffSelectAll, activeId, onCloseDetailPanel]);
106
+ }, [children, clearSelection, isMobile, selected, gridRef, allSelected, activeId, onCloseDetailPanel]);
107
107
  exports.useTableChildren = useTableChildren;
@@ -13,6 +13,8 @@ const columnSettingsStorage_1 = require("./columnSettingsStorage");
13
13
  const actionsColumn_1 = require("../../dataGrid/columns/actionsColumn/actionsColumn");
14
14
  const mergeColumnSettings_1 = require("./mergeColumnSettings");
15
15
  const zen_1 = require("../../utils/zen");
16
+ const useSelectableRows_1 = require("../selectable/useSelectableRows");
17
+ const useNestedRows_1 = require("../nested/useNestedRows");
16
18
  const getColumnSettings = (pageName, defaultValue) => {
17
19
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
18
20
  const storage = new columnSettingsStorage_1.ColumnSettingsStorage(pageName || "", zen_1.zen === null || zen_1.zen === void 0 ? void 0 : zen_1.zen.localStorage, defaultValue);
@@ -46,11 +48,12 @@ const useFlexibleColumns = (columns, flexible, gridRef, columnsPopupRef, isFeed)
46
48
  onChangeColumnSettings(newSettings);
47
49
  }, [onChangeColumnSettings, saveSettingsToTheStorage]);
48
50
  const flexibleColumns = (0, react_1.useMemo)(() => {
51
+ var _a, _b, _c, _d, _e;
49
52
  if (!flexible) {
50
53
  return columns;
51
54
  }
52
55
  const visibleColumnsMap = new Map(columns.map(c => [c.id, c]));
53
- return columnSettings
56
+ const result = columnSettings
54
57
  .map((s, index) => {
55
58
  var _a;
56
59
  const column = visibleColumnsMap.get(s.name);
@@ -67,6 +70,41 @@ const useFlexibleColumns = (columns, flexible, gridRef, columnsPopupRef, isFeed)
67
70
  return Object.assign(Object.assign({}, column), { meta: Object.assign(Object.assign({}, (column.meta || {})), { defaultWidth: width }), wrappers: [...wrappers, wrapper] });
68
71
  })
69
72
  .filter(c => c !== undefined);
73
+ // Ensure selectable and nested wrappers are always on the first visible column
74
+ if (result.length > 0) {
75
+ const pinnedWrapperWidth = 32;
76
+ let widthDelta = 0;
77
+ let donorCol = undefined;
78
+ for (const wrapperName of [useNestedRows_1.NestedWrapperName, useSelectableRows_1.SelectableWrapperName]) {
79
+ if ((_a = result[0].wrappers) === null || _a === void 0 ? void 0 : _a.some(w => w.name === wrapperName)) {
80
+ continue;
81
+ }
82
+ let pinnedWrapper;
83
+ for (const col of result.slice(1)) {
84
+ if (col.wrappers) {
85
+ const found = col.wrappers.find(w => w.name === wrapperName);
86
+ if (found) {
87
+ pinnedWrapper = found;
88
+ donorCol = donorCol !== null && donorCol !== void 0 ? donorCol : col;
89
+ widthDelta += pinnedWrapperWidth;
90
+ col.wrappers = col.wrappers.filter(w => w.name !== wrapperName);
91
+ break;
92
+ }
93
+ }
94
+ }
95
+ if (pinnedWrapper) {
96
+ result[0].wrappers = [...(result[0].wrappers || []), pinnedWrapper];
97
+ }
98
+ }
99
+ if (widthDelta > 0) {
100
+ result[0] = Object.assign(Object.assign({}, result[0]), { meta: Object.assign(Object.assign({}, (result[0].meta || {})), { defaultWidth: ((_c = (_b = result[0].meta) === null || _b === void 0 ? void 0 : _b.defaultWidth) !== null && _c !== void 0 ? _c : 0) + widthDelta }) });
101
+ if (donorCol) {
102
+ const donorIndex = result.indexOf(donorCol);
103
+ result[donorIndex] = Object.assign(Object.assign({}, donorCol), { meta: Object.assign(Object.assign({}, (donorCol.meta || {})), { defaultWidth: Math.max(0, ((_e = (_d = donorCol.meta) === null || _d === void 0 ? void 0 : _d.defaultWidth) !== null && _e !== void 0 ? _e : 0) - widthDelta) }) });
104
+ }
105
+ }
106
+ }
107
+ return result;
70
108
  }, [columnSettings, columns, flexible]);
71
109
  const columnsPopup = (0, react_1.useMemo)(() => {
72
110
  if (!flexible) {
@@ -3,6 +3,7 @@ import { IListColumn } from "../../dataGrid/listColumn";
3
3
  import { IRowEntity } from "../../dataGrid/row/row";
4
4
  import "./nestedButton.less";
5
5
  import { IEntityWithId } from "../../commonHelpers/entity";
6
+ export declare const NestedWrapperName = "Nested";
6
7
  export declare const useNestedRows: <T extends IRowEntity<N>, N extends IEntityWithId>(expandedRows: string[] | undefined, onExpand: ((id: string, isExpanded: boolean) => void) | undefined, columns: IListColumn<T, N>[], isMobile: boolean) => {
7
8
  nestedColumns: {
8
9
  id: string;
@@ -6,7 +6,7 @@ const {
6
6
  Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
- exports.useNestedRows = void 0;
9
+ exports.useNestedRows = exports.NestedWrapperName = void 0;
10
10
  const jsx_runtime_1 = require("react/jsx-runtime");
11
11
  const react_1 = require("react");
12
12
  const iconChevronTop_1 = require("../../icons/iconChevronTop");
@@ -66,7 +66,7 @@ injectString("zh-TW", "Expand", "\u5C55\u958B");
66
66
  injectString("ro-RO", "Expand", "Extinde\u021Bi");
67
67
  injectString("ar-SA", "Expand", "\u062A\u0648\u0633\u064A\u0639");
68
68
  const useLanguage_1 = require("../../utils/localization/useLanguage");
69
- const NestedWrapperName = "Nested";
69
+ exports.NestedWrapperName = "Nested";
70
70
  const useNestedRows = (expandedRows, onExpand, columns, isMobile) => {
71
71
  const {
72
72
  translate
@@ -91,7 +91,7 @@ const useNestedRows = (expandedRows, onExpand, columns, isMobile) => {
91
91
  }, [intExpanded, onExpand]);
92
92
  const firstColumnId = (0, react_1.useMemo)(() => columns.length > 0 ? columns[0].id : null, [columns]);
93
93
  const wrapper = (0, react_1.useMemo)(() => ({
94
- name: NestedWrapperName,
94
+ name: exports.NestedWrapperName,
95
95
  render(value, entity, isNested) {
96
96
  if (!entity) {
97
97
  return null;
@@ -16,6 +16,14 @@ export interface ISelectableRowsOptions<T extends IRowEntity<N>, N extends IEnti
16
16
  checkboxTitle?: (entity: T | N) => string;
17
17
  headerTitle?: (state: SelectionState) => string;
18
18
  turnOffSelectAll?: boolean;
19
+ /**
20
+ * When `true`, the header checkbox emits the current page's IDs instead of `{ all: true }`.
21
+ * When `undefined`, falls back to `turnOffSelectAll` for backward compatibility.
22
+ *
23
+ * Note: avoid setting this to `false` alongside `turnOffSelectAll: true` — the checkbox
24
+ * will emit `{ all: true }` while the dropdown hides the "Select all" option, which is inconsistent.
25
+ */
26
+ checkboxSelectsCurrentPage?: boolean;
19
27
  checkboxPlaceholder?: boolean;
20
28
  strategy?: TSelectionStrategy;
21
29
  selectAll?: boolean;
@@ -24,6 +32,7 @@ export declare const getEmptySelection: () => {
24
32
  all: boolean;
25
33
  selected: string[];
26
34
  };
35
+ export declare const SelectableWrapperName = "Selectable";
27
36
  export declare const useSelectableRows: <T extends IRowEntity<N>, N extends IEntityWithId>(columns: IListColumn<T, N>[], entities: T[], isMobile: boolean, selectMode: boolean, setSelectMode: (value: boolean) => void, selectable?: ISelectableRowsOptions<T, N>) => {
28
37
  selectableColumns: IListColumn<T, N>[];
29
38
  selectableFeedWrapper: (primaryData: ReactNode, secondaryData: ReactNode, entity: T | N, isNested: boolean) => [ReactNode, ReactNode];
@@ -6,7 +6,7 @@ const {
6
6
  Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
- exports.TRANSLATIONS = exports.useSelectableRows = exports.getEmptySelection = void 0;
9
+ exports.TRANSLATIONS = exports.useSelectableRows = exports.SelectableWrapperName = exports.getEmptySelection = void 0;
10
10
  const jsx_runtime_1 = require("react/jsx-runtime");
11
11
  const react_1 = require("react");
12
12
  const interfaces_1 = require("./interfaces");
@@ -77,7 +77,7 @@ const getEmptySelection = () => ({
77
77
  selected: []
78
78
  });
79
79
  exports.getEmptySelection = getEmptySelection;
80
- const SelectableWrapperName = "Selectable";
80
+ exports.SelectableWrapperName = "Selectable";
81
81
  const useSelectableRows = (columns, entities, isMobile, selectMode, setSelectMode, selectable) => {
82
82
  var _a;
83
83
  const {
@@ -166,7 +166,6 @@ const useSelectableRows = (columns, entities, isMobile, selectMode, setSelectMod
166
166
  return;
167
167
  }
168
168
  const newSelections = (0, getCurrentPageSelection_1.getCurrentPageSelection)(entities, selectable);
169
- setState(newState);
170
169
  const newValue = {
171
170
  selected: [...newSelections],
172
171
  all: false
@@ -185,12 +184,20 @@ const useSelectableRows = (columns, entities, isMobile, selectMode, setSelectMod
185
184
  return translate("Deselect all");
186
185
  }, [selectable, selectableState, state, translate]);
187
186
  const isEntityChecked = (0, react_1.useCallback)((entity, isNested) => (0, isRowChecked_1.isRowChecked)(selections, state, selectable === null || selectable === void 0 ? void 0 : selectable.strategy, entity, isNested), [selections, state, selectable === null || selectable === void 0 ? void 0 : selectable.strategy]);
187
+ const hasSelectable = !!selectable;
188
+ const selectableCheckboxSelectsCurrentPage = selectable === null || selectable === void 0 ? void 0 : selectable.checkboxSelectsCurrentPage;
189
+ const selectableTurnOffSelectAll = selectable === null || selectable === void 0 ? void 0 : selectable.turnOffSelectAll;
190
+ const selectableCheckboxInHeader = selectable === null || selectable === void 0 ? void 0 : selectable.checkboxInHeader;
191
+ const selectableSelectionLimit = selectable === null || selectable === void 0 ? void 0 : selectable.selectionLimit;
192
+ const selectableHeader = selectable === null || selectable === void 0 ? void 0 : selectable.header;
193
+ const checkboxEmitsCurrentPage = selectableCheckboxSelectsCurrentPage !== null && selectableCheckboxSelectsCurrentPage !== void 0 ? selectableCheckboxSelectsCurrentPage : selectableTurnOffSelectAll;
194
+ const checkboxInHeaderValue = selectableCheckboxInHeader !== undefined ? selectableCheckboxInHeader : selectableSelectionLimit !== undefined ? false : undefined;
188
195
  const wrapper = (0, react_1.useMemo)(() => {
189
- if (!selectable) {
196
+ if (!hasSelectable) {
190
197
  return null;
191
198
  }
192
199
  return {
193
- name: SelectableWrapperName,
200
+ name: exports.SelectableWrapperName,
194
201
  render(value, entity, isNested) {
195
202
  if (!entity) {
196
203
  return null;
@@ -228,23 +235,23 @@ const useSelectableRows = (columns, entities, isMobile, selectMode, setSelectMod
228
235
  checked: state === interfaces_1.SelectionState.CurrentPage || state === interfaces_1.SelectionState.All,
229
236
  indeterminate: state === interfaces_1.SelectionState.Partial,
230
237
  onChange: newValue => {
231
- const newState = newValue ? selectable.turnOffSelectAll ? interfaces_1.SelectionState.CurrentPage : interfaces_1.SelectionState.All : interfaces_1.SelectionState.None;
238
+ const newState = newValue ? checkboxEmitsCurrentPage ? interfaces_1.SelectionState.CurrentPage : interfaces_1.SelectionState.All : interfaces_1.SelectionState.None;
232
239
  setState(newState);
233
240
  onChangeSelectionState(newState);
234
241
  },
235
242
  calculateSelectionState: () => selectableState,
236
- checkboxInHeader: selectable.checkboxInHeader !== undefined ? selectable.checkboxInHeader : selectable.selectionLimit !== undefined ? false : undefined,
237
- header: selectable.header,
243
+ checkboxInHeader: checkboxInHeaderValue,
244
+ header: selectableHeader,
238
245
  onSelect: newState => {
239
246
  setState(newState);
240
247
  onChangeSelectionState(newState);
241
248
  },
242
- turnOffSelectAll: selectable.turnOffSelectAll
249
+ turnOffSelectAll: selectableTurnOffSelectAll
243
250
  });
244
251
  return cell;
245
252
  }
246
253
  };
247
- }, [checkboxDisabled, checkboxTitle, checkboxVisible, headerTitle, onChangeSelectionState, onSelectListener, selectable, selectableState, state, isMobile, checkboxPlaceholder, isEntityChecked]);
254
+ }, [checkboxDisabled, checkboxTitle, checkboxVisible, headerTitle, onChangeSelectionState, onSelectListener, hasSelectable, checkboxEmitsCurrentPage, checkboxInHeaderValue, selectableHeader, selectableTurnOffSelectAll, selectableState, state, isMobile, checkboxPlaceholder, isEntityChecked]);
248
255
  const selectableFeedWrapper = (0, react_1.useCallback)((primaryData, secondaryData, entity, isNested) => {
249
256
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
250
257
  if (!entity) {
@@ -284,7 +291,7 @@ const useSelectableRows = (columns, entities, isMobile, selectMode, setSelectMod
284
291
  // Remove CheckboxColumnWrappers from wrappers list
285
292
  newColumns.forEach(c => {
286
293
  if (c.wrappers) {
287
- c.wrappers = c.wrappers.filter(w => w.name !== SelectableWrapperName);
294
+ c.wrappers = c.wrappers.filter(w => w.name !== exports.SelectableWrapperName);
288
295
  }
289
296
  });
290
297
  // Add selectable wrappers of the first column
@@ -225,12 +225,6 @@ const TableInner = ({
225
225
  selected: []
226
226
  });
227
227
  }, [selectable]);
228
- const selectAll = (0, react_1.useCallback)(() => {
229
- selectable === null || selectable === void 0 ? void 0 : selectable.onSelect({
230
- all: true,
231
- selected: []
232
- });
233
- }, [selectable]);
234
228
  const [activeIdInternal, setActiveInternal] = (0, react_1.useState)(undefined);
235
229
  const activeId = active !== undefined ? active : activeIdInternal;
236
230
  const onClickInternal = (0, react_1.useCallback)(id => setActiveInternal(id === activeIdInternal ? undefined : id), [activeIdInternal, setActiveInternal]);
@@ -247,7 +241,7 @@ const TableInner = ({
247
241
  detailPanel,
248
242
  footer,
249
243
  other
250
- } = (0, useTableChildren_1.useTableChildren)(children, isMobile, selectionQty, ((_c = selectable === null || selectable === void 0 ? void 0 : selectable.selection) === null || _c === void 0 ? void 0 : _c.all) || false, clearSelection, selectAll, selectable === null || selectable === void 0 ? void 0 : selectable.turnOffSelectAll, activeId, gridRef, onCloseDetailPanel);
244
+ } = (0, useTableChildren_1.useTableChildren)(children, isMobile, selectionQty, ((_c = selectable === null || selectable === void 0 ? void 0 : selectable.selection) === null || _c === void 0 ? void 0 : _c.all) || false, clearSelection, activeId, gridRef, onCloseDetailPanel);
251
245
  const hasDetailPanel = !!detailPanel;
252
246
  const shouldEnableRowClick = hasDetailPanel || !!onClick;
253
247
  const activeIdForRow = shouldEnableRowClick ? activeId : undefined;
@@ -1,6 +1,6 @@
1
1
  import { FunctionComponent } from "react";
2
2
  import "./title.less";
3
- import { IIcon } from "../../icons/icon";
3
+ import { IIcon } from "../icons/icon";
4
4
  export type TIconType = "info" | "warning" | "error" | "success" | "default";
5
5
  interface ITitle {
6
6
  isMobile: boolean;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Title = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const classNames_1 = require("../commonHelpers/classNames/classNames");
7
+ const useDrive_1 = require("../utils/theme/useDrive");
8
+ const useDriveClassName_1 = require("../utils/theme/useDriveClassName");
9
+ const iconChevronRightSmall_1 = require("../icons/iconChevronRightSmall");
10
+ const Title = ({ isMobile, link, target, title, id, icon, iconType, className = "", onClick }) => {
11
+ const isDrive = (0, useDrive_1.useDrive)();
12
+ const driveClassName = (0, useDriveClassName_1.useDriveClassName)("zen-title");
13
+ const h3ClassName = (0, classNames_1.classNames)(["zen-title", driveClassName !== null && driveClassName !== void 0 ? driveClassName : ""]);
14
+ const clickableClass = onClick ? "zen-title__clickable" : "";
15
+ const iconClassName = iconType ? `zen-title__icon--${iconType}` : "";
16
+ const iconSize = (0, react_1.useMemo)(() => (isDrive ? "huge" : "large"), [isDrive]);
17
+ const iconElement = (0, react_1.useMemo)(() => (icon ? (0, jsx_runtime_1.jsx)("div", { className: (0, classNames_1.classNames)(["zen-title__icon", iconClassName]), children: (0, react_1.createElement)(icon, { size: iconSize }) }) : null), [icon, iconSize, iconClassName]);
18
+ const chevron = (0, react_1.useMemo)(() => ((0, jsx_runtime_1.jsx)("span", { className: "zen-title__link-chevron", children: (0, jsx_runtime_1.jsx)(iconChevronRightSmall_1.IconChevronRightSmall, { size: iconSize, className: "zen-title__chevron-icon" }) })), [iconSize]);
19
+ if (onClick) {
20
+ return ((0, jsx_runtime_1.jsx)("h3", { className: h3ClassName, children: (0, jsx_runtime_1.jsxs)("button", { type: "button", className: clickableClass, onClick: onClick, children: [iconElement, (0, jsx_runtime_1.jsxs)("span", { title: title, id: id, className: (0, classNames_1.classNames)(["zen-title__text", isMobile && !isDrive ? "zen-title__text--mobile" : "", className]), children: [title, chevron] })] }) }));
21
+ }
22
+ if (link) {
23
+ return ((0, jsx_runtime_1.jsx)("h3", { className: h3ClassName, children: (0, jsx_runtime_1.jsxs)("a", { id: id, className: "zen-title__link", href: link, target: target, children: [iconElement, (0, jsx_runtime_1.jsxs)("span", { title: title, className: (0, classNames_1.classNames)(["zen-title__link-text"]), children: [title, chevron] })] }) }));
24
+ }
25
+ return ((0, jsx_runtime_1.jsxs)("h3", { className: h3ClassName, children: [iconElement, (0, jsx_runtime_1.jsx)("span", { title: title, id: id, className: (0, classNames_1.classNames)(["zen-title__text", isMobile && !isDrive ? "zen-title__text--mobile" : "", className]), children: title })] }));
26
+ };
27
+ exports.Title = Title;
@@ -110,7 +110,8 @@ const ToggleButtonRaw = props => {
110
110
  children,
111
111
  isReverted,
112
112
  isReadOnly,
113
- value: valueProp
113
+ value: valueProp,
114
+ dataAnalyticsId
114
115
  } = props;
115
116
  const driveClassesToggler = (0, useDriveClassName_1.useDriveClassName)("zen-toggler");
116
117
  const driveClassesComponent = (0, useDriveClassName_1.useDriveClassName)("zen-toggler-component");
@@ -140,6 +141,7 @@ const ToggleButtonRaw = props => {
140
141
  }
141
142
  return (0, jsx_runtime_1.jsxs)("div", {
142
143
  className: (0, classNames_1.classNames)(["zen-toggler", driveClassesToggler || "", className || ""]),
144
+ "data-analytics-id": dataAnalyticsId,
143
145
  children: [(0, jsx_runtime_1.jsx)(triStateCheckbox_1.TriStateCheckbox, {
144
146
  name: name,
145
147
  className: "zen-toggler__input",
@@ -6,6 +6,7 @@ interface IToggleButtonBaseRaw extends IZenComponentProps {
6
6
  title?: string;
7
7
  isReverted?: boolean;
8
8
  isReadOnly?: boolean;
9
+ dataAnalyticsId?: string;
9
10
  }
10
11
  export interface IToggleButtonDefaultRaw extends IToggleButtonBaseRaw {
11
12
  onChange?: (checked: boolean) => void;
@@ -10,6 +10,7 @@ interface ITooltip extends IZenComponentProps {
10
10
  }>;
11
11
  alignment?: TAlignment;
12
12
  triggerClassName?: string;
13
+ triggerAriaLabel?: string;
13
14
  mobileTitle?: string;
14
15
  /**
15
16
  * @deprecated
@@ -32,5 +33,5 @@ interface ITooltip extends IZenComponentProps {
32
33
  */
33
34
  mobileSheetTitle?: ReactElement | string;
34
35
  }
35
- export declare const Tooltip: ({ trigger, triggerClassName, className, alignment, children, mobileSheetTitle, mobileTitle }: ITooltip) => import("react/jsx-runtime").JSX.Element;
36
+ export declare const Tooltip: ({ trigger, triggerClassName, triggerAriaLabel, className, alignment, children, mobileSheetTitle, mobileTitle }: ITooltip) => import("react/jsx-runtime").JSX.Element;
36
37
  export {};
@@ -96,7 +96,7 @@ injectString("ar-SA", "Close", "\u0625\u063A\u0644\u0627\u0642");
96
96
  const react_1 = __importStar(require("react"));
97
97
  const useResize_1 = require("../commonHelpers/hooks/useResize");
98
98
  const calculatePosition_1 = require("../utils/positioningUtils/calculatePosition");
99
- const react_dom_1 = require("react-dom");
99
+ const usePortal_1 = require("../commonHelpers/hooks/usePortal");
100
100
  const classNames_1 = require("../commonHelpers/classNames/classNames");
101
101
  const calculateArrowPosition_1 = require("./helpers/calculateArrowPosition");
102
102
  const deviceType_1 = require("../commonHelpers/hooks/deviceType");
@@ -138,7 +138,8 @@ const EventWrapper = ({
138
138
  handleUniversalClick,
139
139
  setTooltipVisible,
140
140
  timerRef,
141
- timerMouseOutRef
141
+ timerMouseLeaveRef,
142
+ tooltipRef
142
143
  }) => {
143
144
  const isCurrentDeviceDesktop = deviceType === deviceType_1.DeviceType.Desktop;
144
145
  const originalOnClick = children.props.onClick;
@@ -151,10 +152,10 @@ const EventWrapper = ({
151
152
  handleUniversalClick(e);
152
153
  }, [originalOnClick, handleUniversalClick]);
153
154
  const desktopEvents = {
154
- onMouseOver: () => {
155
+ onMouseEnter: () => {
155
156
  var _a;
156
157
  setTooltipVisible(true);
157
- timerMouseOutRef.current && ((_a = zen_1.zen.clearTimeout) === null || _a === void 0 ? void 0 : _a.call(zen_1.zen, timerMouseOutRef.current));
158
+ timerMouseLeaveRef.current && ((_a = zen_1.zen.clearTimeout) === null || _a === void 0 ? void 0 : _a.call(zen_1.zen, timerMouseLeaveRef.current));
158
159
  },
159
160
  onMouseLeave: () => {
160
161
  var _a;
@@ -163,7 +164,13 @@ const EventWrapper = ({
163
164
  }, TOOLTIP_VISIBILITY_DELAY);
164
165
  },
165
166
  onFocus: () => setTooltipVisible(true),
166
- onBlur: () => setTooltipVisible(false),
167
+ onBlur: () => {
168
+ // Skip if the tooltip DOM was already detached
169
+ if (tooltipRef.current && !tooltipRef.current.isConnected) {
170
+ return;
171
+ }
172
+ setTooltipVisible(false);
173
+ },
167
174
  onKeyDown: onKeyDownHandler,
168
175
  onClick: composedOnClick
169
176
  };
@@ -182,19 +189,22 @@ const EventWrapper = ({
182
189
  const Tooltip = ({
183
190
  trigger,
184
191
  triggerClassName,
192
+ triggerAriaLabel,
185
193
  className = "",
186
194
  alignment,
187
195
  children,
188
196
  mobileSheetTitle,
189
197
  mobileTitle
198
+ // eslint-disable-next-line complexity
190
199
  }) => {
200
+ var _a, _b, _c, _d;
191
201
  const GAP = 12;
192
202
  const isDrive = (0, useDrive_1.useDrive)();
193
- const triggerRefNative = trigger === null || trigger === void 0 ? void 0 : trigger.ref;
203
+ const triggerRefNative = trigger ? trigger.props.ref : undefined;
194
204
  const triggerLocalRef = (0, react_1.useRef)(null);
195
205
  const triggerRef = triggerRefNative || triggerLocalRef;
196
206
  const timerRef = (0, react_1.useRef)(null);
197
- const timerMouseOutRef = (0, react_1.useRef)(null);
207
+ const timerMouseLeaveRef = (0, react_1.useRef)(null);
198
208
  const tooltipRef = (0, react_1.useRef)(null);
199
209
  const arrowRef = (0, react_1.useRef)(null);
200
210
  const [isTooltipVisible, setTooltipVisible] = (0, react_1.useState)(false);
@@ -251,12 +261,12 @@ const Tooltip = ({
251
261
  tabIndex: 0,
252
262
  type: "button",
253
263
  className: "zen-tooltip__trigger-container",
254
- "aria-label": translate("Information"),
264
+ "aria-label": triggerAriaLabel !== null && triggerAriaLabel !== void 0 ? triggerAriaLabel : translate("Information"),
255
265
  children: (0, react_1.createElement)(iconInfoCircle_1.IconInfoCircle, {
256
266
  size: isMobile ? "huge" : "large",
257
267
  className: (0, classNames_1.classNames)([triggerClassName || "", "zen-tooltip__trigger"])
258
268
  })
259
- }), [trigger, isMobile, triggerClassName, translate]);
269
+ }), [trigger, isMobile, triggerClassName, triggerAriaLabel, translate]);
260
270
  const triggerClone = (0, jsx_runtime_1.jsx)(EventWrapper, {
261
271
  deviceType: deviceType,
262
272
  isTooltipVisible: isTooltipVisible,
@@ -264,7 +274,8 @@ const Tooltip = ({
264
274
  handleUniversalClick: handleUniversalClick,
265
275
  setTooltipVisible: setTooltipVisible,
266
276
  timerRef: timerRef,
267
- timerMouseOutRef: timerMouseOutRef,
277
+ timerMouseLeaveRef: timerMouseLeaveRef,
278
+ tooltipRef: tooltipRef,
268
279
  children: react_1.default.cloneElement(tooltipTrigger, Object.assign({
269
280
  ref: triggerRef
270
281
  }, triggerCloneProps))
@@ -347,61 +358,54 @@ const Tooltip = ({
347
358
  }
348
359
  return preferredAlignment;
349
360
  }, [isMobile, TOOLTIP_ARROW_HEIGHT, triggerRef, checkNaturalFit]);
350
- // eslint-disable-next-line complexity
351
- const renderTooltip = () => {
352
- var _a, _b;
353
- if (!isTooltipVisible) {
354
- return "";
355
- }
356
- const content = (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
357
- children: [isMobile && (0, jsx_runtime_1.jsx)(shield_1.Shield, {
358
- className: "zen-tooltip__shield"
361
+ const container = (_d = (_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) !== null && _d !== void 0 ? _d : undefined;
362
+ const portal = (0, usePortal_1.usePortal)(isTooltipVisible ? (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
363
+ children: [isMobile && (0, jsx_runtime_1.jsx)(shield_1.Shield, {
364
+ className: "zen-tooltip__shield"
365
+ }), (0, jsx_runtime_1.jsxs)("div", {
366
+ id: tooltipId,
367
+ role: "tooltip",
368
+ ref: tooltipRef,
369
+ className: (0, classNames_1.classNames)(["zen-tooltip", dark ? "zen-dark" : "", `zen-tooltip--auto`, isMobile ? "zen-tooltip--mobile" : "", isDrive ? "zen-tooltip--drive" : "", className]),
370
+ onMouseEnter: () => {
371
+ var _a, _b;
372
+ timerRef.current && ((_a = zen_1.zen.clearTimeout) === null || _a === void 0 ? void 0 : _a.call(zen_1.zen, timerRef.current));
373
+ timerMouseLeaveRef.current && ((_b = zen_1.zen.clearTimeout) === null || _b === void 0 ? void 0 : _b.call(zen_1.zen, timerMouseLeaveRef.current));
374
+ },
375
+ onMouseLeave: () => {
376
+ var _a;
377
+ timerMouseLeaveRef.current = (_a = zen_1.zen.setTimeout) === null || _a === void 0 ? void 0 : _a.call(zen_1.zen, () => {
378
+ if (!isMobile && !isDrive) {
379
+ setTooltipVisible(false);
380
+ }
381
+ }, TOOLTIP_VISIBILITY_DELAY);
382
+ },
383
+ children: [!isMobile && !isDrive && (0, jsx_runtime_1.jsx)("div", {
384
+ className: (0, classNames_1.classNames)(["zen-tooltip__arrow", arrowClass]),
385
+ ref: arrowRef
359
386
  }), (0, jsx_runtime_1.jsxs)("div", {
360
- id: tooltipId,
361
- role: "tooltip",
362
- ref: tooltipRef,
363
- className: (0, classNames_1.classNames)(["zen-tooltip", dark ? "zen-dark" : "", `zen-tooltip--auto`, isMobile ? "zen-tooltip--mobile" : "", isDrive ? "zen-tooltip--drive" : "", className]),
364
- onMouseOver: () => {
365
- var _a, _b;
366
- timerRef.current && ((_a = zen_1.zen.clearTimeout) === null || _a === void 0 ? void 0 : _a.call(zen_1.zen, timerRef.current));
367
- timerMouseOutRef.current && ((_b = zen_1.zen.clearTimeout) === null || _b === void 0 ? void 0 : _b.call(zen_1.zen, timerMouseOutRef.current));
368
- },
369
- onMouseOut: () => {
387
+ className: (0, classNames_1.classNames)(["zen-tooltip__body", "zen-tooltip__body--auto", isDrive ? "zen-tooltip__body--drive" : "", isMobile ? "zen-tooltip__body--mobile" : "", deviceType === deviceType_1.DeviceType.Desktop && !isDrive ? "zen-tooltip__body--desktop" : ""]),
388
+ children: [(mobileSheetTitle || mobileTitle) && (deviceType === deviceType_1.DeviceType.Mobile || isDrive) && (0, jsx_runtime_1.jsx)("div", {
389
+ className: "zen-tooltip__title",
390
+ children: mobileSheetTitle || mobileTitle
391
+ }), children]
392
+ }), (deviceType === deviceType_1.DeviceType.Mobile || isDrive) && (0, jsx_runtime_1.jsx)(button_1.Button, {
393
+ className: "zen-tooltip__close-button",
394
+ title: translate("Close"),
395
+ "aria-label": translate("Close"),
396
+ onClick: () => {
370
397
  var _a;
371
- timerMouseOutRef.current = (_a = zen_1.zen.setTimeout) === null || _a === void 0 ? void 0 : _a.call(zen_1.zen, () => {
372
- if (!isMobile && !isDrive) {
373
- setTooltipVisible(false);
374
- }
375
- }, TOOLTIP_VISIBILITY_DELAY);
398
+ setTooltipVisible(false);
399
+ (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
376
400
  },
377
- children: [!isMobile && !isDrive && (0, jsx_runtime_1.jsx)("div", {
378
- className: (0, classNames_1.classNames)(["zen-tooltip__arrow", arrowClass]),
379
- ref: arrowRef
380
- }), (0, jsx_runtime_1.jsxs)("div", {
381
- className: (0, classNames_1.classNames)(["zen-tooltip__body", "zen-tooltip__body--auto", isDrive ? "zen-tooltip__body--drive" : "", isMobile ? "zen-tooltip__body--mobile" : "", deviceType === deviceType_1.DeviceType.Desktop && !isDrive ? "zen-tooltip__body--desktop" : ""]),
382
- children: [(mobileSheetTitle || mobileTitle) && (deviceType === deviceType_1.DeviceType.Mobile || isDrive) && (0, jsx_runtime_1.jsx)("div", {
383
- className: "zen-tooltip__title",
384
- children: mobileSheetTitle || mobileTitle
385
- }), children]
386
- }), (deviceType === deviceType_1.DeviceType.Mobile || isDrive) && (0, jsx_runtime_1.jsx)(button_1.Button, {
387
- className: "zen-tooltip__close-button",
388
- title: translate("Close"),
389
- "aria-label": translate("Close"),
390
- onClick: () => {
391
- var _a;
392
- setTooltipVisible(false);
393
- (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
394
- },
395
- children: (0, jsx_runtime_1.jsx)(iconClose_1.IconClose, {
396
- description: translate("Close"),
397
- className: "svgIcon",
398
- size: "huge"
399
- })
400
- })]
401
+ children: (0, jsx_runtime_1.jsx)(iconClose_1.IconClose, {
402
+ description: translate("Close"),
403
+ className: "svgIcon",
404
+ size: "huge"
405
+ })
401
406
  })]
402
- });
403
- return (0, react_dom_1.createPortal)(content, ((_a = zen_1.zen.document) === null || _a === void 0 ? void 0 : _a.fullscreenElement) || ((_b = zen_1.zen.document) === null || _b === void 0 ? void 0 : _b.body), tooltipId);
404
- };
407
+ })]
408
+ }) : null, container, tooltipId);
405
409
  const calculatePosition = (0, react_1.useCallback)(() => {
406
410
  const eAlignment = getEffectiveAlignment(tooltipAlignmentRef.current);
407
411
  (0, calculatePosition_1.calculatePosition)(triggerRef, tooltipRef, TOOLTIP_ARROW_HEIGHT + GAP, TOOLTIP_ARROW_HEIGHT + GAP, false, eAlignment, tooltipAlignments_1.tooltipAlignments, undefined, isMobile);
@@ -452,12 +456,12 @@ const Tooltip = ({
452
456
  if (timerRef.current) {
453
457
  (_a = zen_1.zen.clearTimeout) === null || _a === void 0 ? void 0 : _a.call(zen_1.zen, timerRef.current);
454
458
  }
455
- if (timerMouseOutRef.current) {
456
- (_b = zen_1.zen.clearTimeout) === null || _b === void 0 ? void 0 : _b.call(zen_1.zen, timerMouseOutRef.current);
459
+ if (timerMouseLeaveRef.current) {
460
+ (_b = zen_1.zen.clearTimeout) === null || _b === void 0 ? void 0 : _b.call(zen_1.zen, timerMouseLeaveRef.current);
457
461
  }
458
462
  }, []);
459
463
  return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
460
- children: [isTooltipVisible && renderTooltip(), triggerClone]
464
+ children: [portal, triggerClone]
461
465
  });
462
466
  };
463
467
  exports.Tooltip = Tooltip;
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { TTextDirection } from "./getTextDirection";
3
+ export declare const directionContext: import("react").Context<TTextDirection>;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.directionContext = void 0;
4
+ const react_1 = require("react");
5
+ exports.directionContext = (0, react_1.createContext)("ltr");
@@ -0,0 +1,2 @@
1
+ export type TTextDirection = "ltr" | "rtl";
2
+ export declare const getTextDirection: (language: string) => TTextDirection;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTextDirection = void 0;
4
+ const RTL_LANGUAGES = ["ar"];
5
+ const getTextDirection = (language) => (RTL_LANGUAGES.includes(language) ? "rtl" : "ltr");
6
+ exports.getTextDirection = getTextDirection;
@@ -2,7 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LanguageProvider = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
5
6
  const languageContext_1 = require("./languageContext");
6
7
  const getSupportedLanguage_1 = require("./getSupportedLanguage");
7
- const LanguageProvider = ({ language, children }) => ((0, jsx_runtime_1.jsx)(languageContext_1.languageContext.Provider, { value: (0, getSupportedLanguage_1.getSupportedLanguage)(language), children: children }));
8
+ const directionContext_1 = require("./directionContext");
9
+ const getTextDirection_1 = require("./getTextDirection");
10
+ const zen_1 = require("../zen");
11
+ const LanguageProvider = ({ language, children }) => {
12
+ const validLanguage = (0, getSupportedLanguage_1.getSupportedLanguage)(language);
13
+ const direction = (0, getTextDirection_1.getTextDirection)(validLanguage);
14
+ (0, react_1.useEffect)(() => {
15
+ if (zen_1.zen.document) {
16
+ zen_1.zen.document.documentElement.dir = direction;
17
+ zen_1.zen.document.documentElement.lang = validLanguage;
18
+ }
19
+ }, [direction, validLanguage]);
20
+ return ((0, jsx_runtime_1.jsx)(languageContext_1.languageContext.Provider, { value: validLanguage, children: (0, jsx_runtime_1.jsx)(directionContext_1.directionContext.Provider, { value: direction, children: children }) }));
21
+ };
8
22
  exports.LanguageProvider = LanguageProvider;