@geotab/zenith 3.14.1 → 3.15.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (520) hide show
  1. package/README.md +28 -2
  2. package/dist/advancedGroupsFilter/advancedGroupsFilterFormSection.js +17 -7
  3. package/dist/alert/banner.d.ts +2 -3
  4. package/dist/alert/hooks/useAlertState.d.ts +0 -1
  5. package/dist/banner/bannerMultipLine.d.ts +0 -1
  6. package/dist/banner/bannerSingleLine.d.ts +0 -1
  7. package/dist/banner/utils/isSummaryErrorElement.d.ts +1 -2
  8. package/dist/calendar/dateUtils.js +2 -2
  9. package/dist/card/card.js +17 -7
  10. package/dist/card/components/content.d.ts +0 -1
  11. package/dist/cardContainer/helpers/getSizeClass.js +1 -2
  12. package/dist/chart/accessibleChart/accessibleChart.js +1 -1
  13. package/dist/chart/accessibleChart/accessibleChartNarrative.d.ts +1 -1
  14. package/dist/chart/accessibleChart/accessibleChartNarrative.js +11 -5
  15. package/dist/chart/accessibleChart/generatePieNarrative.d.ts +7 -0
  16. package/dist/chart/accessibleChart/generatePieNarrative.js +179 -0
  17. package/dist/chart/accessibleChart/interfaces.d.ts +1 -0
  18. package/dist/chart/barChart/getDefaultOptions.js +5 -6
  19. package/dist/chart/barChart.js +152 -50
  20. package/dist/chart/interfaces.d.ts +0 -1
  21. package/dist/chart/lineChart/getDefaultOptions.js +5 -6
  22. package/dist/chart/lineChart/useChartTicks.d.ts +0 -1
  23. package/dist/chart/lineChart/useSummary.d.ts +7 -8
  24. package/dist/chart/lineChart.js +167 -59
  25. package/dist/chart/pieChart.js +174 -76
  26. package/dist/chart/plugins/linePlugin/getInterpolatedValue.js +10 -2
  27. package/dist/chart/utils/convertDates.d.ts +1 -1
  28. package/dist/chart/utils/getFormattedLabel.js +1 -2
  29. package/dist/chart/utils/getNiceAxisRange.d.ts +21 -0
  30. package/dist/chart/utils/getNiceAxisRange.js +76 -0
  31. package/dist/chart/utils/getRange.js +2 -2
  32. package/dist/chart/utils/getYAxisMeta.d.ts +2 -5
  33. package/dist/chart/utils/getYAxisMeta.js +17 -2
  34. package/dist/chart/utils/getYAxisTickCount.d.ts +15 -0
  35. package/dist/chart/utils/getYAxisTickCount.js +19 -0
  36. package/dist/chart/utils/resampleArrayEvenly.js +1 -2
  37. package/dist/checkbox/checkbox.js +17 -7
  38. package/dist/checkboxListWithAction/checkboxListWithAction.d.ts +0 -1
  39. package/dist/chip/chip.d.ts +0 -1
  40. package/dist/chip/utils/useChip.d.ts +0 -1
  41. package/dist/commonHelpers/HOC/reducerLogger/reducerLogger.d.ts +1 -1
  42. package/dist/commonHelpers/arrowNavigation/components/arrowButton/arrowButton.d.ts +0 -1
  43. package/dist/commonHelpers/arrowNavigation/hooks/useHoldOnScroll.d.ts +0 -1
  44. package/dist/commonHelpers/generateId.js +1 -2
  45. package/dist/commonHelpers/hooks/breakpoints.d.ts +4 -0
  46. package/dist/commonHelpers/hooks/breakpoints.js +7 -0
  47. package/dist/commonHelpers/hooks/fetch.reducer.d.ts +1 -1
  48. package/dist/commonHelpers/hooks/fetch.reducer.js +1 -2
  49. package/dist/commonHelpers/hooks/useDebouncedMemo.d.ts +0 -1
  50. package/dist/commonHelpers/hooks/useDebouncedMemo.js +1 -2
  51. package/dist/commonHelpers/hooks/useDeviceType.js +2 -2
  52. package/dist/commonHelpers/hooks/useEscape.d.ts +1 -1
  53. package/dist/commonHelpers/hooks/useGridSize.d.ts +0 -1
  54. package/dist/commonHelpers/hooks/useMobileOrTablet.d.ts +1 -0
  55. package/dist/commonHelpers/hooks/useMobileOrTablet.js +21 -0
  56. package/dist/commonHelpers/hooks/usePillSize.d.ts +0 -1
  57. package/dist/{gridLayout → commonHelpers}/hooks/useTablet.js +8 -11
  58. package/dist/commonHelpers/utils.js +3 -3
  59. package/dist/commonStyles/colors/colors.less +1 -0
  60. package/dist/dataFeed/dataFeed.d.ts +1 -1
  61. package/dist/dataFeed/dataFeed.js +2 -2
  62. package/dist/dataFeed/dataFeedCell/dataFeedCell.d.ts +3 -1
  63. package/dist/dataFeed/dataFeedColumnsItems.d.ts +2 -2
  64. package/dist/dataGrid/cell/cell.d.ts +3 -1
  65. package/dist/dataGrid/columns/actionsColumn/actionsButton.js +1 -2
  66. package/dist/dataGrid/columns/actionsColumn/actionsColumn.d.ts +3 -3
  67. package/dist/dataGrid/dataGrid.d.ts +13 -1
  68. package/dist/dataGrid/dataGrid.js +48 -3
  69. package/dist/dataGrid/emptySearchList/emptySearchList.d.ts +0 -1
  70. package/dist/dataGrid/row/row.d.ts +3 -1
  71. package/dist/dataGrid/withActions/withActions.d.ts +1 -1
  72. package/dist/dataGrid/withFlexibleColumns/components/columnSettingsList.js +1 -2
  73. package/dist/dataGrid/withFlexibleColumns/withFlexibleColumns.d.ts +1 -1
  74. package/dist/dataGrid/withLoading/withLoading.d.ts +1 -1
  75. package/dist/dataGrid/withSelectableRows/withLimitedSelectableRows.d.ts +1 -1
  76. package/dist/dataGrid/withSelectableRows/withSelectableRows.d.ts +1 -1
  77. package/dist/dataGrid/withSortableColumns/withSortableColumns.d.ts +1 -1
  78. package/dist/dateInputInner/dateInputInnerReducer.js +2 -2
  79. package/dist/dateRangeRaw/utils/areMapsEqual.js +1 -2
  80. package/dist/dialog/dialog.d.ts +0 -1
  81. package/dist/dropdown/dropdown.js +1 -1
  82. package/dist/dropdown/useDropdownState.d.ts +0 -1
  83. package/dist/dropdownRaw/dropdownHelper.js +2 -2
  84. package/dist/dropdownRaw/dropdownList.d.ts +3 -2
  85. package/dist/dropdownRaw/dropdownList.js +31 -49
  86. package/dist/dropdownRaw/dropdownRaw.js +34 -13
  87. package/dist/dropdownRaw/stateReducer/stateReducer.d.ts +4 -1
  88. package/dist/dropdownRaw/stateReducer/stateReducer.js +33 -23
  89. package/dist/dropdownRaw/stateReducer/stateReducerHelper.d.ts +1 -2
  90. package/dist/dropdownRaw/stateReducer/stateReducerHelper.js +8 -13
  91. package/dist/dropdownRaw/types.d.ts +20 -0
  92. package/dist/feedbackContainer/feedbackContainer.js +17 -7
  93. package/dist/feedbackContainer/hooks/useFeedbackAlert.d.ts +0 -1
  94. package/dist/feedbackContainer/hooks/useFeedbackToast.d.ts +0 -1
  95. package/dist/filters/components/filtersDropdown.js +2 -2
  96. package/dist/filters/components/filtersItem.d.ts +2 -2
  97. package/dist/filters/components/filtersSearchList.d.ts +0 -1
  98. package/dist/filters/components/filtersSelect.d.ts +0 -1
  99. package/dist/filters/components/filtersSelectCompact.d.ts +0 -1
  100. package/dist/filters/components/filtersSelectListItem.d.ts +0 -1
  101. package/dist/filters/components/filtersSelectUnfoldingPill.d.ts +0 -1
  102. package/dist/filters/components/filtersSidePanelItem.js +17 -7
  103. package/dist/filters/filtersHelper.d.ts +1 -1
  104. package/dist/filters/filtersHelper.js +5 -5
  105. package/dist/filters/filtersHooks.d.ts +0 -1
  106. package/dist/filtersBar/components/filtersBarDropdownWithCheckbox/filtersBarDropdownWithCheckbox.js +1 -1
  107. package/dist/filtersBar/components/filtersBarPeriodPicker/getRangeOption.js +2 -2
  108. package/dist/filtersBar/filtersBar.js +2 -2
  109. package/dist/filtersBar/filtersBarActions/filtersBarActions.d.ts +0 -1
  110. package/dist/filtersBar/filtersBarInterfaces.d.ts +0 -1
  111. package/dist/filtersBar/filtersBarReducer.js +2 -2
  112. package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelDropdownWithCheckbox/filtersBarSidePanelDropdownWithCheckbox.d.ts +4 -10
  113. package/dist/filtersBar/filtersBarSidePanel/sidePanelReducer.js +2 -2
  114. package/dist/filtersBar/utils/getNumberOfChangedFilters.js +1 -2
  115. package/dist/footerButtons/footerButtons.js +17 -7
  116. package/dist/formField/components/formFieldAdditionalInfo.d.ts +0 -1
  117. package/dist/formField/components/formFieldCounter.d.ts +0 -1
  118. package/dist/formField/components/formFieldLoading.d.ts +0 -1
  119. package/dist/formField/components/formFieldSkeleton.d.ts +0 -1
  120. package/dist/formField/components/formFieldWithLabel.d.ts +0 -1
  121. package/dist/formField/components/formFieldWithoutLabel.d.ts +0 -1
  122. package/dist/formField/formField.d.ts +1 -1
  123. package/dist/formField/hooks/useBanner.d.ts +0 -1
  124. package/dist/formField/hooks/useDisabled.d.ts +1 -1
  125. package/dist/formGroup/components/customRow/customRow.d.ts +0 -1
  126. package/dist/formGroup/formGroup.js +17 -7
  127. package/dist/formGroup/hooks/listHooks/useStateToElements.d.ts +0 -1
  128. package/dist/formGroup/hooks/listHooks/useStateToElements.js +1 -1
  129. package/dist/formGroup/utils/formGroupProvider.d.ts +0 -1
  130. package/dist/formGroup/utils/isFormLabel.d.ts +1 -1
  131. package/dist/formGroupItem/formGroupItem.d.ts +0 -1
  132. package/dist/formLayout/components/layoutColumn/layoutColum.d.ts +0 -1
  133. package/dist/formLayout/hooks/useFormButtons.d.ts +1 -1
  134. package/dist/formLayout/types.d.ts +0 -1
  135. package/dist/formLayout/utils/attachHeadings.d.ts +1 -1
  136. package/dist/formLayout/utils/attachSeparators.d.ts +0 -1
  137. package/dist/formLayout/utils/getChildrenWithCustomColumns.d.ts +1 -2
  138. package/dist/formLayout/utils/getChildrenWithCustomColumns.js +2 -2
  139. package/dist/formLayout/utils/getFieldLabel.js +5 -5
  140. package/dist/formSection/components/actions.d.ts +0 -1
  141. package/dist/formSection/components/additional.d.ts +0 -1
  142. package/dist/formSection/utils/isFormSection.d.ts +2 -4
  143. package/dist/formStepper/components/formStepRaw.d.ts +0 -1
  144. package/dist/formStepper/formStepper.d.ts +0 -1
  145. package/dist/formStepper/formStepper.js +5 -5
  146. package/dist/formStepperButtons/formStepperButtons.js +3 -3
  147. package/dist/gridLayout/hooks/useStretch.js +1 -1
  148. package/dist/gridLayout/utils/convertStateToClasses.js +1 -2
  149. package/dist/gridLayout/utils/gridLayoutProvider.d.ts +0 -1
  150. package/dist/gridLayout/utils/gridLayoutProvider.js +1 -1
  151. package/dist/gridLayout/utils/isGridItem.d.ts +1 -1
  152. package/dist/groupsFilter/groupsHelper.d.ts +5 -5
  153. package/dist/groupsFilterRaw/groupsFilterHelper.js +16 -16
  154. package/dist/groupsFilterRaw/groupsHelper.d.ts +1 -1
  155. package/dist/groupsFilterRaw/groupsHelper.js +4 -4
  156. package/dist/groupsFilterRaw/stateReducer/stateReducer.d.ts +1 -1
  157. package/dist/groupsFilterRaw/stateReducer/stateReducer.js +2 -2
  158. package/dist/groupsFilterRaw/testData.js +3 -4
  159. package/dist/groupsFilterRaw/uiStateReducer/uiStateReducer.js +2 -2
  160. package/dist/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +5 -0
  161. package/dist/header/components/mobileFilterControl/mobileFilterControl.d.ts +0 -1
  162. package/dist/header/components/mobileSearchControl/mobileSearchControl.d.ts +0 -1
  163. package/dist/header/header.js +17 -7
  164. package/dist/header/headerButton.d.ts +0 -1
  165. package/dist/header/headerContext.d.ts +1 -2
  166. package/dist/header/headerHelpers.d.ts +5 -5
  167. package/dist/header/headerHelpers.js +17 -7
  168. package/dist/header/hooks/useNonFittingElements.d.ts +3 -4
  169. package/dist/headerTitle/headerTitle.d.ts +0 -1
  170. package/dist/icons/iconAce.d.ts +3 -0
  171. package/dist/icons/iconAce.js +12 -0
  172. package/dist/icons/iconBreak.d.ts +3 -0
  173. package/dist/icons/iconBreak.js +12 -0
  174. package/dist/icons/iconChevronStepper.d.ts +3 -0
  175. package/dist/icons/iconChevronStepper.js +12 -0
  176. package/dist/icons/iconPotato.d.ts +3 -0
  177. package/dist/icons/iconPotato.js +12 -0
  178. package/dist/icons/iconToggleLarge.d.ts +3 -0
  179. package/dist/icons/iconToggleLarge.js +12 -0
  180. package/dist/icons/iconToggleSmall.d.ts +3 -0
  181. package/dist/icons/iconToggleSmall.js +12 -0
  182. package/dist/icons/iconTrendNeutral.d.ts +3 -0
  183. package/dist/icons/iconTrendNeutral.js +12 -0
  184. package/dist/icons/iconTruck.d.ts +3 -0
  185. package/dist/icons/iconTruck.js +12 -0
  186. package/dist/index.css +234 -33
  187. package/dist/index.d.ts +8 -0
  188. package/dist/index.js +30 -13
  189. package/dist/layout/layout.d.ts +2 -1
  190. package/dist/layout/layout.js +17 -7
  191. package/dist/layout/layoutBanner.d.ts +0 -1
  192. package/dist/lineChart/lineChart.d.ts +1 -0
  193. package/dist/lineChart/lineChart.js +135 -70
  194. package/dist/lineChartMini/lineChartMini.d.ts +1 -0
  195. package/dist/lineChartMini/lineChartMini.js +141 -73
  196. package/dist/list/itemData/itemData.d.ts +2 -1
  197. package/dist/list/itemData/itemDataInternal.d.ts +2 -1
  198. package/dist/list/list.d.ts +0 -1
  199. package/dist/list/utils/changeOrder.js +1 -2
  200. package/dist/list/utils/isDataListitem.d.ts +1 -1
  201. package/dist/list/viewportProvider/viewportContext.d.ts +0 -1
  202. package/dist/menu/components/controlledMenuList/controlledMenuList.d.ts +2 -4
  203. package/dist/menu/components/controlledMenuList/controlledMenuList.js +3 -1
  204. package/dist/menu/components/createControlledMenuList.js +1 -2
  205. package/dist/menu/components/createMenuItem.js +1 -2
  206. package/dist/menu/contexts/usePathContext.js +1 -2
  207. package/dist/menu/utils/buildMenuContent.js +1 -2
  208. package/dist/menu/utils/findPrevFocusable.js +1 -2
  209. package/dist/menu/utils/useDisplayContent.d.ts +21 -0
  210. package/dist/menu/utils/useDisplayContent.js +35 -0
  211. package/dist/menu/utils/useMenuItemKeyboardNav.js +1 -2
  212. package/dist/miniTabs/miniTabsHelper.js +17 -7
  213. package/dist/mobileSheet/components/mobileSheetTitle.d.ts +0 -1
  214. package/dist/modal/modal.js +17 -7
  215. package/dist/nav/context/nav.context.d.ts +0 -1
  216. package/dist/nav/navFooter/navEditFooter/navEditFooter.d.ts +0 -1
  217. package/dist/nav/navFooter/navFooter.d.ts +1 -1
  218. package/dist/nav/navFooter/navFooterAction/navFooterAction.d.ts +2 -1
  219. package/dist/nav/navFooter/navFooterAction/navFooterAction.js +3 -1
  220. package/dist/nav/navItem/navItem.d.ts +2 -0
  221. package/dist/nav/navItem/navItem.js +56 -47
  222. package/dist/nav/navItem/navItemContent.d.ts +19 -0
  223. package/dist/nav/navItem/navItemContent.js +21 -0
  224. package/dist/nav/navItem/navItemType.d.ts +7 -0
  225. package/dist/nav/navItem/navItemType.js +9 -0
  226. package/dist/nav/utils/navUtils.d.ts +2 -4
  227. package/dist/nav/utils/navUtils.js +2 -2
  228. package/dist/overview/overview.d.ts +0 -1
  229. package/dist/pageHeader/pageHeader.d.ts +1 -1
  230. package/dist/pageHeader/pageHeaderButton.d.ts +0 -1
  231. package/dist/pageHeader/pageHeaderHelpers.d.ts +1 -1
  232. package/dist/pageHeader/pageHeaderMenu.d.ts +0 -1
  233. package/dist/pagination/paginationArrow.d.ts +0 -1
  234. package/dist/pill/interfaces/pill.interface.d.ts +0 -1
  235. package/dist/pillBox/components/pillBoxItem.d.ts +1 -2
  236. package/dist/popup/popup.js +17 -7
  237. package/dist/progressIndicator/progressIndicator.d.ts +39 -0
  238. package/dist/progressIndicator/progressIndicator.js +30 -0
  239. package/dist/progressIndicator/progressIndicatorUtils.d.ts +12 -0
  240. package/dist/progressIndicator/progressIndicatorUtils.js +30 -0
  241. package/dist/radioGroupRaw/radioGroupRaw.js +17 -7
  242. package/dist/radioGroupRaw/types.d.ts +0 -1
  243. package/dist/react-chartjs/dateFns/dateFns.js +10 -11
  244. package/dist/react-chartjs/utils.d.ts +3 -3
  245. package/dist/react-chartjs/utils.js +8 -9
  246. package/dist/searchInputRaw/searchInputRaw.js +17 -7
  247. package/dist/searchInputRaw/types.d.ts +0 -1
  248. package/dist/selectField/selectField.d.ts +2 -3
  249. package/dist/selectList/selectList.d.ts +0 -1
  250. package/dist/selectRaw/hooks/usePopupWidth.js +17 -7
  251. package/dist/selectRaw/selectRaw.js +20 -7
  252. package/dist/sidePanel/sidePanelCell/sidePanelCell.d.ts +0 -1
  253. package/dist/summaries/utils/splitIntoPairs.js +1 -2
  254. package/dist/summaryTile/summaryTile.js +17 -7
  255. package/dist/summaryTile/summaryTileTrigger.js +17 -7
  256. package/dist/table/actions/actionsMenu.d.ts +0 -1
  257. package/dist/table/children/useTableChildren.d.ts +7 -7
  258. package/dist/table/detailPanel/interfaces.d.ts +0 -1
  259. package/dist/table/flexible/columnsList.js +1 -2
  260. package/dist/table/loading/useLoading.d.ts +10 -10
  261. package/dist/table/nested/nestedData.d.ts +3 -1
  262. package/dist/table/nested/useNestedRows.d.ts +2 -2
  263. package/dist/table/selectable/selectableHeader.d.ts +2 -1
  264. package/dist/table/selectable/selectableHeader.js +4 -3
  265. package/dist/table/selectable/useSelectableRows.d.ts +1 -1
  266. package/dist/table/selectable/useSelectableRows.js +7 -4
  267. package/dist/table/table.d.ts +16 -1
  268. package/dist/table/table.js +101 -5
  269. package/dist/tag/tag.d.ts +19 -0
  270. package/dist/tag/tag.js +14 -0
  271. package/dist/textIconButton/textIconButton.js +17 -7
  272. package/dist/toastRaw/toastRaw.d.ts +1 -1
  273. package/dist/toastRaw/toastRaw.js +3 -1
  274. package/dist/toggleButtonRaw/toggleButtonRaw.js +17 -7
  275. package/dist/toggleButtonRaw/types.d.ts +0 -1
  276. package/dist/tooltip/tooltip.js +17 -7
  277. package/dist/tooltipInfo/tooltipInfo.d.ts +0 -1
  278. package/dist/utils/compareElementsUtils/isArraysEqualDeeply.js +1 -2
  279. package/dist/utils/compareElementsUtils/isElementsEqual.js +2 -2
  280. package/dist/utils/escapeHtml.js +1 -2
  281. package/dist/utils/localization/directionContext.d.ts +0 -1
  282. package/dist/utils/localization/languageContext.d.ts +0 -1
  283. package/dist/utils/localization/translations/en.json +12 -1
  284. package/dist/utils/theme/themeContext.d.ts +0 -1
  285. package/dist/utils/topWindow/topWindowContext.d.ts +0 -1
  286. package/dist/utils/useFadeComponent.d.ts +0 -1
  287. package/dist/utils/userFormat/userFormatContext.d.ts +0 -1
  288. package/dist/waiting/waiting.d.ts +2 -1
  289. package/dist/waiting/waiting.js +23 -6
  290. package/esm/alert/banner.d.ts +2 -3
  291. package/esm/alert/hooks/useAlertState.d.ts +0 -1
  292. package/esm/banner/bannerMultipLine.d.ts +0 -1
  293. package/esm/banner/bannerSingleLine.d.ts +0 -1
  294. package/esm/banner/utils/isSummaryErrorElement.d.ts +1 -2
  295. package/esm/card/components/content.d.ts +0 -1
  296. package/esm/chart/accessibleChart/accessibleChart.js +1 -1
  297. package/esm/chart/accessibleChart/accessibleChartNarrative.d.ts +1 -1
  298. package/esm/chart/accessibleChart/accessibleChartNarrative.js +8 -2
  299. package/esm/chart/accessibleChart/generatePieNarrative.d.ts +7 -0
  300. package/esm/chart/accessibleChart/generatePieNarrative.js +167 -0
  301. package/esm/chart/accessibleChart/interfaces.d.ts +1 -0
  302. package/esm/chart/barChart/getDefaultOptions.js +5 -6
  303. package/esm/chart/barChart.js +147 -50
  304. package/esm/chart/interfaces.d.ts +0 -1
  305. package/esm/chart/lineChart/getDefaultOptions.js +5 -6
  306. package/esm/chart/lineChart/useChartTicks.d.ts +0 -1
  307. package/esm/chart/lineChart/useSummary.d.ts +7 -8
  308. package/esm/chart/lineChart.js +162 -59
  309. package/esm/chart/pieChart.js +169 -76
  310. package/esm/chart/plugins/linePlugin/getInterpolatedValue.js +9 -0
  311. package/esm/chart/utils/convertDates.d.ts +1 -1
  312. package/esm/chart/utils/getNiceAxisRange.d.ts +21 -0
  313. package/esm/chart/utils/getNiceAxisRange.js +72 -0
  314. package/esm/chart/utils/getRange.js +2 -2
  315. package/esm/chart/utils/getYAxisMeta.d.ts +2 -5
  316. package/esm/chart/utils/getYAxisMeta.js +17 -2
  317. package/esm/chart/utils/getYAxisTickCount.d.ts +15 -0
  318. package/esm/chart/utils/getYAxisTickCount.js +15 -0
  319. package/esm/checkboxListWithAction/checkboxListWithAction.d.ts +0 -1
  320. package/esm/chip/chip.d.ts +0 -1
  321. package/esm/chip/utils/useChip.d.ts +0 -1
  322. package/esm/commonHelpers/HOC/reducerLogger/reducerLogger.d.ts +1 -1
  323. package/esm/commonHelpers/arrowNavigation/components/arrowButton/arrowButton.d.ts +0 -1
  324. package/esm/commonHelpers/arrowNavigation/hooks/useHoldOnScroll.d.ts +0 -1
  325. package/esm/commonHelpers/hooks/breakpoints.d.ts +4 -0
  326. package/esm/commonHelpers/hooks/breakpoints.js +4 -0
  327. package/esm/commonHelpers/hooks/fetch.reducer.d.ts +1 -1
  328. package/esm/commonHelpers/hooks/useDebouncedMemo.d.ts +0 -1
  329. package/esm/commonHelpers/hooks/useDeviceType.js +2 -2
  330. package/esm/commonHelpers/hooks/useEscape.d.ts +1 -1
  331. package/esm/commonHelpers/hooks/useGridSize.d.ts +0 -1
  332. package/esm/commonHelpers/hooks/useMobileOrTablet.d.ts +1 -0
  333. package/esm/commonHelpers/hooks/useMobileOrTablet.js +17 -0
  334. package/esm/commonHelpers/hooks/usePillSize.d.ts +0 -1
  335. package/esm/commonHelpers/hooks/useTablet.js +17 -0
  336. package/esm/dataFeed/dataFeed.d.ts +1 -1
  337. package/esm/dataFeed/dataFeed.js +2 -2
  338. package/esm/dataFeed/dataFeedCell/dataFeedCell.d.ts +3 -1
  339. package/esm/dataFeed/dataFeedColumnsItems.d.ts +2 -2
  340. package/esm/dataGrid/cell/cell.d.ts +3 -1
  341. package/esm/dataGrid/columns/actionsColumn/actionsColumn.d.ts +3 -3
  342. package/esm/dataGrid/dataGrid.d.ts +13 -1
  343. package/esm/dataGrid/dataGrid.js +48 -3
  344. package/esm/dataGrid/emptySearchList/emptySearchList.d.ts +0 -1
  345. package/esm/dataGrid/row/row.d.ts +3 -1
  346. package/esm/dataGrid/withActions/withActions.d.ts +1 -1
  347. package/esm/dataGrid/withFlexibleColumns/withFlexibleColumns.d.ts +1 -1
  348. package/esm/dataGrid/withLoading/withLoading.d.ts +1 -1
  349. package/esm/dataGrid/withSelectableRows/withLimitedSelectableRows.d.ts +1 -1
  350. package/esm/dataGrid/withSelectableRows/withSelectableRows.d.ts +1 -1
  351. package/esm/dataGrid/withSortableColumns/withSortableColumns.d.ts +1 -1
  352. package/esm/dialog/dialog.d.ts +0 -1
  353. package/esm/dropdown/dropdown.js +1 -1
  354. package/esm/dropdown/useDropdownState.d.ts +0 -1
  355. package/esm/dropdownRaw/dropdownList.d.ts +3 -2
  356. package/esm/dropdownRaw/dropdownList.js +14 -42
  357. package/esm/dropdownRaw/dropdownRaw.js +35 -14
  358. package/esm/dropdownRaw/stateReducer/stateReducer.d.ts +4 -1
  359. package/esm/dropdownRaw/stateReducer/stateReducer.js +32 -22
  360. package/esm/dropdownRaw/stateReducer/stateReducerHelper.d.ts +1 -2
  361. package/esm/dropdownRaw/stateReducer/stateReducerHelper.js +5 -10
  362. package/esm/dropdownRaw/types.d.ts +20 -0
  363. package/esm/feedbackContainer/hooks/useFeedbackAlert.d.ts +0 -1
  364. package/esm/feedbackContainer/hooks/useFeedbackToast.d.ts +0 -1
  365. package/esm/filters/components/filtersItem.d.ts +2 -2
  366. package/esm/filters/components/filtersSearchList.d.ts +0 -1
  367. package/esm/filters/components/filtersSelect.d.ts +0 -1
  368. package/esm/filters/components/filtersSelectCompact.d.ts +0 -1
  369. package/esm/filters/components/filtersSelectListItem.d.ts +0 -1
  370. package/esm/filters/components/filtersSelectUnfoldingPill.d.ts +0 -1
  371. package/esm/filters/filtersHelper.d.ts +1 -1
  372. package/esm/filters/filtersHooks.d.ts +0 -1
  373. package/esm/filtersBar/components/filtersBarDropdownWithCheckbox/filtersBarDropdownWithCheckbox.js +1 -1
  374. package/esm/filtersBar/filtersBar.js +2 -2
  375. package/esm/filtersBar/filtersBarActions/filtersBarActions.d.ts +0 -1
  376. package/esm/filtersBar/filtersBarInterfaces.d.ts +0 -1
  377. package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelDropdownWithCheckbox/filtersBarSidePanelDropdownWithCheckbox.d.ts +4 -10
  378. package/esm/formField/components/formFieldAdditionalInfo.d.ts +0 -1
  379. package/esm/formField/components/formFieldCounter.d.ts +0 -1
  380. package/esm/formField/components/formFieldLoading.d.ts +0 -1
  381. package/esm/formField/components/formFieldSkeleton.d.ts +0 -1
  382. package/esm/formField/components/formFieldWithLabel.d.ts +0 -1
  383. package/esm/formField/components/formFieldWithoutLabel.d.ts +0 -1
  384. package/esm/formField/formField.d.ts +1 -1
  385. package/esm/formField/hooks/useBanner.d.ts +0 -1
  386. package/esm/formField/hooks/useDisabled.d.ts +1 -1
  387. package/esm/formGroup/components/customRow/customRow.d.ts +0 -1
  388. package/esm/formGroup/hooks/listHooks/useStateToElements.d.ts +0 -1
  389. package/esm/formGroup/hooks/listHooks/useStateToElements.js +1 -1
  390. package/esm/formGroup/utils/formGroupProvider.d.ts +0 -1
  391. package/esm/formGroup/utils/isFormLabel.d.ts +1 -1
  392. package/esm/formGroupItem/formGroupItem.d.ts +0 -1
  393. package/esm/formLayout/components/layoutColumn/layoutColum.d.ts +0 -1
  394. package/esm/formLayout/hooks/useFormButtons.d.ts +1 -1
  395. package/esm/formLayout/types.d.ts +0 -1
  396. package/esm/formLayout/utils/attachHeadings.d.ts +1 -1
  397. package/esm/formLayout/utils/attachSeparators.d.ts +0 -1
  398. package/esm/formLayout/utils/getChildrenWithCustomColumns.d.ts +1 -2
  399. package/esm/formLayout/utils/getChildrenWithCustomColumns.js +2 -2
  400. package/esm/formLayout/utils/getFieldLabel.js +5 -5
  401. package/esm/formSection/components/actions.d.ts +0 -1
  402. package/esm/formSection/components/additional.d.ts +0 -1
  403. package/esm/formSection/utils/isFormSection.d.ts +2 -4
  404. package/esm/formStepper/components/formStepRaw.d.ts +0 -1
  405. package/esm/formStepper/formStepper.d.ts +0 -1
  406. package/esm/formStepper/formStepper.js +5 -5
  407. package/esm/formStepperButtons/formStepperButtons.js +3 -3
  408. package/esm/gridLayout/hooks/useStretch.js +1 -1
  409. package/esm/gridLayout/utils/gridLayoutProvider.d.ts +0 -1
  410. package/esm/gridLayout/utils/gridLayoutProvider.js +1 -1
  411. package/esm/gridLayout/utils/isGridItem.d.ts +1 -1
  412. package/esm/groupsFilter/groupsHelper.d.ts +5 -5
  413. package/esm/groupsFilterRaw/groupsHelper.d.ts +1 -1
  414. package/esm/groupsFilterRaw/stateReducer/stateReducer.d.ts +1 -1
  415. package/esm/groupsFilterRaw/testData.js +1 -2
  416. package/esm/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +5 -0
  417. package/esm/header/components/mobileFilterControl/mobileFilterControl.d.ts +0 -1
  418. package/esm/header/components/mobileSearchControl/mobileSearchControl.d.ts +0 -1
  419. package/esm/header/headerButton.d.ts +0 -1
  420. package/esm/header/headerContext.d.ts +1 -2
  421. package/esm/header/headerHelpers.d.ts +5 -5
  422. package/esm/header/hooks/useNonFittingElements.d.ts +3 -4
  423. package/esm/headerTitle/headerTitle.d.ts +0 -1
  424. package/esm/icons/iconAce.d.ts +3 -0
  425. package/esm/icons/iconAce.js +8 -0
  426. package/esm/icons/iconBreak.d.ts +3 -0
  427. package/esm/icons/iconBreak.js +8 -0
  428. package/esm/icons/iconChevronStepper.d.ts +3 -0
  429. package/esm/icons/iconChevronStepper.js +8 -0
  430. package/esm/icons/iconPotato.d.ts +3 -0
  431. package/esm/icons/iconPotato.js +8 -0
  432. package/esm/icons/iconToggleLarge.d.ts +3 -0
  433. package/esm/icons/iconToggleLarge.js +8 -0
  434. package/esm/icons/iconToggleSmall.d.ts +3 -0
  435. package/esm/icons/iconToggleSmall.js +8 -0
  436. package/esm/icons/iconTrendNeutral.d.ts +3 -0
  437. package/esm/icons/iconTrendNeutral.js +8 -0
  438. package/esm/icons/iconTruck.d.ts +3 -0
  439. package/esm/icons/iconTruck.js +8 -0
  440. package/esm/index.d.ts +8 -0
  441. package/esm/index.js +8 -0
  442. package/esm/layout/layout.d.ts +2 -1
  443. package/esm/layout/layoutBanner.d.ts +0 -1
  444. package/esm/lineChart/lineChart.d.ts +1 -0
  445. package/esm/lineChart/lineChart.js +129 -69
  446. package/esm/lineChartMini/lineChartMini.d.ts +1 -0
  447. package/esm/lineChartMini/lineChartMini.js +136 -73
  448. package/esm/list/itemData/itemData.d.ts +2 -1
  449. package/esm/list/itemData/itemDataInternal.d.ts +2 -1
  450. package/esm/list/list.d.ts +0 -1
  451. package/esm/list/utils/isDataListitem.d.ts +1 -1
  452. package/esm/list/viewportProvider/viewportContext.d.ts +0 -1
  453. package/esm/menu/components/controlledMenuList/controlledMenuList.d.ts +2 -4
  454. package/esm/menu/components/controlledMenuList/controlledMenuList.js +3 -1
  455. package/esm/menu/utils/useDisplayContent.d.ts +21 -0
  456. package/esm/menu/utils/useDisplayContent.js +31 -0
  457. package/esm/mobileSheet/components/mobileSheetTitle.d.ts +0 -1
  458. package/esm/nav/context/nav.context.d.ts +0 -1
  459. package/esm/nav/navFooter/navEditFooter/navEditFooter.d.ts +0 -1
  460. package/esm/nav/navFooter/navFooter.d.ts +1 -1
  461. package/esm/nav/navFooter/navFooterAction/navFooterAction.d.ts +2 -1
  462. package/esm/nav/navFooter/navFooterAction/navFooterAction.js +3 -1
  463. package/esm/nav/navItem/navItem.d.ts +2 -0
  464. package/esm/nav/navItem/navItem.js +57 -48
  465. package/esm/nav/navItem/navItemContent.d.ts +19 -0
  466. package/esm/nav/navItem/navItemContent.js +17 -0
  467. package/esm/nav/navItem/navItemType.d.ts +7 -0
  468. package/esm/nav/navItem/navItemType.js +6 -0
  469. package/esm/nav/utils/navUtils.d.ts +2 -4
  470. package/esm/overview/overview.d.ts +0 -1
  471. package/esm/pageHeader/pageHeader.d.ts +1 -1
  472. package/esm/pageHeader/pageHeaderButton.d.ts +0 -1
  473. package/esm/pageHeader/pageHeaderHelpers.d.ts +1 -1
  474. package/esm/pageHeader/pageHeaderMenu.d.ts +0 -1
  475. package/esm/pagination/paginationArrow.d.ts +0 -1
  476. package/esm/pill/interfaces/pill.interface.d.ts +0 -1
  477. package/esm/pillBox/components/pillBoxItem.d.ts +1 -2
  478. package/esm/progressIndicator/progressIndicator.d.ts +39 -0
  479. package/esm/progressIndicator/progressIndicator.js +26 -0
  480. package/esm/progressIndicator/progressIndicatorUtils.d.ts +12 -0
  481. package/esm/progressIndicator/progressIndicatorUtils.js +25 -0
  482. package/esm/radioGroupRaw/types.d.ts +0 -1
  483. package/esm/react-chartjs/utils.d.ts +3 -3
  484. package/esm/searchInputRaw/types.d.ts +0 -1
  485. package/esm/selectField/selectField.d.ts +2 -3
  486. package/esm/selectList/selectList.d.ts +0 -1
  487. package/esm/selectRaw/selectRaw.js +3 -0
  488. package/esm/sidePanel/sidePanelCell/sidePanelCell.d.ts +0 -1
  489. package/esm/table/actions/actionsMenu.d.ts +0 -1
  490. package/esm/table/children/useTableChildren.d.ts +7 -7
  491. package/esm/table/detailPanel/interfaces.d.ts +0 -1
  492. package/esm/table/loading/useLoading.d.ts +10 -10
  493. package/esm/table/nested/nestedData.d.ts +3 -1
  494. package/esm/table/nested/useNestedRows.d.ts +2 -2
  495. package/esm/table/selectable/selectableHeader.d.ts +2 -1
  496. package/esm/table/selectable/selectableHeader.js +4 -3
  497. package/esm/table/selectable/useSelectableRows.d.ts +1 -1
  498. package/esm/table/selectable/useSelectableRows.js +7 -4
  499. package/esm/table/table.d.ts +16 -1
  500. package/esm/table/table.js +102 -6
  501. package/esm/tag/tag.d.ts +19 -0
  502. package/esm/tag/tag.js +10 -0
  503. package/esm/testHelpers/geotab-axe/index.d.ts +0 -1
  504. package/esm/toastRaw/toastRaw.d.ts +1 -1
  505. package/esm/toastRaw/toastRaw.js +3 -1
  506. package/esm/toggleButtonRaw/types.d.ts +0 -1
  507. package/esm/tooltipInfo/tooltipInfo.d.ts +0 -1
  508. package/esm/utils/localization/directionContext.d.ts +0 -1
  509. package/esm/utils/localization/languageContext.d.ts +0 -1
  510. package/esm/utils/localization/translations/en.json +12 -1
  511. package/esm/utils/theme/themeContext.d.ts +0 -1
  512. package/esm/utils/topWindow/topWindowContext.d.ts +0 -1
  513. package/esm/utils/useFadeComponent.d.ts +0 -1
  514. package/esm/utils/userFormat/userFormatContext.d.ts +0 -1
  515. package/esm/waiting/waiting.d.ts +2 -1
  516. package/esm/waiting/waiting.js +24 -7
  517. package/package.json +13 -6
  518. package/esm/gridLayout/hooks/useTablet.js +0 -20
  519. /package/dist/{gridLayout → commonHelpers}/hooks/useTablet.d.ts +0 -0
  520. /package/esm/{gridLayout → commonHelpers}/hooks/useTablet.d.ts +0 -0
