@geotab/zenith 3.15.0 → 3.16.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 (184) hide show
  1. package/dist/absolute/absolute.js +1 -1
  2. package/dist/betaPill/betaPill.js +9 -9
  3. package/dist/commonHelpers/arrowNavigation/arrowNavigationHelper.d.ts +1 -0
  4. package/dist/commonHelpers/arrowNavigation/arrowNavigationHelper.js +5 -1
  5. package/dist/commonHelpers/hooks/useTrapFocus.d.ts +9 -0
  6. package/dist/commonHelpers/hooks/useTrapFocus.js +66 -14
  7. package/dist/controlledPopup/controlledPopup.d.ts +1 -1
  8. package/dist/controlledPopup/controlledPopup.js +1 -1
  9. package/dist/dropdownRaw/dropdownSearchableTrigger.js +1 -1
  10. package/dist/filtersBar/components/filtersBarRange/filtersBarRange.d.ts +1 -1
  11. package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.d.ts +1 -1
  12. package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +8 -5
  13. package/dist/filtersBar/filtersContainer/filtersContainer.js +7 -4
  14. package/dist/header/header.js +9 -2
  15. package/dist/header/headerHelpers.js +8 -5
  16. package/dist/index.css +142 -11
  17. package/dist/index.d.ts +6 -1
  18. package/dist/index.js +12 -3
  19. package/dist/modal/modal.d.ts +48 -0
  20. package/dist/modal/modal.js +37 -7
  21. package/dist/nav/navHeader/navHeader.d.ts +1 -1
  22. package/dist/nav/navHeader/navHeaderSearch/navHeaderSearch.js +1 -1
  23. package/dist/nav/navItem/navItem.d.ts +15 -2
  24. package/dist/nav/navItem/navItem.js +49 -7
  25. package/dist/nav/utils/navUtils.d.ts +2 -2
  26. package/dist/pillExpandable/pillExpandable.js +6 -3
  27. package/dist/rangeRaw/components/rangeField.d.ts +2 -1
  28. package/dist/rangeRaw/components/rangeField.js +4 -3
  29. package/dist/rangeRaw/rangeRaw.js +8 -5
  30. package/dist/rangeRaw/types.d.ts +1 -0
  31. package/dist/sidePanel/sidePanel.js +3 -2
  32. package/dist/table/selectable/interfaces.d.ts +13 -0
  33. package/dist/table/selectable/useSelectableRows.js +46 -12
  34. package/dist/table/selectable/utils/calculateSelectionState.js +35 -0
  35. package/dist/table/selectable/utils/isRowChecked.js +12 -1
  36. package/dist/table/table.d.ts +2 -0
  37. package/dist/table/table.js +3 -1
  38. package/dist/tabs/tabs.js +14 -5
  39. package/dist/textInputRaw/textInputRaw.js +1 -1
  40. package/dist/textInputRaw/types.d.ts +1 -0
  41. package/dist/tooltip/components/inlineTrigger.d.ts +43 -0
  42. package/dist/tooltip/components/inlineTrigger.js +42 -0
  43. package/dist/tooltip/tooltip.d.ts +5 -2
  44. package/dist/tooltip/tooltip.js +15 -4
  45. package/dist/trendIndicator/trendIndicator.d.ts +47 -0
  46. package/dist/trendIndicator/trendIndicator.js +47 -0
  47. package/dist/trendIndicator/trendIndicatorUtils.d.ts +9 -0
  48. package/dist/trendIndicator/trendIndicatorUtils.js +18 -0
  49. package/dist/utils/experimentalFeatures/experimentalContext.d.ts +17 -0
  50. package/dist/utils/experimentalFeatures/experimentalContext.js +29 -0
  51. package/dist/utils/experimentalFeatures/index.d.ts +4 -0
  52. package/dist/utils/experimentalFeatures/index.js +9 -0
  53. package/dist/utils/experimentalFeatures/registry.d.ts +13 -0
  54. package/dist/utils/experimentalFeatures/registry.js +11 -0
  55. package/dist/utils/experimentalFeatures/useExperimentalFeature.d.ts +3 -0
  56. package/dist/utils/experimentalFeatures/useExperimentalFeature.js +25 -0
  57. package/dist/utils/localization/translations/ar.json +1 -1
  58. package/dist/utils/localization/translations/bg-BG.json +1 -1
  59. package/dist/utils/localization/translations/cs.json +1 -1
  60. package/dist/utils/localization/translations/da-DK.json +1 -1
  61. package/dist/utils/localization/translations/de.json +1 -1
  62. package/dist/utils/localization/translations/el-GR.json +1 -1
  63. package/dist/utils/localization/translations/en.json +1 -1
  64. package/dist/utils/localization/translations/es.json +1 -1
  65. package/dist/utils/localization/translations/et-EE.json +1 -1
  66. package/dist/utils/localization/translations/fi-FI.json +1 -1
  67. package/dist/utils/localization/translations/fr-FR.json +1 -1
  68. package/dist/utils/localization/translations/fr.json +1 -1
  69. package/dist/utils/localization/translations/hu-HU.json +1 -1
  70. package/dist/utils/localization/translations/id.json +1 -1
  71. package/dist/utils/localization/translations/it.json +1 -1
  72. package/dist/utils/localization/translations/ja.json +1 -1
  73. package/dist/utils/localization/translations/ka-GE.json +1 -1
  74. package/dist/utils/localization/translations/ko-KR.json +1 -1
  75. package/dist/utils/localization/translations/lt-LT.json +1 -1
  76. package/dist/utils/localization/translations/lv-LV.json +1 -1
  77. package/dist/utils/localization/translations/ms.json +1 -1
  78. package/dist/utils/localization/translations/nb-NO.json +1 -1
  79. package/dist/utils/localization/translations/nl.json +1 -1
  80. package/dist/utils/localization/translations/pl.json +1 -1
  81. package/dist/utils/localization/translations/pt-BR.json +1 -1
  82. package/dist/utils/localization/translations/pt-PT.json +1 -1
  83. package/dist/utils/localization/translations/ro-RO.json +1 -1
  84. package/dist/utils/localization/translations/sk-SK.json +1 -1
  85. package/dist/utils/localization/translations/sv.json +1 -1
  86. package/dist/utils/localization/translations/th.json +1 -1
  87. package/dist/utils/localization/translations/tr.json +1 -1
  88. package/dist/utils/localization/translations/zh-Hans.json +1 -1
  89. package/dist/utils/localization/translations/zh-TW.json +1 -1
  90. package/esm/absolute/absolute.js +1 -1
  91. package/esm/betaPill/betaPill.js +9 -9
  92. package/esm/commonHelpers/arrowNavigation/arrowNavigationHelper.d.ts +1 -0
  93. package/esm/commonHelpers/arrowNavigation/arrowNavigationHelper.js +3 -0
  94. package/esm/commonHelpers/hooks/useTrapFocus.d.ts +9 -0
  95. package/esm/commonHelpers/hooks/useTrapFocus.js +67 -15
  96. package/esm/controlledPopup/controlledPopup.d.ts +1 -1
  97. package/esm/controlledPopup/controlledPopup.js +1 -1
  98. package/esm/dropdownRaw/dropdownSearchableTrigger.js +1 -1
  99. package/esm/filtersBar/components/filtersBarRange/filtersBarRange.d.ts +1 -1
  100. package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.d.ts +1 -1
  101. package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +8 -5
  102. package/esm/filtersBar/filtersContainer/filtersContainer.js +7 -4
  103. package/esm/header/header.js +9 -2
  104. package/esm/header/headerHelpers.js +8 -5
  105. package/esm/index.d.ts +6 -1
  106. package/esm/index.js +5 -1
  107. package/esm/modal/modal.d.ts +48 -0
  108. package/esm/modal/modal.js +37 -7
  109. package/esm/nav/navHeader/navHeader.d.ts +1 -1
  110. package/esm/nav/navHeader/navHeaderSearch/navHeaderSearch.js +1 -1
  111. package/esm/nav/navItem/navItem.d.ts +15 -2
  112. package/esm/nav/navItem/navItem.js +49 -7
  113. package/esm/nav/utils/navUtils.d.ts +2 -2
  114. package/esm/pillExpandable/pillExpandable.js +6 -3
  115. package/esm/rangeRaw/components/rangeField.d.ts +2 -1
  116. package/esm/rangeRaw/components/rangeField.js +4 -3
  117. package/esm/rangeRaw/rangeRaw.js +8 -5
  118. package/esm/rangeRaw/types.d.ts +1 -0
  119. package/esm/sidePanel/sidePanel.js +3 -2
  120. package/esm/table/selectable/interfaces.d.ts +13 -0
  121. package/esm/table/selectable/useSelectableRows.js +46 -12
  122. package/esm/table/selectable/utils/calculateSelectionState.js +35 -0
  123. package/esm/table/selectable/utils/isRowChecked.js +12 -1
  124. package/esm/table/table.d.ts +2 -0
  125. package/esm/table/table.js +2 -0
  126. package/esm/tabs/tabs.js +14 -5
  127. package/esm/testHelpers/renderWithFeatures.d.ts +4 -0
  128. package/esm/testHelpers/renderWithFeatures.js +6 -0
  129. package/esm/textInputRaw/textInputRaw.js +1 -1
  130. package/esm/textInputRaw/types.d.ts +1 -0
  131. package/esm/tooltip/components/inlineTrigger.d.ts +43 -0
  132. package/esm/tooltip/components/inlineTrigger.js +38 -0
  133. package/esm/tooltip/tooltip.d.ts +5 -2
  134. package/esm/tooltip/tooltip.js +15 -4
  135. package/esm/trendIndicator/trendIndicator.d.ts +47 -0
  136. package/esm/trendIndicator/trendIndicator.js +43 -0
  137. package/esm/trendIndicator/trendIndicatorUtils.d.ts +9 -0
  138. package/esm/trendIndicator/trendIndicatorUtils.js +14 -0
  139. package/esm/utils/experimentalFeatures/experimentalContext.d.ts +17 -0
  140. package/esm/utils/experimentalFeatures/experimentalContext.js +25 -0
  141. package/esm/utils/experimentalFeatures/index.d.ts +4 -0
  142. package/esm/utils/experimentalFeatures/index.js +3 -0
  143. package/esm/utils/experimentalFeatures/registry.d.ts +13 -0
  144. package/esm/utils/experimentalFeatures/registry.js +8 -0
  145. package/esm/utils/experimentalFeatures/useExperimentalFeature.d.ts +3 -0
  146. package/esm/utils/experimentalFeatures/useExperimentalFeature.js +21 -0
  147. package/esm/utils/localization/translations/ar.json +1 -1
  148. package/esm/utils/localization/translations/bg-BG.json +1 -1
  149. package/esm/utils/localization/translations/cs.json +1 -1
  150. package/esm/utils/localization/translations/da-DK.json +1 -1
  151. package/esm/utils/localization/translations/de.json +1 -1
  152. package/esm/utils/localization/translations/el-GR.json +1 -1
  153. package/esm/utils/localization/translations/en.json +1 -1
  154. package/esm/utils/localization/translations/es.json +1 -1
  155. package/esm/utils/localization/translations/et-EE.json +1 -1
  156. package/esm/utils/localization/translations/fi-FI.json +1 -1
  157. package/esm/utils/localization/translations/fr-FR.json +1 -1
  158. package/esm/utils/localization/translations/fr.json +1 -1
  159. package/esm/utils/localization/translations/hu-HU.json +1 -1
  160. package/esm/utils/localization/translations/id.json +1 -1
  161. package/esm/utils/localization/translations/it.json +1 -1
  162. package/esm/utils/localization/translations/ja.json +1 -1
  163. package/esm/utils/localization/translations/ka-GE.json +1 -1
  164. package/esm/utils/localization/translations/ko-KR.json +1 -1
  165. package/esm/utils/localization/translations/lt-LT.json +1 -1
  166. package/esm/utils/localization/translations/lv-LV.json +1 -1
  167. package/esm/utils/localization/translations/ms.json +1 -1
  168. package/esm/utils/localization/translations/nb-NO.json +1 -1
  169. package/esm/utils/localization/translations/nl.json +1 -1
  170. package/esm/utils/localization/translations/pl.json +1 -1
  171. package/esm/utils/localization/translations/pt-BR.json +1 -1
  172. package/esm/utils/localization/translations/pt-PT.json +1 -1
  173. package/esm/utils/localization/translations/ro-RO.json +1 -1
  174. package/esm/utils/localization/translations/sk-SK.json +1 -1
  175. package/esm/utils/localization/translations/sv.json +1 -1
  176. package/esm/utils/localization/translations/th.json +1 -1
  177. package/esm/utils/localization/translations/tr.json +1 -1
  178. package/esm/utils/localization/translations/zh-Hans.json +1 -1
  179. package/esm/utils/localization/translations/zh-TW.json +1 -1
  180. package/package.json +36 -16
  181. package/dist/banner/utils/isBannerTarget.d.ts +0 -1
  182. package/dist/banner/utils/isBannerTarget.js +0 -11
  183. package/esm/banner/utils/isBannerTarget.d.ts +0 -1
  184. package/esm/banner/utils/isBannerTarget.js +0 -7
