@geotab/zenith 3.10.0 → 3.11.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 (311) hide show
  1. package/README.md +29 -0
  2. package/dist/calendar/calendar.js +7 -4
  3. package/dist/card/components/title.js +4 -1
  4. package/dist/card/components/titleLink.js +5 -2
  5. package/dist/chart/barChart/getDefaultOptions.d.ts +2 -1
  6. package/dist/chart/barChart/getDefaultOptions.js +5 -2
  7. package/dist/chart/barChart.js +6 -4
  8. package/dist/chart/lineChart/getDefaultOptions.d.ts +2 -1
  9. package/dist/chart/lineChart/getDefaultOptions.js +5 -2
  10. package/dist/chart/lineChart.js +4 -2
  11. package/dist/checkboxListWithAction/checkboxListWithAction.js +4 -1
  12. package/dist/commonHelpers/arrowNavigation/components/arrowButton/arrowButton.js +4 -1
  13. package/dist/commonStyles/pillStyles/pillContent.less +13 -14
  14. package/dist/commonStyles/pillStyles/pillStyles.less +4 -5
  15. package/dist/commonStyles/pillStyles/pillTextContent.less +2 -2
  16. package/dist/commonStyles/typography/typography.less +579 -19
  17. package/dist/controlledPopup/controlledPopup.d.ts +1 -0
  18. package/dist/controlledPopup/controlledPopup.js +3 -1
  19. package/dist/dataGrid/cell/cell.d.ts +2 -1
  20. package/dist/dataGrid/cell/cell.js +2 -2
  21. package/dist/dataGrid/dataGrid.js +7 -4
  22. package/dist/dataGrid/listColumn.d.ts +2 -0
  23. package/dist/dataGrid/row/row.d.ts +2 -1
  24. package/dist/dataGrid/row/row.js +13 -9
  25. package/dist/dataGrid/withFlexibleColumns/components/columnSettingsList.js +2 -1
  26. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +4 -0
  27. package/dist/dateRangeInner/dateRangeInner.js +5 -2
  28. package/dist/dateRangeRaw/dateRangeRaw.js +5 -2
  29. package/dist/dateRangeRaw/utils/parseLabel.js +1 -1
  30. package/dist/dropdownRaw/dropdownRaw.js +12 -6
  31. package/dist/fileUpload/components/dropZoneContent.js +100 -100
  32. package/dist/fileUpload/fileUpload.js +100 -100
  33. package/dist/filters/components/filtersSearchList.js +4 -1
  34. package/dist/filtersBar/filtersContainer/filtersContainer.js +62 -61
  35. package/dist/formStepperButtons/formStepperButtons.js +4 -1
  36. package/dist/groupsFilterRaw/groupsFilterAdjustmentState.js +4 -1
  37. package/dist/groupsFilterRaw/groupsFilterInitialState.js +4 -1
  38. package/dist/header/headerBack.js +4 -1
  39. package/dist/icons/iconAlignLeft.js +1 -3
  40. package/dist/icons/iconAlignmentLeft.js +1 -3
  41. package/dist/icons/iconAlignmentRight.js +1 -3
  42. package/dist/icons/iconArrowBottomLeft.js +1 -3
  43. package/dist/icons/iconArrowBottomRight.js +1 -3
  44. package/dist/icons/iconArrowLeftPath.js +1 -3
  45. package/dist/icons/iconArrowRight.js +1 -3
  46. package/dist/icons/iconArrowRightCircle.js +1 -3
  47. package/dist/icons/iconArrowRightPath.js +1 -3
  48. package/dist/icons/iconArrowTopLeft.js +1 -3
  49. package/dist/icons/iconArrowTopRight.js +1 -3
  50. package/dist/icons/iconChevronDoubleRight.js +1 -3
  51. package/dist/icons/iconChevronRight.js +1 -3
  52. package/dist/icons/iconChevronRightSmall.js +1 -3
  53. package/dist/icons/iconCornerDownLeft.js +1 -3
  54. package/dist/icons/iconCornerDownRight.js +1 -3
  55. package/dist/icons/iconCornerLeftDown.js +1 -3
  56. package/dist/icons/iconCornerLeftUp.js +1 -3
  57. package/dist/icons/iconCornerRightDown.js +1 -3
  58. package/dist/icons/iconCornerRightUp.js +1 -3
  59. package/dist/icons/iconCornerUpLeft.js +1 -3
  60. package/dist/icons/iconCornerUpRight.js +1 -3
  61. package/dist/index.css +3254 -2922
  62. package/dist/index.d.ts +1 -0
  63. package/dist/index.js +3 -1
  64. package/dist/lineChartMini/lineChartMini.js +15 -3
  65. package/dist/list/itemData/itemDataInternal.js +4 -1
  66. package/dist/list/listItem/listItem.js +4 -1
  67. package/dist/menu/components/controlledMenuList/controlledMenuList.d.ts +27 -0
  68. package/dist/menu/components/controlledMenuList/controlledMenuList.js +126 -0
  69. package/dist/menu/components/createControlledMenuList.d.ts +37 -0
  70. package/dist/menu/components/createControlledMenuList.js +55 -0
  71. package/dist/menu/components/createMenuItem.d.ts +67 -0
  72. package/dist/menu/components/createMenuItem.js +97 -0
  73. package/dist/menu/components/menuButton.js +12 -3
  74. package/dist/menu/components/menuItem.d.ts +1 -2
  75. package/dist/menu/components/menuItem.js +20 -74
  76. package/dist/menu/contexts/usePathContext.d.ts +2 -0
  77. package/dist/menu/contexts/usePathContext.js +9 -0
  78. package/dist/menu/controlledMenu.js +8 -175
  79. package/dist/menu/utils/buildMenuContent.d.ts +2 -0
  80. package/dist/menu/utils/buildMenuContent.js +38 -0
  81. package/dist/menu/utils/findContent.d.ts +2 -2
  82. package/dist/menu/utils/findContent.js +4 -3
  83. package/dist/menu/utils/getItemLabel.d.ts +2 -0
  84. package/dist/menu/utils/getItemLabel.js +8 -0
  85. package/dist/menu/utils/getSafeRel.d.ts +1 -0
  86. package/dist/menu/utils/getSafeRel.js +14 -0
  87. package/dist/menu/utils/isMenuItem.d.ts +2 -0
  88. package/dist/menu/utils/isMenuItem.js +13 -0
  89. package/dist/menu/utils/isSafeHref.d.ts +1 -0
  90. package/dist/menu/utils/isSafeHref.js +10 -0
  91. package/dist/menu/utils/normalizeSeparators.d.ts +2 -0
  92. package/dist/menu/utils/normalizeSeparators.js +23 -0
  93. package/dist/menu/utils/resolveKeys.d.ts +12 -0
  94. package/dist/menu/utils/resolveKeys.js +22 -0
  95. package/dist/menu/utils/useLastValidSheet.d.ts +7 -0
  96. package/dist/menu/utils/useLastValidSheet.js +30 -0
  97. package/dist/menu/utils/useMenuItemCore.d.ts +31 -0
  98. package/dist/menu/utils/useMenuItemCore.js +54 -0
  99. package/dist/menu/utils/useMenuItemKeyboardNav.d.ts +2 -0
  100. package/dist/menu/utils/useMenuItemKeyboardNav.js +15 -0
  101. package/dist/menu/utils/useMenuListKeyboardNav.d.ts +12 -0
  102. package/dist/menu/utils/useMenuListKeyboardNav.js +77 -0
  103. package/dist/menu/utils/useMenuPath.d.ts +6 -0
  104. package/dist/menu/utils/useMenuPath.js +35 -0
  105. package/dist/nav/navItem/navItem.js +10 -5
  106. package/dist/nav/navSection/navSection.js +7 -5
  107. package/dist/pagination/paginationArrow.js +10 -3
  108. package/dist/radioGroupRaw/radioGroupRaw.js +2 -1
  109. package/dist/rangeRaw/rangeRaw.js +0 -1
  110. package/dist/selectList/selectList.helpers.d.ts +1 -1
  111. package/dist/selectList/selectList.helpers.js +29 -4
  112. package/dist/selectList/selectList.js +3 -1
  113. package/dist/selectList/selectList.reducer.js +1 -2
  114. package/dist/selectList/selectListItem.js +4 -1
  115. package/dist/sortControl/sortControl.js +59 -4
  116. package/dist/table/children/useTableChildren.d.ts +1 -1
  117. package/dist/table/children/useTableChildren.js +3 -3
  118. package/dist/table/flexible/columnsList.js +4 -2
  119. package/dist/table/selectable/useSelectableRows.d.ts +8 -0
  120. package/dist/table/selectable/useSelectableRows.js +14 -6
  121. package/dist/table/table.js +1 -7
  122. package/dist/tabs/tabs.js +60 -58
  123. package/dist/tabs/tabsTestHelper.js +2 -2
  124. package/dist/timePickerRaw/timePickerRaw.js +1 -1
  125. package/dist/toggleButtonRaw/toggleButtonRaw.js +5 -2
  126. package/dist/utils/localization/translations/ar.json +3 -1
  127. package/dist/utils/localization/translations/cs.json +9 -5
  128. package/dist/utils/localization/translations/da-DK.json +9 -5
  129. package/dist/utils/localization/translations/de.json +9 -5
  130. package/dist/utils/localization/translations/en.json +5 -1
  131. package/dist/utils/localization/translations/es.json +9 -5
  132. package/dist/utils/localization/translations/fi-FI.json +9 -5
  133. package/dist/utils/localization/translations/fr-FR.json +9 -5
  134. package/dist/utils/localization/translations/fr.json +9 -5
  135. package/dist/utils/localization/translations/hu-HU.json +9 -5
  136. package/dist/utils/localization/translations/id.json +9 -5
  137. package/dist/utils/localization/translations/it.json +9 -5
  138. package/dist/utils/localization/translations/ja.json +9 -5
  139. package/dist/utils/localization/translations/ko-KR.json +9 -5
  140. package/dist/utils/localization/translations/ms.json +9 -5
  141. package/dist/utils/localization/translations/nb-NO.json +9 -5
  142. package/dist/utils/localization/translations/nl.json +9 -5
  143. package/dist/utils/localization/translations/pl.json +9 -5
  144. package/dist/utils/localization/translations/pt-BR.json +9 -5
  145. package/dist/utils/localization/translations/pt-PT.json +9 -5
  146. package/dist/utils/localization/translations/ro-RO.json +9 -5
  147. package/dist/utils/localization/translations/sk-SK.json +9 -5
  148. package/dist/utils/localization/translations/sv.json +9 -5
  149. package/dist/utils/localization/translations/th.json +9 -5
  150. package/dist/utils/localization/translations/tr.json +9 -5
  151. package/dist/utils/localization/translations/zh-Hans.json +9 -5
  152. package/dist/utils/localization/translations/zh-TW.json +9 -5
  153. package/dist/utils/localization/useDirectionalIcon.d.ts +3 -0
  154. package/dist/utils/localization/useDirectionalIcon.js +9 -0
  155. package/dist/utils/positioningUtils/alignments.d.ts +2 -2
  156. package/dist/utils/positioningUtils/alignments.js +2 -2
  157. package/dist/utils/positioningUtils/calculatePosition.js +4 -6
  158. package/esm/calendar/calendar.js +7 -4
  159. package/esm/card/components/title.js +4 -1
  160. package/esm/card/components/titleLink.js +5 -2
  161. package/esm/chart/barChart/getDefaultOptions.d.ts +2 -1
  162. package/esm/chart/barChart/getDefaultOptions.js +5 -2
  163. package/esm/chart/barChart.js +6 -4
  164. package/esm/chart/lineChart/getDefaultOptions.d.ts +2 -1
  165. package/esm/chart/lineChart/getDefaultOptions.js +5 -2
  166. package/esm/chart/lineChart.js +4 -2
  167. package/esm/checkboxListWithAction/checkboxListWithAction.js +4 -1
  168. package/esm/commonHelpers/arrowNavigation/components/arrowButton/arrowButton.js +4 -1
  169. package/esm/controlledPopup/controlledPopup.d.ts +1 -0
  170. package/esm/controlledPopup/controlledPopup.js +3 -1
  171. package/esm/dataGrid/cell/cell.d.ts +2 -1
  172. package/esm/dataGrid/cell/cell.js +2 -2
  173. package/esm/dataGrid/dataGrid.js +7 -4
  174. package/esm/dataGrid/listColumn.d.ts +2 -0
  175. package/esm/dataGrid/row/row.d.ts +2 -1
  176. package/esm/dataGrid/row/row.js +13 -9
  177. package/esm/dataGrid/withFlexibleColumns/components/columnSettingsList.js +2 -1
  178. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +4 -0
  179. package/esm/dateRangeInner/dateRangeInner.js +5 -2
  180. package/esm/dateRangeRaw/dateRangeRaw.js +5 -2
  181. package/esm/dateRangeRaw/utils/parseLabel.js +1 -1
  182. package/esm/dropdownRaw/dropdownRaw.js +12 -6
  183. package/esm/fileUpload/components/dropZoneContent.js +100 -100
  184. package/esm/fileUpload/fileUpload.js +100 -100
  185. package/esm/filters/components/filtersSearchList.js +4 -1
  186. package/esm/filtersBar/filtersContainer/filtersContainer.js +62 -61
  187. package/esm/formStepperButtons/formStepperButtons.js +4 -1
  188. package/esm/groupsFilterRaw/groupsFilterAdjustmentState.js +4 -1
  189. package/esm/groupsFilterRaw/groupsFilterInitialState.js +4 -1
  190. package/esm/header/headerBack.js +4 -1
  191. package/esm/icons/iconAlignLeft.js +1 -3
  192. package/esm/icons/iconAlignmentLeft.js +1 -3
  193. package/esm/icons/iconAlignmentRight.js +1 -3
  194. package/esm/icons/iconArrowBottomLeft.js +1 -3
  195. package/esm/icons/iconArrowBottomRight.js +1 -3
  196. package/esm/icons/iconArrowLeftPath.js +1 -3
  197. package/esm/icons/iconArrowRight.js +1 -3
  198. package/esm/icons/iconArrowRightCircle.js +1 -3
  199. package/esm/icons/iconArrowRightPath.js +1 -3
  200. package/esm/icons/iconArrowTopLeft.js +1 -3
  201. package/esm/icons/iconArrowTopRight.js +1 -3
  202. package/esm/icons/iconChevronDoubleRight.js +1 -3
  203. package/esm/icons/iconChevronRight.js +1 -3
  204. package/esm/icons/iconChevronRightSmall.js +1 -3
  205. package/esm/icons/iconCornerDownLeft.js +1 -3
  206. package/esm/icons/iconCornerDownRight.js +1 -3
  207. package/esm/icons/iconCornerLeftDown.js +1 -3
  208. package/esm/icons/iconCornerLeftUp.js +1 -3
  209. package/esm/icons/iconCornerRightDown.js +1 -3
  210. package/esm/icons/iconCornerRightUp.js +1 -3
  211. package/esm/icons/iconCornerUpLeft.js +1 -3
  212. package/esm/icons/iconCornerUpRight.js +1 -3
  213. package/esm/index.d.ts +1 -0
  214. package/esm/index.js +1 -0
  215. package/esm/lineChartMini/lineChartMini.js +15 -3
  216. package/esm/list/itemData/itemDataInternal.js +4 -1
  217. package/esm/list/listItem/listItem.js +4 -1
  218. package/esm/menu/components/controlledMenuList/controlledMenuList.d.ts +27 -0
  219. package/esm/menu/components/controlledMenuList/controlledMenuList.js +123 -0
  220. package/esm/menu/components/createControlledMenuList.d.ts +37 -0
  221. package/esm/menu/components/createControlledMenuList.js +51 -0
  222. package/esm/menu/components/createMenuItem.d.ts +67 -0
  223. package/esm/menu/components/createMenuItem.js +93 -0
  224. package/esm/menu/components/menuButton.js +12 -3
  225. package/esm/menu/components/menuItem.d.ts +1 -2
  226. package/esm/menu/components/menuItem.js +20 -74
  227. package/esm/menu/contexts/usePathContext.d.ts +2 -0
  228. package/esm/menu/contexts/usePathContext.js +5 -0
  229. package/esm/menu/controlledMenu.js +10 -177
  230. package/esm/menu/utils/buildMenuContent.d.ts +2 -0
  231. package/esm/menu/utils/buildMenuContent.js +34 -0
  232. package/esm/menu/utils/findContent.d.ts +2 -2
  233. package/esm/menu/utils/findContent.js +4 -3
  234. package/esm/menu/utils/getItemLabel.d.ts +2 -0
  235. package/esm/menu/utils/getItemLabel.js +4 -0
  236. package/esm/menu/utils/getSafeRel.d.ts +1 -0
  237. package/esm/menu/utils/getSafeRel.js +10 -0
  238. package/esm/menu/utils/isMenuItem.d.ts +2 -0
  239. package/esm/menu/utils/isMenuItem.js +9 -0
  240. package/esm/menu/utils/isSafeHref.d.ts +1 -0
  241. package/esm/menu/utils/isSafeHref.js +6 -0
  242. package/esm/menu/utils/normalizeSeparators.d.ts +2 -0
  243. package/esm/menu/utils/normalizeSeparators.js +19 -0
  244. package/esm/menu/utils/resolveKeys.d.ts +12 -0
  245. package/esm/menu/utils/resolveKeys.js +18 -0
  246. package/esm/menu/utils/useLastValidSheet.d.ts +7 -0
  247. package/esm/menu/utils/useLastValidSheet.js +26 -0
  248. package/esm/menu/utils/useMenuItemCore.d.ts +31 -0
  249. package/esm/menu/utils/useMenuItemCore.js +50 -0
  250. package/esm/menu/utils/useMenuItemKeyboardNav.d.ts +2 -0
  251. package/esm/menu/utils/useMenuItemKeyboardNav.js +11 -0
  252. package/esm/menu/utils/useMenuListKeyboardNav.d.ts +12 -0
  253. package/esm/menu/utils/useMenuListKeyboardNav.js +73 -0
  254. package/esm/menu/utils/useMenuPath.d.ts +6 -0
  255. package/esm/menu/utils/useMenuPath.js +31 -0
  256. package/esm/nav/navItem/navItem.js +10 -5
  257. package/esm/nav/navSection/navSection.js +7 -5
  258. package/esm/pagination/paginationArrow.js +10 -3
  259. package/esm/radioGroupRaw/radioGroupRaw.js +2 -1
  260. package/esm/rangeRaw/rangeRaw.js +0 -1
  261. package/esm/selectList/selectList.helpers.d.ts +1 -1
  262. package/esm/selectList/selectList.helpers.js +29 -4
  263. package/esm/selectList/selectList.js +3 -1
  264. package/esm/selectList/selectList.reducer.js +1 -2
  265. package/esm/selectList/selectListItem.js +4 -1
  266. package/esm/sortControl/sortControl.js +59 -4
  267. package/esm/table/children/useTableChildren.d.ts +1 -1
  268. package/esm/table/children/useTableChildren.js +3 -3
  269. package/esm/table/flexible/columnsList.js +4 -2
  270. package/esm/table/selectable/useSelectableRows.d.ts +8 -0
  271. package/esm/table/selectable/useSelectableRows.js +14 -6
  272. package/esm/table/table.js +1 -7
  273. package/esm/tabs/tabs.js +60 -58
  274. package/esm/tabs/tabsTestHelper.js +2 -2
  275. package/esm/testHelpers/mockAbsoluteAlignment.d.ts +1 -0
  276. package/esm/testHelpers/mockAbsoluteAlignment.js +10 -0
  277. package/esm/timePickerRaw/timePickerRaw.js +1 -1
  278. package/esm/toggleButtonRaw/toggleButtonRaw.js +5 -2
  279. package/esm/utils/localization/translations/ar.json +3 -1
  280. package/esm/utils/localization/translations/cs.json +9 -5
  281. package/esm/utils/localization/translations/da-DK.json +9 -5
  282. package/esm/utils/localization/translations/de.json +9 -5
  283. package/esm/utils/localization/translations/en.json +5 -1
  284. package/esm/utils/localization/translations/es.json +9 -5
  285. package/esm/utils/localization/translations/fi-FI.json +9 -5
  286. package/esm/utils/localization/translations/fr-FR.json +9 -5
  287. package/esm/utils/localization/translations/fr.json +9 -5
  288. package/esm/utils/localization/translations/hu-HU.json +9 -5
  289. package/esm/utils/localization/translations/id.json +9 -5
  290. package/esm/utils/localization/translations/it.json +9 -5
  291. package/esm/utils/localization/translations/ja.json +9 -5
  292. package/esm/utils/localization/translations/ko-KR.json +9 -5
  293. package/esm/utils/localization/translations/ms.json +9 -5
  294. package/esm/utils/localization/translations/nb-NO.json +9 -5
  295. package/esm/utils/localization/translations/nl.json +9 -5
  296. package/esm/utils/localization/translations/pl.json +9 -5
  297. package/esm/utils/localization/translations/pt-BR.json +9 -5
  298. package/esm/utils/localization/translations/pt-PT.json +9 -5
  299. package/esm/utils/localization/translations/ro-RO.json +9 -5
  300. package/esm/utils/localization/translations/sk-SK.json +9 -5
  301. package/esm/utils/localization/translations/sv.json +9 -5
  302. package/esm/utils/localization/translations/th.json +9 -5
  303. package/esm/utils/localization/translations/tr.json +9 -5
  304. package/esm/utils/localization/translations/zh-Hans.json +9 -5
  305. package/esm/utils/localization/translations/zh-TW.json +9 -5
  306. package/esm/utils/localization/useDirectionalIcon.d.ts +3 -0
  307. package/esm/utils/localization/useDirectionalIcon.js +5 -0
  308. package/esm/utils/positioningUtils/alignments.d.ts +2 -2
  309. package/esm/utils/positioningUtils/alignments.js +2 -2
  310. package/esm/utils/positioningUtils/calculatePosition.js +4 -6
  311. package/package.json +123 -122