@@ -1,15 +1,13 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
1
+ import { injectString } from "../utils/localization/translationsDictionary";
2
+ var __rest = this && this.__rest || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
6
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
7
+ }
8
+ return t;
11
9
  };
12
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
11
  import { useCallback, useContext, useEffect, useId, useMemo } from "react";
14
12
  import { Line } from "../react-chartjs/typedCharts";
15
13
  import { Chart as ChartJS, CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, Filler, TimeScale } from "chart.js/auto";
@@ -39,52 +37,157 @@ import { getXAxisMeta } from "./utils/getXAxisMeta";
39
37
  import { userFormatContext } from "../utils/userFormat/userFormatContext";
40
38
  import { Summary } from "../summary/summary";
41
39
  import { AccessibleChart } from "./accessibleChart/accessibleChart";
40
+ injectString("cs", "Line chart", "Spojnicov\xFD graf");
41
+ injectString("da-DK", "Line chart", "Linjediagram");
42
+ injectString("de", "Line chart", "Liniendiagramm");
43
+ injectString("en", "Line chart", "Line chart");
44
+ injectString("es", "Line chart", "Gr\xE1fico de l\xEDneas");
45
+ injectString("fi-FI", "Line chart", "Viivakaavio");
46
+ injectString("fr", "Line chart", "Graphique lin\xE9aire");
47
+ injectString("fr-FR", "Line chart", "Graphique lin\xE9aire");
48
+ injectString("hu-HU", "Line chart", "Vonaldiagram");
49
+ injectString("id", "Line chart", "Bagan garis");
50
+ injectString("it", "Line chart", "Grafico a linee");
51
+ injectString("ja", "Line chart", "\u6298\u308C\u7DDA\u30B0\u30E9\u30D5");
52
+ injectString("ko-KR", "Line chart", "\uC120\uD615 \uCC28\uD2B8");
53
+ injectString("ms", "Line chart", "Carta garisan");
54
+ injectString("nb-NO", "Line chart", "Linjediagram");
55
+ injectString("nl", "Line chart", "Lijndiagram");
56
+ injectString("pl", "Line chart", "Wykres liniowy");
57
+ injectString("pt-BR", "Line chart", "Gr\xE1fico de linhas");
58
+ injectString("pt-PT", "Line chart", "Gr\xE1fico de linhas");
59
+ injectString("sk-SK", "Line chart", "\u010Ciarov\xFD graf");
60
+ injectString("sv", "Line chart", "Linjediagram");
61
+ injectString("th", "Line chart", "\u0E41\u0E1C\u0E19\u0E20\u0E39\u0E21\u0E34\u0E40\u0E2A\u0E49\u0E19");
62
+ injectString("tr", "Line chart", "\xC7izgi grafik");
63
+ injectString("zh-Hans", "Line chart", "\u6298\u7EBF\u56FE");
64
+ injectString("zh-TW", "Line chart", "\u6298\u7DDA\u5716");
65
+ injectString("ro-RO", "Line chart", "Grafic liniar");
66
+ injectString("ar", "Line chart", "\u0645\u062E\u0637\u0637 \u062E\u0637\u064A");
67
+ injectString("lt-LT", "Line chart", "Linijin\u0117 diagrama");
68
+ injectString("lv-LV", "Line chart", "L\u012Bniju diagramma");
69
+ injectString("ka-GE", "Line chart", "\u10EE\u10D0\u10D6\u10DD\u10D5\u10D0\u10DC\u10D8 \u10E1\u10E5\u10D4\u10DB\u10D0");
70
+ injectString("el-GR", "Line chart", "\u0393\u03C1\u03AC\u03C6\u03B7\u03BC\u03B1 \u03B3\u03C1\u03B1\u03BC\u03BC\u03CE\u03BD");
71
+ injectString("et-EE", "Line chart", "Joondiagramm");
72
+ injectString("bg-BG", "Line chart", "\u041B\u0438\u043D\u0435\u0439\u043D\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u0430");
42
73
  ChartJS.register(CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, Filler, TimeScale);
