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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +11 -12
  2. package/dist/button/button.d.ts +2 -1
  3. package/dist/button/button.js +3 -3
  4. package/dist/calendar/calendar.js +201 -4
  5. package/dist/card/card.d.ts +1 -1
  6. package/dist/card/card.js +1 -1
  7. package/dist/card/components/cardButton/cardButton.d.ts +2 -1
  8. package/dist/card/components/cardButton/cardButton.js +5 -3
  9. package/dist/card/helpers/getIconTypeFromStatus.d.ts +1 -1
  10. package/dist/chart/barChart/getBarLegendItems.js +3 -5
  11. package/dist/chart/lineChart/getLineLegendItems.js +7 -7
  12. package/dist/chart/pieChart/centerTextPlugin.js +13 -5
  13. package/dist/chart/pieChart/getPieLegendItems.js +8 -12
  14. package/dist/chart/pieChart.js +13 -11
  15. package/dist/chart/plugins/legend/interfaces.d.ts +1 -1
  16. package/dist/commonHelpers/generateId.d.ts +8 -0
  17. package/dist/commonHelpers/generateId.js +8 -0
  18. package/dist/commonHelpers/hooks/ssrProvider.d.ts +14 -0
  19. package/dist/commonHelpers/hooks/ssrProvider.js +12 -0
  20. package/dist/commonHelpers/hooks/useClientReady.js +3 -1
  21. package/dist/commonHelpers/hooks/useDeviceType.js +6 -2
  22. package/dist/commonHelpers/hooks/useIsomorphicLayoutEffect.d.ts +2 -0
  23. package/dist/commonHelpers/hooks/useIsomorphicLayoutEffect.js +6 -0
  24. package/dist/commonHelpers/hooks/useMobile.js +4 -3
  25. package/dist/commonHelpers/hooks/usePortal.js +2 -5
  26. package/dist/commonHelpers/isDomEnv.js +1 -2
  27. package/dist/commonHelpers/useUniqueId.d.ts +6 -0
  28. package/dist/commonHelpers/useUniqueId.js +8 -2
  29. package/dist/commonHelpers/utils.d.ts +0 -1
  30. package/dist/commonHelpers/utils.js +1 -3
  31. package/dist/commonStyles/common.less +13 -1
  32. package/dist/commonStyles/fonts/notosarabic/LICENSE.txt +93 -0
  33. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Bold.woff +0 -0
  34. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Bold.woff2 +0 -0
  35. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Medium.woff +0 -0
  36. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Medium.woff2 +0 -0
  37. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Regular.woff +0 -0
  38. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Regular.woff2 +0 -0
  39. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-SemiBold.woff +0 -0
  40. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-SemiBold.woff2 +0 -0
  41. package/dist/commonStyles/fonts/notosarabic.less +43 -0
  42. package/dist/commonStyles/pillStyles/pillContent.less +2 -3
  43. package/dist/commonStyles/pillStyles/pillStyles.less +1 -2
  44. package/dist/commonStyles/pillStyles/pillTextContent.less +2 -2
  45. package/dist/commonStyles/typography/typography.less +440 -305
  46. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +5 -3
  47. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +2 -38
  48. package/dist/dateInputInner/dateInputInnerControlBlock.js +12 -8
  49. package/dist/dateRangeRaw/dateRangeRaw.js +5 -1
  50. package/dist/dialog/dialog.js +4 -3
  51. package/dist/feedbackContainer/feedbackContainer.js +4 -4
  52. package/dist/fileUpload/fileUpload.js +21 -12
  53. package/dist/filters/components/filtersSidePanel.d.ts +1 -1
  54. package/dist/filters/components/filtersSidePanel.js +123 -116
  55. package/dist/filters/filters.js +1 -2
  56. package/dist/filtersBar/filtersBar.d.ts +2 -0
  57. package/dist/filtersBar/filtersBar.js +5 -3
  58. package/dist/filtersBar/filtersBarActions/filtersBarActions.js +3 -1
  59. package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +3 -0
  60. package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.d.ts +1 -1
  61. package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +86 -80
  62. package/dist/formFieldError/formFieldError.d.ts +2 -1
  63. package/dist/formFieldError/formFieldError.js +2 -2
  64. package/dist/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +1 -1
  65. package/dist/index.css +3210 -2238
  66. package/dist/index.d.ts +3 -5
  67. package/dist/index.js +24 -29
  68. package/dist/menu/components/menuItem.js +4 -4
  69. package/dist/menu/controlledMenu.js +4 -4
  70. package/dist/nav/nav.js +10 -5
  71. package/dist/nav/navAddMenu/navAddMenu.js +1 -2
  72. package/dist/nav/navEditList/navEditListUtils.d.ts +1 -1
  73. package/dist/nav/navEditList/navEditListUtils.js +2 -1
  74. package/dist/nav/navItem/navActionItem.js +3 -3
  75. package/dist/nav/navItem/navItem.js +1 -2
  76. package/dist/pageHeader/pageHeaderActions.js +4 -3
  77. package/dist/rangeRaw/rangeRaw.js +7 -1
  78. package/dist/selectList/selectList.js +11 -7
  79. package/dist/selectRaw/selectRaw.js +1 -1
  80. package/dist/shield/shield.js +5 -3
  81. package/dist/sidePanel/sidePanel.js +9 -8
  82. package/dist/summaryTile/summaryTile.d.ts +1 -3
  83. package/dist/summaryTile/summaryTile.js +1 -2
  84. package/dist/table/children/useTableChildren.d.ts +1 -1
  85. package/dist/table/children/useTableChildren.js +3 -3
  86. package/dist/table/flexible/useFlexibleColumns.js +39 -1
  87. package/dist/table/nested/useNestedRows.d.ts +1 -0
  88. package/dist/table/nested/useNestedRows.js +3 -3
  89. package/dist/table/selectable/useSelectableRows.d.ts +9 -0
  90. package/dist/table/selectable/useSelectableRows.js +18 -11
  91. package/dist/table/table.js +1 -7
  92. package/dist/{card/components → title}/title.d.ts +1 -1
  93. package/dist/title/title.js +27 -0
  94. package/dist/toggleButtonRaw/toggleButtonRaw.js +3 -1
  95. package/dist/toggleButtonRaw/types.d.ts +1 -0
  96. package/dist/tooltip/tooltip.d.ts +2 -1
  97. package/dist/tooltip/tooltip.js +68 -64
  98. package/dist/utils/localization/directionContext.d.ts +3 -0
  99. package/dist/utils/localization/directionContext.js +5 -0
  100. package/dist/utils/localization/getTextDirection.d.ts +2 -0
  101. package/dist/utils/localization/getTextDirection.js +6 -0
  102. package/dist/utils/localization/languageProvider.js +15 -1
  103. package/dist/utils/localization/translations/en-json.d.ts +2 -0
  104. package/dist/utils/localization/translations/en-json.js +3 -1
  105. package/dist/utils/localization/translations/en.json +3 -0
  106. package/dist/utils/localization/useDirection.d.ts +2 -0
  107. package/dist/utils/localization/useDirection.js +7 -0
  108. package/esm/button/button.d.ts +2 -1
  109. package/esm/button/button.js +3 -3
  110. package/esm/calendar/calendar.js +201 -4
  111. package/esm/card/card.d.ts +1 -1
  112. package/esm/card/card.js +1 -1
  113. package/esm/card/components/cardButton/cardButton.d.ts +2 -1
  114. package/esm/card/components/cardButton/cardButton.js +5 -3
  115. package/esm/card/helpers/getIconTypeFromStatus.d.ts +1 -1
  116. package/esm/chart/barChart/getBarLegendItems.js +3 -5
  117. package/esm/chart/lineChart/getLineLegendItems.js +7 -7
  118. package/esm/chart/pieChart/centerTextPlugin.js +13 -5
  119. package/esm/chart/pieChart/getPieLegendItems.js +8 -12
  120. package/esm/chart/pieChart.js +14 -12
  121. package/esm/chart/plugins/legend/interfaces.d.ts +1 -1
  122. package/esm/commonHelpers/generateId.d.ts +8 -0
  123. package/esm/commonHelpers/generateId.js +8 -0
  124. package/esm/commonHelpers/hooks/ssrProvider.d.ts +14 -0
  125. package/esm/commonHelpers/hooks/ssrProvider.js +6 -0
  126. package/esm/commonHelpers/hooks/useClientReady.js +4 -2
  127. package/esm/commonHelpers/hooks/useDeviceType.js +7 -3
  128. package/esm/commonHelpers/hooks/useIsomorphicLayoutEffect.d.ts +2 -0
  129. package/esm/commonHelpers/hooks/useIsomorphicLayoutEffect.js +3 -0
  130. package/esm/commonHelpers/hooks/useMobile.js +4 -3
  131. package/esm/commonHelpers/hooks/usePortal.js +2 -5
  132. package/esm/commonHelpers/isDomEnv.js +1 -2
  133. package/esm/commonHelpers/useUniqueId.d.ts +6 -0
  134. package/esm/commonHelpers/useUniqueId.js +7 -1
  135. package/esm/commonHelpers/utils.d.ts +0 -1
  136. package/esm/commonHelpers/utils.js +0 -1
  137. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +5 -3
  138. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +2 -38
  139. package/esm/dateInputInner/dateInputInnerControlBlock.js +13 -9
  140. package/esm/dateRangeRaw/dateRangeRaw.js +5 -1
  141. package/esm/dialog/dialog.js +4 -3
  142. package/esm/feedbackContainer/feedbackContainer.js +4 -4
  143. package/esm/fileUpload/fileUpload.js +21 -12
  144. package/esm/filters/components/filtersSidePanel.d.ts +1 -1
  145. package/esm/filters/components/filtersSidePanel.js +123 -116
  146. package/esm/filters/filters.js +2 -3
  147. package/esm/filtersBar/filtersBar.d.ts +2 -0
  148. package/esm/filtersBar/filtersBar.js +5 -3
  149. package/esm/filtersBar/filtersBarActions/filtersBarActions.js +3 -1
  150. package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +3 -0
  151. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.d.ts +1 -1
  152. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +86 -80
  153. package/esm/formFieldError/formFieldError.d.ts +2 -1
  154. package/esm/formFieldError/formFieldError.js +2 -2
  155. package/esm/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +1 -1
  156. package/esm/index.d.ts +3 -5
  157. package/esm/index.js +3 -5
  158. package/esm/menu/components/menuItem.js +1 -1
  159. package/esm/menu/controlledMenu.js +1 -1
  160. package/esm/nav/nav.js +10 -5
  161. package/esm/nav/navAddMenu/navAddMenu.js +2 -3
  162. package/esm/nav/navEditList/navEditListUtils.d.ts +1 -1
  163. package/esm/nav/navEditList/navEditListUtils.js +2 -1
  164. package/esm/nav/navItem/navActionItem.js +3 -2
  165. package/esm/nav/navItem/navItem.js +2 -3
  166. package/esm/pageHeader/pageHeaderActions.js +4 -3
  167. package/esm/rangeRaw/rangeRaw.js +7 -1
  168. package/esm/selectList/selectList.js +11 -7
  169. package/esm/selectRaw/selectRaw.js +1 -1
  170. package/esm/shield/shield.js +5 -3
  171. package/esm/sidePanel/sidePanel.js +9 -8
  172. package/esm/summaryTile/summaryTile.d.ts +1 -3
  173. package/esm/summaryTile/summaryTile.js +1 -2
  174. package/esm/table/children/useTableChildren.d.ts +1 -1
  175. package/esm/table/children/useTableChildren.js +3 -3
  176. package/esm/table/flexible/useFlexibleColumns.js +39 -1
  177. package/esm/table/nested/useNestedRows.d.ts +1 -0
  178. package/esm/table/nested/useNestedRows.js +1 -1
  179. package/esm/table/selectable/useSelectableRows.d.ts +9 -0
  180. package/esm/table/selectable/useSelectableRows.js +15 -8
  181. package/esm/table/table.js +1 -7
  182. package/esm/{card/components → title}/title.d.ts +1 -1
  183. package/esm/title/title.js +23 -0
  184. package/esm/toggleButtonRaw/toggleButtonRaw.js +3 -1
  185. package/esm/toggleButtonRaw/types.d.ts +1 -0
  186. package/esm/tooltip/tooltip.d.ts +2 -1
  187. package/esm/tooltip/tooltip.js +68 -64
  188. package/esm/utils/localization/directionContext.d.ts +3 -0
  189. package/esm/utils/localization/directionContext.js +2 -0
  190. package/esm/utils/localization/getTextDirection.d.ts +2 -0
  191. package/esm/utils/localization/getTextDirection.js +2 -0
  192. package/esm/utils/localization/languageProvider.js +15 -1
  193. package/esm/utils/localization/translations/en-json.d.ts +2 -0
  194. package/esm/utils/localization/translations/en-json.js +3 -1
  195. package/esm/utils/localization/translations/en.json +3 -0
  196. package/esm/utils/localization/useDirection.d.ts +2 -0
  197. package/esm/utils/localization/useDirection.js +3 -0
  198. package/package.json +33 -31
  199. package/dist/card/components/title.js +0 -22
  200. package/dist/commonHelpers/hooks/deviceProvider.d.ts +0 -7
  201. package/dist/commonHelpers/hooks/deviceProvider.js +0 -11
  202. package/esm/card/components/title.js +0 -18
  203. package/esm/commonHelpers/hooks/deviceProvider.d.ts +0 -7
  204. package/esm/commonHelpers/hooks/deviceProvider.js +0 -4