@@ -44,9 +44,11 @@ const getFormatFromDateRange = (minDate, maxDate, ticks) => {
44
44
  }
45
45
  return { unit: "millisecond", format: "HH:mm:ss.l" };
46
46
  };
47
- export const getDefaultOptions = (yAxis, xAxis, isTimedData, ticks, isDark, translate) => {
47
+ export const getDefaultOptions = (yAxis, xAxis, isTimedData, ticks, isDark, translate, isRtl = false) => {
48
48
  const time = getFormatFromDateRange(xAxis.minDate, xAxis.maxDate, ticks);
49
49
  const textColor = isDark ? "#C0CCD8" : "#4E677E";
50
+ const primaryYPosition = isRtl ? "right" : "left";
51
+ const secondaryYPosition = isRtl ? "left" : "right";
50
52
  const scales = {
51
53
  x: {
52
54
  title: {
@@ -55,6 +57,7 @@ export const getDefaultOptions = (yAxis, xAxis, isTimedData, ticks, isDark, tran
55
57
  grid: {
56
58
  display: false
57
59
  },
60
+ reverse: isRtl,
58
61
  type: isTimedData ? "time" : "linear",
59
62
  time: isTimedData
60
63
  ? {
@@ -101,7 +104,7 @@ export const getDefaultOptions = (yAxis, xAxis, isTimedData, ticks, isDark, tran
101
104
  border: defaultGridBorderStyle,
102
105
  min: yAxis[i].min,
103
106
  max: yAxis[i].max,
104
- position: i === 0 ? "left" : "right"
107
+ position: i === 0 ? primaryYPosition : secondaryYPosition
105
108
  };
106
109
  }
107
110
  return {
@@ -31,6 +31,7 @@ import { getDefaultOptions } from "./lineChart/getDefaultOptions";
31
31
  import { useHidden } from "./utils/useHidden";
32
32
  import { LinePlugin } from "./plugins/linePlugin/linePlugin";
33
33
  import { useLanguage } from "../utils/localization/useLanguage";
34
+ import { useIsRTL } from "../utils/localization/useIsRTL";
34
35
  import { useChartTicks } from "./lineChart/useChartTicks";
35
36
  import { ChartInsight } from "./chartInsight/chartInsight";
36
37
  import { getXAxisMeta } from "./utils/getXAxisMeta";
@@ -43,6 +44,7 @@ export const LineChart = (_a) => {
43
44
  const { translate } = useLanguage();
44
45
  const isDrive = useDrive();
45
46
  const isMobile = useMobile();
47
+ const isRtl = useIsRTL();
46
48
  const fontSize = useMemo(() => (isDrive ? (isMobile ? 14 : 16) : 12), [isDrive, isMobile]);
47
49
  const { dark } = useContext(themeContext);
48
50
  useEffect(() => {
@@ -73,7 +75,7 @@ export const LineChart = (_a) => {
73
75
  const yAxisMeta = useMemo(() => getYAxisMeta(chartData), [chartData]);
74
76
  const xAxisMeta = useMemo(() => getXAxisMeta(chartData, isTimedData), [chartData, isTimedData]);
75
77
  const { chartRef, ticks } = useChartTicks();
76
- const defOptions = useMemo(() => getDefaultOptions(yAxisMeta, xAxisMeta, isTimedData, ticks, dark, translate), [yAxisMeta, xAxisMeta, isTimedData, ticks, dark, translate]);
78
+ const defOptions = useMemo(() => getDefaultOptions(yAxisMeta, xAxisMeta, isTimedData, ticks, dark, translate, isRtl), [yAxisMeta, xAxisMeta, isTimedData, ticks, dark, translate, isRtl]);
77
79
  const chartOptions = deepMerge(defOptions, options);
78
80
  const chartTooltip = useMemo(() => LinePlugin(tooltipId, tooltip, dark), [tooltip, tooltipId, dark]);
79
81
  const chartLegend = useMemo(() => legendPlugin(legendId, legend, isDrive, isHidden, toggleHidden), [isDrive, legend, legendId, isHidden, toggleHidden]);
@@ -82,5 +84,5 @@ export const LineChart = (_a) => {
82
84
  const intSummary = useSummary(summary, chartData);
83
85
  const isMainHidden = useMemo(() => isHidden(0), [isHidden]);
84
86
  const toggleMainDataset = useCallback(() => toggleHidden(0), [toggleHidden]);
85
- return (_jsxs("div", { className: classNames(["zen-chart", className || ""]), ref: chartRef, children: [insight ? _jsx(ChartInsight, Object.assign({}, insight)) : null, summary !== false ? _jsx(Summary, Object.assign({}, intSummary, { onToggle: toggleMainDataset, isEnabled: isMainHidden })) : null, (isDrive ? undefined : xLabels) || yLabels.length > 0 ? _jsx(ChartAxis, { xLabel: isDrive ? undefined : xLabels, yLabels: yLabels }) : null, _jsx("div", { className: "zen-chart__chart", children: _jsx(Line, Object.assign({ width: 100, height: 100, options: chartOptions, data: chartData, plugins: chartPlugins, "aria-hidden": true }, rest)) }), _jsx("div", { className: "zen-chart__legend", id: legendId }), isDrive && xLabels ? _jsx("div", { className: "zen-chart__x-axis", children: xLabels }) : null, _jsx(AccessibleChart, { type: "line", data: chartData, options: chartOptions })] }));
87
+ return (_jsxs("div", { className: classNames(["zen-chart", className || ""]), ref: chartRef, children: [insight ? _jsx(ChartInsight, Object.assign({}, insight)) : null, summary !== false ? _jsx(Summary, Object.assign({}, intSummary, { onToggle: toggleMainDataset, isEnabled: isMainHidden })) : null, (isDrive ? undefined : xLabels) || yLabels.length > 0 ? (_jsx(ChartAxis, { xLabel: isDrive ? undefined : xLabels, yLabels: yLabels, yAxisPosition: isRtl ? "left" : "right" })) : null, _jsx("div", { className: "zen-chart__chart", children: _jsx(Line, Object.assign({ width: 100, height: 100, options: chartOptions, data: chartData, plugins: chartPlugins, "aria-hidden": true }, rest)) }), _jsx("div", { className: "zen-chart__legend", id: legendId }), isDrive && xLabels ? _jsx("div", { className: "zen-chart__x-axis", children: xLabels }) : null, _jsx(AccessibleChart, { type: "line", data: chartData, options: chartOptions })] }));
86
88
  };
@@ -4,6 +4,8 @@ import { Fragment, useCallback, useEffect, useId, useRef, useState } from "react
4
4
  import { Checkbox } from "../checkbox/checkbox";
5
5
  import { classNames } from "../commonHelpers/classNames/classNames";
6
6
  import { IconChevronRight } from "../icons/iconChevronRight";
7
+ import { IconChevronLeft } from "../icons/iconChevronLeft";
8
+ import { useDirectionalIcon } from "../utils/localization/useDirectionalIcon";
7
9
  import { useLanguage } from "../utils/localization/useLanguage";
8
10
  import { useDriveClassName } from "../utils/theme/useDriveClassName";
9
11
  injectString("cs", "Number of selected child groups - {count}", "Po\u010Det vybran\xFDch pod\u0159\xEDzen\xFDch skupin\xA0\u2013 {count}");
@@ -127,6 +129,7 @@ export const CheckboxListWithAction = ({
127
129
  translate
128
130
  } = useLanguage();
129
131
  const driveComponentClass = useDriveClassName("zen-checkbox-list-with-action");
132
+ const ChevronIcon = useDirectionalIcon(IconChevronRight, IconChevronLeft);
130
133
  const listId = useId();
131
134
  const checkboxId = `${listId}_check_list-item_`;
132
135
  const navigationInstructionsId = `${listId}_navigation_instructions`;
@@ -361,7 +364,7 @@ export const CheckboxListWithAction = ({
361
364
  })), _jsxs("div", Object.assign({
362
365
  className: "zen-checkbox-list-with-action__label-info"
363
366
  }, otherArgs, {
364
- children: [getLabelColorInfo(option.color, option.isWithAction, option.partialChecked, otherArgs), option.isWithAction && _jsx(IconChevronRight, {
367
+ children: [getLabelColorInfo(option.color, option.isWithAction, option.partialChecked, otherArgs), option.isWithAction && _jsx(ChevronIcon, {
365
368
  size: "large"
366
369
  })]
367
370
  }))]
@@ -4,9 +4,12 @@ import { Button } from "../../../../button/button";
4
4
  import { IconChevronLeft } from "../../../../icons/iconChevronLeft";
5
5
  import { IconChevronRight } from "../../../../icons/iconChevronRight";
6
6
  import { useDrive } from "../../../../utils/theme/useDrive";
7
+ import { useDirectionalIcon } from "../../../../utils/localization/useDirectionalIcon";
7
8
  import { driveIconSize } from "../../../../svgIcon/svgIconSize";
8
9
  export const ArrowNavButton = ({ value, isHidden, disabled, className, arrowButtonHandler, onMouseDown, onMouseUp }) => {
9
10
  const isDrive = useDrive();
10
11
  const iconSize = isDrive ? driveIconSize("large") : "large";
11
- return (_jsx(Button, { type: "tertiary-black", className: classNames(["zen-arrow-nav-button", isHidden ? "zen-arrow-nav-button--invisible" : "", className !== null && className !== void 0 ? className : ""]), "aria-label": value, disabled: disabled, onClick: arrowButtonHandler, "data-action": value, onMouseDown: onMouseDown, onMouseUp: onMouseUp, children: value === "left" ? (_jsx(IconChevronLeft, { size: iconSize, className: "zen-arrow-nav-button__icon" })) : (_jsx(IconChevronRight, { size: iconSize, className: "zen-arrow-nav-button__icon" })) }));
12
+ const LeftIcon = useDirectionalIcon(IconChevronLeft, IconChevronRight);
13
+ const RightIcon = useDirectionalIcon(IconChevronRight, IconChevronLeft);
14
+ return (_jsx(Button, { type: "tertiary-black", className: classNames(["zen-arrow-nav-button", isHidden ? "zen-arrow-nav-button--invisible" : "", className !== null && className !== void 0 ? className : ""]), "aria-label": value, disabled: disabled, onClick: arrowButtonHandler, "data-action": value, onMouseDown: onMouseDown, onMouseUp: onMouseUp, children: value === "left" ? (_jsx(LeftIcon, { size: iconSize, className: "zen-arrow-nav-button__icon" })) : (_jsx(RightIcon, { size: iconSize, className: "zen-arrow-nav-button__icon" })) }));
12
15
  };
@@ -9,6 +9,7 @@ import { TAlignment as TAlignmentAbsolute } from "../absolute/absolute";
9
9
  export type TAlignment = "top" | "top-left" | "top-right" | "left" | "left-top" | "left-bottom" | "right" | "right-top" | "right-bottom" | "bottom" | "bottom-left" | "bottom-right";
10
10
  export interface IControlledPopup extends IZenComponentProps {
11
11
  triggerRef: RefObject<HTMLElement | null>;
12
+ /** Alignment of the popup relative to its trigger. Defaults to `"bottom-left"` (flips to `"bottom-right"` in RTL). */
12
13
  alignment?: TAlignmentAbsolute;
13
14
  id?: string;
14
15
  className?: string;
@@ -3,10 +3,12 @@ import { useEffect, useId } from "react";
3
3
  import { Absolute } from "../absolute/absolute";
4
4
  import { classNames } from "../commonHelpers/classNames/classNames";
5
5
  import { useClientReady } from "../commonHelpers/hooks/useClientReady";
6
+ import { useRTLAlignment } from "../utils/localization/useRTLAlignment";
6
7
  export const ControlledPopup = ({ isOpen, id, paddingX, paddingY, triggerRef, className, children, alignment, inline, onOpenChange, useTrapFocusWithTrigger, shouldHoldScroll, ariaLabel, ariaLabelledby, recalculateOnScroll, closeOnScroll, preventAttributesAutoSet, focusOnOpen, role = "dialog" }) => {
7
8
  const autoId = useId();
8
9
  const popupId = id || autoId;
9
10
  const isClientReady = useClientReady();
11
+ const rtlAlignment = useRTLAlignment(alignment !== null && alignment !== void 0 ? alignment : "bottom-left");
10
12
  useEffect(() => {
11
13
  if (!triggerRef.current || !isClientReady) {
12
14
  return;
@@ -21,5 +23,5 @@ export const ControlledPopup = ({ isOpen, id, paddingX, paddingY, triggerRef, cl
21
23
  triggerRef.current.setAttribute("aria-expanded", isOpen ? "true" : "false");
22
24
  triggerRef.current.setAttribute("aria-controls", popupId);
23
25
  }, [triggerRef, isOpen, popupId, preventAttributesAutoSet, isClientReady]);
24
- return (_jsx(Absolute, Object.assign({ triggerRef: triggerRef, alignment: alignment, id: popupId, isOpen: isOpen, className: classNames(["zen-popup", className ? className : ""]), paddingX: paddingX, paddingY: paddingY, inline: inline, onOpenChange: onOpenChange, useTrapFocusWithTrigger: useTrapFocusWithTrigger, shouldHoldScroll: shouldHoldScroll }, (role !== false && typeof role === "string" ? { role } : {}), (role !== false && ariaLabel ? { ariaLabel } : {}), (role !== false && ariaLabelledby ? { ariaLabelledby } : {}), { recalculateOnScroll: recalculateOnScroll, closeOnScroll: closeOnScroll, focusOnOpen: focusOnOpen, children: children })));
26
+ return (_jsx(Absolute, Object.assign({ triggerRef: triggerRef, alignment: rtlAlignment, id: popupId, isOpen: isOpen, className: classNames(["zen-popup", className ? className : ""]), paddingX: paddingX, paddingY: paddingY, inline: inline, onOpenChange: onOpenChange, useTrapFocusWithTrigger: useTrapFocusWithTrigger, shouldHoldScroll: shouldHoldScroll }, (role !== false && typeof role === "string" ? { role } : {}), (role !== false && ariaLabel ? { ariaLabel } : {}), (role !== false && ariaLabelledby ? { ariaLabelledby } : {}), { recalculateOnScroll: recalculateOnScroll, closeOnScroll: closeOnScroll, focusOnOpen: focusOnOpen, children: children })));
25
27
  };
@@ -13,8 +13,9 @@ export interface IDataGridCell<T extends IEntityWithId> extends IZenComponentPro
13
13
  defaultValue: string | undefined;
14
14
  entity: T;
15
15
  width?: number;
16
+ maxWidth?: number;
16
17
  colspan?: number;
17
18
  onClick?: () => void;
18
19
  isActive?: boolean;
19
20
  }
20
- export declare const DataGridCell: <T extends IEntityWithId>({ index, limited, visibleOnHover, isVisible, width, render, renderWrappers, renderPlaceholder, defaultValue, entity, colspan, className, onClick, isActive }: IDataGridCell<T>) => import("react/jsx-runtime").JSX.Element;
21
+ export declare const DataGridCell: <T extends IEntityWithId>({ index, limited, visibleOnHover, isVisible, width, maxWidth, render, renderWrappers, renderPlaceholder, defaultValue, entity, colspan, className, onClick, isActive }: IDataGridCell<T>) => import("react/jsx-runtime").JSX.Element;
@@ -4,7 +4,7 @@ import { classNames } from "../../commonHelpers/classNames/classNames";
4
4
  import { isPromiseLike } from "../columns/basicColumn";
5
5
  import { isActiveElement } from "../../list/utils/isActiveElement";
6
6
  import { zen } from "../../utils/zen";
7
- const Cell = ({ index, limited, visibleOnHover, isVisible, width, render, renderWrappers, renderPlaceholder, defaultValue, entity, colspan, className, onClick, isActive }) => {
7
+ const Cell = ({ index, limited, visibleOnHover, isVisible, width, maxWidth, render, renderWrappers, renderPlaceholder, defaultValue, entity, colspan, className, onClick, isActive }) => {
8
8
  const [content, setContent] = useState("");
9
9
  const placeholderRenderer = useCallback(() => {
10
10
  const renderFn = renderPlaceholder || (() => "...");
@@ -69,6 +69,6 @@ const Cell = ({ index, limited, visibleOnHover, isVisible, width, render, render
69
69
  visibleOnHover ? "zen-data-grid__row-cell--visible-on-hover" : "",
70
70
  onClick ? "zen-data-grid__row-cell--clickable" : "",
71
71
  limited ? "zen-ellipsis" : ""
72
- ]), style: { minWidth: width || "auto", maxWidth: width || "auto" }, role: "gridcell", children: content }));
72
+ ]), style: { minWidth: width || "auto", maxWidth: maxWidth ? `${Math.max(width !== null && width !== void 0 ? width : 0, maxWidth)}px` : width || "auto" }, role: "gridcell", children: content }));
73
73
  };
74
74
  export const DataGridCell = memo(Cell);
@@ -49,7 +49,7 @@ const getHeaderPropsFromWrappers = wrappers => wrappers.reduce((result, wrapper)
49
49
  const props = (_a = wrapper.getHeaderProps) === null || _a === void 0 ? void 0 : _a.call(wrapper);
50
50
  return props ? Object.assign(Object.assign({}, result), props) : result;
51
51
  }, {});
52
- const getColumnWidth = defaultWidth => Math.floor(Math.max(defaultWidth, MIN_CELL_WIDTH));
52
+ const getColumnWidth = (defaultWidth, minWidth) => Math.floor(Math.max(defaultWidth, minWidth !== null && minWidth !== void 0 ? minWidth : MIN_CELL_WIDTH));
53
53
  export const EmptyList = ({
54
54
  children
55
55
  }) => _jsx("div", {
@@ -144,12 +144,13 @@ const DataGridInner = ({
144
144
  setVisibleRows(visible);
145
145
  }, [entities]);
146
146
  const listOfDefaultWidthColumns = useMemo(() => columnsList.map(column => column.meta.defaultWidth), [columnsList]);
147
+ const listOfMinWidthColumns = useMemo(() => columnsList.map(column => column.meta.minWidth), [columnsList]);
147
148
  const {
148
149
  result: observerResult
149
150
  } = useResizeObserver({
150
151
  target: gridRef.current
151
152
  });
152
- const allocatedSpace = listOfDefaultWidthColumns.reduce((acc, width) => acc + (width === undefined ? 0 : getColumnWidth(width)), 0);
153
+ const allocatedSpace = listOfDefaultWidthColumns.reduce((acc, width, index) => acc + (width === undefined ? 0 : getColumnWidth(width, listOfMinWidthColumns[index])), 0);
153
154
  const unallocatedSpace = observerResult && observerResult.contentRect.width - allocatedSpace || 0;
154
155
  const flexibleColumnsQty = listOfDefaultWidthColumns.filter(width => width === undefined).length;
155
156
  const flexibleColumnWidth = getColumnWidth(unallocatedSpace / flexibleColumnsQty);
@@ -172,18 +173,19 @@ const DataGridInner = ({
172
173
  }, [updateScroll, scheduleLazyRender]);
173
174
  const getCellParams = useCallback(columnIndex => {
174
175
  const defaultWidth = listOfDefaultWidthColumns[columnIndex];
176
+ const minWidth = listOfMinWidthColumns[columnIndex];
175
177
  const limited = !!defaultWidth && defaultWidth > 0;
176
178
  const isFirst = columnIndex === 0;
177
179
  const isLast = columnIndex === listOfDefaultWidthColumns.length - 1;
178
180
  // If the column is the last one or doesn't have a default width, it should be limited to the remaining space
179
- const width = getColumnWidth(defaultWidth || flexibleColumnWidth);
181
+ const width = getColumnWidth(defaultWidth || flexibleColumnWidth, minWidth);
180
182
  return {
181
183
  limited,
182
184
  isFirst,
183
185
  isLast,
184
186
  width
185
187
  };
186
- }, [listOfDefaultWidthColumns, flexibleColumnWidth]);
188
+ }, [listOfDefaultWidthColumns, listOfMinWidthColumns, flexibleColumnWidth]);
187
189
  const renderHeaderCell = useCallback((column, columnIndex) => {
188
190
  var _a;
189
191
  const {
@@ -222,6 +224,7 @@ const DataGridInner = ({
222
224
  expanded: expandedRows && expandedRows.indexOf(entity.id) > -1,
223
225
  onExpandedChange: entity.children && entity.children.length > 0 ? isExpanded => onExpandedChange && onExpandedChange(entity.id, isExpanded) : undefined,
224
226
  isActive: active === entity.id,
227
+ active: active,
225
228
  onClick: onClick,
226
229
  isTreeGrid: isTreeGrid,
227
230
  ariaPosinset: entityIndex + 1,
@@ -2,6 +2,8 @@ import { ReactNode } from "react";
2
2
  import { ColumnSortDirection } from "../table/table";
3
3
  export interface IListColumnMeta<T, N = T> {
4
4
  readonly defaultWidth?: number;
5
+ readonly minWidth?: number;
6
+ readonly maxWidth?: number;
5
7
  readonly defaultValue?: string;
6
8
  readonly lazyLoad?: boolean;
7
9
  readonly visibleOnHover?: boolean;
@@ -16,7 +16,8 @@ export interface IDataGridRow<T extends IRowEntity<N>, N extends IEntityWithId>
16
16
  ariaPosinset: number;
17
17
  ariaSetsize: number;
18
18
  isActive?: boolean;
19
+ active?: string;
19
20
  onClick?: (id: string) => void;
20
21
  }
21
22
  export declare const MIN_CELL_WIDTH = 100;
22
- export declare const DataGridRow: <T extends IRowEntity<N>, N extends IEntityWithId = T>({ id, entity, columns, visibleRows, flexibleColumnWidth, isLastRow, className, expanded, onExpandedChange, isTreeGrid, ariaPosinset, ariaSetsize, onClick, isActive }: IDataGridRow<T, N>) => import("react/jsx-runtime").JSX.Element;
23
+ export declare const DataGridRow: <T extends IRowEntity<N>, N extends IEntityWithId = T>({ id, entity, columns, visibleRows, flexibleColumnWidth, isLastRow, className, expanded, onExpandedChange, isTreeGrid, ariaPosinset, ariaSetsize, onClick, isActive, active }: IDataGridRow<T, N>) => import("react/jsx-runtime").JSX.Element;
@@ -3,10 +3,12 @@ import { memo, useCallback, useId, useMemo } from "react";
3
3
  import { classNames } from "../../commonHelpers/classNames/classNames";
4
4
  import { DataGridCell } from "../cell/cell";
5
5
  export const MIN_CELL_WIDTH = 100;
6
- const getColumnWidth = (defaultWidth) => Math.floor(Math.max(defaultWidth, MIN_CELL_WIDTH));
7
- const Row = ({ id, entity, columns, visibleRows, flexibleColumnWidth, isLastRow, className, expanded, onExpandedChange, isTreeGrid, ariaPosinset, ariaSetsize, onClick, isActive }) => {
6
+ const getColumnWidth = (defaultWidth, minWidth) => Math.floor(Math.max(defaultWidth, minWidth !== null && minWidth !== void 0 ? minWidth : MIN_CELL_WIDTH));
7
+ const Row = ({ id, entity, columns, visibleRows, flexibleColumnWidth, isLastRow, className, expanded, onExpandedChange, isTreeGrid, ariaPosinset, ariaSetsize, onClick, isActive, active }) => {
8
8
  const isVisible = visibleRows.has(entity.id);
9
9
  const listOfDefaultWidthColumns = useMemo(() => columns.map(column => column.meta.defaultWidth), [columns]);
10
+ const listOfMinWidthColumns = useMemo(() => columns.map(column => column.meta.minWidth), [columns]);
11
+ const listOfMaxWidthColumns = useMemo(() => columns.map(column => column.meta.maxWidth), [columns]);
10
12
  const getColWidth = useCallback((columnIndex, colspan) => {
11
13
  const colsp = colspan || 1;
12
14
  let columnWidth = 0;
@@ -15,26 +17,28 @@ const Row = ({ id, entity, columns, visibleRows, flexibleColumnWidth, isLastRow,
15
17
  continue;
16
18
  }
17
19
  const defaultWidth = listOfDefaultWidthColumns[columnIndex + i];
20
+ const minWidth = listOfMinWidthColumns[columnIndex + i];
18
21
  // If the column is the last one or doesn't have a default width, it should be limited to the remaining space
19
- const width = getColumnWidth(defaultWidth || flexibleColumnWidth);
22
+ const width = getColumnWidth(defaultWidth || flexibleColumnWidth, minWidth);
20
23
  columnWidth += width;
21
24
  }
22
25
  return columnWidth;
23
- }, [flexibleColumnWidth, listOfDefaultWidthColumns]);
26
+ }, [flexibleColumnWidth, listOfDefaultWidthColumns, listOfMinWidthColumns]);
24
27
  const getCellParams = useCallback((columnIndex, colspan) => {
25
28
  const width = getColWidth(columnIndex, colspan);
26
29
  const defaultWidth = listOfDefaultWidthColumns[columnIndex];
30
+ const maxWidth = listOfMaxWidthColumns[columnIndex];
27
31
  const limited = !!defaultWidth && defaultWidth > 0;
28
32
  const isFirst = columnIndex === 0;
29
33
  const isLast = columnIndex === listOfDefaultWidthColumns.length - 1;
30
- return { limited, isFirst, isLast, width };
31
- }, [getColWidth, listOfDefaultWidthColumns]);
34
+ return { limited, isFirst, isLast, width, maxWidth };
35
+ }, [getColWidth, listOfDefaultWidthColumns, listOfMaxWidthColumns]);
32
36
  const mainRowId = useId();
33
37
  const renderCells = useCallback((rowEntity, isNested) => columns.reduce((acc, column, index) => {
34
38
  const colspanFn = column.colspan;
35
39
  let colspan = colspanFn ? (typeof colspanFn === "function" ? colspanFn(rowEntity) : colspanFn) : undefined;
36
40
  colspan = colspan && colspan > 1 ? colspan : undefined;
37
- const { limited, width } = getCellParams(index, colspan);
41
+ const { limited, width, maxWidth } = getCellParams(index, colspan);
38
42
  if (acc.colspan > 0) {
39
43
  acc.colspan--;
40
44
  return acc;
@@ -49,9 +53,9 @@ const Row = ({ id, entity, columns, visibleRows, flexibleColumnWidth, isLastRow,
49
53
  ? column.columnComponent.renderNested.bind(column.columnComponent)
50
54
  : column.columnComponent.render.bind(column.columnComponent))
51
55
  : column.columnComponent.render.bind(column.columnComponent);
52
- acc.cells.push(_jsx(DataGridCell, { render: e => renderFn(e, isNested), renderPlaceholder: column.meta.renderPlaceholder, renderWrappers: renderWrappers, defaultValue: column.meta.defaultValue, entity: rowEntity, index: index, limited: limited, visibleOnHover: column.meta.visibleOnHover, width: column.meta.visibleOnHover ? 0 : width, isVisible: isVisible, colspan: colspan, onClick: !isNested && onExpandedChange ? () => onExpandedChange(!expanded) : onClick ? () => onClick(rowEntity.id) : undefined, isActive: isActive, className: isNested ? "zen-data-grid__row-cell--nested" : "" }, `${rowEntity.id}_${column.name}`));
56
+ acc.cells.push(_jsx(DataGridCell, { render: e => renderFn(e, isNested), renderPlaceholder: column.meta.renderPlaceholder, renderWrappers: renderWrappers, defaultValue: column.meta.defaultValue, entity: rowEntity, index: index, limited: limited, visibleOnHover: column.meta.visibleOnHover, width: column.meta.visibleOnHover ? 0 : width, maxWidth: column.meta.visibleOnHover ? undefined : maxWidth, isVisible: isVisible, colspan: colspan, onClick: !isNested && onExpandedChange ? () => onExpandedChange(!expanded) : onClick ? () => onClick(rowEntity.id) : undefined, isActive: isNested ? active === rowEntity.id : isActive || active === rowEntity.id, className: isNested ? "zen-data-grid__row-cell--nested" : "" }, `${rowEntity.id}_${column.name}`));
53
57
  return acc;
54
- }, { cells: [], colspan: 0 }).cells, [columns, expanded, getCellParams, isVisible, onExpandedChange, isActive, onClick]);
58
+ }, { cells: [], colspan: 0 }).cells, [columns, expanded, getCellParams, isVisible, onExpandedChange, isActive, active, onClick]);
55
59
  const cells = useMemo(() => renderCells(entity, false), [entity, renderCells]);
56
60
  const nestedCells = useMemo(() => (expanded && entity.children ? entity.children : []).map(nestedEntity => renderCells(nestedEntity, true)), [entity.children, expanded, renderCells]);
57
61
  return (_jsxs(_Fragment, { children: [_jsx("tr", { "data-row-id": id, id: mainRowId, role: "row", "aria-level": isTreeGrid ? 1 : undefined, "aria-posinset": isTreeGrid ? ariaPosinset : undefined, "aria-setsize": isTreeGrid ? ariaSetsize : undefined, "aria-expanded": isTreeGrid ? expanded : undefined, className: classNames(["zen-data-grid__row", className || "", isLastRow ? "zen-data-grid__row--last" : ""]), children: cells }, mainRowId), nestedCells.map((nestedRow, index) => (_jsx("tr", { id: `${mainRowId}_child_${index}`, role: "row", "aria-level": 2, "aria-posinset": index + 1, "aria-setsize": nestedCells.length, className: "zen-data-grid__row zen-data-grid__row--nested", children: nestedRow }, `${mainRowId}_child_${index}`)))] }));
@@ -18,6 +18,7 @@ const SubColumnsList = ({ title, columns, settings, disabledColumns, onChange, s
18
18
  showCheckbox: true,
19
19
  children: c.title
20
20
  })), [columns, disabledColumns, sortColumnsInt]);
21
+ const allDisabled = useMemo(() => items.every(item => item.disabled), [items]);
21
22
  const state = columns.reduce((res, c) => {
22
23
  res.set(c.id, settings.get(c.name) !== false ? CheckboxState.On : CheckboxState.Off);
23
24
  return res;
@@ -30,7 +31,7 @@ const SubColumnsList = ({ title, columns, settings, disabledColumns, onChange, s
30
31
  });
31
32
  onChange && onChange(newSettings);
32
33
  }, [columns, settings, onChange]);
33
- const list = useMemo(() => _jsx(SelectList, { id: id, items: items, value: state, title: title || "", multiselect: true, showCheckbox: true, onChange: onChangeItem }), [id, items, state, title, onChangeItem]);
34
+ const list = useMemo(() => (_jsx(SelectList, { id: id, items: items, value: state, title: title || "", multiselect: true, showCheckbox: true, onChange: onChangeItem, disabled: allDisabled })), [id, items, state, title, onChangeItem, allDisabled]);
34
35
  if (!title) {
35
36
  return list;
36
37
  }
@@ -7,6 +7,10 @@ import { DeviceType } from "../../../../commonHelpers/hooks/deviceType";
7
7
  type TBulkAction = IBulkActionLink | IBulkActionButton;
8
8
  export interface IBulkActionsProps extends IZenComponentProps {
9
9
  selected: number;
10
+ /**
11
+ * When `true`, displays "All selected" instead of a count, and enables action buttons
12
+ * even when `selected` is 0 (i.e., cross-page "select all" is active).
13
+ */
10
14
  allSelected?: boolean;
11
15
  onClearSelection: () => void;
12
16
  onSelectAll?: () => void;
@@ -6,6 +6,8 @@ import { useLanguage } from "../utils/localization/useLanguage";
6
6
  import { userFormatContext } from "../utils/userFormat/userFormatContext";
7
7
  import { deformatDate, formatDate } from "../utils/formatDate";
8
8
  import { IconChevronRight } from "../icons/iconChevronRight";
9
+ import { IconChevronLeft } from "../icons/iconChevronLeft";
10
+ import { useDirectionalIcon } from "../utils/localization/useDirectionalIcon";
9
11
  import { parseLabel } from "../dateRange/dateRange";
10
12
  import { normalizeDates } from "../filtersBar/components/filtersBarPeriodPicker/normalizeDates";
11
13
  import { classNames } from "../commonHelpers/classNames/classNames";
@@ -60,6 +62,7 @@ export const DateRangeInner = ({
60
62
  translate
61
63
  } = useLanguage();
62
64
  const isMobileView = !!setShowMobileCalendar;
65
+ const ChevronIcon = useDirectionalIcon(IconChevronRight, IconChevronLeft);
63
66
  const {
64
67
  dateFormat,
65
68
  weekStartsOnSunday,
@@ -98,7 +101,7 @@ export const DateRangeInner = ({
98
101
  }) : null]
99
102
  }), _jsx("div", {
100
103
  className: "zen-date-range-inner__mobile-custom-icon-wrapper",
101
- children: _jsx(IconChevronRight, {
104
+ children: _jsx(ChevronIcon, {
102
105
  size: "large"
103
106
  })
104
107
  })]
@@ -119,7 +122,7 @@ export const DateRangeInner = ({
119
122
  key: option.id
120
123
  }));
121
124
  return optionsToPass;
122
- }, [calendarLabel, isMobileView, onOptionSelect, options, selection, setShowMobileCalendar]);
125
+ }, [ChevronIcon, calendarLabel, isMobileView, onOptionSelect, options, selection, setShowMobileCalendar]);
123
126
  const calendarId = useMemo(() => `${id}-calendar`, [id]);
124
127
  const optionSelectHandler = useCallback(e => {
125
128
  let selectedValue = e.target.value;
@@ -21,6 +21,7 @@ import { areMapsEqual } from "./utils/areMapsEqual";
21
21
  import { IconChevronLeftSmall } from "../icons/iconChevronLeftSmall";
22
22
  import { useDrive } from "../utils/theme/useDrive";
23
23
  import { IconChevronRightSmall } from "../icons/iconChevronRightSmall";
24
+ import { useDirectionalIcon } from "../utils/localization/useDirectionalIcon";
24
25
  import { ReviewTextControl } from "../formGroup/components/reviewTextControl";
25
26
  import { Chip } from "../chip/chip";
26
27
  import { useChipStatus } from "../chip/chipStatusProvider";
@@ -290,6 +291,8 @@ export const DateRangeRaw = props => {
290
291
  } = useLanguage();
291
292
  const isMobile = useMobile();
292
293
  const isDrive = useDrive();
294
+ const PrevStepperIcon = useDirectionalIcon(IconChevronLeftSmall, IconChevronRightSmall);
295
+ const NextStepperIcon = useDirectionalIcon(IconChevronRightSmall, IconChevronLeftSmall);
293
296
  const chipStatus = useChipStatus();
294
297
  const driveWrapperTriggerClassName = useDriveClassName("zen-date-range-wrapper");
295
298
  const mobileWrapperTriggerClassName = useMobileClassName("zen-date-range-wrapper");
@@ -696,7 +699,7 @@ export const DateRangeRaw = props => {
696
699
  className: classNames(["zen-date-range__stepper", "zen-date-range__stepper--left"]),
697
700
  title: translate("Previous"),
698
701
  "aria-label": translate("Previous date period"),
699
- children: _jsx(IconChevronLeftSmall, {
702
+ children: _jsx(PrevStepperIcon, {
700
703
  size: isDrive || isMobile ? "huge" : "large"
701
704
  })
702
705
  }), popupTriggerComponent, _jsx("button", {
@@ -706,7 +709,7 @@ export const DateRangeRaw = props => {
706
709
  className: classNames(["zen-date-range__stepper", "zen-date-range__stepper--right"]),
707
710
  title: translate("Next"),
708
711
  "aria-label": translate("Next date period"),
709
- children: _jsx(IconChevronRightSmall, {
712
+ children: _jsx(NextStepperIcon, {
710
713
  size: isDrive || isMobile ? "huge" : "large"
711
714
  })
712
715
  })]
@@ -7,5 +7,5 @@ export const parseLabel = (option, dateFormat, translate, toLocalFn) => {
7
7
  localeFrom.getFullYear() === localeTo.getFullYear()) {
8
8
  return formatDate(localeFrom, dateFormat, translate);
9
9
  }
10
- return `${formatDate(localeFrom, dateFormat, translate)} - ${formatDate(localeTo, dateFormat, translate)}`;
10
+ return `${formatDate(localeFrom, dateFormat, translate)} ${formatDate(localeTo, dateFormat, translate)}`;
11
11
  };
@@ -543,12 +543,18 @@ export const DropdownRaw = props => {
543
543
  }, [setChecked, setSearch]);
544
544
  const debouncedGetData = useDebounce((signal, searchValue, isChecked) => getData ? (isCheckboxMode ? getData(signal, searchValue, isChecked) : getData(signal, searchValue)).then(dta => handleData(dta, searchValue)).catch(handleError) : customGetData(searchValue).then(dta => handleData(dta, searchValue)).catch(handleError), 200);
545
545
  const controlData = useCallback((signal, searchValue, isChecked) => {
546
- !isQueryMode && dispatchState({
547
- type: StateActionType.ShowWaiting,
548
- payload: undefined
549
- });
550
- isQueryMode ? handleQueryMode(searchValue, isChecked) : debouncedGetData(signal, searchValue, isChecked);
551
- }, [debouncedGetData, handleQueryMode, isQueryMode]);
546
+ if (isQueryMode) {
547
+ handleQueryMode(searchValue, isChecked);
548
+ } else if (!getData && dataItems && !searchValue) {
549
+ handleData(dataItems, "");
550
+ } else {
551
+ dispatchState({
552
+ type: StateActionType.ShowWaiting,
553
+ payload: undefined
554
+ });
555
+ debouncedGetData(signal, searchValue, isChecked);
556
+ }
557
+ }, [debouncedGetData, handleData, handleQueryMode, isQueryMode, getData, dataItems]);
552
558
  useEffect(() => {
553
559
  var _a;
554
560
  const timeoutId = (_a = zen.setTimeout) === null || _a === void 0 ? void 0 : _a.call(zen, () => {