43
- export const LineChart = (_a) => {
44
- var { data, options = {}, axis, insight, summary, legend, tooltip, plugins, className } = _a, rest = __rest(_a, ["data", "options", "axis", "insight", "summary", "legend", "tooltip", "plugins", "className"]);
45
- const { translate } = useLanguage();
46
- const isDrive = useDrive();
47
- const isMobile = useMobile();
48
- const isRtl = useIsRTL();
49
- const fontSize = useMemo(() => (isDrive ? (isMobile ? 14 : 16) : 12), [isDrive, isMobile]);
50
- const { dark } = useContext(themeContext);
51
- useEffect(() => {
52
- ChartJS.defaults.font = {
53
- family: "Roboto",
54
- size: fontSize
55
- };
56
- ChartJS.defaults.color = dark ? "#FFFFFF" : "#1F2833";
57
- }, [fontSize, dark]);
58
- const legendId = useId();
59
- const tooltipId = useId();
60
- const { isHidden, toggleHidden, hiddenCount } = useHidden();
61
- const { toLocalDateTime } = useContext(userFormatContext);
62
- const isTimedData = useMemo(() => isDateRange(data, true), [data]);
63
- const chartData = useMemo(() => {
64
- const chData = Object.assign({}, data);
65
- chData.datasets = chData.datasets.map((ds, i) => getDefaultDatasetStyle(ds, i));
66
- chData.datasets = chData.datasets.reduce((acc, dataset, dsIndex) => {
67
- acc.push(dataset);
68
- if (dataset.trendData) {
69
- acc.push(Object.assign(Object.assign({}, dataset), { data: dataset.trendData, borderDash: [5, 5], parentIndex: dsIndex }));
70
- }
71
- return acc;
72
- }, []);
73
- chData.datasets = chData.datasets.map((ds, i) => isHidden(ds.parentIndex !== undefined ? ds.parentIndex : i) ? Object.assign(Object.assign({}, ds), { hidden: true }) : ds);
74
- return convertDates(chData, toLocalDateTime);
75
- }, [data, isHidden, toLocalDateTime]);
76
- const yAxisMeta = useMemo(() => getYAxisMeta(chartData), [chartData]);
77
- const xAxisMeta = useMemo(() => getXAxisMeta(chartData, isTimedData), [chartData, isTimedData]);
78
- const stableXAxisMeta = useLastVisibleXAxisMeta(xAxisMeta, hiddenCount, data.datasets.length);
79
- const { chartRef, ticks } = useChartTicks();
80
- const defOptions = useMemo(() => getDefaultOptions(yAxisMeta, stableXAxisMeta, isTimedData, ticks, dark, translate, isRtl), [yAxisMeta, stableXAxisMeta, isTimedData, ticks, dark, translate, isRtl]);
81
- const chartOptions = deepMerge(defOptions, options);
82
- const chartTooltip = useMemo(() => LinePlugin(tooltipId, tooltip, dark), [tooltip, tooltipId, dark]);
83
- const chartLegend = useMemo(() => legendPlugin(legendId, legend, isDrive, isHidden, toggleHidden), [isDrive, legend, legendId, isHidden, toggleHidden]);
84
- const chartPlugins = useMemo(() => [...(plugins || []), chartTooltip, chartLegend], [plugins, chartTooltip, chartLegend]);
85
- const { xLabels, yLabels } = useAxisLabels(axis, chartOptions);
86
- const intSummary = useSummary(summary, chartData);
87
- const isMainHidden = useMemo(() => isHidden(0), [isHidden]);
88
- const toggleMainDataset = useCallback(() => toggleHidden(0), [toggleHidden]);
89
- 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 })] }));
90
- };
74
+ export const LineChart = _a => {
75
+ var {
76
+ data,
77
+ options = {},
78
+ axis,
79
+ insight,
80
+ summary,
81
+ legend,
82
+ tooltip,
83
+ plugins,
84
+ className
85
+ } = _a,
86
+ rest = __rest(_a, ["data", "options", "axis", "insight", "summary", "legend", "tooltip", "plugins", "className"]);
87
+ const {
88
+ translate
89
+ } = useLanguage();
90
+ const isDrive = useDrive();
91
+ const isMobile = useMobile();
92
+ const isRtl = useIsRTL();
93
+ const fontSize = useMemo(() => isDrive ? isMobile ? 14 : 16 : 12, [isDrive, isMobile]);
94
+ const {
95
+ dark
96
+ } = useContext(themeContext);
97
+ useEffect(() => {
98
+ ChartJS.defaults.font = {
99
+ family: "Roboto",
100
+ size: fontSize
101
+ };
102
+ ChartJS.defaults.color = dark ? "#FFFFFF" : "#1F2833";
103
+ }, [fontSize, dark]);
104
+ const legendId = useId();
105
+ const tooltipId = useId();
106
+ const narrativeId = useId();
107
+ const {
108
+ isHidden,
109
+ toggleHidden,
110
+ hiddenCount
111
+ } = useHidden();
112
+ const {
113
+ toLocalDateTime
114
+ } = useContext(userFormatContext);
115
+ const isTimedData = useMemo(() => isDateRange(data, true), [data]);
116
+ const chartData = useMemo(() => {
117
+ const chData = Object.assign({}, data);
118
+ chData.datasets = chData.datasets.map((ds, i) => getDefaultDatasetStyle(ds, i));
119
+ chData.datasets = chData.datasets.reduce((acc, dataset, dsIndex) => {
120
+ acc.push(dataset);
121
+ if (dataset.trendData) {
122
+ acc.push(Object.assign(Object.assign({}, dataset), {
123
+ data: dataset.trendData,
124
+ borderDash: [5, 5],
125
+ parentIndex: dsIndex
126
+ }));
127
+ }
128
+ return acc;
129
+ }, []);
130
+ chData.datasets = chData.datasets.map((ds, i) => isHidden(ds.parentIndex !== undefined ? ds.parentIndex : i) ? Object.assign(Object.assign({}, ds), {
131
+ hidden: true
132
+ }) : ds);
133
+ return convertDates(chData, toLocalDateTime);
134
+ }, [data, isHidden, toLocalDateTime]);
135
+ const yAxisMeta = useMemo(() => getYAxisMeta(chartData), [chartData]);
136
+ const xAxisMeta = useMemo(() => getXAxisMeta(chartData, isTimedData), [chartData, isTimedData]);
137
+ const stableXAxisMeta = useLastVisibleXAxisMeta(xAxisMeta, hiddenCount, data.datasets.length);
138
+ const {
139
+ chartRef,
140
+ ticks
141
+ } = useChartTicks();
142
+ const defOptions = useMemo(() => getDefaultOptions(yAxisMeta, stableXAxisMeta, isTimedData, ticks, dark, translate, isRtl), [yAxisMeta, stableXAxisMeta, isTimedData, ticks, dark, translate, isRtl]);
143
+ const chartOptions = deepMerge(defOptions, options);
144
+ const chartTooltip = useMemo(() => LinePlugin(tooltipId, tooltip, dark), [tooltip, tooltipId, dark]);
145
+ const chartLegend = useMemo(() => legendPlugin(legendId, legend, isDrive, isHidden, toggleHidden), [isDrive, legend, legendId, isHidden, toggleHidden]);
146
+ const chartPlugins = useMemo(() => [...(plugins || []), chartTooltip, chartLegend], [plugins, chartTooltip, chartLegend]);
147
+ const {
148
+ xLabels,
149
+ yLabels
150
+ } = useAxisLabels(axis, chartOptions);
151
+ const intSummary = useSummary(summary, chartData);
152
+ const isMainHidden = useMemo(() => isHidden(0), [isHidden]);
153
+ const toggleMainDataset = useCallback(() => toggleHidden(0), [toggleHidden]);
154
+ return _jsxs(_Fragment, {
155
+ children: [_jsxs("div", {
156
+ className: classNames(["zen-chart", className || ""]),
157
+ ref: chartRef,
158
+ tabIndex: 0,
159
+ role: "figure",
160
+ "aria-label": translate("Line chart"),
161
+ "aria-describedby": narrativeId,
162
+ children: [insight ? _jsx(ChartInsight, Object.assign({}, insight)) : null, summary !== false ? _jsx(Summary, Object.assign({}, intSummary, {
163
+ onToggle: toggleMainDataset,
164
+ isEnabled: isMainHidden
165
+ })) : null, (isDrive ? undefined : xLabels) || yLabels.length > 0 ? _jsx(ChartAxis, {
166
+ xLabel: isDrive ? undefined : xLabels,
167
+ yLabels: yLabels,
168
+ yAxisPosition: isRtl ? "left" : "right"
169
+ }) : null, _jsx("div", {
170
+ className: "zen-chart__chart",
171
+ children: _jsx(Line, Object.assign({
172
+ width: 100,
173
+ height: 100,
174
+ options: chartOptions,
175
+ data: chartData,
176
+ plugins: chartPlugins,
177
+ "aria-hidden": true
178
+ }, rest))
179
+ }), _jsx("div", {
180
+ className: "zen-chart__legend",
181
+ id: legendId
182
+ }), isDrive && xLabels ? _jsx("div", {
183
+ className: "zen-chart__x-axis",
184
+ children: xLabels
185
+ }) : null]
186
+ }), _jsx(AccessibleChart, {
187
+ type: "line",
188
+ data: chartData,
189
+ options: chartOptions,
190
+ narrativeId: narrativeId
191
+ })]
192
+ });
193
+ };
@@ -1,15 +1,13 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
1
+ import { injectString } from "../utils/localization/translationsDictionary";
2
+ var __rest = this && this.__rest || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
6
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
7
+ }
8
+ return t;
11
9
  };