@@ -0,0 +1,43 @@
1
+ import { ReactNode, Ref } from "react";
2
+ import "./inlineTrigger.less";
3
+ export interface IInlineTrigger {
4
+ /**
5
+ * The inline text that receives the dotted underline treatment.
6
+ *
7
+ * Accepts any `ReactNode`, but avoid placing interactive elements (buttons,
8
+ * links, inputs) inside — nesting interactive elements is invalid HTML and
9
+ * creates a poor keyboard and screen-reader experience.
10
+ *
11
+ * **For use within body-level text only.** Do not use inside headings, page
12
+ * titles, modal headers, or any non-body typographic context. Apply the
13
+ * desired body typography via `className` (e.g. `zen-body-s-700`).
14
+ */
15
+ children: ReactNode;
16
+ /** Additional CSS class names applied to the trigger button (e.g. a body typography class). */
17
+ className?: string;
18
+ ref?: Ref<HTMLButtonElement>;
19
+ }
20
+ /**
21
+ * `Tooltip.InlineTrigger` is an inline, dotted-underline trigger for the `Tooltip` component.
22
+ * Pass it as the `trigger` prop of a `Tooltip` to annotate a term within body text.
23
+ *
24
+ * The dotted underline uses the surrounding font colour (`currentColor`) at 15% thickness.
25
+ * The trigger inherits its typography from the surrounding text by default; pass a body
26
+ * typography class via `className` (e.g. `zen-body-s-700`, `zen-body-s-400-italic`) to override
27
+ * it explicitly. All interaction
28
+ * (hover, focus, keyboard, positioning) is handled by the parent `Tooltip` — this component only
29
+ * renders the trigger element and forwards the event handlers and `ref` that `Tooltip` injects.
30
+ *
31
+ * Set an accessible name via the parent `Tooltip`'s `triggerAriaLabel` prop when `children`
32
+ * contains no readable text (e.g. a purely decorative image or icon), so the button is not
33
+ * left without an accessible name (WCAG 4.1.2).
34
+ *
35
+ * @example
36
+ * <Tooltip alignment="top" trigger={<Tooltip.InlineTrigger className="zen-body-s-700">Inline text</Tooltip.InlineTrigger>}>
37
+ * The tooltip text.
38
+ * </Tooltip>
39
+ */
40
+ export declare const InlineTrigger: {
41
+ ({ children, className, ref, ...injectedProps }: IInlineTrigger): import("react/jsx-runtime").JSX.Element;
42
+ displayName: string;
43
+ };
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.InlineTrigger = void 0;
15
+ const jsx_runtime_1 = require("react/jsx-runtime");
16
+ const classNames_1 = require("../../commonHelpers/classNames/classNames");
17
+ /**
18
+ * `Tooltip.InlineTrigger` is an inline, dotted-underline trigger for the `Tooltip` component.
19
+ * Pass it as the `trigger` prop of a `Tooltip` to annotate a term within body text.
20
+ *
21
+ * The dotted underline uses the surrounding font colour (`currentColor`) at 15% thickness.
22
+ * The trigger inherits its typography from the surrounding text by default; pass a body
23
+ * typography class via `className` (e.g. `zen-body-s-700`, `zen-body-s-400-italic`) to override
24
+ * it explicitly. All interaction
25
+ * (hover, focus, keyboard, positioning) is handled by the parent `Tooltip` — this component only
26
+ * renders the trigger element and forwards the event handlers and `ref` that `Tooltip` injects.
27
+ *
28
+ * Set an accessible name via the parent `Tooltip`'s `triggerAriaLabel` prop when `children`
29
+ * contains no readable text (e.g. a purely decorative image or icon), so the button is not
30
+ * left without an accessible name (WCAG 4.1.2).
31
+ *
32
+ * @example
33
+ * <Tooltip alignment="top" trigger={<Tooltip.InlineTrigger className="zen-body-s-700">Inline text</Tooltip.InlineTrigger>}>
34
+ * The tooltip text.
35
+ * </Tooltip>
36
+ */
37
+ const InlineTrigger = (_a) => {
38
+ var { children, className = "", ref } = _a, injectedProps = __rest(_a, ["children", "className", "ref"]);
39
+ return ((0, jsx_runtime_1.jsx)("button", Object.assign({}, injectedProps, { ref: ref, type: "button", className: (0, classNames_1.classNames)(["zen-tooltip-inline-trigger", className]), children: children })));
40
+ };
41
+ exports.InlineTrigger = InlineTrigger;
42
+ exports.InlineTrigger.displayName = "InlineTrigger";
@@ -1,7 +1,8 @@
1
- import React, { PropsWithChildren, ReactElement } from "react";
1
+ import React, { FC, PropsWithChildren, ReactElement } from "react";
2
2
  import { IZenComponentProps } from "../commonHelpers/zenComponent";