@@ -312,4 +312,6 @@ export declare const translations: {
312
312
  "Failed to load page": string;
313
313
  "Please refresh the page and try again. If the issue persists, contact Support.": string;
314
314
  "Failed to load {0}": string;
315
+ "Sort by Ascending": string;
316
+ "Sort by Descending": string;
315
317
  };
@@ -314,5 +314,7 @@ exports.translations = {
314
314
  "Please reload this section to try again. If the issue persists, contact Support.": "Please reload this section to try again. If the issue persists, contact Support.",
315
315
  "Failed to load page": "Failed to load page",
316
316
  "Please refresh the page and try again. If the issue persists, contact Support.": "Please refresh the page and try again. If the issue persists, contact Support.",
317
- "Failed to load {0}": "Failed to load {0}"
317
+ "Failed to load {0}": "Failed to load {0}",
318
+ "Sort by Ascending": "Sort by Ascending",
319
+ "Sort by Descending": "Sort by Descending"
318
320
  };
@@ -208,6 +208,8 @@
208
208
  "X-axis": "X-axis",
209
209
  "Previous": "Previous",
210
210
  "Next": "Next",
211
+ "Previous date period": "Previous date period",
212
+ "Next date period": "Next date period",
211
213
  "Choose dates": "Choose dates",