12
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
11
  import { useCallback, useContext, useEffect, useId, useMemo, useRef } from "react";
14
12
  import { Pie } from "../react-chartjs/typedCharts";
15
13
  import { Chart as ChartJS, PieController, ArcElement } from "chart.js/auto";
@@ -31,69 +29,164 @@ import { AccessibleChart } from "./accessibleChart/accessibleChart";
31
29
  import { centerTextPlugin } from "./pieChart/centerTextPlugin";
32
30
  import { pieLegendPlugin } from "./pieChart/pieLegendPlugin";
33
31
  import { legendPlugin } from "./plugins/legend/legendPlugin";
32
+ import { useLanguage } from "../utils/localization/useLanguage";
33
+ injectString("cs", "Pie chart", "V\xFDse\u010Dov\xFD graf");
34
+ injectString("da-DK", "Pie chart", "Cirkeldiagram");
35
+ injectString("de", "Pie chart", "Kreisdiagramm");
36
+ injectString("en", "Pie chart", "Pie chart");
37
+ injectString("es", "Pie chart", "Gr\xE1fico de torta");
38
+ injectString("fi-FI", "Pie chart", "Ympyr\xE4kaavio");
39
+ injectString("fr", "Pie chart", "Graphique \xE0 secteurs");
40
+ injectString("fr-FR", "Pie chart", "Diagramme circulaire");
41
+ injectString("hu-HU", "Pie chart", "Keresztdiagram");
42
+ injectString("id", "Pie chart", "Bagan pai");
43
+ injectString("it", "Pie chart", "Grafico a torta");
44
+ injectString("ja", "Pie chart", "\u5186\u30B0\u30E9\u30D5");
45
+ injectString("ko-KR", "Pie chart", "\uD30C\uC774 \uCC28\uD2B8");
46
+ injectString("ms", "Pie chart", "Carta pai");
47
+ injectString("nb-NO", "Pie chart", "Sirkeldiagram");
48
+ injectString("nl", "Pie chart", "Cirkeldiagram");
49
+ injectString("pl", "Pie chart", "Wykres ko\u0142owy");
50
+ injectString("pt-BR", "Pie chart", "Gr\xE1fico de pizza");
51
+ injectString("pt-PT", "Pie chart", "Gr\xE1fico de setores");
52
+ injectString("sk-SK", "Pie chart", "Kol\xE1\u010Dov\xFD graf");
53
+ injectString("sv", "Pie chart", "Cirkeldiagram");
54
+ injectString("th", "Pie chart", "\u0E41\u0E1C\u0E19\u0E20\u0E39\u0E21\u0E34\u0E27\u0E07\u0E01\u0E25\u0E21");
55
+ injectString("tr", "Pie chart", "Pasta grafik");
56
+ injectString("zh-Hans", "Pie chart", "\u997C\u56FE");
57
+ injectString("zh-TW", "Pie chart", "\u5713\u5F62\u5716");
58
+ injectString("ro-RO", "Pie chart", "Diagram\u0103 circular\u0103");
59
+ injectString("ar", "Pie chart", "\u0645\u062E\u0637\u0637 \u062F\u0627\u0626\u0631\u064A");
60
+ injectString("lt-LT", "Pie chart", "Skritulin\u0117 diagrama");
61
+ injectString("lv-LV", "Pie chart", "Sektoru diagramma");
62
+ injectString("ka-GE", "Pie chart", "\u10EC\u10E0\u10D8\u10E3\u10DA\u10D8 \u10E1\u10E5\u10D4\u10DB\u10D0");
63
+ injectString("el-GR", "Pie chart", "\u0393\u03C1\u03AC\u03C6\u03B7\u03BC\u03B1 \u03C0\u03AF\u03C4\u03B1\u03C2");
64
+ injectString("et-EE", "Pie chart", "Sektordiagramm");
65
+ injectString("bg-BG", "Pie chart", "\u041A\u0440\u044A\u0433\u043E\u0432\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u0430");
34
66
  ChartJS.register(PieController, ArcElement);