3
3
  import "./tooltip.less";
4
4
  import { TAlignment } from "../absolute/absolute";
5
+ import { IInlineTrigger } from "./components/inlineTrigger";
5
6
  export type TooltipSize = "large" | "small" | "auto";
6
7
  export type TMobileView = "default" | "mobileSheet";
7
8
  interface ITooltip extends IZenComponentProps {
@@ -33,5 +34,7 @@ interface ITooltip extends IZenComponentProps {
33
34
  */
34
35
  mobileSheetTitle?: ReactElement | string;
35
36
  }
36
- export declare const Tooltip: ({ trigger, triggerClassName, triggerAriaLabel, className, alignment, children, mobileSheetTitle, mobileTitle }: ITooltip) => import("react/jsx-runtime").JSX.Element;
37
+ export declare const Tooltip: FC<ITooltip> & {
38
+ InlineTrigger: FC<IInlineTrigger>;
39
+ };
37
40
  export {};
@@ -134,6 +134,7 @@ const iconInfoCircle_1 = require("../icons/iconInfoCircle");
134
134
  const useDrive_1 = require("../utils/theme/useDrive");
135
135
  const shield_1 = require("../shield/shield");
136
136
  const zen_1 = require("../utils/zen");
137
+ const inlineTrigger_1 = require("./components/inlineTrigger");
137
138
  const TOOLTIP_VISIBILITY_DELAY = 100;
138
139
  const arrowClasses = {
139
140
  top: "zen-tooltip__arrow--top",
@@ -210,6 +211,7 @@ const EventWrapper = ({
210
211
  const propsToApply = isCurrentDeviceDesktop ? desktopEvents : mobileEvents;
211
212
  return react_1.default.cloneElement(children, propsToApply);
212
213
  };
214
+ // eslint-disable-next-line @typescript-eslint/naming-convention
213
215
  const Tooltip = ({
214
216
  trigger,
215
217
  triggerClassName,
@@ -242,7 +244,7 @@ const Tooltip = ({
242
244
  const {
243
245
  dark
244
246
  } = (0, react_1.useContext)(themeContext_1.themeContext);
245
- const tooltipAlignment = (0, react_1.useMemo)(() => isMobile ? "bottom" : alignment || (direction === "ltr" ? "right" : "left"), [isMobile, alignment, direction]);
247
+ const tooltipAlignment = (0, react_1.useMemo)(() => isMobile ? "bottom" : alignment || "end", [isMobile, alignment]);
246
248
  const normalizedTooltipAlignment = (0, react_1.useMemo)(() => (0, normalizeLogicalAlignment_1.normalizeLogicalAlignment)(tooltipAlignment, direction), [tooltipAlignment, direction]);
247
249
  const TOOLTIP_ARROW_HEIGHT = (0, react_1.useMemo)(() => isMobile || isDrive ? 0 : 6, [isMobile, isDrive]);
248
250
  const tooltipAlignmentRef = (0, react_1.useRef)(normalizedTooltipAlignment);
@@ -280,9 +282,17 @@ const Tooltip = ({
280
282
  }
281
283
  }
282
284
  }, [trigger === null || trigger === void 0 ? void 0 : trigger.props, deviceType]);
283
- const triggerCloneProps = (0, react_1.useMemo)(() => isTooltipVisible ? {
285
+ // Apply `triggerAriaLabel` to a `Tooltip.InlineTrigger` trigger (it has no `ariaLabel` prop
286
+ // of its own); the default info-icon trigger below handles `triggerAriaLabel` separately.
287
+ // An `aria-label` set directly on the `Tooltip.InlineTrigger` element takes priority over
288
+ // `triggerAriaLabel`, so we only fall back to `triggerAriaLabel` when the trigger has none.
289
+ const isInlineTrigger = (trigger === null || trigger === void 0 ? void 0 : trigger.type) === inlineTrigger_1.InlineTrigger;
290
+ const triggerOwnAriaLabel = trigger === null || trigger === void 0 ? void 0 : trigger.props["aria-label"];
291
+ const triggerCloneProps = (0, react_1.useMemo)(() => Object.assign(Object.assign({}, isTooltipVisible ? {
284
292
  "aria-describedby": tooltipId
285
- } : {}, [isTooltipVisible, tooltipId]);
293
+ } : {}), isInlineTrigger && triggerAriaLabel && !triggerOwnAriaLabel ? {
294
+ "aria-label": triggerAriaLabel
295
+ } : {}), [isTooltipVisible, tooltipId, isInlineTrigger, triggerAriaLabel, triggerOwnAriaLabel]);
286
296
  const tooltipTrigger = (0, react_1.useMemo)(() => trigger ? trigger : (0, jsx_runtime_1.jsx)("button", {
287
297
  tabIndex: 0,
288
298
  type: "button",
@@ -496,4 +506,5 @@ const Tooltip = ({
496
506
  children: [portal, triggerClone]
497
507
  });
498
508
  };
499
- exports.Tooltip = Tooltip;
509
+ exports.Tooltip = Tooltip;
510
+ exports.Tooltip.InlineTrigger = inlineTrigger_1.InlineTrigger;
@@ -0,0 +1,47 @@
1
+ import "./trendIndicator.less";
2
+ import { IZenComponentProps } from "../commonHelpers/zenComponent";
3
+ export type TTrendIndicatorDirection = "up" | "down" | "neutral";
4
+ export type TTrendIndicatorTone = "positive" | "negative" | "neutral";
5
+ export interface ITrendIndicator extends Pick<IZenComponentProps, "className"> {
6
+ /** Primary measured value displayed next to the direction icon, e.g. `"12.4km"`. */
7
+ value: string;
8
+ /**
9
+ * Change delta displayed after the value, e.g. `"+5%"` or `"+12km"`. When
10
+ * {@link ITrendIndicator.direction} is omitted, its sign determines the direction
11
+ * (and therefore the arrow and the default tone).
12
+ */
13
+ delta: string;
14
+ /**
15
+ * Trend direction — controls the arrow icon. When omitted, it is derived from the
16
+ * sign of {@link ITrendIndicator.delta}.
17
+ */
18
+ direction?: TTrendIndicatorDirection;
19
+ /**
20
+ * Color tone for the icon and delta. Defaults to the direction (`up` → positive,
21
+ * `down` → negative, `neutral` → neutral). Set it explicitly to decouple color from
22
+ * the arrow — e.g. `direction="up"` with `tone="negative"` for metrics where a rise
23
+ * is undesirable.
24
+ */
25
+ tone?: TTrendIndicatorTone;
26
+ }
27
+ /**
28
+ * A directional trend indicator: a direction icon, a value, and a change delta.
29
+ * Example: ▲ 12.4km +5%.
30
+ *
31
+ * Built for the `Table` and exposed only as `Table.TrendIndicator`, for use
32
+ * inside a column's inline `render` (or the table's mobile card form).
33
+ * Presentational — it conveys a value and its change and has no interactive
34
+ * behavior.
35
+ *
36
+ * The arrow icon reflects `direction`; the icon and delta take a color `tone`
37
+ * (positive / negative / neutral) from design tokens. Tone defaults to the
38
+ * direction but can be set independently for metrics where a rise is bad. The
39
+ * value uses the primary text color.
40
+ *
41
+ * The direction icon is decorative — direction is also conveyed by the sign of
42
+ * the delta text, so no accessible name is required.
43
+ */
44
+ export declare const TrendIndicator: {
45
+ ({ value, delta, direction, tone, className }: ITrendIndicator): import("react/jsx-runtime").JSX.Element;
46
+ displayName: string;
47
+ };
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TrendIndicator = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const classNames_1 = require("../commonHelpers/classNames/classNames");
6
+ const iconChevronTopSmall_1 = require("../icons/iconChevronTopSmall");
7
+ const iconChevronDownSmall_1 = require("../icons/iconChevronDownSmall");
8
+ const iconTrendNeutral_1 = require("../icons/iconTrendNeutral");
9
+ const trendIndicatorUtils_1 = require("./trendIndicatorUtils");
10
+ const DIRECTION_TONE = {
11
+ up: "positive",
12
+ down: "negative",
13
+ neutral: "neutral"
14
+ };
15
+ const DirectionIcon = ({ direction }) => {
16
+ if (direction === "down") {
17
+ return (0, jsx_runtime_1.jsx)(iconChevronDownSmall_1.IconChevronDownSmall, { className: "zen-trend-indicator__icon", size: "large" });
18
+ }
19
+ if (direction === "neutral") {
20
+ return (0, jsx_runtime_1.jsx)(iconTrendNeutral_1.IconTrendNeutral, { className: "zen-trend-indicator__icon", size: "large" });
21
+ }
22
+ return (0, jsx_runtime_1.jsx)(iconChevronTopSmall_1.IconChevronTopSmall, { className: "zen-trend-indicator__icon", size: "large" });
23
+ };
24
+ /**
25
+ * A directional trend indicator: a direction icon, a value, and a change delta.
26
+ * Example: ▲ 12.4km +5%.
27
+ *
28
+ * Built for the `Table` and exposed only as `Table.TrendIndicator`, for use
29
+ * inside a column's inline `render` (or the table's mobile card form).
30
+ * Presentational — it conveys a value and its change and has no interactive
31
+ * behavior.
32
+ *
33
+ * The arrow icon reflects `direction`; the icon and delta take a color `tone`
34
+ * (positive / negative / neutral) from design tokens. Tone defaults to the
35
+ * direction but can be set independently for metrics where a rise is bad. The
36
+ * value uses the primary text color.
37
+ *
38
+ * The direction icon is decorative — direction is also conveyed by the sign of
39
+ * the delta text, so no accessible name is required.
40
+ */
41
+ const TrendIndicator = ({ value, delta, direction, tone, className }) => {
42
+ const resolvedDirection = direction !== null && direction !== void 0 ? direction : (0, trendIndicatorUtils_1.getTrendIndicatorDirection)(delta);
43
+ const resolvedTone = tone !== null && tone !== void 0 ? tone : DIRECTION_TONE[resolvedDirection];
44
+ return ((0, jsx_runtime_1.jsxs)("span", { className: (0, classNames_1.classNames)(["zen-trend-indicator", `zen-trend-indicator--${resolvedTone}`, className !== null && className !== void 0 ? className : ""]), children: [(0, jsx_runtime_1.jsx)(DirectionIcon, { direction: resolvedDirection }), (0, jsx_runtime_1.jsx)("span", { className: "zen-trend-indicator__value", children: value }), (0, jsx_runtime_1.jsx)("span", { className: "zen-trend-indicator__delta", children: delta })] }));
45
+ };
46
+ exports.TrendIndicator = TrendIndicator;
47
+ exports.TrendIndicator.displayName = "TrendIndicator";
@@ -0,0 +1,9 @@
1
+ import type { TTrendIndicatorDirection } from "./trendIndicator";
2
+ /**
3
+ * Derives a {@link TTrendIndicatorDirection} from the sign of a delta string.
4
+ *
5
+ * Strips any non-numeric characters (currency symbols, `%`, units) before
6
+ * parsing, so inputs like `"+5%"`, `"-5%"`, and `"+0%"` are handled. A zero,
7
+ * empty, or unparsable delta resolves to `"neutral"`.
8
+ */
9
+ export declare const getTrendIndicatorDirection: (delta: string) => TTrendIndicatorDirection;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTrendIndicatorDirection = void 0;
4
+ /**
5
+ * Derives a {@link TTrendIndicatorDirection} from the sign of a delta string.
6
+ *
7
+ * Strips any non-numeric characters (currency symbols, `%`, units) before
8
+ * parsing, so inputs like `"+5%"`, `"-5%"`, and `"+0%"` are handled. A zero,
9
+ * empty, or unparsable delta resolves to `"neutral"`.
10
+ */
11
+ const getTrendIndicatorDirection = (delta) => {
12
+ const numeric = parseFloat(delta.replace(/[^0-9.+-]/g, ""));
13
+ if (Number.isNaN(numeric) || numeric === 0) {
14
+ return "neutral";
15
+ }
16
+ return numeric > 0 ? "up" : "down";
17
+ };
18
+ exports.getTrendIndicatorDirection = getTrendIndicatorDirection;
@@ -0,0 +1,17 @@
1
+ import { ReactNode } from "react";
2
+ import { ExperimentalFeatureId } from "./registry";
3
+ export type FeatureOverrides<TFeatureId extends string = ExperimentalFeatureId> = Partial<Record<TFeatureId, boolean>>;
4
+ type ContextFeatureOverrides = FeatureOverrides<string>;
5
+ interface IExperimentalContext {
6
+ features: ContextFeatureOverrides;
7
+ }
8
+ export declare const experimentalContext: import("react").Context<IExperimentalContext>;
9
+ interface IZenithExperimentalProviderProps {
10
+ features?: Partial<Record<ExperimentalFeatureId, boolean>>;
11
+ children: ReactNode;
12
+ }
13
+ export declare const ZenithExperimentalProvider: {
14
+ ({ features, children }: IZenithExperimentalProviderProps): import("react/jsx-runtime").JSX.Element;
15
+ displayName: string;
16
+ };
17
+ export {};
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZenithExperimentalProvider = exports.experimentalContext = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const registry_1 = require("./registry");
7
+ const buildDefaultFeatures = () => {
8
+ const defaults = {};
9
+ for (const feature of registry_1.experimentalFeatures) {
10
+ if (feature.state !== registry_1.FeatureState.Killed) {
11
+ defaults[feature.id] = feature.state === registry_1.FeatureState.Enabled;
12
+ }
13
+ }
14
+ return defaults;
15
+ };
16
+ const DEFAULT_FEATURES = buildDefaultFeatures();
17
+ const EMPTY_FEATURES = {};
18
+ exports.experimentalContext = (0, react_1.createContext)({
19
+ features: {}
20
+ });
21
+ const ZenithExperimentalProvider = ({ features = EMPTY_FEATURES, children }) => {
22
+ const parentContext = (0, react_1.useContext)(exports.experimentalContext);
23
+ const contextValue = (0, react_1.useMemo)(() => ({
24
+ features: Object.assign(Object.assign(Object.assign({}, DEFAULT_FEATURES), parentContext.features), features)
25
+ }), [features, parentContext.features]);
26
+ return (0, jsx_runtime_1.jsx)(exports.experimentalContext.Provider, { value: contextValue, children: children });
27
+ };
28
+ exports.ZenithExperimentalProvider = ZenithExperimentalProvider;
29
+ exports.ZenithExperimentalProvider.displayName = "ZenithExperimentalProvider";
@@ -0,0 +1,4 @@
1
+ export { EXPERIMENTAL_FLAGS } from "./registry";
2
+ export type { ExperimentalFeatureId } from "./registry";
3
+ export { ZenithExperimentalProvider } from "./experimentalContext";
4
+ export { useExperimentalFeature } from "./useExperimentalFeature";
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useExperimentalFeature = exports.ZenithExperimentalProvider = exports.EXPERIMENTAL_FLAGS = void 0;
4
+ var registry_1 = require("./registry");
5
+ Object.defineProperty(exports, "EXPERIMENTAL_FLAGS", { enumerable: true, get: function () { return registry_1.EXPERIMENTAL_FLAGS; } });
6
+ var experimentalContext_1 = require("./experimentalContext");
7
+ Object.defineProperty(exports, "ZenithExperimentalProvider", { enumerable: true, get: function () { return experimentalContext_1.ZenithExperimentalProvider; } });
8
+ var useExperimentalFeature_1 = require("./useExperimentalFeature");
9
+ Object.defineProperty(exports, "useExperimentalFeature", { enumerable: true, get: function () { return useExperimentalFeature_1.useExperimentalFeature; } });
@@ -0,0 +1,13 @@
1
+ export declare enum FeatureState {
2
+ Preview = 0,// OFF by default — consumers may opt in via provider/prop
3
+ Enabled = 1,// ON by default — consumers may opt out locally
4
+ Killed = 2
5
+ }
6
+ export interface IExperimentalFeatureDefinition {
7
+ id: string;
8
+ state: FeatureState;
9
+ description: string;
10
+ }
11
+ export declare const experimentalFeatures: readonly [];
12
+ export type ExperimentalFeatureId = (typeof experimentalFeatures)[number]["id"];
13
+ export declare const EXPERIMENTAL_FLAGS: { [K in ExperimentalFeatureId]: K; };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EXPERIMENTAL_FLAGS = exports.experimentalFeatures = exports.FeatureState = void 0;
4
+ var FeatureState;
5
+ (function (FeatureState) {
6
+ FeatureState[FeatureState["Preview"] = 0] = "Preview";
7
+ FeatureState[FeatureState["Enabled"] = 1] = "Enabled";
8
+ FeatureState[FeatureState["Killed"] = 2] = "Killed"; // OFF, locked — all overrides ignored; awaiting code deletion
9
+ })(FeatureState || (exports.FeatureState = FeatureState = {}));
10
+ exports.experimentalFeatures = [];
11
+ exports.EXPERIMENTAL_FLAGS = Object.fromEntries(exports.experimentalFeatures.map(({ id }) => [id, id]));
@@ -0,0 +1,3 @@
1
+ import { FeatureOverrides } from "./experimentalContext";
2
+ import { ExperimentalFeatureId } from "./registry";
3
+ export declare const useExperimentalFeature: (key: ExperimentalFeatureId, localOverrides?: FeatureOverrides) => boolean;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useExperimentalFeature = void 0;
4
+ const react_1 = require("react");
5
+ const experimentalContext_1 = require("./experimentalContext");
6
+ const registry_1 = require("./registry");
7
+ const experimentalFeatureById = new Map(registry_1.experimentalFeatures.map(feature => [feature.id, feature]));
8
+ const getFeatureOverride = (overrides, featureId) => overrides === null || overrides === void 0 ? void 0 : overrides[featureId];
9
+ const useExperimentalFeature = (key, localOverrides) => {
10
+ const context = (0, react_1.useContext)(experimentalContext_1.experimentalContext);
11
+ const feature = experimentalFeatureById.get(key);
12
+ if ((feature === null || feature === void 0 ? void 0 : feature.state) === registry_1.FeatureState.Killed) {
13
+ return false;
14
+ }
15
+ const localOverride = getFeatureOverride(localOverrides, key);
16
+ if (localOverride !== undefined) {
17
+ return localOverride;
18
+ }
19
+ const contextOverride = context.features[key];
20
+ if (contextOverride !== undefined) {
21
+ return contextOverride;
22
+ }
23
+ return (feature === null || feature === void 0 ? void 0 : feature.state) === registry_1.FeatureState.Enabled;
24
+ };
25
+ exports.useExperimentalFeature = useExperimentalFeature;
@@ -90,7 +90,7 @@
90
90
  "Go to My Reports": "الذهاب إلى تقاريري",
91
91
  "There was an issue preparing your report": "حدثت مشكلة في إعداد تقريرك",
92
92
  "Your report is being prepared": "يتم إعداد تقريرك",
93
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "سنخطرك عندما يصبح تقريرك جاهزًا. يمكنك تتبع التقدم بالذهاب إلى صفحة تقاريري.",
93
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "سنخطرك عندما يصبح تقريرك جاهزًا. يمكنك تتبع التقدم بالذهاب إلى صفحة تقاريري.",
94
94
  "Your report is ready to download": "تقريرك جاهز للتنزيل",
95
95
  "Download now": "تنزيل الآن",
96
96
  "Download": "تنزيل",
@@ -92,7 +92,7 @@
92
92
  "Go to My Reports": "Към Моите отчети",
93
93
  "There was an issue preparing your report": "Възникна проблем при подготовката на вашия отчет",
94
94
  "Your report is being prepared": "Вашият отчет се подготвя",
95
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Ще ви уведомим, когато отчетът е готов. Можете да проследите напредъка от страницата Моите отчети.",
95
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Ще ви уведомим, когато отчетът е готов. Можете да проследите напредъка от страницата Моите отчети.",
96
96
  "Your report is ready to download": "Вашият отчет е готов за изтегляне",
97
97
  "Download now": "Изтеглете сега",
98
98
  "Download": "Изтегляне",
@@ -81,7 +81,7 @@
81
81
  "All": "Vše",
82
82
  "There was an issue preparing your report": "Při připravování výkazu došlo k problému",
83
83
  "Your report is being prepared": "Váš výkaz se připravuje",
84
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Až bude váš výkaz připraven, upozorníme vás. Průběh můžete sledovat na stránce Moje výkazy.",
84
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Až bude váš výkaz připraven, upozorníme vás. Průběh můžete sledovat na stránce Moje výkazy.",
85
85
  "Your report is ready to download": "Váš výkaz je připraven ke stažení",
86
86
  "Download now": "Stáhnout",
87
87
  "Download": "Stáhnout",
@@ -88,7 +88,7 @@
88
88
  "Go to My Reports": "Gå til Mine rapporter",
89
89
  "There was an issue preparing your report": "Der opstod et problem med at lave din rapport.",
90
90
  "Your report is being prepared": "Din rapport er ved at blive lavet.",
91
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Vi giver dig besked, når din rapport er klar. Du kan tjekke status på siden 'Mine rapporter'.",
91
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Vi giver dig besked, når din rapport er klar. Du kan tjekke status på siden 'Mine rapporter'.",
92
92
  "Your report is ready to download": "Din rapport er klar til download",
93
93
  "Download now": "Download nu",
94
94
  "Download": "Download",
@@ -81,7 +81,7 @@
81
81
  "All": "Alle",
82
82
  "There was an issue preparing your report": "Beim Vorbereiten Ihres Berichts ist ein Problem aufgetreten.",
83
83
  "Your report is being prepared": "Ihr Bericht wird vorbereitet",
84
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Wir werden Sie benachrichtigen, sobald Ihr Bericht fertig ist. Sie können den Fortschritt auf der Seite „Meine Berichte“ verfolgen.",
84
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Wir werden Sie benachrichtigen, sobald Ihr Bericht fertig ist. Sie können den Fortschritt auf der Seite „Meine Berichte“ verfolgen.",
85
85
  "Your report is ready to download": "Ihr Bericht kann heruntergeladen werden.",
86
86
  "Download now": "Jetzt herunterladen",
87
87
  "Download": "Herunterladen",
@@ -92,7 +92,7 @@
92
92
  "Go to My Reports": "Μετάβαση στις Αναφορές μου",
93
93
  "There was an issue preparing your report": "Παρουσιάστηκε πρόβλημα κατά την προετοιμασία της αναφοράς σας",
94
94
  "Your report is being prepared": "Η αναφορά σας ετοιμάζεται",
95
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Θα σας ειδοποιήσουμε όταν η αναφορά σας είναι έτοιμη. Μπορείτε να παρακολουθήσετε την πρόοδο στη σελίδα Αναφορές μου.",
95
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Θα σας ειδοποιήσουμε όταν η αναφορά σας είναι έτοιμη. Μπορείτε να παρακολουθήσετε την πρόοδο στη σελίδα Αναφορές μου.",
96
96
  "Your report is ready to download": "Η αναφορά σας είναι έτοιμη για λήψη",
97
97
  "Download now": "Λήψη τώρα",
98
98
  "Download": "Λήψη",
@@ -92,7 +92,7 @@
92
92
  "Go to My Reports": "Go to My Reports",
93
93
  "There was an issue preparing your report": "There was an issue preparing your report",
94
94
  "Your report is being prepared": "Your report is being prepared",
95
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "We will notify you when your report is ready. You can track the progress by going to the My Reports page.",
95
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "You'll be notified when your report is ready. Track the progress on the My Reports page.",
96
96
  "Your report is ready to download": "Your report is ready to download",
97
97
  "Download now": "Download now",
98
98
  "Download": "Download",
@@ -81,7 +81,7 @@
81
81
  "All": "Todo",
82
82
  "There was an issue preparing your report": "Hubo un problema al preparar el reporte",
83
83
  "Your report is being prepared": "Se está preparando su reporte",
84
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Le notificaremos cuando su reporte esté listo. Puede realizar un seguimiento del progreso en la página Mis reportes.",
84
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Le notificaremos cuando su reporte esté listo. Puede realizar un seguimiento del progreso en la página Mis reportes.",
85
85
  "Your report is ready to download": "Su reporte está listo para descargar",
86
86
  "Download now": "Descargar ahora",
87
87
  "Download": "Descargar",
@@ -92,7 +92,7 @@
92
92
  "Go to My Reports": "Mine Minu aruannete juurde",
93
93
  "There was an issue preparing your report": "Aruande ettevalmistamisel esines probleem",
94
94
  "Your report is being prepared": "Teie aruannet valmistatakse ette",
95
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Teavitame teid, kui aruanne on valmis. Edenemist saate jälgida lehel Minu aruanded.",
95
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Teavitame teid, kui aruanne on valmis. Edenemist saate jälgida lehel Minu aruanded.",
96
96
  "Your report is ready to download": "Teie aruanne on allalaadimiseks valmis",
97
97
  "Download now": "Laadi alla kohe",
98
98
  "Download": "Laadi alla",
@@ -88,7 +88,7 @@
88
88
  "Go to My Reports": "Mene My Reports -sivulle.",
89
89
  "There was an issue preparing your report": "Raportin valmistelussa ilmeni ongelma.",
90
90
  "Your report is being prepared": "Raporttisi valmistellaan",
91
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Ilmoitamme sinulle, kun raportti on valmis. Voit seurata edistymistä menemällä My Reports -sivulle.",
91
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Ilmoitamme sinulle, kun raportti on valmis. Voit seurata edistymistä menemällä My Reports -sivulle.",
92
92
  "Your report is ready to download": "Raporttisi on valmis ladattavaksi",
93
93
  "Download now": "Lataa nyt",
94
94
  "Download": "Lataa",
@@ -81,7 +81,7 @@
81
81
  "All": "Tous",
82
82
  "There was an issue preparing your report": "Un problème est survenu lors de la préparation de votre rapport",
83
83
  "Your report is being prepared": "Préparation de votre rapport en cours",
84
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Nous vous notifierons quand votre rapport sera prêt. Vous pouvez suivre les progrès sur la page Mes rapports.",
84
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Nous vous notifierons quand votre rapport sera prêt. Vous pouvez suivre les progrès sur la page Mes rapports.",
85
85
  "Your report is ready to download": "Votre rapport est prêt à être téléchargé",
86
86
  "Download now": "Télécharger maintenant",
87
87
  "Download": "Télécharger",
@@ -81,7 +81,7 @@
81
81
  "All": "Tout",
82
82
  "There was an issue preparing your report": "Un problème est survenu lors de la préparation de votre rapport",
83
83
  "Your report is being prepared": "Votre rapport est en cours de préparation",
84
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Nous vous aviserons lorsque votre rapport sera prêt. Vous pouvez en suivre le progrès en accédant à la page Mes rapports.",
84
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Nous vous aviserons lorsque votre rapport sera prêt. Vous pouvez en suivre le progrès en accédant à la page Mes rapports.",
85
85
  "Your report is ready to download": "Votre rapport est prêt à être téléchargé",
86
86
  "Download now": "Télécharger maintenant",
87
87
  "Download": "Télécharger",
@@ -88,7 +88,7 @@
88
88
  "Go to My Reports": "Menj a Saját jelentések oldalra.",
89
89
  "There was an issue preparing your report": "Valami hiba történt a jelentés elkészítése során.",
90
90
  "Your report is being prepared": "Éppen készül a jelentésed.",
91
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Értesítünk, amikor a jelentésed elkészül. Kövesd a folyamatot a Saját jelentések oldalon.",
91
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Értesítünk, amikor a jelentésed elkészül. Kövesd a folyamatot a Saját jelentések oldalon.",
92
92
  "Your report is ready to download": "A jelentésed készen áll a letöltésre.",
93
93
  "Download now": "Töltsd le most.",
94
94
  "Download": "Letöltés",
@@ -81,7 +81,7 @@
81
81
  "All": "Semua",
82
82
  "There was an issue preparing your report": "Terjadi masalah saat menyiapkan laporan Anda.",
83
83
  "Your report is being prepared": "Laporan Anda sedang disiapkan",
84
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Kami akan memberi tahu Anda jika laporan telah siap. Anda dapat melacak progresnya dengan masuk ke halaman Laporan Saya.",
84
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Kami akan memberi tahu Anda jika laporan telah siap. Anda dapat melacak progresnya dengan masuk ke halaman Laporan Saya.",
85
85
  "Your report is ready to download": "Laporan Anda siap diunduh",
86
86
  "Download now": "Unduh sekarang",
87
87
  "Download": "Unduh",
@@ -81,7 +81,7 @@
81
81
  "All": "Tutti",
82
82
  "There was an issue preparing your report": "Si è verificato un problema nella preparazione del report",
83
83
  "Your report is being prepared": "Il report è in fase di preparazione",
84
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "Verrà inviata una notifica quando il report sarà pronto. È possibile tenere traccia dell'avanzamento andando alla pagina I miei report.",
84
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "Verrà inviata una notifica quando il report sarà pronto. È possibile tenere traccia dell'avanzamento andando alla pagina I miei report.",
85
85
  "Your report is ready to download": "Il report è pronto per il download",
86
86
  "Download now": "Scaricare ora",
87
87
  "Download": "Scaricare",
@@ -81,7 +81,7 @@
81
81
  "All": "すべて",
82
82
  "There was an issue preparing your report": "レポートの作成中に問題が発生しました",
83
83
  "Your report is being prepared": "レポートを作成しています",
84
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "レポートの準備ができ次第、お知らせします。[マイレポート] ページに移動すると進捗状況を追跡できます。",
84
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "レポートの準備ができ次第、お知らせします。[マイレポート] ページに移動すると進捗状況を追跡できます。",
85
85
  "Your report is ready to download": "レポートをダウンロードする準備ができました",
86
86
  "Download now": "今すぐダウンロード",
87
87
  "Download": "ダウンロード",
@@ -92,7 +92,7 @@
92
92
  "Go to My Reports": "ჩემი ანგარიშებისკენ",
93
93
  "There was an issue preparing your report": "ანგარიშის მომზადებისას პრობლემა წარმოიქმნა",
94
94
  "Your report is being prepared": "თქვენი ანგარიში მზადდება",
95
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "შეგატყობინებთ, როდესაც ანგარიში მზად იქნება. პროგრესის სანახავად გადადით ჩემი ანგარიშების გვერდზე.",
95
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "შეგატყობინებთ, როდესაც ანგარიში მზად იქნება. პროგრესის სანახავად გადადით ჩემი ანგარიშების გვერდზე.",
96
96
  "Your report is ready to download": "თქვენი ანგარიში ჩამოტვირთვისთვის მზადაა",
97
97
  "Download now": "ახლავე ჩამოტვირთვა",
98
98
  "Download": "ჩამოტვირთვა",
@@ -88,7 +88,7 @@
88
88
  "Go to My Reports": "'내 보고서'로 이동",
89
89
  "There was an issue preparing your report": "보고서를 준비하는 동안 문제가 발생했습니다.",
90
90
  "Your report is being prepared": "보고서를 준비하는 중입니다.",
91
- "We will notify you when your report is ready. You can track the progress by going to the My Reports page.": "보고서 준비가 완료되면 알려드리겠습니다. '내 보고서' 페이지로 이동하여 진행 상황을 추적할 수 있습니다.",
91
+ "You'll be notified when your report is ready. Track the progress on the My Reports page.": "보고서 준비가 완료되면 알려드리겠습니다. '내 보고서' 페이지로 이동하여 진행 상황을 추적할 수 있습니다.",
92
92
  "Your report is ready to download": "보고서를 다운로드할 준비가 되었습니다.",
93
93
  "Download now": "지금 다운로드",
94
94
  "Download": "다운로드",