212
214
  "Date range not available": "Date range not available",
213
215
  "Choose your date range": "Choose your date range",
@@ -217,6 +219,7 @@
217
219
  "Favorite": "Favorite",
218
220
  "All Filters": "All Filters",
219
221
  "Reset All": "Reset all",
222
+ "Active filters: {}": "Active filters: {}",
220
223
  "Loading": "Loading",
221
224
  "Select option": "Select option",
222
225
  "Value": "Value",
@@ -0,0 +1,2 @@
1
+ import { TTextDirection } from "./getTextDirection";
2
+ export declare const useDirection: () => TTextDirection;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useDirection = void 0;
4
+ const react_1 = require("react");
5
+ const directionContext_1 = require("./directionContext");
6
+ const useDirection = () => (0, react_1.useContext)(directionContext_1.directionContext);
7
+ exports.useDirection = useDirection;
@@ -24,8 +24,9 @@ export interface IButton extends IZenComponentProps, IZenGridItem {
24
24
  ref?: Ref<HTMLButtonElement | null>;
25
25
  role?: string;
26
26
  ariaLabel?: string;
27
+ dataAnalyticsId?: string;
27
28
  }
28
29
  export declare const Button: {
29
- ({ className, type, disabled, id, title, onClick, onMouseOver, onMouseOut, onMouseDown, onMouseUp, onKeyDown, onKeyUp, children, link, target, htmlType, rel, ref, name, onBlur, role, ariaLabel, ...other }: IButton): import("react/jsx-runtime").JSX.Element;
30
+ ({ className, type, disabled, id, title, onClick, onMouseOver, onMouseOut, onMouseDown, onMouseUp, onKeyDown, onKeyUp, children, link, target, htmlType, rel, ref, name, onBlur, role, ariaLabel, dataAnalyticsId, ...other }: IButton): import("react/jsx-runtime").JSX.Element;
30
31
  displayName: string;
31
32
  };
@@ -16,14 +16,14 @@ import { useDriveClassName } from "../utils/theme/useDriveClassName";
16
16
  import { filterGridProps } from "../gridLayout/utils/filterGridProps";
17
17
  import { useMobileClassName } from "../utils/theme/useMobileClassName";