35
- export const PieChart = (_a) => {
36
- var { data, options = {}, insight, summary, legend, tooltip, plugins, className } = _a, rest = __rest(_a, ["data", "options", "insight", "summary", "legend", "tooltip", "plugins", "className"]);
37
- const { isHorizontal } = options;
38
- const isDrive = useDrive();
39
- const isMobile = useMobile();
40
- const fontSize = useMemo(() => (isDrive ? (isMobile ? 14 : 16) : 12), [isDrive, isMobile]);
41
- const { dark } = useContext(themeContext);
42
- const legendId = useId();
43
- const tooltipId = useId();
44
- const containerRef = useRef(null);
45
- useEffect(() => {
46
- var _a;
47
- const el = containerRef.current;
48
- const styles = el ? (_a = zen.getComputedStyle) === null || _a === void 0 ? void 0 : _a.call(zen, el) : undefined;
49
- const fontFamily = (styles === null || styles === void 0 ? void 0 : styles.getPropertyValue("--main-font").trim()) || "Roboto";
50
- const color = (styles === null || styles === void 0 ? void 0 : styles.getPropertyValue("--text-primary").trim()) || "";
51
- ChartJS.defaults.font = {
52
- family: fontFamily,
53
- size: fontSize
54
- };
55
- ChartJS.defaults.color = color;
56
- }, [fontSize, dark]);
57
- const defOptions = useMemo(() => getDefaultOptions(), []);
58
- const chartOptions = deepMerge(defOptions, options);
59
- const { isHidden, toggleHidden: rawToggle } = useHidden();
60
- const pieData = data.datasets[0].data;
61
- const toggleHidden = useCallback((index) => {
62
- if (!isHidden(index)) {
63
- const visibleCount = pieData.filter((_, i) => !isHidden(i)).length;
64
- if (visibleCount <= 1)
65
- return;
66
- }
67
- rawToggle(index);
68
- }, [isHidden, rawToggle, pieData]);
69
- const chartData = useMemo(() => {
70
- const chData = Object.assign({}, data);
71
- chData.datasets = chData.datasets.map(ds => getDefaultDatasetStyle(ds));
72
- chData.datasets[0].data = chData.datasets[0].data.map((value, index) => (isHidden(index) ? 0 : value));
73
- return chData;
74
- }, [data, isHidden]);
75
- const chartTooltip = useMemo(() => TooltipPlugin(tooltipId, tooltip, "left", isHidden, dark), [tooltipId, tooltip, isHidden, dark]);
76
- const effectiveLegend = useMemo(() => (isHorizontal && legend !== false ? Object.assign(Object.assign({}, legend), { position: "right", showBar: true, showPercentage: true }) : legend), [isHorizontal, legend]);
77
- const legendData = useMemo(() => {
78
- var _a;
79
- return (Object.assign(Object.assign({}, data), { datasets: [Object.assign(Object.assign({}, data.datasets[0]), { backgroundColor: (_a = chartData.datasets[0]) === null || _a === void 0 ? void 0 : _a.backgroundColor }), ...data.datasets.slice(1)] }));
80
- }, [data, chartData]);
81
- const chartLegend = useMemo(() => isHorizontal
82
- ? pieLegendPlugin(legendId, effectiveLegend, isDrive, legendData, isHidden, toggleHidden)
83
- : legendPlugin(legendId, legend, isDrive, isHidden, toggleHidden), [isDrive, isHorizontal, effectiveLegend, legend, legendId, legendData, isHidden, toggleHidden]);
84
- const resolvedCenterText = useMemo(() => {
85
- if (!options.centerText)
86
- return undefined;
87
- const { getValue, value, label } = options.centerText;
88
- if (getValue) {
89
- const visibleValues = chartData.datasets[0].data.filter((_, i) => !isHidden(i));
90
- return { value: getValue(visibleValues), label };
91
- }
92
- return { value, label };
93
- }, [options.centerText, chartData, isHidden]);
94
- const chartCenterText = useMemo(() => centerTextPlugin(resolvedCenterText), [resolvedCenterText]);
95
- const chartPlugins = useMemo(() => [...(plugins || []), chartLegend, chartTooltip, chartCenterText], [chartLegend, chartTooltip, chartCenterText, plugins]);
96
- const intSummary = useSummary(summary, chartData);
97
- const legendRight = isHorizontal;
98
- return (_jsxs("div", { ref: containerRef, className: classNames(["zen-chart", legendRight ? "zen-chart--legend-right" : "", className || ""]), children: [insight ? _jsx(ChartInsight, Object.assign({}, insight)) : null, summary ? _jsx(Summary, Object.assign({}, intSummary)) : null, _jsx("div", { className: "zen-chart__chart", children: _jsx(Pie, Object.assign({ options: chartOptions, data: chartData, plugins: chartPlugins }, rest, { "aria-hidden": true })) }), _jsx("div", { className: "zen-chart__legend", id: legendId }), _jsx(AccessibleChart, { type: "pie", data: chartData })] }));
99
- };
67
+ export const PieChart = _a => {
68
+ var {
69
+ data,
70
+ options = {},
71
+ insight,
72
+ summary,
73
+ legend,
74
+ tooltip,
75
+ plugins,
76
+ className
77
+ } = _a,
78
+ rest = __rest(_a, ["data", "options", "insight", "summary", "legend", "tooltip", "plugins", "className"]);
79
+ const {
80
+ isHorizontal
81
+ } = options;
82
+ const {
83
+ translate
84
+ } = useLanguage();
85
+ const isDrive = useDrive();
86
+ const isMobile = useMobile();
87
+ const fontSize = useMemo(() => isDrive ? isMobile ? 14 : 16 : 12, [isDrive, isMobile]);
88
+ const {
89
+ dark
90
+ } = useContext(themeContext);
91
+ const legendId = useId();
92
+ const tooltipId = useId();
93
+ const narrativeId = useId();
94
+ const containerRef = useRef(null);
95
+ useEffect(() => {
96
+ var _a;
97
+ const el = containerRef.current;
98
+ const styles = el ? (_a = zen.getComputedStyle) === null || _a === void 0 ? void 0 : _a.call(zen, el) : undefined;
99
+ const fontFamily = (styles === null || styles === void 0 ? void 0 : styles.getPropertyValue("--main-font").trim()) || "Roboto";
100
+ const color = (styles === null || styles === void 0 ? void 0 : styles.getPropertyValue("--text-primary").trim()) || "";
101
+ ChartJS.defaults.font = {
102
+ family: fontFamily,
103
+ size: fontSize
104
+ };
105
+ ChartJS.defaults.color = color;
106
+ }, [fontSize, dark]);
107
+ const defOptions = useMemo(() => getDefaultOptions(), []);
108
+ const chartOptions = deepMerge(defOptions, options);
109
+ const {
110
+ isHidden,
111
+ toggleHidden: rawToggle
112
+ } = useHidden();
113
+ const pieData = data.datasets[0].data;
114
+ const toggleHidden = useCallback(index => {
115
+ if (!isHidden(index)) {
116
+ const visibleCount = pieData.filter((_, i) => !isHidden(i)).length;
117
+ if (visibleCount <= 1) return;
118
+ }
119
+ rawToggle(index);
120
+ }, [isHidden, rawToggle, pieData]);
121
+ const chartData = useMemo(() => {
122
+ const chData = Object.assign({}, data);
123
+ chData.datasets = chData.datasets.map(ds => getDefaultDatasetStyle(ds));
124
+ chData.datasets[0].data = chData.datasets[0].data.map((value, index) => isHidden(index) ? 0 : value);
125
+ return chData;
126
+ }, [data, isHidden]);
127
+ const chartTooltip = useMemo(() => TooltipPlugin(tooltipId, tooltip, "left", isHidden, dark), [tooltipId, tooltip, isHidden, dark]);
128
+ const effectiveLegend = useMemo(() => isHorizontal && legend !== false ? Object.assign(Object.assign({}, legend), {
129
+ position: "right",
130
+ showBar: true,
131
+ showPercentage: true
132
+ }) : legend, [isHorizontal, legend]);
133
+ const legendData = useMemo(() => {
134
+ var _a;
135
+ return Object.assign(Object.assign({}, data), {
136
+ datasets: [Object.assign(Object.assign({}, data.datasets[0]), {
137
+ backgroundColor: (_a = chartData.datasets[0]) === null || _a === void 0 ? void 0 : _a.backgroundColor
138
+ }), ...data.datasets.slice(1)]
139
+ });
140
+ }, [data, chartData]);
141
+ const chartLegend = useMemo(() => isHorizontal ? pieLegendPlugin(legendId, effectiveLegend, isDrive, legendData, isHidden, toggleHidden) : legendPlugin(legendId, legend, isDrive, isHidden, toggleHidden), [isDrive, isHorizontal, effectiveLegend, legend, legendId, legendData, isHidden, toggleHidden]);
142
+ const resolvedCenterText = useMemo(() => {
143
+ if (!options.centerText) return undefined;
144
+ const {
145
+ getValue,
146
+ value,
147
+ label
148
+ } = options.centerText;
149
+ if (getValue) {
150
+ const visibleValues = chartData.datasets[0].data.filter((_, i) => !isHidden(i));
151
+ return {
152
+ value: getValue(visibleValues),
153
+ label
154
+ };
155
+ }
156
+ return {
157
+ value,
158
+ label
159
+ };
160
+ }, [options.centerText, chartData, isHidden]);
161
+ const chartCenterText = useMemo(() => centerTextPlugin(resolvedCenterText), [resolvedCenterText]);
162
+ const chartPlugins = useMemo(() => [...(plugins || []), chartLegend, chartTooltip, chartCenterText], [chartLegend, chartTooltip, chartCenterText, plugins]);
163
+ const intSummary = useSummary(summary, chartData);
164
+ const legendRight = isHorizontal;
165
+ return _jsxs(_Fragment, {
166
+ children: [_jsxs("div", {
167
+ ref: containerRef,
168
+ className: classNames(["zen-chart", legendRight ? "zen-chart--legend-right" : "", className || ""]),
169
+ tabIndex: 0,
170
+ role: "figure",
171
+ "aria-label": translate("Pie chart"),
172
+ "aria-describedby": narrativeId,
173
+ children: [insight ? _jsx(ChartInsight, Object.assign({}, insight)) : null, summary ? _jsx(Summary, Object.assign({}, intSummary)) : null, _jsx("div", {
174
+ className: "zen-chart__chart",
175
+ children: _jsx(Pie, Object.assign({
176
+ options: chartOptions,
177
+ data: chartData,
178
+ plugins: chartPlugins
179
+ }, rest, {
180
+ "aria-hidden": true
181
+ }))
182
+ }), _jsx("div", {
183
+ className: "zen-chart__legend",
184
+ id: legendId
185
+ })]
186
+ }), _jsx(AccessibleChart, {
187
+ type: "pie",
188
+ data: data,
189
+ narrativeId: narrativeId
190
+ })]
191
+ });
192
+ };
@@ -37,6 +37,15 @@ export function getInterpolatedValue(xScale, data, datasetIndex, xPixel) {
37
37
  if (x1 === x2) {
38
38
  return y1;
39
39
  }
40
+ // Sub-pixel tolerance: element.x (from Chart.js) and xScale.getPixelForValue()
41
+ // can disagree by a fraction of a pixel, causing the cursor to land just past a
42
+ // data point and interpolate with the next segment instead of returning the exact value.
43
+ if (Math.abs(x - x1) < 0.5) {
44
+ return y1;
45
+ }
46
+ if (Math.abs(x - x2) < 0.5) {
47
+ return y2;
48
+ }
40
49
  const interpolatedY = y1 + ((y2 - y1) * (x - x1)) / (x2 - x1);
41
50
  return interpolatedY;
42
51
  }
