@geotab/zenith 3.8.0 → 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 (200) hide show
  1. package/README.md +11 -12
  2. package/dist/button/button.d.ts +2 -1
  3. package/dist/button/button.js +3 -3
  4. package/dist/calendar/calendar.js +200 -3
  5. package/dist/card/card.d.ts +1 -1
  6. package/dist/card/card.js +1 -1
  7. package/dist/card/components/cardButton/cardButton.d.ts +2 -1
  8. package/dist/card/components/cardButton/cardButton.js +5 -3
  9. package/dist/card/helpers/getIconTypeFromStatus.d.ts +1 -1
  10. package/dist/chart/barChart/getBarLegendItems.js +3 -5
  11. package/dist/chart/lineChart/getLineLegendItems.js +7 -7
  12. package/dist/chart/pieChart/centerTextPlugin.js +13 -5
  13. package/dist/chart/pieChart/getPieLegendItems.js +8 -12
  14. package/dist/chart/pieChart.js +13 -11
  15. package/dist/chart/plugins/legend/interfaces.d.ts +1 -1
  16. package/dist/commonHelpers/generateId.d.ts +8 -0
  17. package/dist/commonHelpers/generateId.js +8 -0
  18. package/dist/commonHelpers/hooks/ssrProvider.d.ts +14 -0
  19. package/dist/commonHelpers/hooks/ssrProvider.js +12 -0
  20. package/dist/commonHelpers/hooks/useClientReady.js +3 -1
  21. package/dist/commonHelpers/hooks/useDeviceType.js +6 -2
  22. package/dist/commonHelpers/hooks/useIsomorphicLayoutEffect.d.ts +2 -0
  23. package/dist/commonHelpers/hooks/useIsomorphicLayoutEffect.js +6 -0
  24. package/dist/commonHelpers/hooks/useMobile.js +4 -3
  25. package/dist/commonHelpers/hooks/usePortal.js +2 -5
  26. package/dist/commonHelpers/isDomEnv.js +1 -2
  27. package/dist/commonHelpers/useUniqueId.d.ts +6 -0
  28. package/dist/commonHelpers/useUniqueId.js +8 -2
  29. package/dist/commonHelpers/utils.d.ts +0 -1
  30. package/dist/commonHelpers/utils.js +1 -3
  31. package/dist/commonStyles/common.less +13 -1
  32. package/dist/commonStyles/fonts/notosarabic/LICENSE.txt +93 -0
  33. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Bold.woff +0 -0
  34. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Bold.woff2 +0 -0
  35. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Medium.woff +0 -0
  36. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Medium.woff2 +0 -0
  37. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Regular.woff +0 -0
  38. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-Regular.woff2 +0 -0
  39. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-SemiBold.woff +0 -0
  40. package/dist/commonStyles/fonts/notosarabic/NotoSansArabic-SemiBold.woff2 +0 -0
  41. package/dist/commonStyles/fonts/notosarabic.less +43 -0
  42. package/dist/commonStyles/pillStyles/pillContent.less +2 -3
  43. package/dist/commonStyles/pillStyles/pillStyles.less +1 -2
  44. package/dist/commonStyles/pillStyles/pillTextContent.less +2 -2
  45. package/dist/commonStyles/typography/typography.less +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/table/children/useTableChildren.d.ts +1 -1
  83. package/dist/table/children/useTableChildren.js +3 -3
  84. package/dist/table/flexible/useFlexibleColumns.js +39 -1
  85. package/dist/table/nested/useNestedRows.d.ts +1 -0
  86. package/dist/table/nested/useNestedRows.js +3 -3
  87. package/dist/table/selectable/useSelectableRows.d.ts +9 -0
  88. package/dist/table/selectable/useSelectableRows.js +18 -11
  89. package/dist/table/table.js +1 -7
  90. package/dist/{card/components → title}/title.d.ts +1 -1
  91. package/dist/title/title.js +27 -0
  92. package/dist/toggleButtonRaw/toggleButtonRaw.js +3 -1
  93. package/dist/toggleButtonRaw/types.d.ts +1 -0
  94. package/dist/tooltip/tooltip.d.ts +2 -1
  95. package/dist/tooltip/tooltip.js +68 -64
  96. package/dist/utils/localization/directionContext.d.ts +3 -0
  97. package/dist/utils/localization/directionContext.js +5 -0
  98. package/dist/utils/localization/getTextDirection.d.ts +2 -0
  99. package/dist/utils/localization/getTextDirection.js +6 -0
  100. package/dist/utils/localization/languageProvider.js +15 -1
  101. package/dist/utils/localization/translations/en-json.d.ts +2 -0
  102. package/dist/utils/localization/translations/en-json.js +3 -1
  103. package/dist/utils/localization/translations/en.json +3 -0
  104. package/dist/utils/localization/useDirection.d.ts +2 -0
  105. package/dist/utils/localization/useDirection.js +7 -0
  106. package/esm/button/button.d.ts +2 -1
  107. package/esm/button/button.js +3 -3
  108. package/esm/calendar/calendar.js +200 -3
  109. package/esm/card/card.d.ts +1 -1
  110. package/esm/card/card.js +1 -1
  111. package/esm/card/components/cardButton/cardButton.d.ts +2 -1
  112. package/esm/card/components/cardButton/cardButton.js +5 -3
  113. package/esm/card/helpers/getIconTypeFromStatus.d.ts +1 -1
  114. package/esm/chart/barChart/getBarLegendItems.js +3 -5
  115. package/esm/chart/lineChart/getLineLegendItems.js +7 -7
  116. package/esm/chart/pieChart/centerTextPlugin.js +13 -5
  117. package/esm/chart/pieChart/getPieLegendItems.js +8 -12
  118. package/esm/chart/pieChart.js +14 -12
  119. package/esm/chart/plugins/legend/interfaces.d.ts +1 -1
  120. package/esm/commonHelpers/generateId.d.ts +8 -0
  121. package/esm/commonHelpers/generateId.js +8 -0
  122. package/esm/commonHelpers/hooks/ssrProvider.d.ts +14 -0
  123. package/esm/commonHelpers/hooks/ssrProvider.js +6 -0
  124. package/esm/commonHelpers/hooks/useClientReady.js +4 -2
  125. package/esm/commonHelpers/hooks/useDeviceType.js +7 -3
  126. package/esm/commonHelpers/hooks/useIsomorphicLayoutEffect.d.ts +2 -0
  127. package/esm/commonHelpers/hooks/useIsomorphicLayoutEffect.js +3 -0
  128. package/esm/commonHelpers/hooks/useMobile.js +4 -3
  129. package/esm/commonHelpers/hooks/usePortal.js +2 -5
  130. package/esm/commonHelpers/isDomEnv.js +1 -2
  131. package/esm/commonHelpers/useUniqueId.d.ts +6 -0
  132. package/esm/commonHelpers/useUniqueId.js +7 -1
  133. package/esm/commonHelpers/utils.d.ts +0 -1
  134. package/esm/commonHelpers/utils.js +0 -1
  135. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +5 -3
  136. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +2 -38
  137. package/esm/dateInputInner/dateInputInnerControlBlock.js +13 -9
  138. package/esm/dateRangeRaw/dateRangeRaw.js +5 -1
  139. package/esm/dialog/dialog.js +4 -3
  140. package/esm/feedbackContainer/feedbackContainer.js +4 -4
  141. package/esm/fileUpload/fileUpload.js +21 -12
  142. package/esm/filters/components/filtersSidePanel.d.ts +1 -1
  143. package/esm/filters/components/filtersSidePanel.js +123 -116
  144. package/esm/filters/filters.js +2 -3
  145. package/esm/filtersBar/filtersBar.d.ts +2 -0
  146. package/esm/filtersBar/filtersBar.js +5 -3
  147. package/esm/filtersBar/filtersBarActions/filtersBarActions.js +3 -1
  148. package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +3 -0
  149. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.d.ts +1 -1
  150. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +86 -80
  151. package/esm/formFieldError/formFieldError.d.ts +2 -1
  152. package/esm/formFieldError/formFieldError.js +2 -2
  153. package/esm/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +1 -1
  154. package/esm/index.d.ts +3 -5
  155. package/esm/index.js +3 -5
  156. package/esm/menu/components/menuItem.js +1 -1
  157. package/esm/menu/controlledMenu.js +1 -1
  158. package/esm/nav/nav.js +10 -5
  159. package/esm/nav/navAddMenu/navAddMenu.js +2 -3
  160. package/esm/nav/navEditList/navEditListUtils.d.ts +1 -1
  161. package/esm/nav/navEditList/navEditListUtils.js +2 -1
  162. package/esm/nav/navItem/navActionItem.js +3 -2
  163. package/esm/nav/navItem/navItem.js +2 -3
  164. package/esm/pageHeader/pageHeaderActions.js +4 -3
  165. package/esm/rangeRaw/rangeRaw.js +7 -1
  166. package/esm/selectList/selectList.js +11 -7
  167. package/esm/selectRaw/selectRaw.js +1 -1
  168. package/esm/shield/shield.js +5 -3
  169. package/esm/sidePanel/sidePanel.js +9 -8
  170. package/esm/table/children/useTableChildren.d.ts +1 -1
  171. package/esm/table/children/useTableChildren.js +3 -3
  172. package/esm/table/flexible/useFlexibleColumns.js +39 -1
  173. package/esm/table/nested/useNestedRows.d.ts +1 -0
  174. package/esm/table/nested/useNestedRows.js +1 -1
  175. package/esm/table/selectable/useSelectableRows.d.ts +9 -0
  176. package/esm/table/selectable/useSelectableRows.js +15 -8
  177. package/esm/table/table.js +1 -7
  178. package/esm/{card/components → title}/title.d.ts +1 -1
  179. package/esm/title/title.js +23 -0
  180. package/esm/toggleButtonRaw/toggleButtonRaw.js +3 -1
  181. package/esm/toggleButtonRaw/types.d.ts +1 -0
  182. package/esm/tooltip/tooltip.d.ts +2 -1
  183. package/esm/tooltip/tooltip.js +68 -64
  184. package/esm/utils/localization/directionContext.d.ts +3 -0
  185. package/esm/utils/localization/directionContext.js +2 -0
  186. package/esm/utils/localization/getTextDirection.d.ts +2 -0
  187. package/esm/utils/localization/getTextDirection.js +2 -0
  188. package/esm/utils/localization/languageProvider.js +15 -1
  189. package/esm/utils/localization/translations/en-json.d.ts +2 -0
  190. package/esm/utils/localization/translations/en-json.js +3 -1
  191. package/esm/utils/localization/translations/en.json +3 -0
  192. package/esm/utils/localization/useDirection.d.ts +2 -0
  193. package/esm/utils/localization/useDirection.js +3 -0
  194. package/package.json +33 -31
  195. package/dist/card/components/title.js +0 -22
  196. package/dist/commonHelpers/hooks/deviceProvider.d.ts +0 -7
  197. package/dist/commonHelpers/hooks/deviceProvider.js +0 -11
  198. package/esm/card/components/title.js +0 -18
  199. package/esm/commonHelpers/hooks/deviceProvider.d.ts +0 -7
  200. package/esm/commonHelpers/hooks/deviceProvider.js +0 -4
@@ -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");
@@ -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;
@@ -1,7 +1,9 @@
1
- import { useEffect, useState } from "react";
1
+ import { useContext, useEffect, useState } from "react";
2
2
  import { isDomEnv } from "../isDomEnv";
3
+ import { SSRContext } from "./ssrProvider";
3
4
  export const useClientReady = () => {
4
- const [isClientReady, setIsClientReady] = useState(true);
5
+ const ctx = useContext(SSRContext);
6
+ const [isClientReady, setIsClientReady] = useState(ctx !== null ? ctx.isClientReady : true);
5
7
  useEffect(() => {
6
8
  if (isDomEnv()) {
7
9
  setIsClientReady(true);