18
18
  export const Button = (_a) => {
19
- var { className, type, disabled, id, title, onClick, onMouseOver, onMouseOut, onMouseDown, onMouseUp, onKeyDown, onKeyUp, children, link, target, htmlType, rel, ref, name, onBlur, role, ariaLabel } = _a, other = __rest(_a, ["className", "type", "disabled", "id", "title", "onClick", "onMouseOver", "onMouseOut", "onMouseDown", "onMouseUp", "onKeyDown", "onKeyUp", "children", "link", "target", "htmlType", "rel", "ref", "name", "onBlur", "role", "ariaLabel"]);
19
+ var { className, type, disabled, id, title, onClick, onMouseOver, onMouseOut, onMouseDown, onMouseUp, onKeyDown, onKeyUp, children, link, target, htmlType, rel, ref, name, onBlur, role, ariaLabel, dataAnalyticsId } = _a, other = __rest(_a, ["className", "type", "disabled", "id", "title", "onClick", "onMouseOver", "onMouseOut", "onMouseDown", "onMouseUp", "onKeyDown", "onKeyUp", "children", "link", "target", "htmlType", "rel", "ref", "name", "onBlur", "role", "ariaLabel", "dataAnalyticsId"]);
20
20
  const modifierClassName = type && type !== ButtonType.Secondary ? `zen-button--${type}` : "";
21
21
  const disabledClassName = disabled ? "zen-button--disabled" : "";
22
22
  const driveClasses = useDriveClassName("zen-button");
23
23
  const ariaLabelValue = ariaLabel || title;
24
24
  const mobileClasses = useMobileClassName("zen-button");
25
- const commonArgs = Object.assign(Object.assign({ id,
26
- title }, (ariaLabelValue ? { "aria-label": ariaLabelValue } : {})), { className: classNames(["zen-button", mobileClasses || driveClasses || "", modifierClassName, disabledClassName, className !== null && className !== void 0 ? className : ""]) });
25
+ const commonArgs = Object.assign(Object.assign(Object.assign({ id,
26
+ title }, (ariaLabelValue ? { "aria-label": ariaLabelValue } : {})), (dataAnalyticsId ? { "data-analytics-id": dataAnalyticsId } : {})), { className: classNames(["zen-button", mobileClasses || driveClasses || "", modifierClassName, disabledClassName, className !== null && className !== void 0 ? className : ""]) });
27
27
  if (link) {
28
28
  return (_jsx("a", Object.assign({ role: "link", rel: rel, target: target, href: disabled ? undefined : link, "aria-disabled": disabled, onKeyDown: onKeyDown, onKeyUp: onKeyUp, onMouseOver: onMouseOver, onMouseOut: onMouseOut, onClick: onClick }, commonArgs, filterGridProps(other), { children: children })));
29
29
  }
@@ -203,6 +203,195 @@ injectString("zh-Hans", "ShortSaturday", "\u516D");
203
203
  injectString("zh-TW", "ShortSaturday", "\u9031\u516D");
204
204
  injectString("ro-RO", "ShortSaturday", "ShortSaturday");
205
205
  injectString("ar-SA", "ShortSaturday", "\u0633");
206
+ injectString("cs", "Sunday", "Ned\u011Ble");
207
+ injectString("da-DK", "Sunday", "s\xF8ndag");
208
+ injectString("de", "Sunday", "Sonntag");
209
+ injectString("en", "Sunday", "Sunday");
210
+ injectString("es", "Sunday", "Domingo");
211
+ injectString("fi-FI", "Sunday", "Sunnuntai");
212
+ injectString("fr", "Sunday", "Dimanche");
213
+ injectString("fr-FR", "Sunday", "Dimanche");
214
+ injectString("hu-HU", "Sunday", "vas\xE1rnap");
215
+ injectString("id", "Sunday", "Minggu");
216
+ injectString("it", "Sunday", "Domenica");
217
+ injectString("ja", "Sunday", "\u65E5\u66DC\u65E5");
218
+ injectString("ko-KR", "Sunday", "\uC77C\uC694\uC77C");
219
+ injectString("ms", "Sunday", "Ahad");
220
+ injectString("nb-NO", "Sunday", "S\xF8ndag");
221
+ injectString("nl", "Sunday", "zondag");
222
+ injectString("pl", "Sunday", "Niedziela");
223
+ injectString("pt-BR", "Sunday", "Domingo");
224
+ injectString("pt-PT", "Sunday", "Domingo");
225
+ injectString("sk-SK", "Sunday", "Nede\u013Ea");
226
+ injectString("sv", "Sunday", "S\xF6ndag");
227
+ injectString("th", "Sunday", "\u0E27\u0E31\u0E19\u0E2D\u0E32\u0E17\u0E34\u0E15\u0E22\u0E4C");
228
+ injectString("tr", "Sunday", "Pazar");
229
+ injectString("zh-Hans", "Sunday", "\u661F\u671F\u5929");
230
+ injectString("zh-TW", "Sunday", "\u661F\u671F\u65E5");
231
+ injectString("ro-RO", "Sunday", "Duminic\u0103");
232
+ injectString("ar-SA", "Sunday", "\u0627\u0644\u0623\u062D\u062F");
233
+ injectString("cs", "Monday", "Pond\u011Bl\xED");
234
+ injectString("da-DK", "Monday", "mandag");
235
+ injectString("de", "Monday", "Montag");
236
+ injectString("en", "Monday", "Monday");
237
+ injectString("es", "Monday", "Lunes");
238
+ injectString("fi-FI", "Monday", "Maanantai");
239
+ injectString("fr", "Monday", "Lundi");
240
+ injectString("fr-FR", "Monday", "Lundi");
241
+ injectString("hu-HU", "Monday", "h\xE9tf\u0151");
242
+ injectString("id", "Monday", "Senin");
243
+ injectString("it", "Monday", "Luned\xEC");
244
+ injectString("ja", "Monday", "\u6708\u66DC\u65E5");
245
+ injectString("ko-KR", "Monday", "\uC6D4\uC694\uC77C");
246
+ injectString("ms", "Monday", "Isnin");
247
+ injectString("nb-NO", "Monday", "Mandag");
248
+ injectString("nl", "Monday", "maandag");
249
+ injectString("pl", "Monday", "Poniedzia\u0142ek");
250
+ injectString("pt-BR", "Monday", "Segunda-feira");
251
+ injectString("pt-PT", "Monday", "Segunda-feira");
252
+ injectString("sk-SK", "Monday", "pondelok");
253
+ injectString("sv", "Monday", "M\xE5ndag");
254
+ injectString("th", "Monday", "\u0E27\u0E31\u0E19\u0E08\u0E31\u0E19\u0E17\u0E23\u0E4C");
255
+ injectString("tr", "Monday", "Pazartesi");
256
+ injectString("zh-Hans", "Monday", "\u661F\u671F\u4E00");
257
+ injectString("zh-TW", "Monday", "\u661F\u671F\u4E00");
258
+ injectString("ro-RO", "Monday", "Luni");
259
+ injectString("ar-SA", "Monday", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646");
260
+ injectString("cs", "Tuesday", "\xDAter\xFD");
261
+ injectString("da-DK", "Tuesday", "tirsdag");
262
+ injectString("de", "Tuesday", "Dienstag");
263
+ injectString("en", "Tuesday", "Tuesday");
264
+ injectString("es", "Tuesday", "Martes");
265
+ injectString("fi-FI", "Tuesday", "Tiistai");
266
+ injectString("fr", "Tuesday", "Mardi");
267
+ injectString("fr-FR", "Tuesday", "Mardi");
268
+ injectString("hu-HU", "Tuesday", "kedd");
269
+ injectString("id", "Tuesday", "Selasa");
270
+ injectString("it", "Tuesday", "Marted\xEC");
271
+ injectString("ja", "Tuesday", "\u706B\u66DC\u65E5");
272
+ injectString("ko-KR", "Tuesday", "\uD654\uC694\uC77C");
273
+ injectString("ms", "Tuesday", "Selasa");
274
+ injectString("nb-NO", "Tuesday", "Tirsdag");
275
+ injectString("nl", "Tuesday", "dinsdag");
276
+ injectString("pl", "Tuesday", "Wtorek");
277
+ injectString("pt-BR", "Tuesday", "Ter\xE7a-feira");
278
+ injectString("pt-PT", "Tuesday", "Ter\xE7a-feira");
279
+ injectString("sk-SK", "Tuesday", "Utorok");
280
+ injectString("sv", "Tuesday", "Tisdag");
281
+ injectString("th", "Tuesday", "\u0E27\u0E31\u0E19\u0E2D\u0E31\u0E07\u0E04\u0E32\u0E23");
282
+ injectString("tr", "Tuesday", "Sal\u0131");
283
+ injectString("zh-Hans", "Tuesday", "\u661F\u671F\u4E8C");
284
+ injectString("zh-TW", "Tuesday", "\u661F\u671F\u4E8C");
285
+ injectString("ro-RO", "Tuesday", "Mar\u021Bi");
286
+ injectString("ar-SA", "Tuesday", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621");
287
+ injectString("cs", "Wednesday", "St\u0159eda");
288
+ injectString("da-DK", "Wednesday", "onsdag");
289
+ injectString("de", "Wednesday", "Mittwoch");
290
+ injectString("en", "Wednesday", "Wednesday");
291
+ injectString("es", "Wednesday", "Mi\xE9rcoles");
292
+ injectString("fi-FI", "Wednesday", "Keskiviikko");
293
+ injectString("fr", "Wednesday", "Mercredi");
294
+ injectString("fr-FR", "Wednesday", "Mercredi");
295
+ injectString("hu-HU", "Wednesday", "szerda");
296
+ injectString("id", "Wednesday", "Rabu");
297
+ injectString("it", "Wednesday", "Mercoled\xEC");
298
+ injectString("ja", "Wednesday", "\u6C34\u66DC\u65E5");
299
+ injectString("ko-KR", "Wednesday", "\uC218\uC694\uC77C");
300
+ injectString("ms", "Wednesday", "Rabu");
301
+ injectString("nb-NO", "Wednesday", "Onsdag");
302
+ injectString("nl", "Wednesday", "woensdag");
303
+ injectString("pl", "Wednesday", "\u015Aroda");
304
+ injectString("pt-BR", "Wednesday", "Quarta-feira");
305
+ injectString("pt-PT", "Wednesday", "Quarta-feira");
306
+ injectString("sk-SK", "Wednesday", "Streda");
307
+ injectString("sv", "Wednesday", "Onsdag");
308
+ injectString("th", "Wednesday", "\u0E27\u0E31\u0E19\u0E1E\u0E38\u0E18");
309
+ injectString("tr", "Wednesday", "\xC7ar\u015Famba");
310
+ injectString("zh-Hans", "Wednesday", "\u661F\u671F\u4E09");
311
+ injectString("zh-TW", "Wednesday", "\u661F\u671F\u4E09");
312
+ injectString("ro-RO", "Wednesday", "Miercuri");
313
+ injectString("ar-SA", "Wednesday", "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621");
314
+ injectString("cs", "Thursday", "\u010Ctvrtek");
315
+ injectString("da-DK", "Thursday", "torsdag");
316
+ injectString("de", "Thursday", "Donnerstag");
317
+ injectString("en", "Thursday", "Thursday");
318
+ injectString("es", "Thursday", "Jueves");
319
+ injectString("fi-FI", "Thursday", "Torstai");
320
+ injectString("fr", "Thursday", "Jeudi");
321
+ injectString("fr-FR", "Thursday", "Jeudi");
322
+ injectString("hu-HU", "Thursday", "cs\xFCt\xF6rt\xF6k");
323
+ injectString("id", "Thursday", "Kamis");
324
+ injectString("it", "Thursday", "Gioved\xEC");
325
+ injectString("ja", "Thursday", "\u6728\u66DC\u65E5");
326
+ injectString("ko-KR", "Thursday", "\uBAA9\uC694\uC77C");
327
+ injectString("ms", "Thursday", "Khamis");
328
+ injectString("nb-NO", "Thursday", "Torsdag");
329
+ injectString("nl", "Thursday", "donderdag");
330
+ injectString("pl", "Thursday", "Czwartek");
331
+ injectString("pt-BR", "Thursday", "Quinta-feira");
332
+ injectString("pt-PT", "Thursday", "Quinta-feira");
333
+ injectString("sk-SK", "Thursday", "\u0161tvrtok");
334
+ injectString("sv", "Thursday", "Torsdag");
335
+ injectString("th", "Thursday", "\u0E27\u0E31\u0E19\u0E1E\u0E24\u0E2B\u0E31\u0E2A\u0E1A\u0E14\u0E35");
336
+ injectString("tr", "Thursday", "Per\u015Fembe");
337
+ injectString("zh-Hans", "Thursday", "\u661F\u671F\u56DB");
338
+ injectString("zh-TW", "Thursday", "\u661F\u671F\u56DB");
339
+ injectString("ro-RO", "Thursday", "Joi");
340
+ injectString("ar-SA", "Thursday", "\u0627\u0644\u062E\u0645\u064A\u0633");
341
+ injectString("cs", "Friday", "P\xE1tek");
342
+ injectString("da-DK", "Friday", "fredag");
343
+ injectString("de", "Friday", "Freitag");
344
+ injectString("en", "Friday", "Friday");
345
+ injectString("es", "Friday", "Viernes");
346
+ injectString("fi-FI", "Friday", "Perjantai");
347
+ injectString("fr", "Friday", "Vendredi");
348
+ injectString("fr-FR", "Friday", "Vendredi");
349
+ injectString("hu-HU", "Friday", "p\xE9ntek");
350
+ injectString("id", "Friday", "Jumat");
351
+ injectString("it", "Friday", "Venerd\xEC");
352
+ injectString("ja", "Friday", "\u91D1\u66DC\u65E5");
353
+ injectString("ko-KR", "Friday", "\uAE08\uC694\uC77C");
354
+ injectString("ms", "Friday", "Jumaat");
355
+ injectString("nb-NO", "Friday", "Fredag");
356
+ injectString("nl", "Friday", "vrijdag");
357
+ injectString("pl", "Friday", "Pi\u0105tek");
358
+ injectString("pt-BR", "Friday", "Sexta-feira");
359
+ injectString("pt-PT", "Friday", "Sexta-feira");
360
+ injectString("sk-SK", "Friday", "Piatok");
361
+ injectString("sv", "Friday", "Fredag");
362
+ injectString("th", "Friday", "\u0E27\u0E31\u0E19\u0E28\u0E38\u0E01\u0E23\u0E4C");
363
+ injectString("tr", "Friday", "Cuma");
364
+ injectString("zh-Hans", "Friday", "\u661F\u671F\u4E94");
365
+ injectString("zh-TW", "Friday", "\u661F\u671F\u4E94");
366
+ injectString("ro-RO", "Friday", "Vineri");
367
+ injectString("ar-SA", "Friday", "\u0627\u0644\u062C\u0645\u0639\u0629");
368
+ injectString("cs", "Saturday", "Sobota");
369
+ injectString("da-DK", "Saturday", "l\xF8rdag");
370
+ injectString("de", "Saturday", "Samstag");
371
+ injectString("en", "Saturday", "Saturday");
372
+ injectString("es", "Saturday", "S\xE1bado");
373
+ injectString("fi-FI", "Saturday", "Lauantai");
374
+ injectString("fr", "Saturday", "Samedi");
375
+ injectString("fr-FR", "Saturday", "Samedi");
376
+ injectString("hu-HU", "Saturday", "szombat");
377
+ injectString("id", "Saturday", "Sabtu");
378
+ injectString("it", "Saturday", "Sabato");
379
+ injectString("ja", "Saturday", "\u571F\u66DC\u65E5");
380
+ injectString("ko-KR", "Saturday", "\uD1A0\uC694\uC77C");
381
+ injectString("ms", "Saturday", "Sabtu");
382
+ injectString("nb-NO", "Saturday", "L\xF8rdag");
383
+ injectString("nl", "Saturday", "zaterdag");
384
+ injectString("pl", "Saturday", "Sobota");
385
+ injectString("pt-BR", "Saturday", "S\xE1bado");
386
+ injectString("pt-PT", "Saturday", "S\xE1bado");
387
+ injectString("sk-SK", "Saturday", "Sobota");
388
+ injectString("sv", "Saturday", "L\xF6rdag");
389
+ injectString("th", "Saturday", "\u0E27\u0E31\u0E19\u0E40\u0E2A\u0E32\u0E23\u0E4C");
390
+ injectString("tr", "Saturday", "Cumartesi");
391
+ injectString("zh-Hans", "Saturday", "\u661F\u671F\u516D");
392
+ injectString("zh-TW", "Saturday", "\u661F\u671F\u516D");
393
+ injectString("ro-RO", "Saturday", "S\xE2mb\u0103t\u0103");
394
+ injectString("ar-SA", "Saturday", "\u0627\u0644\u0633\u0628\u062A");
206
395
  injectString("cs", "Jan", "Led");
207
396
  injectString("da-DK", "Jan", "Jan");
208
397
  injectString("de", "Jan", "Jan");
@@ -637,7 +826,7 @@ injectString("ro-RO", "Next month", "Luna urm\u0103toare");
637
826
  injectString("ar-SA", "Next month", "\u0627\u0644\u0634\u0647\u0631 \u0627\u0644\u062A\u0627\u0644\u064A");
638
827
  const DEFAULT_START_DAY_OF_WEEK = 0;
639
828
  const DEFAULT_YEAR_RANGE = 20;
640
- export const monthLabelsArray = ["Jan", "Feb", "Mar", "Apr", "Ma", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
829
+ export const monthLabelsArray = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
641
830
  export const Calendar = ({
642
831
  id,
643
832
  value,
@@ -694,6 +883,7 @@ export const Calendar = ({
694
883
  5: translate("ShortFriday"),
695
884
  6: translate("ShortSaturday")
696
885
  }), [translate]);
886
+ const fullDayLabels = useMemo(() => [translate("Sunday"), translate("Monday"), translate("Tuesday"), translate("Wednesday"), translate("Thursday"), translate("Friday"), translate("Saturday")], [translate]);
697
887
  const getDayOfWeek = useCallback(date => {
698
888
  const dayOfWeek = new Date(date).getDay();
699
889
  return dayLabels[dayOfWeek];
@@ -967,9 +1157,16 @@ export const Calendar = ({
967
1157
  children: [_jsx("thead", {
968
1158
  children: _jsx("tr", {
969
1159
  className: "zen-calendar__columns",
970
- children: dates[0].map(date => _jsx("th", {
1160
+ children: dates[0].map(date => _jsxs("th", {
1161
+ scope: "col",
971
1162
  className: "zen-calendar__column",
972
- children: getDayOfWeek(date)
1163
+ children: [_jsx("span", {
1164
+ "aria-hidden": "true",
1165
+ children: getDayOfWeek(date)
1166
+ }), _jsx("span", {
1167
+ className: "zen-visually-hidden",
1168
+ children: fullDayLabels[new Date(date).getDay()]
1169
+ })]
973
1170
  }, `cal-h-${date}`))
974
1171
  })
975
1172
  }), _jsx("tbody", {
@@ -1023,4 +1220,4 @@ export const Calendar = ({
1023
1220
  })]
1024
1221
  });
1025
1222
  };
1026
- export const TRANSLATIONS = ["Select year", "Previous month", "Next month", "Change start date, {date}", "Change end date, {date}", "Choose end date", "Choose start date", "Change date, {date}", "Choose date", "{short-day-of-week-sunday}S", "{short-day-of-week-monday}M", "{short-day-of-week-tuesday}T", "{short-day-of-week-wednesday}W", "{short-day-of-week-thursday}T", "{short-day-of-week-friday}F", "{short-day-of-week-saturday}S", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
1223
+ export const TRANSLATIONS = ["Select year", "Previous month", "Next month", "Change start date, {date}", "Change end date, {date}", "Choose end date", "Choose start date", "Change date, {date}", "Choose date", "{short-day-of-week-sunday}S", "{short-day-of-week-monday}M", "{short-day-of-week-tuesday}T", "{short-day-of-week-wednesday}W", "{short-day-of-week-thursday}T", "{short-day-of-week-friday}F", "{short-day-of-week-saturday}S", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
@@ -1,7 +1,7 @@
1
1
  import React, { FC, FunctionComponent, ReactNode } from "react";
2
2
  import { IAbsoluteSize, TContainerSize } from "../cardContainer/cardContainer";
3
3
  import { TCardStatus } from "./components/status";
4
- import { TIconType } from "./components/title";
4
+ import { TIconType } from "../title/title";
5
5
  import { IActions } from "./components/actions";
6
6
  import { IContent } from "./components/content";
7
7
  import "./card.less";
package/esm/card/card.js CHANGED
@@ -5,7 +5,7 @@ import { CardContainer } from "../cardContainer/cardContainer";
5
5
  import { DeviceType } from "../commonHelpers/hooks/deviceType";
6
6
  import { useDeviceType } from "../commonHelpers/hooks/useDeviceType";
7
7
  import { Status } from "./components/status";
8
- import { Title } from "./components/title";
8
+ import { Title } from "../title/title";
9
9
  import { Actions } from "./components/actions";
10
10
  import { Content } from "./components/content";
11
11
  import { useCardSize } from "./hooks/useCardSize";
@@ -10,5 +10,6 @@ export interface ICardButton extends IZenIdComponentProps {
10
10
  onClick?: React.MouseEventHandler<HTMLButtonElement>;
11
11
  link?: string;
12
12
  target?: HTMLAttributeAnchorTarget;
13
+ dataAnalyticsId?: string;
13
14
  }
14
- export declare const CardButton: ({ children, disabled, icon, name, onClick, link, className, target: linkTarget }: ICardButton) => import("react/jsx-runtime").JSX.Element;
15
+ export declare const CardButton: ({ children, disabled, icon, name, onClick, link, className, target: linkTarget, dataAnalyticsId }: ICardButton) => import("react/jsx-runtime").JSX.Element;
@@ -8,12 +8,14 @@ import { IconChevronTopSmall } from "../../../icons/iconChevronTopSmall";
8
8
  import { Menu } from "../../../menu/menu";
9
9
  import { useDriveClassName } from "../../../utils/theme/useDriveClassName";
10
10
  import { useDrive } from "../../../utils/theme/useDrive";
11
- export const CardButton = ({ children, disabled = false, icon, name, onClick, link, className, target: linkTarget }) => {
11
+ import { toKebabCase } from "../../../utils/toKebabCase";
12
+ export const CardButton = ({ children, disabled = false, icon, name, onClick, link, className, target: linkTarget, dataAnalyticsId }) => {
12
13
  const [isOpen, setIsOpen] = useState(false);
13
14
  const triggerRef = useRef(null);
14
15
  const content = [];
15
16
  const cardButtonDriveClasses = useDriveClassName("zen-card-button");
16
17
  const isDrive = useDrive();
18
+ const analyticsId = dataAnalyticsId || toKebabCase(name);
17
19
  Children.forEach(children, (el) => {
18
20
  if (el.type === Menu.Item) {
19
21
  content.push(el);
@@ -27,9 +29,9 @@ export const CardButton = ({ children, disabled = false, icon, name, onClick, li
27
29
  }
28
30
  onClick === null || onClick === void 0 ? void 0 : onClick(...args);
29
31
  };
30
- const renderLink = () => (_jsxs(Button, { disabled: disabled, type: "tertiary", link: link, target: linkTarget, title: name, className: classNames([className || "", "zen-card-button", "zen-caption", cardButtonDriveClasses || ""]), children: [icon && createElement(icon, { size: isDrive ? "huge" : "large", className: "zen-caption__pre-content" }), _jsx("span", { className: "zen-caption__content", children: name })] }));
32
+ const renderLink = () => (_jsxs(Button, { disabled: disabled, type: "tertiary", link: link, target: linkTarget, title: name, dataAnalyticsId: analyticsId, className: classNames([className || "", "zen-card-button", "zen-caption", cardButtonDriveClasses || ""]), children: [icon && createElement(icon, { size: isDrive ? "huge" : "large", className: "zen-caption__pre-content" }), _jsx("span", { className: "zen-caption__content", children: name })] }));
31
33
  const renderButton = () => {
32
- const trigger = (_jsxs(Button, { htmlType: "button", ref: triggerRef, disabled: disabled, type: "tertiary", onClick: onButtonClickHandler, title: name, className: classNames([className || "", "zen-card-button", "zen-caption", cardButtonDriveClasses || ""]), children: [icon && createElement(icon, { size: isDrive ? "huge" : "large", className: "zen-caption__pre-content" }), _jsx("span", { className: "zen-caption__content", children: name }), !!content.length &&
34
+ const trigger = (_jsxs(Button, { htmlType: "button", ref: triggerRef, disabled: disabled, type: "tertiary", onClick: onButtonClickHandler, title: name, dataAnalyticsId: analyticsId, className: classNames([className || "", "zen-card-button", "zen-caption", cardButtonDriveClasses || ""]), children: [icon && createElement(icon, { size: isDrive ? "huge" : "large", className: "zen-caption__pre-content" }), _jsx("span", { className: "zen-caption__content", children: name }), !!content.length &&
33
35
  (isOpen ? (_jsx(IconChevronTopSmall, { size: isDrive ? "huge" : "large", className: "zen-caption__post-content" })) : (_jsx(IconChevronDownSmall, { size: isDrive ? "huge" : "large", className: "zen-caption__post-content" })))] }));
34
36
  return content.length ? (_jsxs(_Fragment, { children: [trigger, _jsx(ControlledMenu, { title: name, isOpen: isOpen, setIsOpen: setIsOpen, triggerRef: triggerRef, children: content })] })) : (trigger);
35
37
  };
@@ -1,3 +1,3 @@
1
1
  import { TCardStatus } from "../components/status";
2
- import { TIconType } from "../components/title";
2
+ import { TIconType } from "../../title/title";
3
3
  export declare const getIconTypeFromStatus: (status: TCardStatus) => TIconType | undefined;
@@ -16,16 +16,14 @@ export const getBarLegendItems = (data, options) => {
16
16
  const legendItems = data.datasets.map((dataset, index) => {
17
17
  let value;
18
18
  if (options === null || options === void 0 ? void 0 : options.getValue) {
19
- const dataValues = getDatasetValues(dataset);
20
- const customValue = options.getValue(index, dataValues);
21
- if (customValue !== undefined) {
19
+ const customValue = options.getValue(index, getDatasetValues(dataset));
20
+ if (customValue !== null && customValue !== undefined) {
22
21
  const strValue = typeof customValue === "number" ? customValue.toFixed(2) : customValue;
23
22
  value = formatValue(strValue, index, options.unit);
24
23
  }
25
24
  }
26
25
  else if (options === null || options === void 0 ? void 0 : options.unit) {
27
- const sum = getDatasetSum(dataset);
28
- value = formatValue(sum.toFixed(2), index, options.unit);
26
+ value = formatValue(getDatasetSum(dataset).toFixed(2), index, options.unit);
29
27
  }
30
28
  const originalLabel = dataset.label || "";
31
29
  const text = (options === null || options === void 0 ? void 0 : options.getLabel) ? options.getLabel(index, originalLabel) : originalLabel;
@@ -35,15 +35,15 @@ export const getLineLegendItems = (data, options) => {
35
35
  }
36
36
  let value;
37
37
  if (options === null || options === void 0 ? void 0 : options.getValue) {
38
- const dataValues = getDatasetValues(dataset);
39
- const customValue = options.getValue(index, dataValues);
40
- if (customValue !== undefined) {
41
- const strValue = typeof customValue === "number" ? customValue.toFixed(2) : customValue;
38
+ const customValue = options.getValue(index, getDatasetValues(dataset));
39
+ if (customValue !== null) {
40
+ const strValue = customValue !== undefined
41
+ ? typeof customValue === "number"
42
+ ? customValue.toFixed(2)
43
+ : customValue
44
+ : getLatestValue(dataset).toFixed(2);
42
45
  value = formatValue(strValue, index, options.unit);
43
46
  }
44
- else {
45
- value = formatValue(getLatestValue(dataset).toFixed(2), index, options.unit);
46
- }
47
47
  }
48
48
  else {
49
49
  value = formatValue(getLatestValue(dataset).toFixed(2), index, options === null || options === void 0 ? void 0 : options.unit);
@@ -3,6 +3,7 @@ const getCssVar = (el, name) => { var _a, _b; return (_b = (_a = zen.getComputed
3
3
  export const centerTextPlugin = (centerText) => ({
4
4
  id: "zenithPieCenterText",
5
5
  afterDraw(chart) {
6
+ var _a;
6
7
  if (!centerText || centerText.value === undefined) {
7
8
  return;
8
9
  }
@@ -11,18 +12,25 @@ export const centerTextPlugin = (centerText) => ({
11
12
  const centerX = left + width / 2;
12
13
  const centerY = top + height / 2;
13
14
  const css = (name) => getCssVar(chart.canvas, name);
14
- const fontFamily = css("--main-font");
15
+ const fontFamily = ((_a = zen.getComputedStyle) === null || _a === void 0 ? void 0 : _a.call(zen, chart.canvas).fontFamily) || "Roboto";
15
16
  const hasLabel = !!centerText.label;
16
- const valueY = hasLabel ? centerY - 14 : centerY;
17
+ const meta = chart.getDatasetMeta(0);
18
+ const controllerRadius = meta.controller.innerRadius;
19
+ const innerRadius = typeof controllerRadius === "number" && controllerRadius > 0 ? controllerRadius : Math.min(width, height) * 0.325;
20
+ const maxValueFont = parseFloat(css("--pie-center-value-font-size")) || 28;
21
+ const maxLabelFont = parseFloat(css("--pie-center-label-font-size")) || 14;
22
+ const valueFontSize = Math.max(10, Math.min(maxValueFont, innerRadius * 0.45));
23
+ const labelFontSize = Math.max(8, Math.min(maxLabelFont, innerRadius * 0.22));
24
+ const valueY = hasLabel ? centerY - valueFontSize * 0.5 : centerY;
17
25
  ctx.textAlign = "center";
18
26
  ctx.textBaseline = "middle";
19
- ctx.font = `${css("--pie-center-value-font-weight")} ${css("--pie-center-value-font-size")} ${fontFamily}`;
27
+ ctx.font = `${css("--pie-center-value-font-weight")} ${valueFontSize}px ${fontFamily}`;
20
28
  ctx.fillStyle = css("--text-primary");
21
29
  ctx.fillText(String(centerText.value), centerX, valueY);
22
30
  if (hasLabel) {
23
- ctx.font = `${css("--pie-center-label-font-weight")} ${css("--pie-center-label-font-size")} ${fontFamily}`;
31
+ ctx.font = `${css("--pie-center-label-font-weight")} ${labelFontSize}px ${fontFamily}`;
24
32
  ctx.fillStyle = css("--text-secondary");
25
- ctx.fillText(String(centerText.label), centerX, centerY + 16);
33
+ ctx.fillText(String(centerText.label), centerX, centerY + labelFontSize * 1.1);
26
34
  }
27
35
  ctx.restore();
28
36
  }
@@ -8,22 +8,18 @@ export const getPieLegendItems = (data, options, isHidden) => {
8
8
  const colors = dataset.backgroundColor || [];
9
9
  const legendItems = dataset.data.map((item, index) => {
10
10
  let value;
11
- if (isHidden(index)) {
12
- value = undefined;
13
- }
14
- else if (options === null || options === void 0 ? void 0 : options.getValue) {
15
- const customValue = options.getValue(index, dataset.data);
16
- if (customValue !== undefined) {
17
- const strValue = typeof customValue === "number" ? customValue.toFixed(2) : customValue;
18
- value = formatValue(strValue, index, options.unit);
11
+ if (!isHidden(index)) {
12
+ if (options === null || options === void 0 ? void 0 : options.getValue) {
13
+ const customValue = options.getValue(index, dataset.data);
14
+ if (customValue !== null) {
15
+ const strValue = customValue !== undefined ? (typeof customValue === "number" ? customValue.toFixed(2) : customValue) : item.toFixed(2);
16
+ value = formatValue(strValue, index, options.unit);
17
+ }
19
18
  }
20
19
  else {
21
- value = formatValue(item.toFixed(2), index, options.unit);
20
+ value = formatValue(item.toFixed(2), index, options === null || options === void 0 ? void 0 : options.unit);
22
21
  }
23
22
  }
24
- else {
25
- value = formatValue(item.toFixed(2), index, options === null || options === void 0 ? void 0 : options.unit);
26
- }
27
23
  const originalLabel = labels[index] && typeof labels[index] === "string" ? labels[index] : "";
28
24
  const text = (options === null || options === void 0 ? void 0 : options.getLabel) ? options.getLabel(index, originalLabel) : originalLabel;
29
25
  return {
@@ -10,12 +10,11 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
- import { useContext, useEffect, useId, useMemo, useRef } from "react";
13
+ import { useCallback, useContext, useEffect, useId, useMemo } from "react";
14
14
  import { Pie } from "../react-chartjs/typedCharts";
15
15
  import { Chart as ChartJS, PieController, ArcElement } from "chart.js/auto";
16
16
  import "../react-chartjs/dateAdapter";
17
17
  import { deepMerge } from "../commonHelpers/utils";
18
- import { zen } from "../utils/zen";
19
18
  import { useDrive } from "../utils/theme/useDrive";
20
19
  import { useMobile } from "../commonHelpers/hooks/useMobile";
21
20
  import { themeContext } from "../utils/theme/themeContext";
@@ -41,22 +40,25 @@ export const PieChart = (_a) => {
41
40
  const { dark } = useContext(themeContext);
42
41
  const legendId = useId();
43
42
  const tooltipId = useId();
44
- const containerRef = useRef(null);
45
43
  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
44
  ChartJS.defaults.font = {
52
- family: fontFamily,
45
+ family: "Roboto",
53
46
  size: fontSize
54
47
  };
55
- ChartJS.defaults.color = color;
48
+ ChartJS.defaults.color = dark ? "#FFFFFF" : "#1F2833";
56
49
  }, [fontSize, dark]);
57
50
  const defOptions = useMemo(() => getDefaultOptions(), []);
58
51
  const chartOptions = deepMerge(defOptions, options);
59
- const { isHidden, toggleHidden } = useHidden();
52
+ const { isHidden, toggleHidden: rawToggle } = useHidden();
53
+ const pieData = data.datasets[0].data;
54
+ const toggleHidden = useCallback((index) => {
55
+ if (!isHidden(index)) {
56
+ const visibleCount = pieData.filter((_, i) => !isHidden(i)).length;
57
+ if (visibleCount <= 1)
58
+ return;
59
+ }
60
+ rawToggle(index);
61
+ }, [isHidden, rawToggle, pieData]);
60
62
  const chartData = useMemo(() => {
61
63
  const chData = Object.assign({}, data);
62
64
  chData.datasets = chData.datasets.map(ds => getDefaultDatasetStyle(ds));
@@ -86,5 +88,5 @@ export const PieChart = (_a) => {
86
88
  const chartPlugins = useMemo(() => [...(plugins || []), chartLegend, chartTooltip, chartCenterText], [chartLegend, chartTooltip, chartCenterText, plugins]);
87
89
  const intSummary = useSummary(summary, chartData);
88
90
  const legendRight = isHorizontal;
89
- 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 })] }));
91
+ return (_jsxs("div", { 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 })] }));
90
92
  };
@@ -1,6 +1,6 @@
1
1
  import { TUnit } from "../../interfaces";
2
2
  export interface ILegendOptions {
3
3
  unit?: TUnit;
4
- getValue?: (datasetIndex: number, data: number[]) => string | number | undefined;
4
+ getValue?: (datasetIndex: number, data: number[]) => string | number | null | undefined;
5
5
  getLabel?: (datasetIndex: number, originalLabel: string) => string;
6
6
  }
@@ -1 +1,9 @@
1
+ /**
2
+ * Generates a random unique ID string.
3
+ *
4
+ * @remarks
5
+ * **Prefer `React.useId()`** inside React components. `useId` produces IDs that are
6
+ * stable across server and client renders, preventing SSR hydration mismatches.
7
+ * Use `generateId` only outside of a React component context where `useId` is not available.
8
+ */
1
9
  export declare function generateId(): string;
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Generates a random unique ID string.
3
+ *
4
+ * @remarks
5
+ * **Prefer `React.useId()`** inside React components. `useId` produces IDs that are
6
+ * stable across server and client renders, preventing SSR hydration mismatches.
7
+ * Use `generateId` only outside of a React component context where `useId` is not available.
8
+ */
1
9
  export function generateId() {
2
10
  return "id" + Math.random().toString().substring(2) + Math.random().toString().substring(2);
3
11
  }
@@ -0,0 +1,14 @@
1
+ import { PropsWithChildren } from "react";
2
+ import { DeviceType } from "./deviceType";
3
+ interface ISSRContext {
4
+ isClientReady: boolean;
5
+ deviceType?: DeviceType;
6
+ }
7
+ export declare const SSRContext: import("react").Context<ISSRContext | null>;
8
+ export declare const SSRProvider: ({ deviceType, isClientReady, children }: PropsWithChildren<{
9
+ deviceType?: DeviceType;
10
+ isClientReady?: boolean;
11
+ }>) => import("react/jsx-runtime").JSX.Element;
12
+ export declare const useSSRContext: () => ISSRContext | null;
13
+ export declare const useIsSSRProviderMounted: () => boolean;
14
+ export {};
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from "react";
3
+ export const SSRContext = createContext(null);
4
+ export const SSRProvider = ({ deviceType, isClientReady = false, children }) => (_jsx(SSRContext.Provider, { value: { isClientReady, deviceType }, children: children }));
5
+ export const useSSRContext = () => useContext(SSRContext);
6
+ export const useIsSSRProviderMounted = () => useContext(SSRContext) !== null;