@@ -1,3 +1,3 @@
1
1
  import { IBarChartData } from "../barChart/interfaces";
2
2
  import { ILineChartData } from "../lineChart/interfaces";
3
- export declare const convertDates: (data: ILineChartData | IBarChartData, toLocalDateTime: (date: Date | string) => Date) => IBarChartData | ILineChartData;
3
+ export declare const convertDates: (data: ILineChartData | IBarChartData, toLocalDateTime: (date: Date | string) => Date) => typeof data;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Computes a Y-axis min/max pair that:
3
+ * - Fully contains the original [min, max] range.
4
+ * - Splits into exactly `tickCount - 1` equal, "nice" (round-number) steps, so an axis
5
+ * configured with this min/max and `ticks.count = tickCount` renders exactly `tickCount`
6
+ * human-friendly tick values (e.g. 0, 25, 50, 75, 100) instead of arbitrary decimals.
7
+ *
8
+ * This is what allows forcing the same `ticks.count` across multiple Y-axes (see
9
+ * getYAxisTickCount) without sacrificing round-number tick labels: Chart.js's own tick
10
+ * generator produces evenly-spaced (but not necessarily round) values whenever `ticks.count`
11
+ * is combined with an explicit `min`/`max`, so the min/max passed in must already be "niced".
12
+ *
13
+ * **Precondition:** `min <= max`. An inverted range (`min > max`) produces a negative
14
+ * `rawStep`, which causes an early return of the original pair unchanged — Chart.js does not
15
+ * handle inverted axes gracefully. The current call chain enforces this via `normalizeRange`,
16
+ * so the inverted case is unreachable in practice; direct callers must guarantee it themselves.
17
+ */
18
+ export declare const getNiceAxisRange: (min: number, max: number, tickCount: number) => {
19
+ min: number;
20
+ max: number;
21
+ };
@@ -0,0 +1,72 @@
1
+ // Classic "nice numbers" step candidates, used to pick human-friendly tick spacing
2
+ // (e.g. 1, 2, 2.5, 5, 10, 20, 25, 50, 100...) instead of arbitrary decimals. 2.5 is included
3
+ // alongside the more common 1-2-5 sequence because omitting it causes the axis range to
4
+ // overshoot the data significantly more often (e.g. a range of 94 rounds up to a step of 50,
5
+ // i.e. a span of 200, instead of a step of 25, i.e. a span of 100).
6
+ const NICE_STEP_MULTIPLIERS = [1, 2, 2.5, 5];
7
+ /**
8
+ * Returns a sorted list of "nice" step candidates at or above `minStep`, spanning a few orders
9
+ * of magnitude so callers can pick the smallest one that satisfies their range requirement.
10
+ */
11
+ const getNiceStepCandidatesAtLeast = (minStep) => {
12
+ if (!Number.isFinite(minStep) || minStep <= 0) {
13
+ return [];
14
+ }
15
+ const exponent = Math.floor(Math.log10(minStep));
16
+ const candidates = [];
17
+ // Search a window around the raw step's magnitude; one order of magnitude below covers
18
+ // rounding edge cases (e.g. minStep just above a power of ten), and several above ensure
19
+ // we can always find a candidate whose range covers the data even for very large steps.
20
+ for (let e = exponent - 1; e <= exponent + 6; e++) {
21
+ for (const multiplier of NICE_STEP_MULTIPLIERS) {
22
+ candidates.push(multiplier * Math.pow(10, e));
23
+ }
24
+ }
25
+ return candidates.filter(candidate => candidate >= minStep * 0.999).sort((a, b) => a - b);
26
+ };
27
+ /**
28
+ * Rounds `value` to a sensible number of decimal places derived from `step`'s magnitude, to
29
+ * avoid floating point artifacts like 0.30000000000000004 ending up in tick labels.
30
+ */
31
+ const roundToStepPrecision = (value, step) => {
32
+ const decimals = Math.max(0, -Math.floor(Math.log10(step)) + 2);
33
+ const factor = Math.pow(10, decimals);
34
+ return Math.round(value * factor) / factor;
35
+ };
36
+ /**
37
+ * Computes a Y-axis min/max pair that:
38
+ * - Fully contains the original [min, max] range.
39
+ * - Splits into exactly `tickCount - 1` equal, "nice" (round-number) steps, so an axis
40
+ * configured with this min/max and `ticks.count = tickCount` renders exactly `tickCount`
41
+ * human-friendly tick values (e.g. 0, 25, 50, 75, 100) instead of arbitrary decimals.
42
+ *
43
+ * This is what allows forcing the same `ticks.count` across multiple Y-axes (see
44
+ * getYAxisTickCount) without sacrificing round-number tick labels: Chart.js's own tick
45
+ * generator produces evenly-spaced (but not necessarily round) values whenever `ticks.count`
46
+ * is combined with an explicit `min`/`max`, so the min/max passed in must already be "niced".
47
+ *
48
+ * **Precondition:** `min <= max`. An inverted range (`min > max`) produces a negative
49
+ * `rawStep`, which causes an early return of the original pair unchanged — Chart.js does not
50
+ * handle inverted axes gracefully. The current call chain enforces this via `normalizeRange`,
51
+ * so the inverted case is unreachable in practice; direct callers must guarantee it themselves.
52
+ */
53
+ export const getNiceAxisRange = (min, max, tickCount) => {
54
+ if (!Number.isFinite(min) || !Number.isFinite(max) || tickCount < 2) {
55
+ return { min, max };
56
+ }
57
+ const safeMax = min === max ? min + 1 : max;
58
+ const rawStep = (safeMax - min) / (tickCount - 1);
59
+ if (!(rawStep > 0)) {
60
+ return { min, max: safeMax };
61
+ }
62
+ const candidates = getNiceStepCandidatesAtLeast(rawStep);
63
+ for (const step of candidates) {
64
+ const niceMin = Math.floor(min / step) * step;
65
+ const niceMax = niceMin + step * (tickCount - 1);
66
+ if (niceMax >= safeMax) {
67
+ return { min: roundToStepPrecision(niceMin, step), max: roundToStepPrecision(niceMax, step) };
68
+ }
69
+ }
70
+ // Should be unreachable given the generated candidate range, but fall back safely.
71
+ return { min, max: safeMax };
72
+ };
@@ -3,12 +3,12 @@ export const getRange = (data) => {
3
3
  const { min, max } = getMinMax(data);
4
4
  let range = max - min;
5
5
  if (range === 0) {
6
- range = min * 0.1;
6
+ range = Math.abs(min) * 0.1;
7
7
  }
8
8
  const suggestedMin = min - range * 0.1;
9
9
  const suggestedMax = max + range * 0.1;
10
10
  return {
11
- min: suggestedMin,
11
+ min: min >= 0 && suggestedMin < 0 ? 0 : suggestedMin,
12
12
  max: suggestedMax
13
13
  };
14
14
  };
@@ -1,7 +1,4 @@
1
+ import { IYAxisMeta } from "../interfaces";
1
2
  import { ILineChartData } from "../lineChart/interfaces";
2
3
  import { IBarChartData } from "../barChart/interfaces";
3
- export declare const getYAxisMeta: (data: ILineChartData | IBarChartData, stacked?: boolean) => {
4
- min: number;
5
- max: number;
6
- name: string;
7
- }[];
4
+ export declare const getYAxisMeta: (data: ILineChartData | IBarChartData, stacked?: boolean) => IYAxisMeta[];