@levi-gemcommerce/analytics 0.0.1-dev.7 → 1.0.0-dev.10

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 (628) hide show
  1. package/dist/esm/components/AnalyticMode/AnalyticModeSelector.d.ts +13 -0
  2. package/dist/esm/components/AnalyticMode/index.d.ts +2 -0
  3. package/dist/esm/components/CurrencySelector/CurrencySelector.d.ts +10 -0
  4. package/dist/esm/components/CurrencySelector/index.d.ts +2 -0
  5. package/dist/esm/components/GSelectableMetricChartCard/GSelectableMetricChartCard.d.ts +5 -3
  6. package/dist/esm/components/GSelectableMetricChartCard/MetricChartTab.d.ts +2 -2
  7. package/dist/esm/components/MetricDonutChartCard/MetricDonutChartCard.d.ts +16 -0
  8. package/dist/esm/components/MetricDonutChartCard/index.d.ts +2 -0
  9. package/dist/esm/components/MetricDonutChartCard/utils/donut-chart.d.ts +20 -0
  10. package/dist/esm/components/MetricDonutChartCard/utils/index.d.ts +1 -0
  11. package/dist/esm/components/SingleMetricChartCard/SingleMetricChartCard.d.ts +3 -1
  12. package/dist/esm/components/common/chart/MetricChart.d.ts +5 -1
  13. package/dist/esm/components/common/chart/MetricDonutChartSkeleton.d.ts +1 -0
  14. package/dist/esm/components/common/chart/index.d.ts +1 -0
  15. package/dist/esm/components/index.d.ts +3 -0
  16. package/dist/esm/constants/breakdown-targets.d.ts +5 -0
  17. package/dist/esm/constants/campaign.d.ts +1 -0
  18. package/dist/esm/constants/currency.d.ts +2 -0
  19. package/dist/esm/constants/index.d.ts +3 -0
  20. package/dist/esm/core/gemxql/helpers/extractQueryData.d.ts +1 -1
  21. package/dist/esm/core/gemxql/utils/dayjs.d.ts +2 -0
  22. package/dist/esm/hooks/index.d.ts +5 -0
  23. package/dist/esm/hooks/useEnhancedEffect.d.ts +2 -0
  24. package/dist/esm/hooks/useFormatLineChartData.d.ts +11 -0
  25. package/dist/esm/hooks/usePopoverResizeObserver.d.ts +7 -0
  26. package/dist/esm/hooks/useToggle.d.ts +12 -0
  27. package/dist/esm/hooks/useWindowSize.d.ts +18 -0
  28. package/dist/esm/index.d.ts +3 -0
  29. package/dist/esm/index.js +2235 -68
  30. package/dist/esm/index.mjs +2235 -68
  31. package/dist/esm/providers/MetricChartProvider.d.ts +5 -1
  32. package/dist/esm/shared/charts/components/ComboChart.d.ts +1 -0
  33. package/dist/esm/shared/charts/components/GBarChart.d.ts +13 -0
  34. package/dist/esm/shared/charts/components/GComboChart.d.ts +5 -0
  35. package/dist/esm/shared/charts/components/GDonutChart.d.ts +5 -0
  36. package/dist/esm/shared/charts/components/GFunnelChart/GFunnelChart.d.ts +10 -0
  37. package/dist/esm/shared/charts/components/GFunnelChart/components/FunnelChartAction.d.ts +7 -0
  38. package/dist/esm/shared/charts/components/GFunnelChart/components/FunnelChartActionIcon.d.ts +9 -0
  39. package/dist/esm/shared/charts/components/GFunnelChart/components/FunnelChartActionWrapper.d.ts +16 -0
  40. package/dist/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/FunnelSelectionContent.d.ts +6 -0
  41. package/dist/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/FunnelSelectionHeader.d.ts +1 -0
  42. package/dist/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/FunnelSelectionItem.d.ts +9 -0
  43. package/dist/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/FunnelSelectionPopover.d.ts +22 -0
  44. package/dist/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/index.d.ts +1 -0
  45. package/dist/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/type.d.ts +7 -0
  46. package/dist/esm/shared/charts/components/GFunnelChart/components/types.d.ts +23 -0
  47. package/dist/esm/shared/charts/components/GFunnelChart/index.d.ts +3 -0
  48. package/dist/esm/shared/charts/components/GFunnelChart/types.d.ts +11 -0
  49. package/dist/esm/shared/charts/components/GPolarisViz/components/Arc/Arc.d.ts +16 -0
  50. package/dist/esm/shared/charts/components/GPolarisViz/components/Arc/index.d.ts +1 -0
  51. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartContainer/ChartContainer.d.ts +17 -0
  52. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartContainer/hooks/useContainerBounds.d.ts +11 -0
  53. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartContainer/index.d.ts +1 -0
  54. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartElements/ChartDiv.d.ts +9 -0
  55. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartElements/ChartSVG.d.ts +12 -0
  56. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartElements/index.d.ts +6 -0
  57. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartErrorBoundary/ChartErrorBoundary.d.ts +25 -0
  58. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartErrorBoundary/index.d.ts +1 -0
  59. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartErrorBoundary/utilities/checkForMismatchedData.d.ts +2 -0
  60. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/ChartSkeleton.d.ts +31 -0
  61. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/DonutSkeleton/DonutSkeleton.d.ts +7 -0
  62. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/DonutSkeleton/index.d.ts +1 -0
  63. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/ErrorText/ErrorText.d.ts +7 -0
  64. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/ErrorText/index.d.ts +1 -0
  65. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/FunnelSkeleton/FunnelSkeleton.d.ts +7 -0
  66. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/FunnelSkeleton/index.d.ts +1 -0
  67. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/GridSkeleton/GridSkeleton.d.ts +7 -0
  68. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/GridSkeleton/index.d.ts +1 -0
  69. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/Shimmer/Shimmer.d.ts +3 -0
  70. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/Shimmer/index.d.ts +1 -0
  71. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SimpleBarSkeleton/SimpleBarSkeleton.d.ts +7 -0
  72. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SimpleBarSkeleton/index.d.ts +1 -0
  73. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SimpleNormalizedSkeleton/SimpleNormalizedSkeleton.d.ts +10 -0
  74. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SimpleNormalizedSkeleton/index.d.ts +1 -0
  75. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SparkSkeleton/SparkSkeleton.d.ts +7 -0
  76. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SparkSkeleton/index.d.ts +1 -0
  77. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/index.d.ts +8 -0
  78. package/dist/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/index.d.ts +3 -0
  79. package/dist/esm/shared/charts/components/GPolarisViz/components/ConicGradientWithStops/ConicGradientWithStops.d.ts +9 -0
  80. package/dist/esm/shared/charts/components/GPolarisViz/components/ConicGradientWithStops/index.d.ts +1 -0
  81. package/dist/esm/shared/charts/components/GPolarisViz/components/DefaultPreview/DefaultPreview.d.ts +5 -0
  82. package/dist/esm/shared/charts/components/GPolarisViz/components/DefaultPreview/index.d.ts +2 -0
  83. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChart/Chart.d.ts +9 -0
  84. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChart/FunnelChart.d.ts +12 -0
  85. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChart/components/FunnelChartXAxisArrows.d.ts +10 -0
  86. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChart/components/FunnelChartXAxisLabels.d.ts +13 -0
  87. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChart/components/FunnelSegment.d.ts +17 -0
  88. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChart/components/Label.d.ts +14 -0
  89. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChart/components/index.d.ts +4 -0
  90. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChart/index.d.ts +2 -0
  91. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/Chart.d.ts +20 -0
  92. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/FunnelChartNext.d.ts +25 -0
  93. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/FunnelChartLabels/FunnelChartLabels.d.ts +29 -0
  94. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/FunnelChartLabels/index.d.ts +1 -0
  95. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/FunnelTooltip/FunnelTooltip.d.ts +8 -0
  96. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/FunnelTooltip/index.d.ts +2 -0
  97. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/ScaleIcon.d.ts +1 -0
  98. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/ScaleIconTooltip.d.ts +6 -0
  99. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/Tooltip/CustomTooltip.d.ts +10 -0
  100. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/Tooltip/Tooltip.d.ts +16 -0
  101. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/Tooltip/index.d.ts +1 -0
  102. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/TooltipOverlay.d.ts +30 -0
  103. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/TooltipWithPortal.d.ts +4 -0
  104. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/index.d.ts +7 -0
  105. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/constants.d.ts +19 -0
  106. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/hooks/useTooltipInteraction.d.ts +12 -0
  107. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/hooks/useTooltipPlacement.d.ts +27 -0
  108. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/index.d.ts +4 -0
  109. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/types.d.ts +9 -0
  110. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/utilities/calculate-dropoff.d.ts +1 -0
  111. package/dist/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/utilities/useBuildFunnelTrends.d.ts +10 -0
  112. package/dist/esm/shared/charts/components/GPolarisViz/components/HorizontalGridLines/HorizontalGridLines.d.ts +10 -0
  113. package/dist/esm/shared/charts/components/GPolarisViz/components/HorizontalGridLines/index.d.ts +1 -0
  114. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/SingleTextLine.d.ts +14 -0
  115. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/hooks/index.d.ts +1 -0
  116. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/hooks/useLabels.d.ts +19 -0
  117. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/index.d.ts +3 -0
  118. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/endLineTruncate.d.ts +9 -0
  119. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/endWordTruncate.d.ts +8 -0
  120. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/estimateTextHeight.d.ts +8 -0
  121. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/formatAndAddEllipsis.d.ts +1 -0
  122. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/getDiagonalLabels.d.ts +14 -0
  123. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/getHorizontalLabels.d.ts +15 -0
  124. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/getVerticalLabels.d.ts +13 -0
  125. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/getWidestLabel.d.ts +2 -0
  126. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/shouldSkipLabel.d.ts +1 -0
  127. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/tests/endWordTruncate.test.d.ts +1 -0
  128. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/tests/estimateTextHeight.test.d.ts +1 -0
  129. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/tests/formatAndAddEllipsis.test.d.ts +1 -0
  130. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/tests/truncateLastLine.test.d.ts +1 -0
  131. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/tests/truncateSingleLine.test.d.ts +1 -0
  132. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/truncateLabels.d.ts +11 -0
  133. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/truncateLastLine.d.ts +9 -0
  134. package/dist/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/truncateSingleLine.d.ts +8 -0
  135. package/dist/esm/shared/charts/components/GPolarisViz/components/LinePreview/LinePreview.d.ts +8 -0
  136. package/dist/esm/shared/charts/components/GPolarisViz/components/LinePreview/constants.d.ts +3 -0
  137. package/dist/esm/shared/charts/components/GPolarisViz/components/LinePreview/index.d.ts +2 -0
  138. package/dist/esm/shared/charts/components/GPolarisViz/components/SwallowErrors/SwallowErrors.d.ts +16 -0
  139. package/dist/esm/shared/charts/components/GPolarisViz/components/SwallowErrors/index.d.ts +1 -0
  140. package/dist/esm/shared/charts/components/GPolarisViz/components/TextLine/TextLine.d.ts +8 -0
  141. package/dist/esm/shared/charts/components/GPolarisViz/components/TextLine/index.d.ts +1 -0
  142. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/TooltipContent.d.ts +8 -0
  143. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipContentContainer/TooltipContentContainer.d.ts +13 -0
  144. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipContentContainer/index.d.ts +1 -0
  145. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipRow/TooltipRow.d.ts +11 -0
  146. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipRow/index.d.ts +1 -0
  147. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipSeries/TooltipSeries.d.ts +7 -0
  148. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipSeries/index.d.ts +1 -0
  149. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipSeriesName/TooltipSeriesName.d.ts +5 -0
  150. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipSeriesName/index.d.ts +1 -0
  151. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipTitle/TooltipTitle.d.ts +6 -0
  152. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipTitle/index.d.ts +1 -0
  153. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/index.d.ts +5 -0
  154. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/constants.d.ts +2 -0
  155. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/hooks/useGetLongestLabelFromData.d.ts +5 -0
  156. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/index.d.ts +4 -0
  157. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/utilities/get-tooltip-template-content-column-count.d.ts +2 -0
  158. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipContent/utilities/tests/get-tooltip-template-content-column-count.test.d.ts +1 -0
  159. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/TooltipWrapper.d.ts +27 -0
  160. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/components/TooltipAnimatedContainer.d.ts +17 -0
  161. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/constants.d.ts +9 -0
  162. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/index.d.ts +5 -0
  163. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/types.d.ts +53 -0
  164. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/eventPoint.d.ts +15 -0
  165. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getAlteredHorizontalBarPosition.d.ts +2 -0
  166. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getAlteredLineChartPosition.d.ts +9 -0
  167. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getAlteredVerticalBarPosition.d.ts +2 -0
  168. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getDonutChartTooltipPosition.d.ts +8 -0
  169. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getHorizontalBarChartTooltipPosition.d.ts +7 -0
  170. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getLineChartTooltipPosition.d.ts +11 -0
  171. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getVerticalBarChartTooltipPosition.d.ts +10 -0
  172. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/shouldBlockTooltipEvents.d.ts +1 -0
  173. package/dist/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities.d.ts +13 -0
  174. package/dist/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/TrendIndicator.d.ts +6 -0
  175. package/dist/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/Arrows/ArrowDown.d.ts +1 -0
  176. package/dist/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/Arrows/ArrowUp.d.ts +1 -0
  177. package/dist/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/Arrows/index.d.ts +2 -0
  178. package/dist/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/Svg/Svg.d.ts +10 -0
  179. package/dist/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/Svg/index.d.ts +1 -0
  180. package/dist/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/index.d.ts +2 -0
  181. package/dist/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/constants.d.ts +8 -0
  182. package/dist/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/index.d.ts +6 -0
  183. package/dist/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/utilities/estimateTrendIndicatorWidth.d.ts +4 -0
  184. package/dist/esm/shared/charts/components/GPolarisViz/components/VerticalBarChart/utilities/index.d.ts +1 -0
  185. package/dist/esm/shared/charts/components/GPolarisViz/components/VerticalBarChart/utilities/sortBarChartData.d.ts +2 -0
  186. package/dist/esm/shared/charts/components/GPolarisViz/components/VerticalGridLines/VerticalGridLines.d.ts +9 -0
  187. package/dist/esm/shared/charts/components/GPolarisViz/components/VerticalGridLines/index.d.ts +1 -0
  188. package/dist/esm/shared/charts/components/GPolarisViz/components/index.d.ts +6 -0
  189. package/dist/esm/shared/charts/components/GPolarisViz/constants.d.ts +21 -0
  190. package/dist/esm/shared/charts/components/GPolarisViz/hooks/index.d.ts +5 -0
  191. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useBarSpringConfig.d.ts +12 -0
  192. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useBrowserCheck.d.ts +5 -0
  193. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useCallbackRef.d.ts +3 -0
  194. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useDataForHorizontalChart.d.ts +15 -0
  195. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useDebouncedCallback.d.ts +27 -0
  196. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useFormattedLabels.d.ts +10 -0
  197. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useFunnelBarScaling.d.ts +12 -0
  198. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useHorizontalBarSizes.d.ts +15 -0
  199. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useHorizontalStackedValues.d.ts +13 -0
  200. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useHorizontalTicksAndScale.d.ts +15 -0
  201. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useHorizontalXScale.d.ts +21 -0
  202. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useIndexForLabels.d.ts +2 -0
  203. package/dist/esm/shared/charts/components/GPolarisViz/hooks/usePrefersReducedMotion.d.ts +3 -0
  204. package/dist/esm/shared/charts/components/GPolarisViz/hooks/usePrintResizing.d.ts +11 -0
  205. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useReducedLabelIndexes.d.ts +5 -0
  206. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useResizeObserver.d.ts +6 -0
  207. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useRootContainer.d.ts +1 -0
  208. package/dist/esm/shared/charts/components/GPolarisViz/hooks/useWatchColorVisionEvents.d.ts +8 -0
  209. package/dist/esm/shared/charts/components/GPolarisViz/index.d.ts +7 -0
  210. package/dist/esm/shared/charts/components/GPolarisViz/shared/Bar/Bar.d.ts +14 -0
  211. package/dist/esm/shared/charts/components/GPolarisViz/shared/Bar/index.d.ts +1 -0
  212. package/dist/esm/shared/charts/components/GPolarisViz/shared/FunnelChartConnector/FunnelChartConnector.d.ts +11 -0
  213. package/dist/esm/shared/charts/components/GPolarisViz/shared/FunnelChartConnector/FunnelChartConnectorGradient.d.ts +6 -0
  214. package/dist/esm/shared/charts/components/GPolarisViz/shared/FunnelChartConnector/constants.d.ts +5 -0
  215. package/dist/esm/shared/charts/components/GPolarisViz/shared/FunnelChartConnector/index.d.ts +3 -0
  216. package/dist/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/FunnelChartSegment.d.ts +17 -0
  217. package/dist/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/components/AnimatedSegment.d.ts +13 -0
  218. package/dist/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/components/InteractiveOverlay.d.ts +11 -0
  219. package/dist/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/components/ScaledSegment.d.ts +17 -0
  220. package/dist/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/constants.d.ts +4 -0
  221. package/dist/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/index.d.ts +2 -0
  222. package/dist/esm/shared/charts/components/GPolarisViz/shared/SeriesIcon/SeriesIcon.d.ts +8 -0
  223. package/dist/esm/shared/charts/components/GPolarisViz/shared/SeriesIcon/index.d.ts +1 -0
  224. package/dist/esm/shared/charts/components/GPolarisViz/shared/ZeroValueLine/ZeroValueLine.d.ts +9 -0
  225. package/dist/esm/shared/charts/components/GPolarisViz/shared/ZeroValueLine/index.d.ts +1 -0
  226. package/dist/esm/shared/charts/components/GPolarisViz/shared/index.d.ts +3 -0
  227. package/dist/esm/shared/charts/components/GPolarisViz/types.d.ts +209 -0
  228. package/dist/esm/shared/charts/components/GPolarisViz/utilities/base.d.ts +3 -0
  229. package/dist/esm/shared/charts/components/GPolarisViz/utilities/classnames.d.ts +1 -0
  230. package/dist/esm/shared/charts/components/GPolarisViz/utilities/createCssConicGradient.d.ts +2 -0
  231. package/dist/esm/shared/charts/components/GPolarisViz/utilities/createCssGradient.d.ts +2 -0
  232. package/dist/esm/shared/charts/components/GPolarisViz/utilities/estimateStringWidthWithOffset.d.ts +1 -0
  233. package/dist/esm/shared/charts/components/GPolarisViz/utilities/getAxisOptions.d.ts +3 -0
  234. package/dist/esm/shared/charts/components/GPolarisViz/utilities/getCSSBackgroundFromColor.d.ts +2 -0
  235. package/dist/esm/shared/charts/components/GPolarisViz/utilities/getChartId.d.ts +1 -0
  236. package/dist/esm/shared/charts/components/GPolarisViz/utilities/getFontSize.d.ts +1 -0
  237. package/dist/esm/shared/charts/components/GPolarisViz/utilities/getStackedMinMax.d.ts +10 -0
  238. package/dist/esm/shared/charts/components/GPolarisViz/utilities/getStackedValues.d.ts +10 -0
  239. package/dist/esm/shared/charts/components/GPolarisViz/utilities/getStackedValuesFromDataSeries.d.ts +7 -0
  240. package/dist/esm/shared/charts/components/GPolarisViz/utilities/getTrendIndicatorData.d.ts +8 -0
  241. package/dist/esm/shared/charts/components/GPolarisViz/utilities/hasHiddenComparisonSeries.d.ts +9 -0
  242. package/dist/esm/shared/charts/components/GPolarisViz/utilities/index.d.ts +6 -0
  243. package/dist/esm/shared/charts/components/GSimpleBarChart.d.ts +5 -0
  244. package/dist/esm/shared/charts/components/index.d.ts +7 -0
  245. package/dist/esm/shared/charts/constants/chart.d.ts +2 -0
  246. package/dist/esm/shared/charts/constants/index.d.ts +1 -0
  247. package/dist/esm/shared/charts/contexts/GChartProvider.d.ts +9 -0
  248. package/dist/esm/shared/charts/contexts/index.d.ts +1 -0
  249. package/dist/esm/shared/charts/index.d.ts +4 -0
  250. package/dist/esm/shared/charts/types/chart.d.ts +35 -0
  251. package/dist/esm/shared/charts/types/index.d.ts +1 -0
  252. package/dist/esm/shared/components/GActivatorPopover/GActivatorPopover.d.ts +23 -0
  253. package/dist/esm/shared/components/GActivatorPopover/index.d.ts +1 -0
  254. package/dist/esm/shared/components/GButton/GButton.d.ts +19 -0
  255. package/dist/esm/shared/components/GButton/index.d.ts +1 -0
  256. package/dist/esm/shared/components/GCheckbox/GCheckbox.d.ts +39 -0
  257. package/dist/esm/shared/components/GCheckbox/index.d.ts +1 -0
  258. package/dist/esm/shared/components/GChoice/ChoiceHelpText.d.ts +4 -0
  259. package/dist/esm/shared/components/GChoice/GChoice.d.ts +44 -0
  260. package/dist/esm/shared/components/GChoice/index.d.ts +2 -0
  261. package/dist/esm/shared/components/GClickable/GClickable.d.ts +10 -0
  262. package/dist/esm/shared/components/GClickable/index.d.ts +1 -0
  263. package/dist/esm/shared/components/GDiv/GDiv.d.ts +7 -0
  264. package/dist/esm/shared/components/GDiv/index.d.ts +1 -0
  265. package/dist/esm/shared/components/GI18NText/GI18NText.d.ts +2 -0
  266. package/dist/esm/shared/components/GI18NText/index.d.ts +2 -0
  267. package/dist/esm/shared/components/GI18NText/types.d.ts +6 -0
  268. package/dist/esm/shared/components/GOptionList/GOptionList.d.ts +11 -0
  269. package/dist/esm/shared/components/GOptionList/index.d.ts +1 -0
  270. package/dist/esm/shared/components/GSelector/GSelector.d.ts +27 -0
  271. package/dist/esm/shared/components/GSelector/index.d.ts +1 -0
  272. package/dist/esm/shared/components/GTextLink/GTextLink.d.ts +9 -0
  273. package/dist/esm/shared/components/GTextLink/index.d.ts +1 -0
  274. package/dist/esm/shared/components/GTimePicker/GTimePicker.d.ts +17 -0
  275. package/dist/esm/shared/components/GTimePicker/components/BaseTimePicker.d.ts +10 -0
  276. package/dist/esm/shared/components/GTimePicker/components/CompareTimePicker.d.ts +5 -0
  277. package/dist/esm/shared/components/GTimePicker/components/DateTimeFilterAddition.d.ts +2 -0
  278. package/dist/esm/shared/components/GTimePicker/components/DateTimeFilterInputs.d.ts +9 -0
  279. package/dist/esm/shared/components/GTimePicker/components/DateTimeFilters.d.ts +15 -0
  280. package/dist/esm/shared/components/GTimePicker/components/MainTimePicker.d.ts +3 -0
  281. package/dist/esm/shared/components/GTimePicker/components/index.d.ts +2 -0
  282. package/dist/esm/shared/components/GTimePicker/constants/compareDateTimePicker.d.ts +12 -0
  283. package/dist/esm/shared/components/GTimePicker/constants/datePicker.d.ts +14 -0
  284. package/dist/esm/shared/components/GTimePicker/constants/index.d.ts +2 -0
  285. package/dist/esm/shared/components/GTimePicker/constants/mainDataTimePicker.d.ts +14 -0
  286. package/dist/esm/shared/components/GTimePicker/contexts/DateTimePickerProvider.d.ts +15 -0
  287. package/dist/esm/shared/components/GTimePicker/contexts/index.d.ts +1 -0
  288. package/dist/esm/shared/components/GTimePicker/helpers/date-range-info.d.ts +16 -0
  289. package/dist/esm/shared/components/GTimePicker/helpers/index.d.ts +4 -0
  290. package/dist/esm/shared/components/GTimePicker/helpers/parse-date.d.ts +24 -0
  291. package/dist/esm/shared/components/GTimePicker/helpers/time-picker.d.ts +76 -0
  292. package/dist/esm/shared/components/GTimePicker/helpers/version.d.ts +2 -0
  293. package/dist/esm/shared/components/GTimePicker/hooks/index.d.ts +3 -0
  294. package/dist/esm/shared/components/GTimePicker/hooks/useCompareDateTimePicker.d.ts +26 -0
  295. package/dist/esm/shared/components/GTimePicker/hooks/useDateTimeFilter.d.ts +18 -0
  296. package/dist/esm/shared/components/GTimePicker/hooks/useDateTimePicker.d.ts +30 -0
  297. package/dist/esm/shared/components/GTimePicker/hooks/useVersionDateTimeFilters.d.ts +9 -0
  298. package/dist/esm/shared/components/GTimePicker/index.d.ts +7 -0
  299. package/dist/esm/shared/components/GTimePicker/types/index.d.ts +38 -0
  300. package/dist/esm/shared/components/GTooltip/GTooltip.d.ts +22 -0
  301. package/dist/esm/shared/components/GTooltip/index.d.ts +2 -0
  302. package/dist/esm/shared/components/GViewBySelector/GViewBySelector.d.ts +17 -0
  303. package/dist/esm/shared/components/GViewBySelector/index.d.ts +1 -0
  304. package/dist/esm/shared/components/index.d.ts +14 -1
  305. package/dist/esm/types/analytic-mode.d.ts +5 -0
  306. package/dist/esm/types/chart.d.ts +15 -1
  307. package/dist/esm/types/currency.d.ts +329 -0
  308. package/dist/esm/types/index.d.ts +2 -0
  309. package/dist/esm/types/metric.d.ts +31 -1
  310. package/dist/esm/types.js +11 -1
  311. package/dist/esm/types.mjs +11 -1
  312. package/dist/esm/utils/index.d.ts +1 -0
  313. package/dist/esm/utils/number.d.ts +1 -0
  314. package/dist/esm/utils/sort.d.ts +13 -0
  315. package/dist/style.css +1 -1
  316. package/dist/umd/esm/components/AnalyticMode/AnalyticModeSelector.d.ts +13 -0
  317. package/dist/umd/esm/components/AnalyticMode/index.d.ts +2 -0
  318. package/dist/umd/esm/components/CurrencySelector/CurrencySelector.d.ts +10 -0
  319. package/dist/umd/esm/components/CurrencySelector/index.d.ts +2 -0
  320. package/dist/umd/esm/components/GSelectableMetricChartCard/GSelectableMetricChartCard.d.ts +5 -3
  321. package/dist/umd/esm/components/GSelectableMetricChartCard/MetricChartTab.d.ts +2 -2
  322. package/dist/umd/esm/components/MetricDonutChartCard/MetricDonutChartCard.d.ts +16 -0
  323. package/dist/umd/esm/components/MetricDonutChartCard/index.d.ts +2 -0
  324. package/dist/umd/esm/components/MetricDonutChartCard/utils/donut-chart.d.ts +20 -0
  325. package/dist/umd/esm/components/MetricDonutChartCard/utils/index.d.ts +1 -0
  326. package/dist/umd/esm/components/SingleMetricChartCard/SingleMetricChartCard.d.ts +3 -1
  327. package/dist/umd/esm/components/common/chart/MetricChart.d.ts +5 -1
  328. package/dist/umd/esm/components/common/chart/MetricDonutChartSkeleton.d.ts +1 -0
  329. package/dist/umd/esm/components/common/chart/index.d.ts +1 -0
  330. package/dist/umd/esm/components/index.d.ts +3 -0
  331. package/dist/umd/esm/constants/breakdown-targets.d.ts +5 -0
  332. package/dist/umd/esm/constants/campaign.d.ts +1 -0
  333. package/dist/umd/esm/constants/currency.d.ts +2 -0
  334. package/dist/umd/esm/constants/index.d.ts +3 -0
  335. package/dist/umd/esm/core/gemxql/helpers/extractQueryData.d.ts +1 -1
  336. package/dist/umd/esm/core/gemxql/utils/dayjs.d.ts +2 -0
  337. package/dist/umd/esm/hooks/index.d.ts +5 -0
  338. package/dist/umd/esm/hooks/useEnhancedEffect.d.ts +2 -0
  339. package/dist/umd/esm/hooks/useFormatLineChartData.d.ts +11 -0
  340. package/dist/umd/esm/hooks/usePopoverResizeObserver.d.ts +7 -0
  341. package/dist/umd/esm/hooks/useToggle.d.ts +12 -0
  342. package/dist/umd/esm/hooks/useWindowSize.d.ts +18 -0
  343. package/dist/umd/esm/index.d.ts +3 -0
  344. package/dist/umd/esm/providers/MetricChartProvider.d.ts +5 -1
  345. package/dist/umd/esm/shared/charts/components/ComboChart.d.ts +1 -0
  346. package/dist/umd/esm/shared/charts/components/GBarChart.d.ts +13 -0
  347. package/dist/umd/esm/shared/charts/components/GComboChart.d.ts +5 -0
  348. package/dist/umd/esm/shared/charts/components/GDonutChart.d.ts +5 -0
  349. package/dist/umd/esm/shared/charts/components/GFunnelChart/GFunnelChart.d.ts +10 -0
  350. package/dist/umd/esm/shared/charts/components/GFunnelChart/components/FunnelChartAction.d.ts +7 -0
  351. package/dist/umd/esm/shared/charts/components/GFunnelChart/components/FunnelChartActionIcon.d.ts +9 -0
  352. package/dist/umd/esm/shared/charts/components/GFunnelChart/components/FunnelChartActionWrapper.d.ts +16 -0
  353. package/dist/umd/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/FunnelSelectionContent.d.ts +6 -0
  354. package/dist/umd/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/FunnelSelectionHeader.d.ts +1 -0
  355. package/dist/umd/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/FunnelSelectionItem.d.ts +9 -0
  356. package/dist/umd/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/FunnelSelectionPopover.d.ts +22 -0
  357. package/dist/umd/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/index.d.ts +1 -0
  358. package/dist/umd/esm/shared/charts/components/GFunnelChart/components/FunnelSelection/type.d.ts +7 -0
  359. package/dist/umd/esm/shared/charts/components/GFunnelChart/components/types.d.ts +23 -0
  360. package/dist/umd/esm/shared/charts/components/GFunnelChart/index.d.ts +3 -0
  361. package/dist/umd/esm/shared/charts/components/GFunnelChart/types.d.ts +11 -0
  362. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Arc/Arc.d.ts +16 -0
  363. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Arc/index.d.ts +1 -0
  364. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartContainer/ChartContainer.d.ts +17 -0
  365. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartContainer/hooks/useContainerBounds.d.ts +11 -0
  366. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartContainer/index.d.ts +1 -0
  367. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartElements/ChartDiv.d.ts +9 -0
  368. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartElements/ChartSVG.d.ts +12 -0
  369. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartElements/index.d.ts +6 -0
  370. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartErrorBoundary/ChartErrorBoundary.d.ts +25 -0
  371. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartErrorBoundary/index.d.ts +1 -0
  372. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartErrorBoundary/utilities/checkForMismatchedData.d.ts +2 -0
  373. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/ChartSkeleton.d.ts +31 -0
  374. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/DonutSkeleton/DonutSkeleton.d.ts +7 -0
  375. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/DonutSkeleton/index.d.ts +1 -0
  376. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/ErrorText/ErrorText.d.ts +7 -0
  377. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/ErrorText/index.d.ts +1 -0
  378. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/FunnelSkeleton/FunnelSkeleton.d.ts +7 -0
  379. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/FunnelSkeleton/index.d.ts +1 -0
  380. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/GridSkeleton/GridSkeleton.d.ts +7 -0
  381. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/GridSkeleton/index.d.ts +1 -0
  382. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/Shimmer/Shimmer.d.ts +3 -0
  383. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/Shimmer/index.d.ts +1 -0
  384. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SimpleBarSkeleton/SimpleBarSkeleton.d.ts +7 -0
  385. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SimpleBarSkeleton/index.d.ts +1 -0
  386. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SimpleNormalizedSkeleton/SimpleNormalizedSkeleton.d.ts +10 -0
  387. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SimpleNormalizedSkeleton/index.d.ts +1 -0
  388. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SparkSkeleton/SparkSkeleton.d.ts +7 -0
  389. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/SparkSkeleton/index.d.ts +1 -0
  390. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/components/index.d.ts +8 -0
  391. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ChartSkeleton/index.d.ts +3 -0
  392. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ConicGradientWithStops/ConicGradientWithStops.d.ts +9 -0
  393. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/ConicGradientWithStops/index.d.ts +1 -0
  394. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/DefaultPreview/DefaultPreview.d.ts +5 -0
  395. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/DefaultPreview/index.d.ts +2 -0
  396. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChart/Chart.d.ts +9 -0
  397. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChart/FunnelChart.d.ts +12 -0
  398. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChart/components/FunnelChartXAxisArrows.d.ts +10 -0
  399. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChart/components/FunnelChartXAxisLabels.d.ts +13 -0
  400. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChart/components/FunnelSegment.d.ts +17 -0
  401. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChart/components/Label.d.ts +14 -0
  402. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChart/components/index.d.ts +4 -0
  403. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChart/index.d.ts +2 -0
  404. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/Chart.d.ts +20 -0
  405. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/FunnelChartNext.d.ts +25 -0
  406. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/FunnelChartLabels/FunnelChartLabels.d.ts +29 -0
  407. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/FunnelChartLabels/index.d.ts +1 -0
  408. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/FunnelTooltip/FunnelTooltip.d.ts +8 -0
  409. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/FunnelTooltip/index.d.ts +2 -0
  410. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/ScaleIcon.d.ts +1 -0
  411. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/ScaleIconTooltip.d.ts +6 -0
  412. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/Tooltip/CustomTooltip.d.ts +10 -0
  413. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/Tooltip/Tooltip.d.ts +16 -0
  414. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/Tooltip/index.d.ts +1 -0
  415. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/TooltipOverlay.d.ts +30 -0
  416. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/TooltipWithPortal.d.ts +4 -0
  417. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/components/index.d.ts +7 -0
  418. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/constants.d.ts +19 -0
  419. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/hooks/useTooltipInteraction.d.ts +12 -0
  420. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/hooks/useTooltipPlacement.d.ts +27 -0
  421. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/index.d.ts +4 -0
  422. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/types.d.ts +9 -0
  423. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/utilities/calculate-dropoff.d.ts +1 -0
  424. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/FunnelChartNext/utilities/useBuildFunnelTrends.d.ts +10 -0
  425. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/HorizontalGridLines/HorizontalGridLines.d.ts +10 -0
  426. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/HorizontalGridLines/index.d.ts +1 -0
  427. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/SingleTextLine.d.ts +14 -0
  428. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/hooks/index.d.ts +1 -0
  429. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/hooks/useLabels.d.ts +19 -0
  430. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/index.d.ts +3 -0
  431. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/endLineTruncate.d.ts +9 -0
  432. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/endWordTruncate.d.ts +8 -0
  433. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/estimateTextHeight.d.ts +8 -0
  434. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/formatAndAddEllipsis.d.ts +1 -0
  435. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/getDiagonalLabels.d.ts +14 -0
  436. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/getHorizontalLabels.d.ts +15 -0
  437. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/getVerticalLabels.d.ts +13 -0
  438. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/getWidestLabel.d.ts +2 -0
  439. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/shouldSkipLabel.d.ts +1 -0
  440. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/tests/endWordTruncate.test.d.ts +1 -0
  441. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/tests/estimateTextHeight.test.d.ts +1 -0
  442. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/tests/formatAndAddEllipsis.test.d.ts +1 -0
  443. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/tests/truncateLastLine.test.d.ts +1 -0
  444. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/tests/truncateSingleLine.test.d.ts +1 -0
  445. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/truncateLabels.d.ts +11 -0
  446. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/truncateLastLine.d.ts +9 -0
  447. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/Labels/utilities/truncateSingleLine.d.ts +8 -0
  448. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/LinePreview/LinePreview.d.ts +8 -0
  449. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/LinePreview/constants.d.ts +3 -0
  450. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/LinePreview/index.d.ts +2 -0
  451. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/SwallowErrors/SwallowErrors.d.ts +16 -0
  452. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/SwallowErrors/index.d.ts +1 -0
  453. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TextLine/TextLine.d.ts +8 -0
  454. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TextLine/index.d.ts +1 -0
  455. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/TooltipContent.d.ts +8 -0
  456. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipContentContainer/TooltipContentContainer.d.ts +13 -0
  457. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipContentContainer/index.d.ts +1 -0
  458. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipRow/TooltipRow.d.ts +11 -0
  459. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipRow/index.d.ts +1 -0
  460. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipSeries/TooltipSeries.d.ts +7 -0
  461. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipSeries/index.d.ts +1 -0
  462. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipSeriesName/TooltipSeriesName.d.ts +5 -0
  463. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipSeriesName/index.d.ts +1 -0
  464. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipTitle/TooltipTitle.d.ts +6 -0
  465. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/TooltipTitle/index.d.ts +1 -0
  466. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/components/index.d.ts +5 -0
  467. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/constants.d.ts +2 -0
  468. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/hooks/useGetLongestLabelFromData.d.ts +5 -0
  469. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/index.d.ts +4 -0
  470. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/utilities/get-tooltip-template-content-column-count.d.ts +2 -0
  471. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipContent/utilities/tests/get-tooltip-template-content-column-count.test.d.ts +1 -0
  472. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/TooltipWrapper.d.ts +27 -0
  473. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/components/TooltipAnimatedContainer.d.ts +17 -0
  474. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/constants.d.ts +9 -0
  475. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/index.d.ts +5 -0
  476. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/types.d.ts +53 -0
  477. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/eventPoint.d.ts +15 -0
  478. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getAlteredHorizontalBarPosition.d.ts +2 -0
  479. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getAlteredLineChartPosition.d.ts +9 -0
  480. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getAlteredVerticalBarPosition.d.ts +2 -0
  481. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getDonutChartTooltipPosition.d.ts +8 -0
  482. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getHorizontalBarChartTooltipPosition.d.ts +7 -0
  483. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getLineChartTooltipPosition.d.ts +11 -0
  484. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/getVerticalBarChartTooltipPosition.d.ts +10 -0
  485. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities/shouldBlockTooltipEvents.d.ts +1 -0
  486. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TooltipWrapper/utilities.d.ts +13 -0
  487. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/TrendIndicator.d.ts +6 -0
  488. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/Arrows/ArrowDown.d.ts +1 -0
  489. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/Arrows/ArrowUp.d.ts +1 -0
  490. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/Arrows/index.d.ts +2 -0
  491. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/Svg/Svg.d.ts +10 -0
  492. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/Svg/index.d.ts +1 -0
  493. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/components/index.d.ts +2 -0
  494. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/constants.d.ts +8 -0
  495. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/index.d.ts +6 -0
  496. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/TrendIndicator/utilities/estimateTrendIndicatorWidth.d.ts +4 -0
  497. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/VerticalBarChart/utilities/index.d.ts +1 -0
  498. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/VerticalBarChart/utilities/sortBarChartData.d.ts +2 -0
  499. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/VerticalGridLines/VerticalGridLines.d.ts +9 -0
  500. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/VerticalGridLines/index.d.ts +1 -0
  501. package/dist/umd/esm/shared/charts/components/GPolarisViz/components/index.d.ts +6 -0
  502. package/dist/umd/esm/shared/charts/components/GPolarisViz/constants.d.ts +21 -0
  503. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/index.d.ts +5 -0
  504. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useBarSpringConfig.d.ts +12 -0
  505. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useBrowserCheck.d.ts +5 -0
  506. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useCallbackRef.d.ts +3 -0
  507. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useDataForHorizontalChart.d.ts +15 -0
  508. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useDebouncedCallback.d.ts +27 -0
  509. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useFormattedLabels.d.ts +10 -0
  510. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useFunnelBarScaling.d.ts +12 -0
  511. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useHorizontalBarSizes.d.ts +15 -0
  512. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useHorizontalStackedValues.d.ts +13 -0
  513. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useHorizontalTicksAndScale.d.ts +15 -0
  514. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useHorizontalXScale.d.ts +21 -0
  515. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useIndexForLabels.d.ts +2 -0
  516. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/usePrefersReducedMotion.d.ts +3 -0
  517. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/usePrintResizing.d.ts +11 -0
  518. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useReducedLabelIndexes.d.ts +5 -0
  519. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useResizeObserver.d.ts +6 -0
  520. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useRootContainer.d.ts +1 -0
  521. package/dist/umd/esm/shared/charts/components/GPolarisViz/hooks/useWatchColorVisionEvents.d.ts +8 -0
  522. package/dist/umd/esm/shared/charts/components/GPolarisViz/index.d.ts +7 -0
  523. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/Bar/Bar.d.ts +14 -0
  524. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/Bar/index.d.ts +1 -0
  525. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/FunnelChartConnector/FunnelChartConnector.d.ts +11 -0
  526. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/FunnelChartConnector/FunnelChartConnectorGradient.d.ts +6 -0
  527. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/FunnelChartConnector/constants.d.ts +5 -0
  528. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/FunnelChartConnector/index.d.ts +3 -0
  529. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/FunnelChartSegment.d.ts +17 -0
  530. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/components/AnimatedSegment.d.ts +13 -0
  531. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/components/InteractiveOverlay.d.ts +11 -0
  532. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/components/ScaledSegment.d.ts +17 -0
  533. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/constants.d.ts +4 -0
  534. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/FunnelChartSegment/index.d.ts +2 -0
  535. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/SeriesIcon/SeriesIcon.d.ts +8 -0
  536. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/SeriesIcon/index.d.ts +1 -0
  537. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/ZeroValueLine/ZeroValueLine.d.ts +9 -0
  538. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/ZeroValueLine/index.d.ts +1 -0
  539. package/dist/umd/esm/shared/charts/components/GPolarisViz/shared/index.d.ts +3 -0
  540. package/dist/umd/esm/shared/charts/components/GPolarisViz/types.d.ts +209 -0
  541. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/base.d.ts +3 -0
  542. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/classnames.d.ts +1 -0
  543. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/createCssConicGradient.d.ts +2 -0
  544. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/createCssGradient.d.ts +2 -0
  545. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/estimateStringWidthWithOffset.d.ts +1 -0
  546. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/getAxisOptions.d.ts +3 -0
  547. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/getCSSBackgroundFromColor.d.ts +2 -0
  548. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/getChartId.d.ts +1 -0
  549. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/getFontSize.d.ts +1 -0
  550. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/getStackedMinMax.d.ts +10 -0
  551. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/getStackedValues.d.ts +10 -0
  552. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/getStackedValuesFromDataSeries.d.ts +7 -0
  553. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/getTrendIndicatorData.d.ts +8 -0
  554. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/hasHiddenComparisonSeries.d.ts +9 -0
  555. package/dist/umd/esm/shared/charts/components/GPolarisViz/utilities/index.d.ts +6 -0
  556. package/dist/umd/esm/shared/charts/components/GSimpleBarChart.d.ts +5 -0
  557. package/dist/umd/esm/shared/charts/components/index.d.ts +7 -0
  558. package/dist/umd/esm/shared/charts/constants/chart.d.ts +2 -0
  559. package/dist/umd/esm/shared/charts/constants/index.d.ts +1 -0
  560. package/dist/umd/esm/shared/charts/contexts/GChartProvider.d.ts +9 -0
  561. package/dist/umd/esm/shared/charts/contexts/index.d.ts +1 -0
  562. package/dist/umd/esm/shared/charts/index.d.ts +4 -0
  563. package/dist/umd/esm/shared/charts/types/chart.d.ts +35 -0
  564. package/dist/umd/esm/shared/charts/types/index.d.ts +1 -0
  565. package/dist/umd/esm/shared/components/GActivatorPopover/GActivatorPopover.d.ts +23 -0
  566. package/dist/umd/esm/shared/components/GActivatorPopover/index.d.ts +1 -0
  567. package/dist/umd/esm/shared/components/GButton/GButton.d.ts +19 -0
  568. package/dist/umd/esm/shared/components/GButton/index.d.ts +1 -0
  569. package/dist/umd/esm/shared/components/GCheckbox/GCheckbox.d.ts +39 -0
  570. package/dist/umd/esm/shared/components/GCheckbox/index.d.ts +1 -0
  571. package/dist/umd/esm/shared/components/GChoice/ChoiceHelpText.d.ts +4 -0
  572. package/dist/umd/esm/shared/components/GChoice/GChoice.d.ts +44 -0
  573. package/dist/umd/esm/shared/components/GChoice/index.d.ts +2 -0
  574. package/dist/umd/esm/shared/components/GClickable/GClickable.d.ts +10 -0
  575. package/dist/umd/esm/shared/components/GClickable/index.d.ts +1 -0
  576. package/dist/umd/esm/shared/components/GDiv/GDiv.d.ts +7 -0
  577. package/dist/umd/esm/shared/components/GDiv/index.d.ts +1 -0
  578. package/dist/umd/esm/shared/components/GI18NText/GI18NText.d.ts +2 -0
  579. package/dist/umd/esm/shared/components/GI18NText/index.d.ts +2 -0
  580. package/dist/umd/esm/shared/components/GI18NText/types.d.ts +6 -0
  581. package/dist/umd/esm/shared/components/GOptionList/GOptionList.d.ts +11 -0
  582. package/dist/umd/esm/shared/components/GOptionList/index.d.ts +1 -0
  583. package/dist/umd/esm/shared/components/GSelector/GSelector.d.ts +27 -0
  584. package/dist/umd/esm/shared/components/GSelector/index.d.ts +1 -0
  585. package/dist/umd/esm/shared/components/GTextLink/GTextLink.d.ts +9 -0
  586. package/dist/umd/esm/shared/components/GTextLink/index.d.ts +1 -0
  587. package/dist/umd/esm/shared/components/GTimePicker/GTimePicker.d.ts +17 -0
  588. package/dist/umd/esm/shared/components/GTimePicker/components/BaseTimePicker.d.ts +10 -0
  589. package/dist/umd/esm/shared/components/GTimePicker/components/CompareTimePicker.d.ts +5 -0
  590. package/dist/umd/esm/shared/components/GTimePicker/components/DateTimeFilterAddition.d.ts +2 -0
  591. package/dist/umd/esm/shared/components/GTimePicker/components/DateTimeFilterInputs.d.ts +9 -0
  592. package/dist/umd/esm/shared/components/GTimePicker/components/DateTimeFilters.d.ts +15 -0
  593. package/dist/umd/esm/shared/components/GTimePicker/components/MainTimePicker.d.ts +3 -0
  594. package/dist/umd/esm/shared/components/GTimePicker/components/index.d.ts +2 -0
  595. package/dist/umd/esm/shared/components/GTimePicker/constants/compareDateTimePicker.d.ts +12 -0
  596. package/dist/umd/esm/shared/components/GTimePicker/constants/datePicker.d.ts +14 -0
  597. package/dist/umd/esm/shared/components/GTimePicker/constants/index.d.ts +2 -0
  598. package/dist/umd/esm/shared/components/GTimePicker/constants/mainDataTimePicker.d.ts +14 -0
  599. package/dist/umd/esm/shared/components/GTimePicker/contexts/DateTimePickerProvider.d.ts +15 -0
  600. package/dist/umd/esm/shared/components/GTimePicker/contexts/index.d.ts +1 -0
  601. package/dist/umd/esm/shared/components/GTimePicker/helpers/date-range-info.d.ts +16 -0
  602. package/dist/umd/esm/shared/components/GTimePicker/helpers/index.d.ts +4 -0
  603. package/dist/umd/esm/shared/components/GTimePicker/helpers/parse-date.d.ts +24 -0
  604. package/dist/umd/esm/shared/components/GTimePicker/helpers/time-picker.d.ts +76 -0
  605. package/dist/umd/esm/shared/components/GTimePicker/helpers/version.d.ts +2 -0
  606. package/dist/umd/esm/shared/components/GTimePicker/hooks/index.d.ts +3 -0
  607. package/dist/umd/esm/shared/components/GTimePicker/hooks/useCompareDateTimePicker.d.ts +26 -0
  608. package/dist/umd/esm/shared/components/GTimePicker/hooks/useDateTimeFilter.d.ts +18 -0
  609. package/dist/umd/esm/shared/components/GTimePicker/hooks/useDateTimePicker.d.ts +30 -0
  610. package/dist/umd/esm/shared/components/GTimePicker/hooks/useVersionDateTimeFilters.d.ts +9 -0
  611. package/dist/umd/esm/shared/components/GTimePicker/index.d.ts +7 -0
  612. package/dist/umd/esm/shared/components/GTimePicker/types/index.d.ts +38 -0
  613. package/dist/umd/esm/shared/components/GTooltip/GTooltip.d.ts +22 -0
  614. package/dist/umd/esm/shared/components/GTooltip/index.d.ts +2 -0
  615. package/dist/umd/esm/shared/components/GViewBySelector/GViewBySelector.d.ts +17 -0
  616. package/dist/umd/esm/shared/components/GViewBySelector/index.d.ts +1 -0
  617. package/dist/umd/esm/shared/components/index.d.ts +14 -1
  618. package/dist/umd/esm/types/analytic-mode.d.ts +5 -0
  619. package/dist/umd/esm/types/chart.d.ts +15 -1
  620. package/dist/umd/esm/types/currency.d.ts +329 -0
  621. package/dist/umd/esm/types/index.d.ts +2 -0
  622. package/dist/umd/esm/types/metric.d.ts +31 -1
  623. package/dist/umd/esm/utils/index.d.ts +1 -0
  624. package/dist/umd/esm/utils/number.d.ts +1 -0
  625. package/dist/umd/esm/utils/sort.d.ts +13 -0
  626. package/dist/umd/index.js +1 -1
  627. package/dist/umd/types.js +1 -1
  628. package/package.json +9 -1
@@ -1,8 +1,14 @@
1
1
  "use client"
2
2
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
- import { SkeletonDisplayText, Box, Popover, InlineStack, BlockStack, Text, List, Card, SkeletonBodyText, Icon } from '@shopify/polaris';
4
- import React, { useMemo, forwardRef, useState, useRef, useImperativeHandle } from 'react';
5
- import { PolarisVizProvider, LineChart } from '@shopify/polaris-viz';
3
+ import '@tanstack/react-query';
4
+ import dayjs from 'dayjs';
5
+ import quarterOfYear from 'dayjs/plugin/quarterOfYear';
6
+ import timezone from 'dayjs/plugin/timezone';
7
+ import utc from 'dayjs/plugin/utc';
8
+ import React, { useMemo, useCallback, useState, useEffect, forwardRef, Fragment as Fragment$1, useRef, useImperativeHandle, createContext, useContext } from 'react';
9
+ import { Text, Box, InlineStack, Icon, InlineGrid, Tooltip, Button, BlockStack, Checkbox, RadioButton, Popover, ActionList, Link, SkeletonDisplayText, List, TextField, Collapsible, useBreakpoints, Select, Scrollable, OptionList, DatePicker, ButtonGroup, Card, SkeletonBodyText } from '@shopify/polaris';
10
+ import { useTranslation } from 'react-i18next';
11
+ import { PolarisVizProvider, LineChart, DonutChart } from '@shopify/polaris-viz';
6
12
 
7
13
  var EMetricKey;
8
14
  (function (EMetricKey) {
@@ -22,6 +28,9 @@ var EMetricKey;
22
28
  EMetricKey["AOV"] = "aov";
23
29
  EMetricKey["REVENUE"] = "revenue";
24
30
  EMetricKey["RPV"] = "revenue_per_visitor";
31
+ EMetricKey["VISITOR_ITEMS"] = "visitor_items";
32
+ EMetricKey["DEVICE_ITEMS"] = "device_items";
33
+ EMetricKey["TRAFFIC_SOURCE_ITEMS"] = "traffic_source_items";
25
34
  })(EMetricKey || (EMetricKey = {}));
26
35
 
27
36
  const ANALYTICS_METRIC_TOOLTIP = {
@@ -97,6 +106,545 @@ const ANALYTICS_METRIC_TOOLTIP = {
97
106
  title: 'Sessions with cart additions',
98
107
  content: 'Sessions in your online store in which a visitor added item to the cart',
99
108
  },
109
+ [EMetricKey.VISITOR_ITEMS]: {
110
+ title: 'Sessions by visitor type',
111
+ content: '<p>Numbers of new and returning visitors</p>',
112
+ contentList: [
113
+ 'New visitor: who accesses your store for the first time after GemX installation',
114
+ 'Returning visitor: who comes back to your store after GemX installation',
115
+ ],
116
+ },
117
+ [EMetricKey.DEVICE_ITEMS]: {
118
+ title: 'Sessions by device type',
119
+ content: `Sessions in your online store by the visitor's device type`,
120
+ },
121
+ [EMetricKey.TRAFFIC_SOURCE_ITEMS]: {
122
+ title: 'Sessions by traffic source',
123
+ content: 'Sessions on your page by where visitors come from',
124
+ },
125
+ };
126
+
127
+ const NONE_VALUE = 'None';
128
+ const PLACEHOLDER_VALUE$1 = '-';
129
+
130
+ const TOTALS_SUFFIX = '___totals';
131
+ const COMPARE_PREFIX = 'comparison___';
132
+ const COMPARE_SUFFIX = '___previous_period';
133
+ const COMPARE_TOTALS_SUFFIX = `${COMPARE_SUFFIX}${TOTALS_SUFFIX}`;
134
+
135
+ const OPERATOR_IS = 'is';
136
+
137
+ var EAnalyticDataType;
138
+ (function (EAnalyticDataType) {
139
+ EAnalyticDataType["DATE"] = "DATE";
140
+ EAnalyticDataType["ARRAY"] = "ARRAY";
141
+ EAnalyticDataType["OBJECT"] = "OBJECT";
142
+ EAnalyticDataType["STRING"] = "STRING";
143
+ EAnalyticDataType["INTEGER"] = "INTEGER";
144
+ EAnalyticDataType["CURRENCY"] = "CURRENCY";
145
+ EAnalyticDataType["PERCENT"] = "PERCENT";
146
+ EAnalyticDataType["DURATION"] = "DURATION";
147
+ EAnalyticDataType["MONTH"] = "MONTH_TIMESTAMP";
148
+ EAnalyticDataType["QUARTER"] = "QUARTER_TIMESTAMP";
149
+ EAnalyticDataType["DAY"] = "DAY_TIMESTAMP";
150
+ EAnalyticDataType["WEEK"] = "WEEK_TIMESTAMP";
151
+ EAnalyticDataType["YEAR"] = "YEAR_TIMESTAMP";
152
+ EAnalyticDataType["HOUR"] = "HOUR_TIMESTAMP";
153
+ })(EAnalyticDataType || (EAnalyticDataType = {}));
154
+ var EAnalyticColumnKey;
155
+ (function (EAnalyticColumnKey) {
156
+ EAnalyticColumnKey["CAMPAIGNS"] = "experiments";
157
+ EAnalyticColumnKey["VISITOR_ITEMS"] = "visitor_items";
158
+ EAnalyticColumnKey["DEVICE_ITEMS"] = "device_items";
159
+ EAnalyticColumnKey["TRAFFIC_SOURCE_ITEMS"] = "traffic_source_items";
160
+ })(EAnalyticColumnKey || (EAnalyticColumnKey = {}));
161
+
162
+ var EAnalyticMode$1;
163
+ (function (EAnalyticMode) {
164
+ EAnalyticMode["ALL_SESSION"] = "ALL_SESSION";
165
+ EAnalyticMode["FIRST_SESSION"] = "FIRST_SESSION";
166
+ EAnalyticMode["PAGE_ONLY"] = "PAGE_ONLY";
167
+ })(EAnalyticMode$1 || (EAnalyticMode$1 = {}));
168
+
169
+ var EAnalyticSource;
170
+ (function (EAnalyticSource) {
171
+ EAnalyticSource["SESSIONS"] = "sessions";
172
+ EAnalyticSource["SALES"] = "sales";
173
+ })(EAnalyticSource || (EAnalyticSource = {}));
174
+
175
+ var EVisitorType;
176
+ (function (EVisitorType) {
177
+ EVisitorType["NEW"] = "new";
178
+ EVisitorType["RETURNING"] = "returning";
179
+ })(EVisitorType || (EVisitorType = {}));
180
+ var EDeviceType;
181
+ (function (EDeviceType) {
182
+ EDeviceType["DESKTOP"] = "desktop";
183
+ EDeviceType["MOBILE"] = "mobile";
184
+ EDeviceType["TABLET"] = "tablet";
185
+ })(EDeviceType || (EDeviceType = {}));
186
+ var ETrafficSourceType;
187
+ (function (ETrafficSourceType) {
188
+ ETrafficSourceType["DIRECT"] = "direct";
189
+ ETrafficSourceType["EMAIL"] = "email";
190
+ ETrafficSourceType["REFERRAL"] = "referral";
191
+ ETrafficSourceType["ORGANIC_SOCIAL"] = "organic-social";
192
+ ETrafficSourceType["ORGANIC_SEARCH"] = "organic-search";
193
+ ETrafficSourceType["PAID_SOCIAL"] = "paid-social";
194
+ ETrafficSourceType["PAID_SEARCH"] = "paid-search";
195
+ ETrafficSourceType["SMS"] = "sms";
196
+ })(ETrafficSourceType || (ETrafficSourceType = {}));
197
+
198
+ var EComparisonOperator;
199
+ (function (EComparisonOperator) {
200
+ EComparisonOperator["EQ"] = "=";
201
+ EComparisonOperator["IN"] = "IN";
202
+ EComparisonOperator["LIKE"] = "LIKE";
203
+ })(EComparisonOperator || (EComparisonOperator = {}));
204
+ var EGroupOperator;
205
+ (function (EGroupOperator) {
206
+ EGroupOperator["OR"] = "OR";
207
+ EGroupOperator["AND"] = "AND";
208
+ })(EGroupOperator || (EGroupOperator = {}));
209
+
210
+ var EFilterField;
211
+ (function (EFilterField) {
212
+ EFilterField["DEVICE"] = "device";
213
+ EFilterField["DEVICES"] = "devices";
214
+ EFilterField["VISITOR"] = "visitor_type";
215
+ EFilterField["VISITORS"] = "visitor_types";
216
+ EFilterField["TRAFFIC_SOURCE"] = "traffic_source";
217
+ EFilterField["TRAFFIC_SOURCES"] = "traffic_sources";
218
+ EFilterField["VERSION"] = "version";
219
+ EFilterField["VERSIONS"] = "versions";
220
+ EFilterField["SINGLE_PAGE"] = "page_path";
221
+ EFilterField["LIST_PAGE"] = "page_paths";
222
+ EFilterField["GROUP_CAMPAIGN_ITEM"] = "group_campaign_item";
223
+ EFilterField["GROUP_CAMPAIGN_ITEMS"] = "group_campaign_items";
224
+ EFilterField["SINGLE_CAMPAIGN"] = "experiment_id";
225
+ EFilterField["GROUP_CAMPAIGN"] = "experiment_group_id";
226
+ EFilterField["CAMPAIGN_VERSION_ID"] = "version_id";
227
+ EFilterField["GROUP_CAMPAIGN_VERSION_ID"] = "group_version_id";
228
+ })(EFilterField || (EFilterField = {}));
229
+
230
+ var EOperatorField;
231
+ (function (EOperatorField) {
232
+ EOperatorField["DEVICE_OPERATOR"] = "deviceOperator";
233
+ EOperatorField["VISITOR_OPERATOR"] = "visitorOperator";
234
+ EOperatorField["TRAFFIC_SOURCE_OPERATOR"] = "trafficSourceOperator";
235
+ EOperatorField["VERSION_OPERATOR"] = "versionOperator";
236
+ EOperatorField["PAGE_OPERATOR"] = "pageOperator";
237
+ EOperatorField["CAMPAIGN_ITEM_OPERATOR"] = "campaignItemOperator";
238
+ })(EOperatorField || (EOperatorField = {}));
239
+
240
+ /**
241
+ * Controls which totals columns are appended to the query result.
242
+ *
243
+ * - NONE → no totals, GROUP BY only.
244
+ * - TOTALS → adds `<metric>___totals` (grand total only). Use with single-dimension GROUP BY.
245
+ * - ALL → adds subtotals per dimension group + grand total. Use with multi-dimension GROUP BY.
246
+ */
247
+ var EGroupWithClause;
248
+ (function (EGroupWithClause) {
249
+ EGroupWithClause["NONE"] = "";
250
+ EGroupWithClause["TOTALS"] = "TOTALS";
251
+ EGroupWithClause["ALL"] = "WITH GROUP_TOTALS, TOTALS";
252
+ })(EGroupWithClause || (EGroupWithClause = {}));
253
+
254
+ var EOrderDirectionType;
255
+ (function (EOrderDirectionType) {
256
+ EOrderDirectionType["ASC"] = "ASC";
257
+ EOrderDirectionType["DESC"] = "DESC";
258
+ })(EOrderDirectionType || (EOrderDirectionType = {}));
259
+
260
+ var EPageMetric;
261
+ (function (EPageMetric) {
262
+ EPageMetric["PAGE_ITEMS"] = "page_items";
263
+ EPageMetric["PAGE_PATHS"] = "page_paths";
264
+ })(EPageMetric || (EPageMetric = {}));
265
+ var EPageDimension;
266
+ (function (EPageDimension) {
267
+ EPageDimension["PAGE_PATH"] = "page_path";
268
+ })(EPageDimension || (EPageDimension = {}));
269
+ var EPageField;
270
+ (function (EPageField) {
271
+ EPageField["SHOPIFY_PAGE_ID"] = "shopify_page_id";
272
+ EPageField["LOCATION_PATH"] = "location_path";
273
+ EPageField["PAGE_TYPE"] = "page_type";
274
+ EPageField["PAGE_TITLE"] = "page_title";
275
+ EPageField["PAGE_PATH"] = "page_path";
276
+ EPageField["TEMPLATE_SUFFIX"] = "template_suffix";
277
+ })(EPageField || (EPageField = {}));
278
+
279
+ var ERowReaderMode;
280
+ (function (ERowReaderMode) {
281
+ ERowReaderMode["DEFAULT"] = "DEFAULT";
282
+ ERowReaderMode["COMPARISON"] = "COMPARISON";
283
+ ERowReaderMode["TOTALS"] = "TOTALS";
284
+ ERowReaderMode["COMPARISON_TOTALS"] = "COMPARISON_TOTALS";
285
+ })(ERowReaderMode || (ERowReaderMode = {}));
286
+
287
+ var ETimeDimension;
288
+ (function (ETimeDimension) {
289
+ ETimeDimension["HOUR"] = "hour";
290
+ ETimeDimension["DAY"] = "day";
291
+ ETimeDimension["WEEK"] = "week";
292
+ ETimeDimension["MONTH"] = "month";
293
+ ETimeDimension["QUARTER"] = "quarter";
294
+ ETimeDimension["YEAR"] = "year";
295
+ })(ETimeDimension || (ETimeDimension = {}));
296
+
297
+ ({
298
+ [ERowReaderMode.DEFAULT]: { prefix: '', suffix: '' },
299
+ [ERowReaderMode.COMPARISON]: { prefix: COMPARE_PREFIX, suffix: COMPARE_SUFFIX },
300
+ [ERowReaderMode.TOTALS]: { prefix: '', suffix: TOTALS_SUFFIX },
301
+ [ERowReaderMode.COMPARISON_TOTALS]: { prefix: COMPARE_PREFIX, suffix: COMPARE_TOTALS_SUFFIX },
302
+ });
303
+
304
+ EGroupOperator.OR;
305
+
306
+ [
307
+ {
308
+ operator: EOperatorField.DEVICE_OPERATOR,
309
+ singleField: EFilterField.DEVICE,
310
+ multiField: EFilterField.DEVICES,
311
+ fieldName: EFilterField.DEVICE,
312
+ },
313
+ {
314
+ operator: EOperatorField.VISITOR_OPERATOR,
315
+ singleField: EFilterField.VISITOR,
316
+ multiField: EFilterField.VISITORS,
317
+ fieldName: EFilterField.VISITOR,
318
+ },
319
+ {
320
+ operator: EOperatorField.TRAFFIC_SOURCE_OPERATOR,
321
+ singleField: EFilterField.TRAFFIC_SOURCE,
322
+ multiField: EFilterField.TRAFFIC_SOURCES,
323
+ fieldName: EFilterField.TRAFFIC_SOURCE,
324
+ },
325
+ {
326
+ operator: EOperatorField.VERSION_OPERATOR,
327
+ singleField: EFilterField.VERSION,
328
+ multiField: EFilterField.VERSIONS,
329
+ fieldName: EFilterField.VERSION,
330
+ },
331
+ {
332
+ operator: EOperatorField.PAGE_OPERATOR,
333
+ singleField: EFilterField.SINGLE_PAGE,
334
+ multiField: EFilterField.LIST_PAGE,
335
+ fieldName: EFilterField.SINGLE_PAGE,
336
+ },
337
+ {
338
+ operator: EOperatorField.CAMPAIGN_ITEM_OPERATOR,
339
+ singleField: EFilterField.GROUP_CAMPAIGN_ITEM,
340
+ multiField: EFilterField.GROUP_CAMPAIGN_ITEMS,
341
+ condition: EFilterField.GROUP_CAMPAIGN,
342
+ fieldName: EFilterField.SINGLE_CAMPAIGN,
343
+ },
344
+ {
345
+ operatorVal: OPERATOR_IS,
346
+ singleField: EFilterField.SINGLE_CAMPAIGN,
347
+ multiField: EFilterField.GROUP_CAMPAIGN,
348
+ },
349
+ ];
350
+
351
+ dayjs.extend(utc);
352
+ dayjs.extend(timezone);
353
+ dayjs.extend(quarterOfYear);
354
+ let tz = 'UTC';
355
+ const DEFAULT_DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss';
356
+ const dayjsTz = (date) => {
357
+ if (!date)
358
+ return dayjs().tz(tz);
359
+ return dayjs(date).tz(tz);
360
+ };
361
+ const convertDateToTz = (date) => {
362
+ if (!date)
363
+ return dayjs.tz(dayjs().format(DEFAULT_DATE_FORMAT), tz);
364
+ return dayjs.tz(dayjs(date).format(DEFAULT_DATE_FORMAT), tz);
365
+ };
366
+ const dayjsTzToLocalTZ = (date) => {
367
+ if (!date)
368
+ return dayjs(dayjsTz().format(DEFAULT_DATE_FORMAT));
369
+ return dayjs(dayjsTz(date).format(DEFAULT_DATE_FORMAT));
370
+ };
371
+ const dayjsTzToDate = (date) => {
372
+ return dayjsTzToLocalTZ(date).toDate();
373
+ };
374
+
375
+ const TRIM_DECIMAL_ZEROS_REGEX = /\.0+$/;
376
+ const DEFAULT_DECIMALS = 2;
377
+ const trimDecimalZeros = (number) => {
378
+ return `${number}`.replace(TRIM_DECIMAL_ZEROS_REGEX, '');
379
+ };
380
+ const cleanDecimal = (number, decimals = DEFAULT_DECIMALS) => {
381
+ return trimDecimalZeros(number.toFixed(decimals));
382
+ };
383
+ const semverToNum = (v) => {
384
+ const [major, minor, patch] = v.split('.').map((n) => Number(n));
385
+ return (major ?? 0) * 1_000_000 + (minor ?? 0) * 1_000 + (patch ?? 0);
386
+ };
387
+
388
+ /**
389
+ * Utility function to calculate percentage and format it.
390
+ * @param part - The part value.
391
+ * @param total - The total value.
392
+ * @param decimals - The number of decimal places to format the percentage to.
393
+ * @returns The formatted percentage as a string.
394
+ */
395
+ const PERCENTAGE_THRESHOLD = 0.005;
396
+ const PERCENTAGE_THRESHOLD_STRING = '~0%';
397
+ const calcPercentage = (part, total, decimals = DEFAULT_DECIMALS) => {
398
+ if (typeof part !== 'number' || !total)
399
+ return undefined;
400
+ if (part === 0)
401
+ return 0;
402
+ const percentage = (part / total) * 100;
403
+ return parseFloat(cleanDecimal(percentage, decimals));
404
+ };
405
+ const isLessThanThreshold = (percentage) => percentage > 0 && percentage < PERCENTAGE_THRESHOLD;
406
+ const calcPercentageString = (part, total, decimals = 2) => {
407
+ const percentage = calcPercentage(part, total, decimals);
408
+ if (typeof percentage !== 'number')
409
+ return undefined;
410
+ if (isLessThanThreshold(percentage)) {
411
+ return PERCENTAGE_THRESHOLD_STRING;
412
+ }
413
+ return `${percentage}%`;
414
+ };
415
+ const formatPercentage = (percentage, decimals = DEFAULT_DECIMALS) => {
416
+ if (isLessThanThreshold(percentage)) {
417
+ return PERCENTAGE_THRESHOLD_STRING;
418
+ }
419
+ return `${cleanDecimal(percentage, decimals)}%`;
420
+ };
421
+
422
+ var AnalyticInterval;
423
+ (function (AnalyticInterval) {
424
+ AnalyticInterval["DAY"] = "DAY";
425
+ AnalyticInterval["HOUR"] = "HOUR";
426
+ AnalyticInterval["MONTH"] = "MONTH";
427
+ AnalyticInterval["QUARTER"] = "QUARTER";
428
+ AnalyticInterval["WEEK"] = "WEEK";
429
+ AnalyticInterval["YEAR"] = "YEAR";
430
+ })(AnalyticInterval || (AnalyticInterval = {}));
431
+ function numberWithCommas(x) {
432
+ return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
433
+ }
434
+ const SECONDS_IN_MINUTE = 60;
435
+ const SECONDS_IN_HOUR = SECONDS_IN_MINUTE * SECONDS_IN_MINUTE;
436
+ const getTimeDurationLabel = (valueInSeconds) => {
437
+ let data = valueInSeconds;
438
+ if (!Number.isFinite(valueInSeconds) || valueInSeconds == null) {
439
+ data = 0;
440
+ }
441
+ const fixedValue = cleanDecimal(data);
442
+ if (data >= SECONDS_IN_HOUR) {
443
+ const hours = Math.floor(data / SECONDS_IN_HOUR);
444
+ const minutes = Math.floor((data % SECONDS_IN_HOUR) / SECONDS_IN_MINUTE);
445
+ const seconds = Math.floor(data % SECONDS_IN_MINUTE);
446
+ return `${hours}h ${minutes}m ${seconds}s`;
447
+ }
448
+ else if (data >= SECONDS_IN_MINUTE) {
449
+ const minutes = Math.floor(data / SECONDS_IN_MINUTE);
450
+ const seconds = Math.floor(data % SECONDS_IN_MINUTE);
451
+ return `${minutes}m ${seconds}s`;
452
+ }
453
+ else {
454
+ return `${fixedValue}s`;
455
+ }
456
+ };
457
+ const getFormattedByInterval = (value, interval, options) => {
458
+ if (!value)
459
+ return '';
460
+ const optionFormat = options?.isExpandDetail
461
+ ? {
462
+ formatHouse: 'MMM D, h:mm A',
463
+ formatDay: 'MMM D, YYYY',
464
+ formatMonth: 'MMM YYYY',
465
+ formatYear: 'MMM YYYY',
466
+ }
467
+ : {
468
+ formatHouse: 'h A',
469
+ formatDay: 'MMM D',
470
+ formatMonth: 'MMM YYYY',
471
+ formatYear: 'YYYY',
472
+ };
473
+ switch (interval) {
474
+ case AnalyticInterval.HOUR:
475
+ return dayjsTz(value).format(optionFormat.formatHouse);
476
+ case AnalyticInterval.DAY:
477
+ case AnalyticInterval.WEEK:
478
+ return dayjsTz(value).format(optionFormat.formatDay);
479
+ case AnalyticInterval.MONTH:
480
+ return dayjsTz(value).format(optionFormat.formatMonth);
481
+ case AnalyticInterval.QUARTER: {
482
+ const d = dayjsTz(value);
483
+ return `Q${d.quarter()} ${d.format('YYYY')}`;
484
+ }
485
+ case AnalyticInterval.YEAR:
486
+ return dayjsTz(value).format(optionFormat.formatYear);
487
+ }
488
+ return dayjsTz(value).format(optionFormat.formatMonth);
489
+ };
490
+
491
+ const formatAnalyticDate = (dateString) => {
492
+ if (!dateString)
493
+ return 'None';
494
+ const date = dayjsTz(dateString);
495
+ const now = dayjsTz();
496
+ const yesterday = dayjsTz().subtract(1, 'day');
497
+ const isToday = date.format('YYYY-MM-DD') === now.format('YYYY-MM-DD');
498
+ const isYesterday = date.format('YYYY-MM-DD') === yesterday.format('YYYY-MM-DD');
499
+ if (isToday) {
500
+ return `Today at ${date.format('HH:mm')}`;
501
+ }
502
+ if (isYesterday) {
503
+ return `Yesterday at ${date.format('HH:mm')}`;
504
+ }
505
+ const daysDiff = now.diff(date, 'day');
506
+ const isWithinWeek = daysDiff >= 0 && daysDiff < 7;
507
+ if (isWithinWeek) {
508
+ return `${date.format('dddd')} at ${date.format('HH:mm')}`;
509
+ }
510
+ return `${date.format('MMM D')} at ${date.format('hh:mm a')}`;
511
+ };
512
+
513
+ const formatAnalyticData = ({ value, formatter, getTextPrice, name, }) => {
514
+ const dataTypeIsObjectOrArray = value !== null && (typeof value === 'object' || Array.isArray(value));
515
+ if (dataTypeIsObjectOrArray)
516
+ return value;
517
+ switch (formatter) {
518
+ case EAnalyticDataType.INTEGER: {
519
+ return numberWithCommas((value ?? 0).toString());
520
+ }
521
+ case EAnalyticDataType.CURRENCY: {
522
+ if (!getTextPrice)
523
+ return `${value ?? 0}`;
524
+ return getTextPrice(value, false);
525
+ }
526
+ case EAnalyticDataType.DATE: {
527
+ return formatAnalyticDate(value);
528
+ }
529
+ case EAnalyticDataType.PERCENT: {
530
+ if (typeof value !== 'number')
531
+ return calcPercentageString(0, 1, 2) ?? '';
532
+ return calcPercentageString(value / 100, 1, 2) ?? '';
533
+ }
534
+ case EAnalyticDataType.DURATION: {
535
+ return getTimeDurationLabel(Number(value));
536
+ }
537
+ case EAnalyticDataType.STRING: {
538
+ const fallbackValue = name === EAnalyticColumnKey.CAMPAIGNS ? '' : NONE_VALUE;
539
+ return value ?? fallbackValue;
540
+ }
541
+ case EAnalyticDataType.DAY: {
542
+ return getFormattedByInterval(value, AnalyticInterval.DAY, { isExpandDetail: true });
543
+ }
544
+ case EAnalyticDataType.HOUR: {
545
+ return getFormattedByInterval(value, AnalyticInterval.HOUR, { isExpandDetail: true });
546
+ }
547
+ case EAnalyticDataType.MONTH: {
548
+ return getFormattedByInterval(value, AnalyticInterval.MONTH, { isExpandDetail: true });
549
+ }
550
+ case EAnalyticDataType.YEAR: {
551
+ return getFormattedByInterval(value, AnalyticInterval.YEAR);
552
+ }
553
+ case EAnalyticDataType.WEEK: {
554
+ return getFormattedByInterval(value, AnalyticInterval.WEEK, { isExpandDetail: true });
555
+ }
556
+ case EAnalyticDataType.QUARTER: {
557
+ return getFormattedByInterval(value, AnalyticInterval.QUARTER, {
558
+ isExpandDetail: true,
559
+ });
560
+ }
561
+ case EAnalyticDataType.OBJECT:
562
+ case EAnalyticDataType.ARRAY: {
563
+ return value;
564
+ }
565
+ default:
566
+ return `${value}`;
567
+ }
568
+ };
569
+
570
+ const SESSION_KEY = 'sessions';
571
+ const hasMetricData = (metric) => {
572
+ const sessions = metric?.[SESSION_KEY];
573
+ return typeof sessions === 'number' && sessions > 0;
574
+ };
575
+
576
+ const parseRawJson = (raw) => {
577
+ if (!raw)
578
+ return undefined;
579
+ return typeof raw === 'string' ? JSON.parse(raw) : raw;
580
+ };
581
+ const parseJsonArray = (raw) => {
582
+ try {
583
+ const parsed = parseRawJson(raw);
584
+ if (!Array.isArray(parsed))
585
+ return undefined;
586
+ return parsed;
587
+ }
588
+ catch {
589
+ return undefined;
590
+ }
591
+ };
592
+ const parseBreakdownItems = (raw) => parseJsonArray(raw)?.map((item) => ({ ...item, total: Number(item.total) }));
593
+
594
+ const readNumeric = (metric, key) => {
595
+ const raw = metric?.[key];
596
+ return typeof raw === 'number' ? raw : 0;
597
+ };
598
+
599
+ const useAnalyticData = (getTextPrice) => {
600
+ const formatData = ({ value, formatter, name }) => {
601
+ return formatAnalyticData({ value, formatter, getTextPrice, name });
602
+ };
603
+ const computeMetric = ({ metric, previousMetric, metricKey, formatter, }) => {
604
+ if (!hasMetricData(metric))
605
+ return { value: 0, change: PLACEHOLDER_VALUE$1 };
606
+ const currentValue = readNumeric(metric, metricKey);
607
+ const previousValue = readNumeric(previousMetric, metricKey);
608
+ const value = formatData({ value: currentValue, formatter, name: metricKey });
609
+ if (currentValue === 0 && previousValue !== 0)
610
+ return { value, change: -100 };
611
+ if (previousValue === 0)
612
+ return { value, change: PLACEHOLDER_VALUE$1 };
613
+ const change = ((currentValue - previousValue) / previousValue) * 100;
614
+ return { value, change };
615
+ };
616
+ return { formatData, computeMetric };
617
+ };
618
+
619
+ var GPaginationDirection;
620
+ (function (GPaginationDirection) {
621
+ GPaginationDirection["NEXT"] = "NEXT";
622
+ GPaginationDirection["PREV"] = "PREV";
623
+ })(GPaginationDirection || (GPaginationDirection = {}));
624
+
625
+ const TARGET_VISITOR = [
626
+ { value: EVisitorType.NEW, label: 'New' },
627
+ { value: EVisitorType.RETURNING, label: 'Returning' },
628
+ ];
629
+ const TARGET_DEVICES = [
630
+ { value: EDeviceType.DESKTOP, label: 'Desktop' },
631
+ { value: EDeviceType.TABLET, label: 'Tablet' },
632
+ { value: EDeviceType.MOBILE, label: 'Mobile' },
633
+ ];
634
+ const TARGET_CHANNEL = [
635
+ { value: ETrafficSourceType.DIRECT, label: 'Direct' },
636
+ { value: ETrafficSourceType.EMAIL, label: 'Email' },
637
+ { value: ETrafficSourceType.REFERRAL, label: 'Referral' },
638
+ { value: ETrafficSourceType.ORGANIC_SOCIAL, label: 'Organic social' },
639
+ { value: ETrafficSourceType.ORGANIC_SEARCH, label: 'Organic search' },
640
+ { value: ETrafficSourceType.PAID_SOCIAL, label: 'Paid social' },
641
+ { value: ETrafficSourceType.PAID_SEARCH, label: 'Paid search' },
642
+ { value: ETrafficSourceType.SMS, label: 'SMS' },
643
+ ];
644
+
645
+ const CAMPAIGN_BACKGROUND_MAIN = {
646
+ ORIGIN: '#2C7DFF',
647
+ VARIANT: '#F34A70',
100
648
  };
101
649
 
102
650
  const DEFAULT_CURRENT_PERIOD_LABEL = 'Current';
@@ -113,11 +661,195 @@ const TREND_TONE = {
113
661
  };
114
662
  const PLACEHOLDER_VALUE = '-';
115
663
 
664
+ const DEFAULT_CURRENCY_ANALYTIC = 'USD';
665
+
116
666
  var THUMB_PRODUCT_DEFAULT = "data:image/svg+xml;base64,PHN2ZwogIHdpZHRoPSI5MCIKICBoZWlnaHQ9IjcyIgogIHZpZXdCb3g9IjAgMCA5MCA3MiIKICBmaWxsPSJub25lIgogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKPgogIDxwYXRoCiAgICBkPSJNNDguNzUgMzQuNUM0OS45OTI2IDM0LjUgNTEgMzMuNDkyNiA1MSAzMi4yNUM1MSAzMS4wMDc0IDQ5Ljk5MjYgMzAgNDguNzUgMzBDNDcuNTA3NCAzMCA0Ni41IDMxLjAwNzQgNDYuNSAzMi4yNUM0Ni41IDMzLjQ5MjYgNDcuNTA3NCAzNC41IDQ4Ljc1IDM0LjVaIgogICAgZmlsbD0iIzYxNjE2MSIKICAvPgogIDxwYXRoCiAgICBmaWxsUnVsZT0iZXZlbm9kZCIKICAgIGNsaXBSdWxlPSJldmVub2RkIgogICAgZD0iTTQzLjUyNjggMjYuMjVINDYuNDczMkM0Ny42OTI0IDI2LjI1IDQ4LjY3NTggMjYuMjUgNDkuNDcyMiAyNi4zMTVDNTAuMjkyMiAyNi4zODIgNTEuMDEyNCAyNi41MjM2IDUxLjY3ODcgMjYuODYzMUM1Mi43MzcxIDI3LjQwMjQgNTMuNTk3NiAyOC4yNjI5IDU0LjEzNjkgMjkuMzIxM0M1NC40NzY0IDI5Ljk4NzYgNTQuNjE4IDMwLjcwNzggNTQuNjg1IDMxLjUyNzhDNTQuNzUgMzIuMzI0MiA1NC43NSAzMy4zMDc2IDU0Ljc1IDM0LjUyNjhWMzcuNDczMkM1NC43NSAzOC42OTI0IDU0Ljc1IDM5LjY3NTggNTQuNjg1IDQwLjQ3MjJDNTQuNjE4IDQxLjI5MjIgNTQuNDc2NCA0Mi4wMTI0IDU0LjEzNjkgNDIuNjc4N0M1My41OTc2IDQzLjczNzEgNTIuNzM3MSA0NC41OTc2IDUxLjY3ODcgNDUuMTM2OUM1MS4wMTI0IDQ1LjQ3NjQgNTAuMjkyMiA0NS42MTggNDkuNDcyMiA0NS42ODVDNDguNjc1OCA0NS43NSA0Ny42OTI0IDQ1Ljc1IDQ2LjQ3MzIgNDUuNzVINDMuNTI2OEM0Mi4zMDc2IDQ1Ljc1IDQxLjMyNDIgNDUuNzUgNDAuNTI3OCA0NS42ODVDMzkuNzA3OCA0NS42MTggMzguOTg3NiA0NS40NzY0IDM4LjMyMTMgNDUuMTM2OUMzNy4yNjI5IDQ0LjU5NzYgMzYuNDAyNCA0My43MzcxIDM1Ljg2MzEgNDIuNjc4N0MzNS41MjM2IDQyLjAxMjQgMzUuMzgyIDQxLjI5MjIgMzUuMzE1IDQwLjQ3MjJDMzUuMjUgMzkuNjc1OCAzNS4yNSAzOC42OTI0IDM1LjI1IDM3LjQ3MzJWMzQuNTI2OEMzNS4yNSAzMy4zMDc2IDM1LjI1IDMyLjMyNDIgMzUuMzE1IDMxLjUyNzhDMzUuMzgyIDMwLjcwNzggMzUuNTIzNiAyOS45ODc2IDM1Ljg2MzEgMjkuMzIxM0MzNi40MDI0IDI4LjI2MjkgMzcuMjYyOSAyNy40MDI0IDM4LjMyMTMgMjYuODYzMUMzOC45ODc2IDI2LjUyMzYgMzkuNzA3OCAyNi4zODIgNDAuNTI3OCAyNi4zMTVDNDEuMzI0MiAyNi4yNSA0Mi4zMDc2IDI2LjI1IDQzLjUyNjggMjYuMjVaTTQwLjcxMSAyOC41NTc2QzQwLjAzMDIgMjguNjEzMiAzOS42MzkxIDI4LjcxNjkgMzkuMzQyOCAyOC44Njc5QzM4LjcwNzcgMjkuMTkxNCAzOC4xOTE0IDI5LjcwNzcgMzcuODY3OSAzMC4zNDI4QzM3LjcxNjkgMzAuNjM5MSAzNy42MTMyIDMxLjAzMDIgMzcuNTU3NiAzMS43MTFDMzcuNTAwOSAzMi40MDUgMzcuNSAzMy4yOTYzIDM3LjUgMzQuNTc1VjM2LjcxNzdMMzguNTg0MiAzNS40MTY3QzM5LjU3MjQgMzQuMjMwOSA0MS4zNjU1IDM0LjE0OTYgNDIuNDU2OSAzNS4yNDFMNDYuNSAzOS4yODQxTDQ4LjI2OTQgMzcuNTE0NkM0OS4zNzU3IDM2LjQwODMgNTEuMTk4IDM2LjUwOTMgNTIuMTc1NCAzNy43MzA5TDUyLjQ5OTUgMzguMTM2MUM1Mi41IDM3LjkxMzEgNTIuNSAzNy42NzY1IDUyLjUgMzcuNDI1VjM0LjU3NUM1Mi41IDMzLjI5NjMgNTIuNDk5MSAzMi40MDUgNTIuNDQyNCAzMS43MTFDNTIuMzg2OCAzMS4wMzAyIDUyLjI4MzEgMzAuNjM5MSA1Mi4xMzIxIDMwLjM0MjhDNTEuODA4NiAyOS43MDc3IDUxLjI5MjMgMjkuMTkxNCA1MC42NTcyIDI4Ljg2NzlDNTAuMzYwOSAyOC43MTY5IDQ5Ljk2OTggMjguNjEzMiA0OS4yODkgMjguNTU3NkM0OC41OTUgMjguNTAwOSA0Ny43MDM3IDI4LjUgNDYuNDI1IDI4LjVINDMuNTc1QzQyLjI5NjMgMjguNSA0MS40MDUgMjguNTAwOSA0MC43MTEgMjguNTU3NlpNMzcuNTU3NiA0MC4yODlDMzcuNTU0MyA0MC4yNDkyIDM3LjU1MTMgNDAuMjA4OCAzNy41NDg0IDQwLjE2NzhDMzcuNTcxMSA0MC4xNDQ4IDM3LjU5MzEgNDAuMTIwNiAzNy42MTQyIDQwLjA5NTNMNDAuMzEyNyAzNi44NTcxQzQwLjQ1MzkgMzYuNjg3NyA0MC43MSAzNi42NzYxIDQwLjg2NTkgMzYuODMyTDQ1LjcwNDUgNDEuNjcwNkM0Ni4xNDM4IDQyLjEwOTkgNDYuODU2MSA0Mi4xMDk5IDQ3LjI5NTUgNDEuNjcwNkw0OS44NjA0IDM5LjEwNTZDNTAuMDE4NSAzOC45NDc2IDUwLjI3ODggMzguOTYyIDUwLjQxODQgMzkuMTM2NUw1Mi4yMzc3IDQxLjQxMDdDNTIuMjA1NiA0MS41MDEgNTIuMTcwNCA0MS41ODIyIDUyLjEzMjEgNDEuNjU3MkM1MS44MDg2IDQyLjI5MjMgNTEuMjkyMyA0Mi44MDg2IDUwLjY1NzIgNDMuMTMyMUM1MC4zNjA5IDQzLjI4MzEgNDkuOTY5OCA0My4zODY4IDQ5LjI4OSA0My40NDI0QzQ4LjU5NSA0My40OTkxIDQ3LjcwMzcgNDMuNSA0Ni40MjUgNDMuNUg0My41NzVDNDIuMjk2MyA0My41IDQxLjQwNSA0My40OTkxIDQwLjcxMSA0My40NDI0QzQwLjAzMDIgNDMuMzg2OCAzOS42MzkxIDQzLjI4MzEgMzkuMzQyOCA0My4xMzIxQzM4LjcwNzcgNDIuODA4NiAzOC4xOTE0IDQyLjI5MjMgMzcuODY3OSA0MS42NTcyQzM3LjcxNjkgNDEuMzYwOSAzNy42MTMyIDQwLjk2OTggMzcuNTU3NiA0MC4yODlaIgogICAgZmlsbD0iIzYxNjE2MSIKICAvPgo8L3N2Zz4K";
117
667
 
118
- const GSkeletonDisplayText = (props) => {
119
- const height = props.height ?? '50px';
120
- return (jsxs("div", { className: "Polaris-GSkeletonDisplayText", children: [jsx("style", { children: `.Polaris-GSkeletonDisplayText .Polaris-SkeletonDisplayText__DisplayText { height: ${height} !important; }` }), jsx(SkeletonDisplayText, { maxWidth: "100%", size: "extraLarge" })] }));
668
+ var SvgArrowRightIcon = function SvgArrowRightIcon(props) {
669
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
670
+ viewBox: "0 0 20 20"
671
+ }, props), /*#__PURE__*/React.createElement("path", {
672
+ fillRule: "evenodd",
673
+ d: "M3.5 10a.75.75 0 0 1 .75-.75h9.69l-2.72-2.72a.75.75 0 1 1 1.06-1.06l4 4a.75.75 0 0 1 0 1.06l-4 4a.75.75 0 0 1-1.06-1.06l2.72-2.72h-9.69a.75.75 0 0 1-.75-.75Z"
674
+ }));
675
+ };
676
+ SvgArrowRightIcon.displayName = "ArrowRightIcon";
677
+
678
+ var SvgCalendarIcon = function SvgCalendarIcon(props) {
679
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
680
+ viewBox: "0 0 20 20"
681
+ }, props), /*#__PURE__*/React.createElement("path", {
682
+ fillRule: "evenodd",
683
+ d: "M7.75 3.5a.75.75 0 0 0-1.5 0v.407a3.075 3.075 0 0 0-.702.252 3.75 3.75 0 0 0-1.64 1.639c-.226.444-.32.924-.365 1.47-.043.531-.043 1.187-.043 2v1.464c0 .813 0 1.469.043 2 .045.546.14 1.026.366 1.47a3.75 3.75 0 0 0 1.639 1.64c.444.226.924.32 1.47.365.531.043 1.187.043 2 .043h3.383c.323 0 .542 0 .735-.02a3.75 3.75 0 0 0 3.344-3.344c.02-.193.02-.412.02-.735v-2.883c0-.813 0-1.469-.043-2-.045-.546-.14-1.026-.366-1.47a3.75 3.75 0 0 0-1.639-1.64 3.076 3.076 0 0 0-.702-.251v-.407a.75.75 0 0 0-1.5 0v.259c-.373-.009-.794-.009-1.268-.009h-1.964c-.474 0-.895 0-1.268.009v-.259Zm-1.521 1.995c.197-.1.458-.17.912-.207.462-.037 1.057-.038 1.909-.038h1.9c.853 0 1.447 0 1.91.038.453.037.714.107.912.207.423.216.767.56.983.984.1.197.17.458.207.912.014.18.024.38.029.609h-9.982c.006-.228.015-.429.03-.61.036-.453.106-.714.206-.911a2.25 2.25 0 0 1 .984-.984Zm-1.229 4.005v1.2c0 .853 0 1.447.038 1.91.037.453.107.714.207.912.216.423.56.767.984.983.197.1.458.17.912.207.462.037 1.057.038 1.909.038h3.306c.385 0 .52-.001.626-.012a2.25 2.25 0 0 0 2.006-2.006c.011-.106.012-.241.012-.626v-2.606h-10Z"
684
+ }));
685
+ };
686
+ SvgCalendarIcon.displayName = "CalendarIcon";
687
+
688
+ var SvgCheckIcon = function SvgCheckIcon(props) {
689
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
690
+ viewBox: "0 0 20 20"
691
+ }, props), /*#__PURE__*/React.createElement("path", {
692
+ fillRule: "evenodd",
693
+ d: "M15.78 5.97a.75.75 0 0 1 0 1.06l-6.5 6.5a.75.75 0 0 1-1.06 0l-3.25-3.25a.75.75 0 1 1 1.06-1.06l2.72 2.72 5.97-5.97a.75.75 0 0 1 1.06 0Z"
694
+ }));
695
+ };
696
+ SvgCheckIcon.displayName = "CheckIcon";
697
+
698
+ var SvgChevronDownIcon = function SvgChevronDownIcon(props) {
699
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
700
+ viewBox: "0 0 20 20"
701
+ }, props), /*#__PURE__*/React.createElement("path", {
702
+ fillRule: "evenodd",
703
+ d: "M5.72 8.47a.75.75 0 0 1 1.06 0l3.47 3.47 3.47-3.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 0 1 0-1.06Z"
704
+ }));
705
+ };
706
+ SvgChevronDownIcon.displayName = "ChevronDownIcon";
707
+
708
+ var SvgChevronRightIcon = function SvgChevronRightIcon(props) {
709
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
710
+ viewBox: "0 0 20 20"
711
+ }, props), /*#__PURE__*/React.createElement("path", {
712
+ fillRule: "evenodd",
713
+ d: "M7.72 14.53a.75.75 0 0 1 0-1.06l3.47-3.47-3.47-3.47a.75.75 0 0 1 1.06-1.06l4 4a.75.75 0 0 1 0 1.06l-4 4a.75.75 0 0 1-1.06 0Z"
714
+ }));
715
+ };
716
+ SvgChevronRightIcon.displayName = "ChevronRightIcon";
717
+
718
+ var SvgChevronUpIcon = function SvgChevronUpIcon(props) {
719
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
720
+ viewBox: "0 0 20 20"
721
+ }, props), /*#__PURE__*/React.createElement("path", {
722
+ fillRule: "evenodd",
723
+ d: "M14.53 12.28a.75.75 0 0 1-1.06 0l-3.47-3.47-3.47 3.47a.75.75 0 0 1-1.06-1.06l4-4a.75.75 0 0 1 1.06 0l4 4a.75.75 0 0 1 0 1.06Z"
724
+ }));
725
+ };
726
+ SvgChevronUpIcon.displayName = "ChevronUpIcon";
727
+
728
+ function toVal(mix) {
729
+ if (typeof mix === 'string') {
730
+ return mix;
731
+ }
732
+ else if (typeof mix === 'object' && mix !== null) {
733
+ return Object.keys(mix)
734
+ .filter((key) => mix[key])
735
+ .join(' ');
736
+ }
737
+ else {
738
+ return false;
739
+ }
740
+ }
741
+ function cls(...classes) {
742
+ return classes.map(toVal).filter(Boolean).join(' ');
743
+ }
744
+
745
+ function compareValues(a, b, order = 'asc') {
746
+ if (a === b)
747
+ return 0;
748
+ if (a === undefined || b === undefined) {
749
+ if (a === undefined && b !== undefined)
750
+ return order === 'asc' ? -1 : 1;
751
+ if (b === undefined && a !== undefined)
752
+ return order === 'asc' ? 1 : -1;
753
+ return 0;
754
+ }
755
+ const isDate = (val) => typeof val !== 'boolean' && !isNaN(Date.parse(val));
756
+ const isString = (val) => typeof val === 'string';
757
+ let comparison = 0;
758
+ if (isDate(a) && isDate(b)) {
759
+ const dateA = a instanceof Date ? a : new Date(a);
760
+ const dateB = b instanceof Date ? b : new Date(b);
761
+ comparison = dateA > dateB ? 1 : -1;
762
+ }
763
+ else if (isString(a) && isString(b)) {
764
+ comparison = a > b ? 1 : -1;
765
+ }
766
+ else {
767
+ comparison = a > b ? 1 : -1;
768
+ }
769
+ return order === 'asc' ? -comparison : comparison;
770
+ }
771
+ function getNestedValue(obj, path) {
772
+ if (typeof path === 'string') {
773
+ return path
774
+ .replace(/\[(\d+)\]/g, '.$1')
775
+ .split('.')
776
+ .reduce((acc, key) => acc?.[key], obj);
777
+ }
778
+ return obj[path];
779
+ }
780
+ function sortByCondition(array, options) {
781
+ const { attr, order = 'asc', preferredValue, backupAttr, orderArrayAttr, orderArray } = options;
782
+ return array.slice().sort((a, b) => {
783
+ const valueA = getNestedValue(a, attr);
784
+ const valueB = getNestedValue(b, attr);
785
+ if (preferredValue !== undefined) {
786
+ if (valueA === preferredValue && valueB !== preferredValue)
787
+ return -1;
788
+ if (valueB === preferredValue && valueA !== preferredValue)
789
+ return 1;
790
+ }
791
+ if (orderArrayAttr === attr && orderArray) {
792
+ const orderArrayValue = orderArray[order];
793
+ return orderArrayValue.indexOf(valueA) - orderArrayValue.indexOf(valueB);
794
+ }
795
+ const primaryComparison = compareValues(valueA, valueB, order);
796
+ if (primaryComparison !== 0)
797
+ return primaryComparison;
798
+ if (backupAttr)
799
+ return compareValues(a[backupAttr], b[backupAttr], order);
800
+ return 0;
801
+ });
802
+ }
803
+ function sortByConditions(array, optionsArray) {
804
+ return optionsArray.reduce((sortedArray, options) => {
805
+ return sortByCondition(sortedArray, options);
806
+ }, array.slice());
807
+ }
808
+
809
+ const GClickable = ({ children, fullWidth = false, cursor = 'pointer', onClick, onMouseEnter, onMouseLeave, }) => {
810
+ return (jsx("div", { role: "button", tabIndex: 0, className: cls({
811
+ 'w-full': fullWidth,
812
+ 'cursor-pointer': cursor === 'pointer',
813
+ 'cursor-default': cursor === 'default',
814
+ 'cursor-not-allowed': cursor === 'not-allowed',
815
+ }), onKeyDown: (e) => {
816
+ if (e.key === 'Enter' || e.key === ' ') {
817
+ e.preventDefault();
818
+ onClick();
819
+ }
820
+ }, onClick: onClick, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, children: children }));
821
+ };
822
+
823
+ const GActivatorPopover = ({ onClick, active, content, textProps, boxProps: customBoxProps, disabled, icon: customIcon, }) => {
824
+ const boxProps = useMemo(() => {
825
+ if (disabled) {
826
+ return {
827
+ borderColor: 'border-disabled',
828
+ background: 'bg-surface-disabled',
829
+ ...customBoxProps,
830
+ };
831
+ }
832
+ return {
833
+ shadow: active ? 'button-inset' : 'button',
834
+ background: active ? 'bg-fill-active' : 'bg-fill',
835
+ ...customBoxProps,
836
+ };
837
+ }, [active, disabled, customBoxProps]);
838
+ const toneClass = useMemo(() => {
839
+ if (disabled) {
840
+ return 'text-[var(--p-color-text-disabled)]';
841
+ }
842
+ return active ? 'text-[var(--p-color-text-subdued)]' : 'text-[var(--p-color-text)]';
843
+ }, [active, disabled]);
844
+ const textComponent = useMemo(() => {
845
+ return (jsx(Text, { as: "span", variant: "bodyMd", fontWeight: "medium", tone: disabled ? 'inherit' : textProps?.tone, truncate: true, ...(textProps?.variant && { variant: textProps.variant }), children: content }));
846
+ }, [content, textProps, disabled]);
847
+ const handleClick = useCallback(() => {
848
+ if (disabled)
849
+ return;
850
+ onClick();
851
+ }, [disabled, onClick]);
852
+ return (jsx(GClickable, { cursor: disabled ? 'default' : 'pointer', onClick: handleClick, children: jsx("div", { className: cls(toneClass), children: jsxs(Box, { padding: "150", paddingInline: "300", paddingInlineEnd: "150", borderRadius: "200", ...boxProps, children: [customIcon && (jsxs(InlineStack, { gap: "200", align: "center", wrap: false, children: [jsx(Box, { children: jsx(Icon, { source: customIcon }) }), textComponent] })), !customIcon && (jsxs(InlineGrid, { columns: "1fr 20px", gap: "200", alignItems: "center", children: [textComponent, jsx(Icon, { source: active ? SvgChevronUpIcon : SvgChevronDownIcon })] }))] }) }) }));
121
853
  };
122
854
 
123
855
  const GBlockCenter = ({ height, align, inlineAlign, display, ...props }) => {
@@ -148,49 +880,225 @@ const GBlockCenter = ({ height, align, inlineAlign, display, ...props }) => {
148
880
  }, children: jsx(Box, { ...props }) }));
149
881
  };
150
882
 
151
- const TRIM_DECIMAL_ZEROS_REGEX = /\.0+$/;
152
- const DEFAULT_DECIMALS = 2;
153
- const trimDecimalZeros = (number) => {
154
- return `${number}`.replace(TRIM_DECIMAL_ZEROS_REGEX, '');
155
- };
156
- const cleanDecimal = (number, decimals = DEFAULT_DECIMALS) => {
157
- return trimDecimalZeros(number.toFixed(decimals));
883
+ const GTooltip = ({ isEnabled = true, content, maxWidth, ...props }) => {
884
+ const hasContent = isEnabled && !!content;
885
+ return hasContent ? (jsx(Tooltip, { width: "wide", hoverDelay: 500, content: content, ...props, accessibilityLabel: maxWidth?.toString() })) : (props.children);
158
886
  };
159
887
 
160
- /**
161
- * Utility function to calculate percentage and format it.
162
- * @param part - The part value.
163
- * @param total - The total value.
164
- * @param decimals - The number of decimal places to format the percentage to.
165
- * @returns The formatted percentage as a string.
166
- */
167
- const PERCENTAGE_THRESHOLD = 0.005;
168
- const PERCENTAGE_THRESHOLD_STRING = '~0%';
169
- const isLessThanThreshold = (percentage) => percentage > 0 && percentage < PERCENTAGE_THRESHOLD;
170
- const formatPercentage = (percentage, decimals = DEFAULT_DECIMALS) => {
171
- if (isLessThanThreshold(percentage)) {
172
- return PERCENTAGE_THRESHOLD_STRING;
888
+ const GButton = ({ activatorWrapper, children, iconRight, inset, stopPropagation = true, onClick, themeTone = 'light', variant, ...props }) => {
889
+ const Wrapper = activatorWrapper || 'div';
890
+ const isNeutral = variant === 'neutral';
891
+ const polarisVariant = isNeutral ? undefined : variant;
892
+ const handleClick = (e) => {
893
+ stopPropagation && e.stopPropagation();
894
+ if (props.disabled)
895
+ return;
896
+ onClick?.();
897
+ };
898
+ const button = (jsx(GTooltip, { activatorWrapper: "tooltip-content", ...props.tooltip, children: jsx(Wrapper, { className: cls('Polaris-GButton', {
899
+ 'Polaris-GButton--icon-right': iconRight,
900
+ 'Polaris-GButton--dark': themeTone === 'dark',
901
+ 'Polaris-GButton--neutral': isNeutral,
902
+ 'cursor-default': props.disabled,
903
+ 'Polaris-GButton--fullWidth': props.fullWidth,
904
+ flex: inset,
905
+ }), onClick: handleClick, children: jsx(Button, { variant: polarisVariant, ...props, children: children }) }) }));
906
+ if (inset) {
907
+ return jsx(Box, { padding: "100", children: button });
173
908
  }
174
- return `${cleanDecimal(percentage, decimals)}%`;
909
+ return button;
175
910
  };
176
911
 
177
- function toVal(mix) {
178
- if (typeof mix === 'string') {
179
- return mix;
180
- }
181
- else if (typeof mix === 'object' && mix !== null) {
182
- return Object.keys(mix)
183
- .filter((key) => mix[key])
184
- .join(' ');
185
- }
186
- else {
187
- return false;
912
+ const GCheckbox = ({ ...props }) => {
913
+ return props.multiple ? jsx(GCheckboxMultiple, { ...props }) : jsx(GCheckboxSingle, { ...props });
914
+ };
915
+ const GCheckboxMultiple = ({ options, onChange, onChangeSingleValue, emptySelected, selected, onHover, itemHovered, dependentDisabledValues, }) => {
916
+ const [settingOptions, setSettingOptions] = useState([]);
917
+ const handleChange = (value) => {
918
+ if (onChangeSingleValue) {
919
+ onChangeSingleValue(value);
920
+ }
921
+ const updatedOptions = settingOptions.includes(value)
922
+ ? settingOptions.filter((item) => item !== value)
923
+ : [...settingOptions, value];
924
+ setSettingOptions(updatedOptions);
925
+ onChange(updatedOptions);
926
+ };
927
+ const handleHover = (value) => {
928
+ if (!onHover)
929
+ return;
930
+ onHover(value);
931
+ };
932
+ useEffect(() => {
933
+ setSettingOptions(() => {
934
+ if (selected) {
935
+ return options.filter((item) => selected.includes(item.value)).map((item) => item.value);
936
+ }
937
+ return [];
938
+ });
939
+ // eslint-disable-next-line react-hooks/exhaustive-deps
940
+ }, [selected]);
941
+ return (jsx(BlockStack, { children: options.map((item) => {
942
+ const hasForceUnchecked = dependentDisabledValues?.has(item.value);
943
+ const isOnlyOneSelected = emptySelected && options.filter((opt) => opt.selected).length === 1 && emptySelected;
944
+ const handleCheckboxClick = () => {
945
+ if (isOnlyOneSelected)
946
+ return;
947
+ handleChange(item.value);
948
+ };
949
+ return (jsx("div", { className: cls('flex w-full items-center justify-between', {
950
+ 'cursor-not-allowed': isOnlyOneSelected,
951
+ 'cursor-pointer': !isOnlyOneSelected,
952
+ 'bg-surface-hover rounded-lg': itemHovered === item.value,
953
+ }), onClick: () => {
954
+ if (isOnlyOneSelected || item.disabled)
955
+ return;
956
+ handleCheckboxClick();
957
+ }, onMouseEnter: () => handleHover(item.value), onMouseLeave: () => handleHover(undefined), children: isOnlyOneSelected ? (jsx(GTooltip, { isEnabled: item.tooltip?.isEnabled, ...item.tooltip, children: jsx(Box, { paddingBlock: "150", paddingInline: "200", width: "100%", children: jsxs(InlineStack, { blockAlign: "center", gap: "150", children: [jsx(Checkbox, { label: item.label, labelHidden: true, checked: item.selected, disabled: true }), jsx(Text, { as: "p", variant: "bodyMd", tone: "subdued", children: item.label })] }) }) })) : (jsx(Box, { paddingBlock: "150", paddingInline: "200", minWidth: "0", children: jsxs(InlineStack, { blockAlign: "center", gap: "150", wrap: false, children: [jsx(Checkbox, { label: item.label, labelHidden: true, checked: hasForceUnchecked ? false : settingOptions.includes(item.value), onChange: handleCheckboxClick, disabled: item.disabled }), jsxs(Box, { minWidth: "0", children: [jsx(Text, { as: "p", variant: "bodyMd", truncate: true, tone: hasForceUnchecked ? 'disabled' : 'inherit', children: item.label }), item.description && (jsx(Text, { as: "p", variant: "bodySm", tone: "disabled", truncate: true, children: item.description }))] })] }) })) }, item.value));
958
+ }) }));
959
+ };
960
+ const GCheckboxSingle = ({ options, onChange }) => {
961
+ return (jsx(BlockStack, { gap: "300", children: options.map((item) => (jsx(RadioButton, { label: item.label, checked: item.selected, onChange: () => onChange(item.value), helpText: item.helpText ? jsx(ChoiceHelpText, { item: item }) : undefined }, item.value))) }));
962
+ };
963
+
964
+ const GDiv = forwardRef(({ children, onClick, ...props }, ref) => {
965
+ const onKeyDown = useCallback((e) => {
966
+ if (e.key === 'Enter' || e.key === ' ') {
967
+ e.preventDefault();
968
+ onClick?.();
969
+ }
970
+ }, [onClick]);
971
+ return (jsx("div", { ref: ref, ...props, role: "button", tabIndex: 0, onKeyDown: onKeyDown, onClick: onClick, children: children }));
972
+ });
973
+ GDiv.displayName = 'GDiv';
974
+
975
+ const TRANSFORMER_REGEX = /\[(\d+)\](.*?)\[\]/g;
976
+ const GI18NText = (props) => {
977
+ const { children, transformers } = props;
978
+ if (!transformers || Object.values(transformers).length === 0) {
979
+ return jsx(Text, { ...props, children: children });
188
980
  }
189
- }
190
- function cls(...classes) {
191
- return classes.map(toVal).filter(Boolean).join(' ');
981
+ const transformContent = (text) => {
982
+ const parts = [];
983
+ let lastIndex = 0;
984
+ text.replace(TRANSFORMER_REGEX, (match, number, childrenContent, offset) => {
985
+ parts.push(text.slice(lastIndex, offset));
986
+ const transformerFunction = transformers[number];
987
+ if (typeof transformerFunction === 'function') {
988
+ parts.push(transformerFunction(childrenContent));
989
+ }
990
+ else {
991
+ parts.push(match);
992
+ }
993
+ lastIndex = offset + match.length;
994
+ return match;
995
+ });
996
+ parts.push(text.slice(lastIndex));
997
+ return parts.map((part, index) => jsx(Fragment$1, { children: part }, index));
998
+ };
999
+ return jsx(Text, { ...props, children: typeof children === 'string' ? transformContent(children) : children });
1000
+ };
1001
+
1002
+ function GOptionList({ options, selected, onChange }) {
1003
+ const handleSelect = (value) => {
1004
+ onChange([value]);
1005
+ };
1006
+ const handleKeyDown = (event, value) => {
1007
+ if (event.key === 'Enter' || event.key === ' ') {
1008
+ event.preventDefault();
1009
+ handleSelect(value);
1010
+ }
1011
+ };
1012
+ return (jsx(Box, { padding: "150", children: jsx(BlockStack, { gap: "100", children: options.map((option) => {
1013
+ const isSelected = selected.includes(option.value);
1014
+ return (jsx("div", { role: "option", "aria-selected": isSelected, tabIndex: 0, onClick: () => handleSelect(option.value), onKeyDown: (e) => handleKeyDown(e, option.value), className: cls('p-1.5 pl-4 rounded-lg cursor-pointer', {
1015
+ 'bg-[#F1F1F1]': isSelected,
1016
+ 'hover:bg-[#F1F1F1]': !isSelected,
1017
+ }), children: jsxs(InlineStack, { align: "space-between", blockAlign: "center", wrap: false, gap: "200", children: [jsx(Box, { minWidth: "0", children: option.label }), isSelected && (jsx(Box, { children: jsx(Icon, { source: SvgCheckIcon }) }))] }) }, option.value));
1018
+ }) }) }));
192
1019
  }
193
1020
 
1021
+ const GSelector = (props) => {
1022
+ const [popoverActive, setPopoverActive] = useState(false);
1023
+ const { activatorText, selected, options, emptyLabel, preferredAlignment = 'right', formatActivatorContent = (text) => text.join(', '), } = props;
1024
+ const togglePopoverActive = useCallback(() => setPopoverActive((prev) => !prev), []);
1025
+ const selectedOption = useMemo(() => {
1026
+ return options
1027
+ .filter((item) => item.active || item.id === selected)
1028
+ .map((item) => item.content || '')
1029
+ .filter((item) => !!item);
1030
+ }, [options, selected]);
1031
+ const activatorContent = useMemo(() => {
1032
+ if (selectedOption.length) {
1033
+ const selected = formatActivatorContent(selectedOption);
1034
+ return activatorText ? `${activatorText}: ${selected}` : selected;
1035
+ }
1036
+ if (emptyLabel) {
1037
+ return activatorText ? `${activatorText}: ${emptyLabel}` : emptyLabel;
1038
+ }
1039
+ return activatorText;
1040
+ }, [selectedOption, emptyLabel, activatorText, formatActivatorContent]);
1041
+ const selectorMarkup = useMemo(() => {
1042
+ switch (props.variant) {
1043
+ case 'choice':
1044
+ return jsx(GSelectorChoice, { ...props, setPopoverActive: togglePopoverActive });
1045
+ case 'action-list':
1046
+ return jsx(GSelectorActionList, { ...props, setPopoverActive: togglePopoverActive });
1047
+ }
1048
+ }, [props, togglePopoverActive]);
1049
+ return (jsx(Popover, { active: popoverActive, activator: jsx("div", { className: "flex items-center gap-1", children: jsx(Button, { onClick: togglePopoverActive, disclosure: popoverActive ? 'up' : 'down', children: activatorContent }) }), autofocusTarget: "first-node", fluidContent: true, onClose: togglePopoverActive, preferredAlignment: preferredAlignment, children: selectorMarkup }));
1050
+ };
1051
+ const GSelectorChoice = ({ options, selected, onSelect, maxWidth, minWidth, clearable, setPopoverActive, }) => {
1052
+ const { t } = useTranslation();
1053
+ const items = useMemo(() => {
1054
+ if (!options?.length)
1055
+ return [];
1056
+ return options.map((option) => ({
1057
+ value: option.id,
1058
+ label: option.content || '',
1059
+ selected: false,
1060
+ }));
1061
+ }, [options]);
1062
+ const handleSelection = useCallback((value) => {
1063
+ onSelect(value);
1064
+ }, [onSelect]);
1065
+ return (jsx(Box, { maxWidth: maxWidth, minWidth: minWidth, paddingBlock: "150", children: jsxs(BlockStack, { children: [jsx(BlockStack, { gap: "0", children: jsx(GCheckbox, { multiple: true, options: items, selected: selected, onChange: handleSelection }) }), clearable && (jsx(Box, { paddingBlock: "150", paddingInline: "200", children: jsx(InlineStack, { blockAlign: "center", align: "start", children: jsx(Button, { disabled: !selected?.length, onClick: () => {
1066
+ handleSelection([]);
1067
+ setPopoverActive(false);
1068
+ }, variant: "plain", children: t('Clear') }) }) }))] }) }));
1069
+ };
1070
+ const GSelectorActionList = ({ options, selected, onSelect, helpText, maxWidth, minWidth, setPopoverActive, }) => {
1071
+ const handleSelection = useCallback((value) => {
1072
+ onSelect(value);
1073
+ setPopoverActive(false);
1074
+ }, [onSelect, setPopoverActive]);
1075
+ const items = useMemo(() => {
1076
+ if (!options?.length)
1077
+ return [];
1078
+ return options.map((option) => ({
1079
+ id: option.id,
1080
+ content: option.content,
1081
+ helpText: option.helpText,
1082
+ onAction: () => handleSelection(option.id),
1083
+ active: option.active || option.id === selected,
1084
+ suffix: (option.active || option.id === selected) && jsx(Icon, { source: SvgCheckIcon, tone: "success" }),
1085
+ }));
1086
+ }, [options, selected, handleSelection]);
1087
+ return (jsx(Box, { maxWidth: maxWidth, minWidth: minWidth, children: jsxs(BlockStack, { gap: "0", children: [jsx(ActionList, { actionRole: "menuitem", items: items }), helpText] }) }));
1088
+ };
1089
+
1090
+ const GTextLink = ({ linkAction, isDisabled, disabledFocus, children }) => {
1091
+ if (!linkAction || isDisabled) {
1092
+ return jsx(Fragment, { children: children });
1093
+ }
1094
+ return (jsx("span", { className: cls('GTextLink', { 'GTextLink--disabled-focus': disabledFocus }), children: jsx(Link, { ...linkAction, children: jsx(Fragment, { children: children }) }) }));
1095
+ };
1096
+
1097
+ const GSkeletonDisplayText = (props) => {
1098
+ const height = props.height ?? '50px';
1099
+ return (jsxs("div", { className: "Polaris-GSkeletonDisplayText", children: [jsx("style", { children: `.Polaris-GSkeletonDisplayText .Polaris-SkeletonDisplayText__DisplayText { height: ${height} !important; }` }), jsx(SkeletonDisplayText, { maxWidth: "100%", size: "extraLarge" })] }));
1100
+ };
1101
+
194
1102
  /**
195
1103
  * Helper function to generate a variation class name.
196
1104
  * @param name - Base name of the class.
@@ -246,15 +1154,1079 @@ const GTooltipCard = forwardRef((props, ref) => {
246
1154
  useImperativeHandle(ref, () => ({ onClose: handleMouseLeave }));
247
1155
  return (jsx(TooltipCardWrapper, { className: cls('GTooltipCard cursor-pointer', alignment && ALIGNMENT_MAP[alignment], {
248
1156
  'GTooltipCard--text-underline': textDecoration === 'underline',
249
- }), onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, children: jsx(Popover, { ref: popoverRef, activator: !isHideBorder ? (jsx(Box, { borderBlockEndWidth: "025", borderStyle: "dashed", borderColor: "border-tertiary", as: wrapper, ...activatorProps, children: props.children })) : (jsx(InlineStack, { children: props.children })), activatorWrapper: wrapper, onClose: () => { }, active: isMouseEnter, preferredPosition: "below", preferredAlignment: preferredAlignment, children: tooltip && (jsx("div", { className: cls(sizeClass, { 'GTooltipCard-arrow': showArrow }), children: jsx(Box, { padding: "400", children: jsxs(BlockStack, { gap: "200", children: [jsxs(BlockStack, { gap: "100", children: [jsx(Text, { as: "span", variant: "headingSm", fontWeight: "semibold", children: tooltip.title }), jsxs(BlockStack, { gap: "400", children: [jsx(Text, { as: "span", variant: "bodyMd", tone: "subdued", fontWeight: "medium", children: jsx("span", { dangerouslySetInnerHTML: { __html: tooltip.content } }) }), tooltip.contentList && (jsx(List, { type: "bullet", children: tooltip.contentList.map((item) => (jsx(List.Item, { children: jsx(Text, { as: "span", variant: "bodyMd", tone: "subdued", fontWeight: "medium", children: item }) }, item))) }))] })] }), tooltip.formula && (jsx("div", { className: "rounded-md font-mono", style: { fontSize: '12px' }, children: tooltip.formula }))] }) }) })) }) }));
1157
+ }), onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, children: jsx(Popover, { ref: popoverRef, activator: !isHideBorder ? (jsx(Box, { borderBlockEndWidth: "025", borderStyle: "dashed", borderColor: "border-tertiary", as: wrapper, ...activatorProps, children: props.children })) : (jsx(InlineStack, { children: props.children })), activatorWrapper: wrapper, onClose: () => { }, active: isMouseEnter, preferredPosition: "below", preferredAlignment: preferredAlignment, children: tooltip && (jsx("div", { className: cls(sizeClass, { 'GTooltipCard-arrow': showArrow }), children: jsx(Box, { padding: "400", children: jsxs(BlockStack, { gap: "200", children: [jsxs(BlockStack, { gap: "100", children: [jsx(Text, { as: "span", variant: "headingSm", fontWeight: "semibold", children: tooltip.title }), jsxs(BlockStack, { gap: "200", children: [jsx(Text, { as: "span", variant: "bodyMd", tone: "subdued", fontWeight: "medium", children: jsx("span", { dangerouslySetInnerHTML: { __html: tooltip.content } }) }), tooltip.contentList && (jsx(List, { type: "bullet", children: tooltip.contentList.map((item) => (jsx(List.Item, { children: jsx(Text, { as: "span", variant: "bodyMd", tone: "subdued", fontWeight: "medium", children: item }) }, item))) }))] })] }), tooltip.formula && (jsx("div", { className: "rounded-md font-mono", style: { fontSize: '12px' }, children: tooltip.formula }))] }) }) })) }) }));
250
1158
  });
251
1159
  GTooltipCard.displayName = 'GTooltipCard';
252
1160
 
1161
+ var MainDateTimePickerAlias;
1162
+ (function (MainDateTimePickerAlias) {
1163
+ MainDateTimePickerAlias["TODAY"] = "today";
1164
+ MainDateTimePickerAlias["YESTERDAY"] = "yesterday";
1165
+ MainDateTimePickerAlias["LAST_7_DAYS"] = "last7days";
1166
+ MainDateTimePickerAlias["LAST_30_DAYS"] = "last30days";
1167
+ MainDateTimePickerAlias["LAST_90_DAYS"] = "last90days";
1168
+ MainDateTimePickerAlias["LAST_365_DAYS"] = "last365days";
1169
+ MainDateTimePickerAlias["LAST_MONTH"] = "lastMonth";
1170
+ MainDateTimePickerAlias["LAST_12_MONTHS"] = "last12Months";
1171
+ MainDateTimePickerAlias["LAST_YEAR"] = "lastYear";
1172
+ })(MainDateTimePickerAlias || (MainDateTimePickerAlias = {}));
1173
+ function getDateTimeFilterMapping() {
1174
+ const mappings = {
1175
+ [MainDateTimePickerAlias.TODAY]: {
1176
+ title: 'Today',
1177
+ alias: MainDateTimePickerAlias.TODAY,
1178
+ getDateRange: getToday,
1179
+ },
1180
+ [MainDateTimePickerAlias.YESTERDAY]: {
1181
+ title: 'Yesterday',
1182
+ alias: MainDateTimePickerAlias.YESTERDAY,
1183
+ getDateRange: getYesterday,
1184
+ },
1185
+ [MainDateTimePickerAlias.LAST_7_DAYS]: {
1186
+ title: 'Last 7 days',
1187
+ alias: MainDateTimePickerAlias.LAST_7_DAYS,
1188
+ getDateRange: getLast7Days,
1189
+ },
1190
+ [MainDateTimePickerAlias.LAST_30_DAYS]: {
1191
+ title: 'Last 30 days',
1192
+ alias: MainDateTimePickerAlias.LAST_30_DAYS,
1193
+ getDateRange: getLast30Days,
1194
+ },
1195
+ [MainDateTimePickerAlias.LAST_90_DAYS]: {
1196
+ title: 'Last 90 days',
1197
+ alias: MainDateTimePickerAlias.LAST_90_DAYS,
1198
+ getDateRange: getLast90Days,
1199
+ },
1200
+ [MainDateTimePickerAlias.LAST_365_DAYS]: {
1201
+ title: 'Last 365 days',
1202
+ alias: MainDateTimePickerAlias.LAST_365_DAYS,
1203
+ getDateRange: getLast365Days,
1204
+ },
1205
+ [MainDateTimePickerAlias.LAST_MONTH]: {
1206
+ title: 'Last month',
1207
+ alias: MainDateTimePickerAlias.LAST_MONTH,
1208
+ getDateRange: getLastMonth,
1209
+ },
1210
+ [MainDateTimePickerAlias.LAST_12_MONTHS]: {
1211
+ title: 'Last 12 months',
1212
+ alias: MainDateTimePickerAlias.LAST_12_MONTHS,
1213
+ getDateRange: getLast12Months,
1214
+ },
1215
+ [MainDateTimePickerAlias.LAST_YEAR]: {
1216
+ title: 'Last year',
1217
+ alias: MainDateTimePickerAlias.LAST_YEAR,
1218
+ getDateRange: getLastYear,
1219
+ },
1220
+ };
1221
+ return mappings;
1222
+ }
1223
+ function getDateTimeFilterByAlias(alias) {
1224
+ const mappings = getDateTimeFilterMapping();
1225
+ return mappings[alias];
1226
+ }
1227
+
1228
+ const DATE_FORMAT = {
1229
+ YMD: 'YYYY-MM-DD', // 2025-01-01
1230
+ MONTH_YEAR: 'MMM YYYY', // Jan 2025
1231
+ FULL: 'MMMM D, YYYY', // January 1, 2025
1232
+ FULL_WITH_TIME: 'MMMM D, YYYY [at] h:mm A', // January 1, 2025 at 12:00 AM
1233
+ SHORT: 'MMM DD, YYYY', // Jan 01, 2025
1234
+ SHORT_NO_PAD: 'MMM D, YYYY', // Jan 1, 2025
1235
+ SHORT_WITH_TIME: 'MMM D, YYYY [at] h:mm A', // Jan 1, 2025 at 12:00 AM
1236
+ MONTH_DAY: 'MMM D', // Jan 1
1237
+ DAY_YEAR: 'D, YYYY', // 1, 2025
1238
+ TIME: 'h:mm A', // 12:00 AM
1239
+ MONTH_DAY_WITH_TIME: 'MMM D [at] h:mm A', // Jan 1 at 12:00 AM
1240
+ YEAR: 'YYYY', // 2025
1241
+ };
1242
+
1243
+ function parseYearMonthDayDateString(input) {
1244
+ // Date-only strings (e.g. "1970-01-01") are treated as UTC, not local time
1245
+ // when using new Date()
1246
+ // We need to split year, month, day to pass into new Date() separately
1247
+ // to get a localized Date
1248
+ return dayjs(input).valueOf();
1249
+ }
1250
+ const VALID_YYYY_MM_DD_DATE_REGEX = /^\d{4}-\d{1,2}-\d{1,2}/;
1251
+ function isDate(date) {
1252
+ return !isNaN(new Date(date).getDate());
1253
+ }
1254
+ function isValidYearMonthDayDateString(date) {
1255
+ return VALID_YYYY_MM_DD_DATE_REGEX.test(date) && isDate(date);
1256
+ }
1257
+ function isValidDate(date) {
1258
+ return date.length === 10 && isValidYearMonthDayDateString(date);
1259
+ }
1260
+ function formatDate(timestamp, type) {
1261
+ const date = convertDateToTz(timestamp);
1262
+ if (type === 'YMD') {
1263
+ return date.format(DATE_FORMAT.YMD);
1264
+ }
1265
+ if (type === 'MY') {
1266
+ return date.format(DATE_FORMAT.MONTH_YEAR);
1267
+ }
1268
+ if (type === 'FULL') {
1269
+ return date.format(DATE_FORMAT.FULL);
1270
+ }
1271
+ if (type === 'FULL_WITH_TIME') {
1272
+ return date.format(DATE_FORMAT.FULL_WITH_TIME);
1273
+ }
1274
+ return date.format(DATE_FORMAT.SHORT);
1275
+ }
1276
+ function formatTime(timestamp) {
1277
+ const date = convertDateToTz(timestamp);
1278
+ return date.format(DATE_FORMAT.TIME);
1279
+ }
1280
+ function isSameDayTimestamp(since, until) {
1281
+ const sinceDate = convertDateToTz(since);
1282
+ const untilDate = convertDateToTz(until);
1283
+ return sinceDate.isSame(untilDate, 'day');
1284
+ }
1285
+ function formatTimeRange(data) {
1286
+ const { since, until, format = DATE_FORMAT.TIME, showNow = false } = data;
1287
+ const sinceDate = convertDateToTz(since);
1288
+ const untilDate = convertDateToTz(until);
1289
+ return `${sinceDate.format(format)} - ${showNow ? 'Now' : untilDate.format(format)}`;
1290
+ }
1291
+ function formatDateTimeRange(data) {
1292
+ const { since, until, isShowNow } = data;
1293
+ const sinceDate = convertDateToTz(since);
1294
+ const untilDate = convertDateToTz(until);
1295
+ const isToday = sinceDate.isSame(dayjsTz(), 'day');
1296
+ const startTime = sinceDate.format(DATE_FORMAT.TIME);
1297
+ const endTime = untilDate.format(DATE_FORMAT.TIME);
1298
+ if (isToday) {
1299
+ const formatEndTime = isShowNow ? 'Now' : endTime;
1300
+ return `Today at ${startTime} - ${formatEndTime}`;
1301
+ }
1302
+ if (isShowNow) {
1303
+ return `${sinceDate.format(DATE_FORMAT.SHORT_WITH_TIME)} - Now`;
1304
+ }
1305
+ if (sinceDate.isSame(untilDate, 'day')) {
1306
+ return `${sinceDate.format(DATE_FORMAT.SHORT_WITH_TIME)} - ${endTime}`;
1307
+ }
1308
+ if (sinceDate.isSame(untilDate, 'day')) {
1309
+ const time = formatTimeRange({ since, until });
1310
+ return `${sinceDate.format(DATE_FORMAT.SHORT)} (${time})`;
1311
+ }
1312
+ if (sinceDate.isSame(untilDate, 'year')) {
1313
+ return `${sinceDate.format(DATE_FORMAT.MONTH_DAY_WITH_TIME)} - ${untilDate.format(DATE_FORMAT.MONTH_DAY_WITH_TIME)}, ${untilDate.format(DATE_FORMAT.YEAR)}`;
1314
+ }
1315
+ return `${sinceDate.format(DATE_FORMAT.SHORT_WITH_TIME)} - ${untilDate.format(DATE_FORMAT.SHORT_WITH_TIME)}`;
1316
+ }
1317
+ const formatDayjs = (date, isEndDay = false, formatTemplate) => {
1318
+ // const isUTC = date.isUTC?.() ?? false;
1319
+ // if (isUTC) return date.format();
1320
+ if (isEndDay && isMidnight(date)) {
1321
+ return date.endOf('day').format(formatTemplate);
1322
+ }
1323
+ return date.format(formatTemplate);
1324
+ };
1325
+ const getEndOfDayBy = (value, formatTemplate) => {
1326
+ if (!value) {
1327
+ return formatDayjs(dayjsTz().endOf('day'), false, formatTemplate);
1328
+ }
1329
+ return formatDayjs(dayjsTz(value).endOf('day'), false, formatTemplate);
1330
+ };
1331
+ const isMidnight = (date) => {
1332
+ return date.hour() === 0 && date.minute() === 0;
1333
+ };
1334
+ const formatMs = (ms) => {
1335
+ const totalSeconds = Math.floor(ms / 1000);
1336
+ const hours = Math.floor(totalSeconds / 3600);
1337
+ const minutes = Math.floor((totalSeconds % 3600) / 60);
1338
+ const seconds = totalSeconds % 60;
1339
+ return [hours, minutes, seconds].map((v) => String(v).padStart(2, '0')).join(':');
1340
+ };
1341
+
1342
+ function getDateRangeTitle(since, until) {
1343
+ const sinceDate = convertDateToTz(since);
1344
+ const untilDate = convertDateToTz(until);
1345
+ if (sinceDate.isSame(untilDate, 'day')) {
1346
+ return sinceDate.format(DATE_FORMAT.SHORT);
1347
+ }
1348
+ if (sinceDate.isSame(untilDate, 'month') && sinceDate.isSame(untilDate, 'year')) {
1349
+ return `${sinceDate.format(DATE_FORMAT.MONTH_DAY)} - ${untilDate.format(DATE_FORMAT.DAY_YEAR)}`;
1350
+ }
1351
+ if (sinceDate.isSame(untilDate, 'year')) {
1352
+ return `${sinceDate.format(DATE_FORMAT.MONTH_DAY)} - ${untilDate.format(DATE_FORMAT.SHORT_NO_PAD)}`;
1353
+ }
1354
+ return `${sinceDate.format(DATE_FORMAT.SHORT_NO_PAD)} - ${untilDate.format(DATE_FORMAT.SHORT_NO_PAD)}`;
1355
+ }
1356
+ /**
1357
+ * Resolves a { title, alias } pair from a since/until date range.
1358
+ * Matches against known presets (today, last 7 days, …); falls back to
1359
+ * a formatted custom range with alias "custom".
1360
+ */
1361
+ function getDateTimeFilterBase(since, until) {
1362
+ const now = dayjsTz();
1363
+ const sinceDate = convertDateToTz(since);
1364
+ const untilDate = convertDateToTz(until);
1365
+ const mappings = getDateTimeFilterMapping();
1366
+ for (const mapping of Object.values(mappings)) {
1367
+ const range = mapping.getDateRange(now);
1368
+ const expectedSince = convertDateToTz(range.since);
1369
+ const expectedUntil = convertDateToTz(range.until);
1370
+ const isSameSince = sinceDate.isSame(expectedSince, 'day');
1371
+ const isSameUntil = untilDate.isSame(expectedUntil, 'day');
1372
+ if (isSameSince && isSameUntil) {
1373
+ return { title: mapping.title, alias: mapping.alias };
1374
+ }
1375
+ }
1376
+ return {
1377
+ title: getDateRangeTitle(since, until),
1378
+ alias: 'custom',
1379
+ };
1380
+ }
1381
+ function getVersionDateRangeTitle(data) {
1382
+ const { since, until, isShowNow } = data;
1383
+ const sinceDate = convertDateToTz(since);
1384
+ const isToday = sinceDate.isSame(dayjsTz(), 'day');
1385
+ if (isToday)
1386
+ return getDateTimeFilterByAlias(MainDateTimePickerAlias.TODAY).title;
1387
+ if (isShowNow)
1388
+ return `${sinceDate.format(DATE_FORMAT.SHORT_NO_PAD)} - Now`;
1389
+ return getDateRangeTitle(since, until);
1390
+ }
1391
+ const getVersionDateDescription = ({ since, until, isShowNow }) => {
1392
+ const isSameDay = isSameDayTimestamp(since, until);
1393
+ if (!isSameDay)
1394
+ return undefined;
1395
+ return formatTimeRange({ since, until, showNow: isShowNow });
1396
+ };
1397
+
1398
+ const convertToDateTimeFilters = (versions) => {
1399
+ const dataVersions = [...versions].sort((a, b) => semverToNum(b.version) - semverToNum(a.version));
1400
+ return dataVersions
1401
+ .map((item) => {
1402
+ if (!item.startedAt)
1403
+ return false;
1404
+ const isCurrentVersion = !item.completedAt;
1405
+ const since = dayjsTzToLocalTZ(item.startedAt).valueOf();
1406
+ const until = isCurrentVersion
1407
+ ? dayjsTzToLocalTZ(getEndOfDayBy()).valueOf()
1408
+ : dayjsTzToLocalTZ(item.completedAt).valueOf();
1409
+ const title = getVersionDateRangeTitle({ since, until, isShowNow: isCurrentVersion });
1410
+ const description = getVersionDateDescription({ since, until, isShowNow: isCurrentVersion });
1411
+ return {
1412
+ title,
1413
+ alias: `${item.version}`,
1414
+ since,
1415
+ until,
1416
+ isVersion: true,
1417
+ isCurrentVersion,
1418
+ description,
1419
+ versionId: item.id,
1420
+ };
1421
+ })
1422
+ .filter(Boolean);
1423
+ };
1424
+
1425
+ const getNoComparison = () => {
1426
+ return {
1427
+ since: 0,
1428
+ until: 0,
1429
+ };
1430
+ };
1431
+ const getPreviousPeriod = (value) => {
1432
+ const { since, until, alias } = value;
1433
+ const sinceDate = dayjs(since);
1434
+ const untilDate = dayjs(until);
1435
+ if (alias === MainDateTimePickerAlias.LAST_MONTH) {
1436
+ return getLastMonth(sinceDate);
1437
+ }
1438
+ if (alias === MainDateTimePickerAlias.LAST_12_MONTHS) {
1439
+ return getLast12Months(sinceDate);
1440
+ }
1441
+ if (alias === MainDateTimePickerAlias.LAST_YEAR) {
1442
+ return getLastYear(sinceDate);
1443
+ }
1444
+ const duration = untilDate.diff(sinceDate, 'day') + 1;
1445
+ const previousSince = sinceDate.subtract(duration, 'day');
1446
+ const previousUntil = untilDate.subtract(duration, 'day');
1447
+ return {
1448
+ since: previousSince.valueOf(),
1449
+ until: previousUntil.valueOf(),
1450
+ };
1451
+ };
1452
+ const createPreviousRange = (subtractAmount, subtractUnit) => (value) => {
1453
+ const { since, until } = value;
1454
+ const sinceDate = dayjs(since);
1455
+ const untilDate = dayjs(until);
1456
+ const duration = untilDate.diff(sinceDate, 'day');
1457
+ const previousSince = sinceDate.subtract(subtractAmount, subtractUnit);
1458
+ const previousUntil = previousSince.add(duration, 'day');
1459
+ return {
1460
+ since: previousSince.valueOf(),
1461
+ until: previousUntil.valueOf(),
1462
+ };
1463
+ };
1464
+ const getPreviousWeek = createPreviousRange(7, 'day');
1465
+ const getPreviousQuarter = createPreviousRange(3, 'month');
1466
+ const getPreviousMonth = createPreviousRange(1, 'month');
1467
+ const getPreviousYear = createPreviousRange(1, 'year');
1468
+ const createLastDaysRange = (subtractAmount) => (date) => {
1469
+ return {
1470
+ since: date.subtract(subtractAmount, 'day').valueOf(),
1471
+ until: date.valueOf(),
1472
+ };
1473
+ };
1474
+ const getToday = (currentDate) => {
1475
+ return {
1476
+ since: currentDate.valueOf(),
1477
+ until: currentDate.valueOf(),
1478
+ };
1479
+ };
1480
+ const getYesterday = (date) => {
1481
+ return {
1482
+ since: date.subtract(1, 'day').valueOf(),
1483
+ until: date.subtract(1, 'day').valueOf(),
1484
+ };
1485
+ };
1486
+ const getLast7Days = createLastDaysRange(6);
1487
+ const getLast30Days = createLastDaysRange(29);
1488
+ const getLast90Days = createLastDaysRange(89);
1489
+ const getLast365Days = createLastDaysRange(364);
1490
+ function getLastMonth(date) {
1491
+ return {
1492
+ since: date.subtract(1, 'month').startOf('month').valueOf(),
1493
+ until: date.subtract(1, 'month').endOf('month').valueOf(),
1494
+ };
1495
+ }
1496
+ function getLast12Months(date) {
1497
+ return {
1498
+ since: date.subtract(12, 'month').startOf('month').valueOf(),
1499
+ until: date.subtract(1, 'month').endOf('month').valueOf(),
1500
+ };
1501
+ }
1502
+ function getLastYear(date) {
1503
+ return {
1504
+ since: date.subtract(1, 'year').startOf('year').valueOf(),
1505
+ until: date.subtract(1, 'year').endOf('year').valueOf(),
1506
+ };
1507
+ }
1508
+ const getMonthAndYearByDateFilter = (month, year, date) => {
1509
+ const endDate = dayjs(date);
1510
+ const endMonthFilter = endDate.month();
1511
+ const endYearFilter = endDate.year();
1512
+ if (endYearFilter !== year || endMonthFilter !== month) {
1513
+ const prev = endDate.subtract(1, 'month');
1514
+ return {
1515
+ month: prev.month(),
1516
+ year: prev.year(),
1517
+ };
1518
+ }
1519
+ return { month, year };
1520
+ };
1521
+
1522
+ var CompareDateTimePickerAlias;
1523
+ (function (CompareDateTimePickerAlias) {
1524
+ CompareDateTimePickerAlias["NO_COMPARISON"] = "noComparison";
1525
+ CompareDateTimePickerAlias["PREVIOUS_PERIOD"] = "previousPeriod";
1526
+ CompareDateTimePickerAlias["PREVIOUS_WEEK"] = "previousWeek";
1527
+ CompareDateTimePickerAlias["PREVIOUS_MONTH"] = "previousMonth";
1528
+ CompareDateTimePickerAlias["PREVIOUS_QUARTER"] = "previousQuarter";
1529
+ CompareDateTimePickerAlias["PREVIOUS_YEAR"] = "previousYear";
1530
+ })(CompareDateTimePickerAlias || (CompareDateTimePickerAlias = {}));
1531
+ const PREVIOUS_PERIOD_FILTER = {
1532
+ title: 'Previous period',
1533
+ alias: CompareDateTimePickerAlias.PREVIOUS_PERIOD,
1534
+ since: 0,
1535
+ until: 0,
1536
+ };
1537
+ const DATE_TIME_COMPARISON_FILTERS = [
1538
+ {
1539
+ title: 'No comparison',
1540
+ alias: CompareDateTimePickerAlias.NO_COMPARISON,
1541
+ since: 0,
1542
+ until: 0,
1543
+ },
1544
+ PREVIOUS_PERIOD_FILTER,
1545
+ {
1546
+ title: 'Previous week',
1547
+ alias: CompareDateTimePickerAlias.PREVIOUS_WEEK,
1548
+ since: 0,
1549
+ until: 0,
1550
+ },
1551
+ {
1552
+ title: 'Previous quarter',
1553
+ alias: CompareDateTimePickerAlias.PREVIOUS_QUARTER,
1554
+ since: 0,
1555
+ until: 0,
1556
+ },
1557
+ {
1558
+ title: 'Previous month',
1559
+ alias: CompareDateTimePickerAlias.PREVIOUS_MONTH,
1560
+ since: 0,
1561
+ until: 0,
1562
+ },
1563
+ {
1564
+ title: 'Previous year',
1565
+ alias: CompareDateTimePickerAlias.PREVIOUS_YEAR,
1566
+ since: 0,
1567
+ until: 0,
1568
+ },
1569
+ ];
1570
+ const COMPARE_DATE_TIME_FILTERS_MAP = {
1571
+ [CompareDateTimePickerAlias.NO_COMPARISON]: getNoComparison,
1572
+ [CompareDateTimePickerAlias.PREVIOUS_PERIOD]: getPreviousPeriod,
1573
+ [CompareDateTimePickerAlias.PREVIOUS_WEEK]: getPreviousWeek,
1574
+ [CompareDateTimePickerAlias.PREVIOUS_QUARTER]: getPreviousQuarter,
1575
+ [CompareDateTimePickerAlias.PREVIOUS_MONTH]: getPreviousMonth,
1576
+ [CompareDateTimePickerAlias.PREVIOUS_YEAR]: getPreviousYear,
1577
+ };
1578
+
1579
+ const useDateTimeFilter = () => {
1580
+ const currentDate = dayjsTzToLocalTZ().startOf('day');
1581
+ const mappings = getDateTimeFilterMapping();
1582
+ const TODAY_CONFIG = mappings[MainDateTimePickerAlias.TODAY];
1583
+ const TODAY_DATE_RANGE = {
1584
+ ...TODAY_CONFIG,
1585
+ ...TODAY_CONFIG.getDateRange(currentDate),
1586
+ };
1587
+ const YESTERDAY_CONFIG = mappings[MainDateTimePickerAlias.YESTERDAY];
1588
+ const YESTERDAY_DATE_RANGE = {
1589
+ ...YESTERDAY_CONFIG,
1590
+ ...YESTERDAY_CONFIG.getDateRange(currentDate),
1591
+ };
1592
+ const LAST_7_DAYS_CONFIG = mappings[MainDateTimePickerAlias.LAST_7_DAYS];
1593
+ const LAST_7_DAYS_DATE_RANGE = {
1594
+ ...LAST_7_DAYS_CONFIG,
1595
+ ...LAST_7_DAYS_CONFIG.getDateRange(currentDate),
1596
+ };
1597
+ const LAST_30_DAYS_CONFIG = mappings[MainDateTimePickerAlias.LAST_30_DAYS];
1598
+ const LAST_30_DAYS_DATE_RANGE = {
1599
+ ...LAST_30_DAYS_CONFIG,
1600
+ ...LAST_30_DAYS_CONFIG.getDateRange(currentDate),
1601
+ };
1602
+ const LAST_90_DAYS_CONFIG = mappings[MainDateTimePickerAlias.LAST_90_DAYS];
1603
+ const LAST_90_DAYS_DATE_RANGE = {
1604
+ ...LAST_90_DAYS_CONFIG,
1605
+ ...LAST_90_DAYS_CONFIG.getDateRange(currentDate),
1606
+ };
1607
+ const LAST_365_DAYS_CONFIG = mappings[MainDateTimePickerAlias.LAST_365_DAYS];
1608
+ const LAST_365_DAYS_DATE_RANGE = {
1609
+ ...LAST_365_DAYS_CONFIG,
1610
+ ...LAST_365_DAYS_CONFIG.getDateRange(currentDate),
1611
+ };
1612
+ const LAST_MONTH_CONFIG = mappings[MainDateTimePickerAlias.LAST_MONTH];
1613
+ const LAST_MONTH_DATE_RANGE = {
1614
+ ...LAST_MONTH_CONFIG,
1615
+ ...LAST_MONTH_CONFIG.getDateRange(currentDate),
1616
+ };
1617
+ const LAST_12_MONTHS_CONFIG = mappings[MainDateTimePickerAlias.LAST_12_MONTHS];
1618
+ const LAST_12_MONTHS_DATE_RANGE = {
1619
+ ...LAST_12_MONTHS_CONFIG,
1620
+ ...LAST_12_MONTHS_CONFIG.getDateRange(currentDate),
1621
+ };
1622
+ const LAST_YEAR_CONFIG = mappings[MainDateTimePickerAlias.LAST_YEAR];
1623
+ const LAST_YEAR_DATE_RANGE = {
1624
+ ...LAST_YEAR_CONFIG,
1625
+ ...LAST_YEAR_CONFIG.getDateRange(currentDate),
1626
+ };
1627
+ const DATE_TIME_FILTERS = [
1628
+ TODAY_DATE_RANGE,
1629
+ YESTERDAY_DATE_RANGE,
1630
+ LAST_7_DAYS_DATE_RANGE,
1631
+ LAST_30_DAYS_DATE_RANGE,
1632
+ LAST_90_DAYS_DATE_RANGE,
1633
+ LAST_365_DAYS_DATE_RANGE,
1634
+ LAST_MONTH_DATE_RANGE,
1635
+ LAST_12_MONTHS_DATE_RANGE,
1636
+ LAST_YEAR_DATE_RANGE,
1637
+ ];
1638
+ return {
1639
+ DATE_TIME_FILTERS,
1640
+ LAST_7_DAYS_DATE_RANGE,
1641
+ LAST_30_DAYS_DATE_RANGE,
1642
+ };
1643
+ };
1644
+
1645
+ const DateTimePickerContext = createContext({
1646
+ dateTimePicked: {
1647
+ since: dayjsTz().valueOf(),
1648
+ until: dayjsTz().valueOf(),
1649
+ title: 'Today',
1650
+ alias: 'today',
1651
+ },
1652
+ compareDateTimePicked: PREVIOUS_PERIOD_FILTER,
1653
+ setDateTimePicked: () => { },
1654
+ setCompareDateTimePicked: () => { },
1655
+ resetDateVersion: () => { },
1656
+ });
1657
+ const DateTimePickerProvider = ({ children, initDate, initDateCompare, }) => {
1658
+ const [dateTimePicked, setDateTimePicked] = useState(initDate || {
1659
+ since: dayjsTz().set('hour', 0).valueOf(),
1660
+ until: dayjsTz().set('hour', 0).valueOf(),
1661
+ title: 'Today',
1662
+ alias: 'today',
1663
+ });
1664
+ const { DATE_TIME_FILTERS } = useDateTimeFilter();
1665
+ const getCompareDateTimePicked = useCallback((alias, source = dateTimePicked) => {
1666
+ return {
1667
+ ...PREVIOUS_PERIOD_FILTER,
1668
+ ...COMPARE_DATE_TIME_FILTERS_MAP[alias]({
1669
+ since: source.since,
1670
+ until: source.until,
1671
+ alias: source.alias,
1672
+ }),
1673
+ };
1674
+ }, [dateTimePicked]);
1675
+ const [compareDateTimePicked, setCompareDateTimePicked] = useState(initDateCompare || getCompareDateTimePicked(CompareDateTimePickerAlias.PREVIOUS_PERIOD));
1676
+ const updateCompareDateTimePicked = useCallback((source) => {
1677
+ if (compareDateTimePicked.alias === 'custom' ||
1678
+ compareDateTimePicked.alias === CompareDateTimePickerAlias.NO_COMPARISON)
1679
+ return;
1680
+ setCompareDateTimePicked(getCompareDateTimePicked(compareDateTimePicked.alias, source));
1681
+ }, [compareDateTimePicked, getCompareDateTimePicked]);
1682
+ const resetDateVersion = () => {
1683
+ const since = dayjs(dateTimePicked.since).startOf('day').valueOf();
1684
+ const until = dayjs(dateTimePicked.until).startOf('day').valueOf();
1685
+ const dateFilter = DATE_TIME_FILTERS.find((filter) => filter.since === since && filter.until === until);
1686
+ setDateTimePicked({
1687
+ ...dateTimePicked,
1688
+ isVersion: false,
1689
+ versionId: undefined,
1690
+ isCurrentVersion: false,
1691
+ description: '',
1692
+ title: dateFilter?.title || dateTimePicked.title,
1693
+ alias: dateFilter?.alias || 'custom',
1694
+ });
1695
+ };
1696
+ const onSetDateTimePicked = useCallback((value) => {
1697
+ setDateTimePicked(value);
1698
+ updateCompareDateTimePicked(value);
1699
+ }, [updateCompareDateTimePicked]);
1700
+ return (jsx(DateTimePickerContext.Provider, { value: {
1701
+ dateTimePicked,
1702
+ setDateTimePicked: onSetDateTimePicked,
1703
+ compareDateTimePicked,
1704
+ setCompareDateTimePicked,
1705
+ resetDateVersion,
1706
+ }, children: children }));
1707
+ };
1708
+ const useDateTimePickerContext = () => {
1709
+ const context = useContext(DateTimePickerContext);
1710
+ if (!context) {
1711
+ throw new Error('useDateTimePickerContext must be used within a DateTimePickerProvider');
1712
+ }
1713
+ return context;
1714
+ };
1715
+
1716
+ const useDateTimePicker = ({ ranges, initialPicked, onApply }) => {
1717
+ const { DATE_TIME_FILTERS } = useDateTimeFilter();
1718
+ const allRanges = ranges || DATE_TIME_FILTERS;
1719
+ const { dateTimePicked, setDateTimePicked } = useDateTimePickerContext();
1720
+ const [dateRange, setDateRange] = useState(dateTimePicked);
1721
+ const [{ month, year }, setDate] = useState({
1722
+ month: dayjs(dateTimePicked.since).month(),
1723
+ year: dayjs(dateTimePicked.since).year(),
1724
+ });
1725
+ useEffect(() => {
1726
+ if (dateTimePicked) {
1727
+ const untilDate = new Date(dateTimePicked.until);
1728
+ const monthDiff = (referenceDate, newDate) => {
1729
+ return newDate.month - referenceDate.month + 12 * (referenceDate.year - newDate.year);
1730
+ };
1731
+ monthDiff({ year, month }, {
1732
+ year: untilDate.getFullYear(),
1733
+ month: untilDate.getMonth(),
1734
+ });
1735
+ // if (monthDifference > 1 || monthDifference < 0) {
1736
+ // setDate({
1737
+ // month: untilDate.getMonth(),
1738
+ // year: untilDate.getFullYear(),
1739
+ // });
1740
+ // }
1741
+ }
1742
+ }, [dateTimePicked, month, year]);
1743
+ const onMonthChange = (month, year) => {
1744
+ setDate({ month, year });
1745
+ };
1746
+ const onCalendarChange = (value) => {
1747
+ const { start, end, alias } = value;
1748
+ const customDateRange = {
1749
+ alias: 'custom',
1750
+ title: 'Custom',
1751
+ since: start.getTime(),
1752
+ until: end.getTime(),
1753
+ };
1754
+ const newDateRange = allRanges.find((range) => {
1755
+ const isSameAlias = range.alias === alias;
1756
+ const isSameUntil = range.until === end.getTime();
1757
+ const isSameSince = range.since === start.getTime();
1758
+ // const isSameVersionId = !!range.versionId && !!versionId && range.versionId === versionId;
1759
+ const isSameTime = isSameSince && isSameUntil;
1760
+ return isSameAlias || isSameTime;
1761
+ });
1762
+ const finalDateRange = newDateRange || initialPicked || customDateRange;
1763
+ setDateRange(finalDateRange);
1764
+ };
1765
+ const onChange = ({ end }) => {
1766
+ setDate(getMonthAndYearByDateFilter(month, year, end));
1767
+ };
1768
+ const apply = () => {
1769
+ setDateTimePicked(dateRange);
1770
+ onApply?.(dateRange);
1771
+ };
1772
+ const cancel = () => {
1773
+ setDateRange(dateTimePicked);
1774
+ };
1775
+ useEffect(() => {
1776
+ if (dateTimePicked) {
1777
+ setDateRange(dateTimePicked);
1778
+ setDate({
1779
+ month: dayjs(dateTimePicked.since).month(),
1780
+ year: dayjs(dateTimePicked.since).year(),
1781
+ });
1782
+ }
1783
+ }, [dateTimePicked]);
1784
+ return {
1785
+ month,
1786
+ year,
1787
+ setDate,
1788
+ dateRange,
1789
+ apply,
1790
+ cancel,
1791
+ dateTimePicked,
1792
+ onChange,
1793
+ onMonthChange,
1794
+ onCalendarChange,
1795
+ };
1796
+ };
1797
+
1798
+ const useVersionDateTimeFilters = (versions) => {
1799
+ const { t } = useTranslation();
1800
+ const rangers = useMemo(() => {
1801
+ if (!versions?.length)
1802
+ return [];
1803
+ return convertToDateTimeFilters(versions);
1804
+ }, [versions]);
1805
+ const rangeAddition = {
1806
+ title: t('Experiment periods'),
1807
+ rangers,
1808
+ };
1809
+ return { rangeAddition };
1810
+ };
1811
+
1812
+ function DateTimeFilterInputs({ onBlur, dateRange, setDateTimePicked }) {
1813
+ const [isFocus, setIsFocus] = useState(false);
1814
+ const [inputValues, setInputValues] = useState({});
1815
+ const formatDisplayDate = useCallback((timestamp, isEnd = false) => {
1816
+ if (!dateRange.isVersion || (isEnd && dateRange.isCurrentVersion))
1817
+ return formatDate(timestamp, 'FULL');
1818
+ return formatDate(timestamp, 'FULL_WITH_TIME');
1819
+ }, [dateRange.isVersion, dateRange.isCurrentVersion]);
1820
+ useEffect(() => {
1821
+ if (isFocus)
1822
+ return;
1823
+ setInputValues({
1824
+ since: formatDisplayDate(dateRange.since),
1825
+ until: formatDisplayDate(dateRange.until, true),
1826
+ });
1827
+ }, [dateRange, formatDisplayDate]);
1828
+ function handleStartInputValueChange(value) {
1829
+ setInputValues((prevState) => {
1830
+ return { ...prevState, since: value };
1831
+ });
1832
+ if (isValidDate(value)) {
1833
+ const newSinceDate = convertDateToTz(value).startOf('day');
1834
+ const untilDate = convertDateToTz(dateRange.until).endOf('day');
1835
+ const endDate = newSinceDate.isAfter(untilDate) ? newSinceDate.endOf('day') : untilDate;
1836
+ setDateTimePicked({
1837
+ start: dayjsTzToLocalTZ(newSinceDate).toDate(),
1838
+ end: dayjsTzToLocalTZ(endDate).toDate(),
1839
+ });
1840
+ }
1841
+ }
1842
+ function handleEndInputValueChange(value) {
1843
+ setInputValues((prevState) => ({ ...prevState, until: value }));
1844
+ if (isValidDate(value)) {
1845
+ const nowEndOfDay = dayjsTz().endOf('day');
1846
+ const newUntilDate = convertDateToTz(value).endOf('day');
1847
+ const clampedUntil = newUntilDate.isAfter(nowEndOfDay) ? nowEndOfDay : newUntilDate;
1848
+ const sinceDate = convertDateToTz(dateRange.since).startOf('day');
1849
+ const startDate = clampedUntil.isBefore(sinceDate) ? clampedUntil.startOf('day') : sinceDate;
1850
+ setDateTimePicked({
1851
+ start: dayjsTzToLocalTZ(startDate).toDate(),
1852
+ end: dayjsTzToLocalTZ(clampedUntil).toDate(),
1853
+ });
1854
+ }
1855
+ }
1856
+ function handleInputBlur() {
1857
+ setIsFocus(false);
1858
+ setInputValues({
1859
+ since: formatDisplayDate(dateRange.since),
1860
+ until: formatDisplayDate(dateRange.until, true),
1861
+ });
1862
+ onBlur && onBlur();
1863
+ }
1864
+ function handleFocusStartInput() {
1865
+ setIsFocus(true);
1866
+ setInputValues({
1867
+ ...inputValues,
1868
+ since: formatDate(dateRange.since, 'YMD'),
1869
+ });
1870
+ }
1871
+ function handleFocusEndInput() {
1872
+ setIsFocus(true);
1873
+ setInputValues({
1874
+ ...inputValues,
1875
+ until: formatDate(dateRange.until, 'YMD'),
1876
+ });
1877
+ }
1878
+ return (jsxs(InlineGrid, { gap: "200", columns: "1fr auto 1fr", children: [jsx(TextField, { role: "combobox", label: 'Since', labelHidden: true,
1879
+ // prefix={<Icon source={CalendarIcon} />}
1880
+ value: dateRange.since ? inputValues.since : 'MMMM D, YYYY', onChange: handleStartInputValueChange, onBlur: () => handleInputBlur(), onFocus: () => handleFocusStartInput(), autoComplete: "off" }), jsx(InlineStack, { children: jsx(Icon, { source: SvgArrowRightIcon, tone: "subdued" }) }), jsx(TextField, { role: "combobox", label: 'Until', labelHidden: true,
1881
+ // prefix={<Icon source={CalendarIcon} />}
1882
+ value: dateRange.until ? inputValues.until : 'MMMM D, YYYY', onChange: handleEndInputValueChange, onBlur: () => handleInputBlur(), onFocus: () => handleFocusEndInput(), autoComplete: "off" })] }));
1883
+ }
1884
+
1885
+ /**
1886
+ * Returns a stateful value, and a set of memoized functions to toggle it,
1887
+ * set it to true and set it to false
1888
+ */
1889
+ function useToggle(initialState) {
1890
+ const [value, setState] = useState(initialState);
1891
+ return {
1892
+ value,
1893
+ toggle: useCallback(() => setState((state) => !state), []),
1894
+ setTrue: useCallback(() => setState(true), []),
1895
+ setFalse: useCallback(() => setState(false), []),
1896
+ };
1897
+ }
1898
+
1899
+ function DateTimeFilterAddition(props) {
1900
+ const { setDateTimePicked, dateTimePicked, rangeAddition, allRanges } = props;
1901
+ const { value: isExpanded, toggle: toggleExpanded } = useToggle(true);
1902
+ const rangesAdditions = rangeAddition?.rangers || [];
1903
+ const handleChangeFilterByOption = (value) => {
1904
+ const alias = value[0];
1905
+ const result = allRanges.find((range) => range.alias === alias) || allRanges[0];
1906
+ setDateTimePicked({
1907
+ start: dayjsTz(result?.since).toDate(),
1908
+ end: dayjsTz(result?.until).toDate(),
1909
+ alias: result?.alias,
1910
+ });
1911
+ };
1912
+ const options = rangesAdditions.map((range) => {
1913
+ const selected = dateTimePicked.alias === range.alias;
1914
+ return {
1915
+ value: range.alias,
1916
+ label: (jsxs(Text, { as: "span", truncate: true, children: [jsx(Text, { as: "span", variant: 'bodyMd', fontWeight: selected ? 'semibold' : 'regular', children: range.title }), range.description && (jsxs(Fragment, { children: [' ', jsx(Text, { as: "span", variant: 'bodyXs', fontWeight: 'regular', tone: "subdued", children: `(${range.description})` })] }))] })),
1917
+ };
1918
+ });
1919
+ if (!rangeAddition || rangesAdditions.length === 0)
1920
+ return;
1921
+ return (jsxs(Box, { borderBlockEndWidth: '025', borderColor: 'border', paddingBlock: '200', children: [jsx("div", { className: "px-1.5", children: jsx(GDiv, { onClick: toggleExpanded, "aria-expanded": isExpanded, className: cls('hover:bg-surface-hover cursor-pointer rounded-lg p-1.5'), children: jsxs(InlineStack, { align: "space-between", blockAlign: "center", children: [jsx(Text, { as: "span", variant: "bodyMd", children: rangeAddition.title }), jsx(Box, { children: jsx(Icon, { source: isExpanded ? SvgChevronUpIcon : SvgChevronDownIcon }) })] }) }) }), jsx(Collapsible, { open: isExpanded, id: "date-time-filter-periods-collapsible", transition: { duration: '200ms', timingFunction: 'ease-in-out' }, children: jsx(GOptionList, { options: options, selected: dateTimePicked ? [dateTimePicked.alias] : [], onChange: handleChangeFilterByOption }) })] }));
1922
+ }
1923
+
1924
+ function DateTimeFilters(props) {
1925
+ const { setDateTimePicked, dateTimePicked, allRanges, isCompare } = props;
1926
+ const { DATE_TIME_FILTERS } = useDateTimeFilter();
1927
+ const { mdDown } = useBreakpoints();
1928
+ const rangesDefault = isCompare ? [...DATE_TIME_COMPARISON_FILTERS] : [...DATE_TIME_FILTERS];
1929
+ const handleChangeFilterBySelect = (value) => {
1930
+ const result = allRanges.find(({ title, alias }) => title === value || alias === value) || allRanges[0];
1931
+ setDateTimePicked({
1932
+ start: dayjsTz(result?.since).toDate(),
1933
+ end: dayjsTz(result?.until).toDate(),
1934
+ alias: result?.alias,
1935
+ });
1936
+ };
1937
+ const handleChangeFilterByOption = (value) => {
1938
+ const result = allRanges.find((range) => range.alias === value[0]) || allRanges[0];
1939
+ setDateTimePicked({
1940
+ start: dayjsTz(result?.since).toDate(),
1941
+ end: dayjsTz(result?.until).toDate(),
1942
+ alias: result?.alias,
1943
+ });
1944
+ };
1945
+ return (jsx(Box, { maxWidth: mdDown ? '516px' : '250px', width: mdDown ? '100%' : '250px', padding: { xs: '500', md: '0' }, paddingBlockEnd: { xs: '100', md: '0' }, children: mdDown ? (jsx(Select, { label: "dateRangeLabel", labelHidden: true, onChange: (value) => handleChangeFilterBySelect(value), value: dateTimePicked?.title || dateTimePicked?.alias || '', options: allRanges.map(({ alias, title }) => title || alias) })) : (jsx(Scrollable, { style: { maxHeight: '356px' }, children: jsx(Box, { children: jsxs(BlockStack, { children: [jsx(DateTimeFilterAddition, { ...props }), jsx(OptionList, { options: rangesDefault.map((range) => ({
1946
+ value: range.alias,
1947
+ label: range.title,
1948
+ })), selected: dateTimePicked ? [dateTimePicked.alias] : [], onChange: (value) => handleChangeFilterByOption(value) })] }) }) })) }));
1949
+ }
1950
+
1951
+ const useCompareDateTimePicker = ({ ranges, onApply }) => {
1952
+ const allRanges = ranges || DATE_TIME_COMPARISON_FILTERS;
1953
+ const { compareDateTimePicked, setCompareDateTimePicked } = useDateTimePickerContext();
1954
+ const { dateTimePicked: mainDateRange } = useDateTimePickerContext();
1955
+ const [dateRange, setDateRange] = useState(compareDateTimePicked);
1956
+ const [{ month, year }, setDate] = useState({
1957
+ month: dayjsTz(compareDateTimePicked.since).month(),
1958
+ year: dayjsTz(compareDateTimePicked.since).year(),
1959
+ });
1960
+ const onMonthChange = (month, year) => {
1961
+ setDate({ month, year });
1962
+ };
1963
+ const onCalendarChange = ({ start, end, alias }) => {
1964
+ const newDateRange = allRanges.find((range) => {
1965
+ return range.alias === alias;
1966
+ });
1967
+ // If the alias is not found, set the custom date range
1968
+ if (!newDateRange) {
1969
+ setDateRange({
1970
+ alias: 'custom',
1971
+ title: 'Custom',
1972
+ since: start.getTime(),
1973
+ until: end.getTime(),
1974
+ });
1975
+ return;
1976
+ }
1977
+ setDateRange({
1978
+ ...newDateRange,
1979
+ ...COMPARE_DATE_TIME_FILTERS_MAP[alias]({
1980
+ since: mainDateRange.since,
1981
+ until: mainDateRange.until,
1982
+ }),
1983
+ });
1984
+ };
1985
+ const apply = () => {
1986
+ setCompareDateTimePicked(dateRange);
1987
+ onApply?.(dateRange);
1988
+ };
1989
+ const cancel = () => {
1990
+ setDateRange(compareDateTimePicked);
1991
+ };
1992
+ const onChange = ({ end }) => {
1993
+ setDate(getMonthAndYearByDateFilter(month, year, end));
1994
+ };
1995
+ return {
1996
+ month,
1997
+ year,
1998
+ setDate,
1999
+ dateRange,
2000
+ apply,
2001
+ cancel,
2002
+ compareDateTimePicked,
2003
+ onChange,
2004
+ onMonthChange,
2005
+ onCalendarChange,
2006
+ };
2007
+ };
2008
+
2009
+ const BaseTimePicker = (props) => {
2010
+ const { dateTimeFilters, rangeAddition, popoverProps, activatorProps, actionProps, isCompare, buttonValue, activator, } = props;
2011
+ const initialPicked = rangeAddition?.initialPicked;
2012
+ const ranges = [...(dateTimeFilters || []), ...(rangeAddition?.rangers || [])];
2013
+ const useHookDateTimePicker = isCompare ? useCompareDateTimePicker : useDateTimePicker;
2014
+ const { month, year, dateRange, apply, cancel, onMonthChange, onCalendarChange, onChange } = useHookDateTimePicker({
2015
+ ranges,
2016
+ initialPicked,
2017
+ onApply: props.onApply,
2018
+ });
2019
+ const { t } = useTranslation();
2020
+ const { mdDown, lgUp } = useBreakpoints();
2021
+ const shouldShowMultiMonth = lgUp;
2022
+ const rawTooltipContent = useMemo(() => {
2023
+ // Only show tooltip when selecting Period (isVersion)
2024
+ if (!dateRange.isVersion || !dateRange.since || !dateRange.until)
2025
+ return;
2026
+ return formatDateTimeRange({
2027
+ since: dateRange.since,
2028
+ until: dateRange.until,
2029
+ isShowNow: dateRange.isCurrentVersion,
2030
+ });
2031
+ }, [dateRange.since, dateRange.until, dateRange.isVersion, dateRange.isCurrentVersion]);
2032
+ const [popoverActive, setPopoverActive] = useState(false);
2033
+ // Freeze tooltip content while popover is open to prevent button remount (focus/CSS loss)
2034
+ const datePickerRef = useRef(null);
2035
+ const tooltipContentRef = useRef(rawTooltipContent);
2036
+ if (!popoverActive)
2037
+ tooltipContentRef.current = rawTooltipContent;
2038
+ const tooltipContent = tooltipContentRef.current;
2039
+ //@ts-ignore
2040
+ function nodeContainsDescendant(rootNode, descendant) {
2041
+ if (rootNode === descendant) {
2042
+ return true;
2043
+ }
2044
+ let parent = descendant.parentNode;
2045
+ while (parent != null) {
2046
+ if (parent === rootNode) {
2047
+ return true;
2048
+ }
2049
+ parent = parent.parentNode;
2050
+ }
2051
+ return false;
2052
+ }
2053
+ //@ts-ignore
2054
+ function isNodeWithinPopover(node) {
2055
+ return datePickerRef?.current ? nodeContainsDescendant(datePickerRef.current, node) : false;
2056
+ }
2057
+ //@ts-ignore
2058
+ function handleInputBlur({ relatedTarget }) {
2059
+ const isRelatedTargetWithinPopover = relatedTarget != null && isNodeWithinPopover(relatedTarget);
2060
+ // If focus moves from the TextField to the Popover
2061
+ // we don't want to close the popover
2062
+ if (isRelatedTargetWithinPopover) {
2063
+ return;
2064
+ }
2065
+ setPopoverActive(false);
2066
+ }
2067
+ function applyFunc() {
2068
+ apply();
2069
+ setPopoverActive(false);
2070
+ }
2071
+ function cancelFunc() {
2072
+ cancel();
2073
+ setPopoverActive(false);
2074
+ }
2075
+ const handleTogglePopover = () => {
2076
+ if (isCompare) {
2077
+ return;
2078
+ }
2079
+ setPopoverActive(!popoverActive);
2080
+ };
2081
+ const onChangeDateTimeFilter = (data) => {
2082
+ onCalendarChange(data);
2083
+ onChange(data);
2084
+ };
2085
+ return (jsx(Popover, { active: popoverActive, autofocusTarget: "none", preferredAlignment: "right", preferredPosition: "below", fluidContent: true, sectioned: false, fullHeight: true, activator: jsx(GBlockCenter, { height: "100%", minHeight: "28px", align: "center", children: jsx(GTooltip, { content: tooltipContent, maxWidth: activator ? 'large' : 'extra-large', children: jsx(Box, { children: activator ? (activator({ onClick: handleTogglePopover, value: buttonValue })) : (jsx(Button, { size: "slim", icon: !isCompare ? SvgCalendarIcon : undefined, onClick: handleTogglePopover, ...activatorProps, children: buttonValue })) }) }) }), onClose: cancelFunc, ...popoverProps, children: jsxs(Scrollable, { vertical: true, scrollbarWidth: "thin", className: "max-w-[100%]", children: [jsx(Popover.Pane, { fixed: true, children: jsx("div", { ref: datePickerRef, children: jsxs(InlineGrid, { columns: {
2086
+ xs: '1fr',
2087
+ md: 'max-content max-content',
2088
+ }, gap: "0", children: [jsx(DateTimeFilters, { setDateTimePicked: onChangeDateTimeFilter, dateTimePicked: dateRange, rangeAddition: rangeAddition, allRanges: ranges, isCompare: isCompare }), jsx(Box, { padding: "400", maxWidth: mdDown ? '320px' : '516px', borderInlineStartWidth: "025", borderColor: "border-secondary", children: jsxs(BlockStack, { gap: "400", children: [jsx(DateTimeFilterInputs, { setDateTimePicked: onCalendarChange, dateRange: dateRange, onBlur: () => handleInputBlur }), jsx("div", { children: jsx(DatePicker, { month: month, year: year, selected: !dateRange.since && !dateRange.until
2089
+ ? undefined
2090
+ : {
2091
+ start: dayjs(dateRange.since).toDate(),
2092
+ end: dayjs(dateRange.until).toDate(),
2093
+ }, onMonthChange: onMonthChange, onChange: onCalendarChange, multiMonth: shouldShowMultiMonth, allowRange: true, disableDatesAfter: dayjsTzToDate() }) }), actionProps && (jsx(GButton, { ...actionProps, onClick: () => {
2094
+ setPopoverActive(false);
2095
+ actionProps.onClick?.();
2096
+ } }))] }) })] }) }) }), jsx(Popover.Pane, { fixed: true, children: jsx(Box, { padding: "400", borderBlockStartWidth: "025", borderColor: "border-secondary", children: jsx(InlineStack, { align: "end", gap: "200", children: jsxs(ButtonGroup, { children: [jsx(Button, { onClick: cancelFunc, children: t('Cancel') }), jsx(Button, { variant: "primary", onClick: applyFunc, children: t('Apply') })] }) }) }) })] }) }));
2097
+ };
2098
+
2099
+ const CompareTimePicker = (props) => {
2100
+ const { rangeAddition, popoverProps } = props;
2101
+ const initialPicked = rangeAddition?.initialPicked;
2102
+ const dateTimeFilters = DATE_TIME_COMPARISON_FILTERS;
2103
+ const ranges = [...dateTimeFilters, ...(rangeAddition?.rangers || [])];
2104
+ const { t } = useTranslation();
2105
+ const { compareDateTimePicked } = useCompareDateTimePicker({ ranges, initialPicked });
2106
+ const buttonValue = useMemo(() => {
2107
+ if (compareDateTimePicked.alias === CompareDateTimePickerAlias.NO_COMPARISON) {
2108
+ return t('No comparison');
2109
+ }
2110
+ return t('Compare to: {{value}}', {
2111
+ value: getDateRangeTitle(compareDateTimePicked.since, compareDateTimePicked.until),
2112
+ });
2113
+ }, [compareDateTimePicked, t]);
2114
+ return (jsx(BaseTimePicker, { dateTimeFilters: dateTimeFilters, rangeAddition: rangeAddition, popoverProps: popoverProps, isCompare: true, buttonValue: buttonValue }));
2115
+ };
2116
+
2117
+ const MainTimePicker = (props) => {
2118
+ const { rangeAddition, popoverProps, activator, onApply, activatorProps, actionProps } = props;
2119
+ const { DATE_TIME_FILTERS } = useDateTimeFilter();
2120
+ const dateTimeFilters = DATE_TIME_FILTERS;
2121
+ const additionalRanges = rangeAddition?.rangers || [];
2122
+ const initialPicked = rangeAddition?.initialPicked;
2123
+ const ranges = [...dateTimeFilters, ...additionalRanges];
2124
+ const { dateTimePicked } = useDateTimePicker({ ranges, initialPicked });
2125
+ const getButtonValue = () => {
2126
+ if (dateTimePicked.isVersion && additionalRanges.length > 0) {
2127
+ const time = dateTimePicked.description ? `at ${dateTimePicked.description}` : '';
2128
+ return `Period: ${dateTimePicked.title} ${time}`;
2129
+ }
2130
+ if (dateTimePicked.alias === 'custom') {
2131
+ return getDateRangeTitle(dateTimePicked.since, dateTimePicked.until);
2132
+ }
2133
+ return dateTimePicked.title;
2134
+ };
2135
+ return (jsx(BaseTimePicker, { activatorProps: activatorProps, dateTimeFilters: dateTimeFilters, rangeAddition: rangeAddition, popoverProps: popoverProps, actionProps: actionProps, buttonValue: getButtonValue(), activator: activator, onApply: onApply }));
2136
+ };
2137
+
2138
+ const GTimePicker = (props) => {
2139
+ const { isCompare, ...timePickerProps } = props;
2140
+ return (jsxs(InlineStack, { gap: "200", children: [jsx(MainTimePicker, { ...timePickerProps }), isCompare && (jsx(CompareTimePicker, { rangeAddition: timePickerProps.rangeAddition, popoverProps: timePickerProps.popoverProps }))] }));
2141
+ };
2142
+
2143
+ const GViewBySelector = ({ activatorText, selected, options, minWidth, maxWidth, preferredAlignment = 'right', onSelect, }) => {
2144
+ const [popoverActive, setPopoverActive] = useState(false);
2145
+ const [itemHover, setItemHover] = useState(null);
2146
+ const togglePopoverActive = () => setPopoverActive((prev) => !prev);
2147
+ const selectedOption = useMemo(() => {
2148
+ return options.find((item) => item.id === selected);
2149
+ }, [options, selected]);
2150
+ const activatorContent = useMemo(() => {
2151
+ if (selectedOption) {
2152
+ const content = selectedOption.title ?? selectedOption.content;
2153
+ return activatorText ? `${activatorText}: ${content}` : content;
2154
+ }
2155
+ return activatorText;
2156
+ }, [selectedOption, activatorText]);
2157
+ const handleSelect = (value) => {
2158
+ onSelect(value);
2159
+ setPopoverActive(false);
2160
+ };
2161
+ return (jsx(Popover, { active: popoverActive, activator: jsx(GActivatorPopover, { active: popoverActive, content: activatorContent, textProps: { variant: 'bodySm' }, onClick: togglePopoverActive }), autofocusTarget: "first-node", fluidContent: true, onClose: togglePopoverActive, preferredAlignment: preferredAlignment, children: jsx(Box, { maxWidth: maxWidth, minWidth: minWidth, padding: "200", children: jsx(BlockStack, { gap: "200", children: options.map((option) => {
2162
+ const isSelected = option.id === selected;
2163
+ const isHover = itemHover === option.id;
2164
+ const borderColor = isSelected ? 'input-border' : isHover ? 'border-hover' : 'transparent';
2165
+ return (jsx(Box, { padding: "150", borderWidth: "025", borderColor: borderColor, borderRadius: "100", children: jsx("div", { onClick: () => handleSelect(option.id), className: "cursor-pointer", onMouseEnter: () => setItemHover(option.id), onMouseLeave: () => setItemHover(null), children: jsxs(InlineStack, { gap: "300", align: "space-between", blockAlign: "center", wrap: false, children: [jsxs(InlineStack, { gap: "300", blockAlign: "center", wrap: false, children: [jsx("div", { className: "bg-surface-secondary flex items-center justify-center rounded-md min-w-[184px] h-[92px]", children: jsx("img", { src: option.icon, alt: option.content, className: "w-full h-full object-contain" }) }), jsxs(BlockStack, { gap: "100", children: [jsx(Text, { as: "span", variant: "bodyMd", fontWeight: "semibold", children: option.content }), jsx(Text, { as: "p", variant: "bodyMd", tone: "subdued", children: option.helpText })] })] }), isSelected && (jsx(Box, { children: jsx(Icon, { source: SvgCheckIcon }) }))] }) }) }, option.id));
2166
+ }) }) }) }));
2167
+ };
2168
+
2169
+ const ChoiceHelpText = ({ item }) => {
2170
+ return (jsxs(Text, { as: "p", variant: "bodyMd", children: [item.description, item.inlineAction && (jsx(Link, { monochrome: true, onClick: () => {
2171
+ if (item.inlineAction?.onAction) {
2172
+ item.inlineAction?.onAction();
2173
+ }
2174
+ else {
2175
+ window.open(item.inlineAction?.url, item.inlineAction?.target ?? '_blank');
2176
+ }
2177
+ }, children: item.inlineAction?.content }))] }));
2178
+ };
2179
+
2180
+ const GChoice = ({ item, disabled, isActive, suffix, isMultipleSelect, onClick, children, position = 'right', boxProps, activeStyle, }) => {
2181
+ const paddingBox = {
2182
+ paddingBlockStart: '200',
2183
+ paddingBlockEnd: '200',
2184
+ paddingInlineStart: '400',
2185
+ paddingInlineEnd: '400',
2186
+ };
2187
+ const emitOnClick = (e) => {
2188
+ e.preventDefault();
2189
+ e.stopPropagation();
2190
+ if (disabled)
2191
+ return;
2192
+ onClick?.(item.value, item.type);
2193
+ };
2194
+ const styleByState = useMemo(() => {
2195
+ if (!isActive) {
2196
+ return {
2197
+ box: { outlineWidth: '025', outlineColor: 'border' },
2198
+ text: { fontWeight: 'regular' },
2199
+ };
2200
+ }
2201
+ if (activeStyle)
2202
+ return activeStyle;
2203
+ return {
2204
+ box: { outlineWidth: '050', outlineColor: 'border-inverse' },
2205
+ text: { fontWeight: 'semibold' },
2206
+ };
2207
+ }, [activeStyle, isActive]);
2208
+ const checkBoxComponent = () => {
2209
+ return (jsx(Checkbox, { label: jsx(InlineStack, { gap: "100", children: jsx(Text, { truncate: true, as: "p", variant: "bodyMd", fontWeight: styleByState.text.fontWeight, children: item.label }) }), disabled: disabled, checked: isActive, name: item.type, ...(item.description && { helpText: jsx(ChoiceHelpText, { item: item }) }) }));
2210
+ };
2211
+ const radioComponent = () => {
2212
+ return (jsx(RadioButton, { label: jsxs(InlineStack, { gap: "100", children: [jsx(Text, { truncate: true, as: "p", variant: "bodyMd", fontWeight: styleByState.text.fontWeight, children: item.label }), item.icon] }), disabled: disabled, checked: isActive, name: item.type, ...(item.description && { helpText: jsx(ChoiceHelpText, { item: item }) }) }));
2213
+ };
2214
+ const renderInputComponent = () => {
2215
+ return isMultipleSelect ? checkBoxComponent() : radioComponent();
2216
+ };
2217
+ return (jsx("div", { onClick: (e) => emitOnClick(e), className: 'GChoice-ChoiceBox', children: jsx(Box, { borderRadius: "300", padding: '050', children: jsx(Box, { ...paddingBox, ...styleByState.box, shadow: "100", borderRadius: "300", ...boxProps, children: jsx(BlockStack, { gap: "0", children: jsxs(InlineStack, { align: "space-between", children: [position === 'left' && children, renderInputComponent(), position === 'right' && children, suffix] }) }) }) }, item.value) }));
2218
+ };
2219
+
253
2220
  const GChartSkeleton = () => {
254
2221
  return jsx(GSkeletonDisplayText, { height: "188px" });
255
2222
  };
256
2223
 
257
- const MetricChartProvider = ({ children, minHeight = CHART_MIN_HEIGHT }) => {
2224
+ const LINE_SERIES_COLORS = {
2225
+ comparison: SERIES_COLORS.comparison,
2226
+ single: SERIES_COLORS.current,
2227
+ all: [...SERIES_COLORS.all],
2228
+ };
2229
+ const MetricChartProvider = ({ children, minHeight = CHART_MIN_HEIGHT, seriesColors = LINE_SERIES_COLORS, }) => {
258
2230
  return (jsx(PolarisVizProvider, { themes: {
259
2231
  Light: {
260
2232
  chartContainer: {
@@ -265,27 +2237,72 @@ const MetricChartProvider = ({ children, minHeight = CHART_MIN_HEIGHT }) => {
265
2237
  verticalOverflow: true,
266
2238
  horizontalMargin: 0,
267
2239
  },
268
- seriesColors: {
269
- comparison: SERIES_COLORS.comparison,
270
- single: SERIES_COLORS.current,
271
- all: [...SERIES_COLORS.all],
272
- },
2240
+ seriesColors,
273
2241
  },
274
2242
  }, children: children }));
275
2243
  };
276
2244
 
277
- const defaultFormatValue = (value) => String(value);
278
- const MetricChart = ({ lineChartData, isLoading, isEmptyMetricData }) => {
2245
+ const useFormatLineChartData = ({ metricKey, columnTypes }) => {
2246
+ const { formatData } = useAnalyticData();
2247
+ const formatter = metricKey ? columnTypes?.[metricKey] : undefined;
2248
+ const formatValue = (value) => {
2249
+ return String(formatData({ value, formatter }));
2250
+ };
2251
+ const yAxisOptions = {
2252
+ labelFormatter: (value) => {
2253
+ return formatValue(Number(value) || 0);
2254
+ },
2255
+ };
2256
+ return { formatValue, yAxisOptions };
2257
+ };
2258
+
2259
+ const useWindowSize = () => {
2260
+ const [windowSize, setWindowSize] = useState(() => ({
2261
+ width: typeof window !== 'undefined' ? window.innerWidth : 0,
2262
+ height: typeof window !== 'undefined' ? window.innerHeight : 0,
2263
+ }));
2264
+ const windowWidth = useMemo(() => {
2265
+ return {
2266
+ xs: windowSize.width <= 768,
2267
+ md: 768 < windowSize.width && windowSize.width <= 1024,
2268
+ lg: windowSize.width > 1024,
2269
+ xsDown: windowSize.width < 768,
2270
+ '1200Down': windowSize.width < 1200,
2271
+ '1040Down': windowSize.width < 1040,
2272
+ };
2273
+ }, [windowSize.width]);
2274
+ const isMobileTabletView = !windowWidth.lg;
2275
+ const isMobileView = windowWidth.xs;
2276
+ useEffect(() => {
2277
+ const windowSizeHandler = () => {
2278
+ setWindowSize({ width: window.innerWidth, height: window.innerHeight });
2279
+ };
2280
+ window.addEventListener('resize', windowSizeHandler);
2281
+ return () => {
2282
+ window.removeEventListener('resize', windowSizeHandler);
2283
+ };
2284
+ }, []);
2285
+ return { windowSize, windowWidth, isMobileTabletView, isMobileView };
2286
+ };
2287
+
2288
+ const MetricChart = ({ lineChartData, isLoading, isEmptyMetricData, columnTypes, metricKey, }) => {
2289
+ const { formatValue, yAxisOptions } = useFormatLineChartData({ metricKey, columnTypes: columnTypes || {} });
2290
+ if (!metricKey) {
2291
+ return jsx(Fragment, {});
2292
+ }
279
2293
  if (isLoading) {
280
2294
  return jsx(GChartSkeleton, {});
281
2295
  }
282
2296
  if (isEmptyMetricData) {
283
2297
  return jsx(MetricChartEmpty, { title: "No data yet", description: "Data needs time to gather" });
284
2298
  }
285
- return (jsx(MetricChartProvider, { children: jsx(LineChart, { data: lineChartData, yAxisOptions: { labelFormatter: (value) => defaultFormatValue(Number(value) || 0) }, theme: "Light", tooltipOptions: {
286
- keyFormatter: (value) => value,
2299
+ return (jsx(MetricChartProvider, { children: jsx(LineChart, { data: lineChartData, yAxisOptions: yAxisOptions, theme: "Light", tooltipOptions: {
2300
+ titleFormatter: () => `${ANALYTICS_METRIC_TOOLTIP[metricKey]?.title ?? ''}`,
2301
+ keyFormatter: (value) => {
2302
+ return value;
2303
+ },
287
2304
  renderTooltipContent(data) {
288
- return jsx(MetricChartTooltip, { data: data, formatValue: defaultFormatValue });
2305
+ return jsx(MetricChartTooltip, { data: data, formatValue: formatValue });
289
2306
  },
290
2307
  }, showLegend: true }) }));
291
2308
  };
@@ -337,16 +2354,6 @@ const MetricChartTooltip = ({ data, formatValue }) => {
337
2354
  return (jsx("div", { className: "w-fit min-w-[175px]", children: jsx(Card, { padding: '200', children: jsxs(BlockStack, { gap: '100', children: [jsx(Text, { as: "p", variant: "bodySm", fontWeight: "semibold", children: data.formatters?.titleFormatter?.(data.title || '') || data.title }), jsxs(BlockStack, { gap: '100', children: [jsxs(InlineStack, { gap: '400', align: "space-between", blockAlign: "center", children: [jsxs(InlineStack, { gap: '100', blockAlign: "center", children: [jsx("div", { className: "h-[2px] w-[12px] rounded-[10px] bg-[#4FA9EA]" }), jsx(Text, { as: "p", variant: "bodySm", fontWeight: "medium", tone: "subdued", children: currentData.tooltipKey })] }), jsxs(InlineStack, { blockAlign: "center", gap: "100", children: [jsx(Text, { as: "span", variant: "bodySm", fontWeight: "semibold", children: formatValue(currentData.value) }), jsx(MetricPercentage, { change: formatPercent() })] })] }), jsxs(InlineStack, { gap: '400', align: "space-between", blockAlign: "center", children: [jsxs(InlineStack, { gap: '100', blockAlign: "center", children: [jsx("div", { className: "w-[12px] border border-dashed border-[#A1CAE7]" }), jsx(Text, { as: "p", variant: "bodySm", tone: "subdued", fontWeight: "medium", children: previousData.tooltipKey })] }), jsxs(InlineStack, { blockAlign: "center", gap: "100", children: [jsx(Text, { as: "span", variant: "bodySm", fontWeight: "semibold", children: formatValue(previousData.value) }), jsx("div", { className: "opacity-0", children: jsx(MetricPercentage, { change: formatPercent() }) })] })] })] })] }) }) }));
338
2355
  };
339
2356
 
340
- var SvgChevronRightIcon = function SvgChevronRightIcon(props) {
341
- return /*#__PURE__*/React.createElement("svg", Object.assign({
342
- viewBox: "0 0 20 20"
343
- }, props), /*#__PURE__*/React.createElement("path", {
344
- fillRule: "evenodd",
345
- d: "M7.72 14.53a.75.75 0 0 1 0-1.06l3.47-3.47-3.47-3.47a.75.75 0 0 1 1.06-1.06l4 4a.75.75 0 0 1 0 1.06l-4 4a.75.75 0 0 1-1.06 0Z"
346
- }));
347
- };
348
- SvgChevronRightIcon.displayName = "ChevronRightIcon";
349
-
350
2357
  const MetricInfoSkeleton = ({ isShowOneLine }) => {
351
2358
  if (isShowOneLine) {
352
2359
  return (jsx(Box, { width: "40%", children: jsx(SkeletonBodyText, { lines: 1 }) }));
@@ -354,6 +2361,10 @@ const MetricInfoSkeleton = ({ isShowOneLine }) => {
354
2361
  return (jsxs(BlockStack, { gap: "200", children: [jsx(Box, { width: "60%", children: jsx(SkeletonBodyText, { lines: 1 }) }), jsx(Box, { width: "40%", children: jsx(SkeletonBodyText, { lines: 1 }) })] }));
355
2362
  };
356
2363
 
2364
+ const MetricDonutChartSkeleton = () => {
2365
+ return (jsx(Card, { children: jsxs(BlockStack, { gap: "400", children: [jsx(MetricInfoSkeleton, { isShowOneLine: true }), jsx(GChartSkeleton, {})] }) }));
2366
+ };
2367
+
357
2368
  const MetricValueSummary = ({ totalValue, hideComparison }) => (jsx(BlockStack, { gap: "200", children: jsxs(InlineStack, { blockAlign: "center", gap: "200", wrap: false, children: [jsx(InlineStack, { blockAlign: "center", gap: "200", children: jsx(Text, { as: "span", variant: "headingSm", children: totalValue.value }) }), !hideComparison && jsx(MetricPercentage, { change: totalValue.change })] }) }));
358
2369
 
359
2370
  const MetricInfoBlock = ({ item, isHovered, isLoading, hideComparison, titleVariant = 'headingMd', titleFontWeight, onClickTitle, }) => {
@@ -373,7 +2384,7 @@ const MetricChartTab = ({ item, isActive, isLoading, hideComparison, onSelect, o
373
2384
  return (jsx("div", { className: "w-full cursor-pointer overflow-hidden", onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), onClick: () => onSelect(item.key), children: jsx(Box, { paddingBlock: "150", paddingInline: "300", borderRadius: "200", background: isHighlighted ? 'bg-surface-active' : undefined, children: jsx(MetricInfoBlock, { item: item, isHovered: isHovered, isLoading: isLoading, hideComparison: hideComparison, titleVariant: "headingSm", titleFontWeight: "semibold", onClickTitle: onClickTitle }) }) }));
374
2385
  };
375
2386
 
376
- const GSelectableMetricChartCard = ({ metricInfo, dataChart, defaultActiveTab, isLoading, isEmptyMetricData, hideComparison, currentPeriodLabel = DEFAULT_CURRENT_PERIOD_LABEL, previousPeriodLabel = DEFAULT_PREVIOUS_PERIOD_LABEL, }) => {
2387
+ const GSelectableMetricChartCard = ({ metricInfo, dataChart, defaultActiveTab, isLoading, isEmptyMetricData, hideComparison, currentPeriodLabel = DEFAULT_CURRENT_PERIOD_LABEL, previousPeriodLabel = DEFAULT_PREVIOUS_PERIOD_LABEL, columnTypes, }) => {
377
2388
  const [activeTab, setActiveTab] = useState(defaultActiveTab);
378
2389
  const lineChartData = useMemo(() => {
379
2390
  const chartData = activeTab ? dataChart[activeTab] : undefined;
@@ -389,12 +2400,168 @@ const GSelectableMetricChartCard = ({ metricInfo, dataChart, defaultActiveTab, i
389
2400
  gridTemplateColumns: `repeat(${metricInfo.length}, 1fr)`,
390
2401
  gap: '16px',
391
2402
  marginBottom: '16px',
392
- }, children: metricInfo.map((item) => (jsx(MetricChartTab, { item: item, isActive: activeTab === item.key, isLoading: isLoading, hideComparison: hideComparison, onSelect: setActiveTab }, item.key))) }), jsx(MetricChart, { lineChartData: lineChartData, isLoading: isLoading, isEmptyMetricData: isEmptyMetricData })] }));
2403
+ }, children: metricInfo.map((item) => (jsx(MetricChartTab, { item: item, isActive: activeTab === item.key, isLoading: isLoading, hideComparison: hideComparison, onSelect: setActiveTab }, item.key))) }), jsx(MetricChart, { lineChartData: lineChartData, isLoading: isLoading, isEmptyMetricData: isEmptyMetricData, metricKey: activeTab, columnTypes: columnTypes })] }));
2404
+ };
2405
+
2406
+ const calculatePercentageChange = (current, previous) => {
2407
+ if (current === 0 && previous === 0) {
2408
+ return undefined;
2409
+ }
2410
+ if (previous === 0) {
2411
+ return current > 0 ? '100%' : '0%';
2412
+ }
2413
+ const change = ((current - previous) / previous) * 100;
2414
+ return `${Math.abs(change).toFixed(0)}%`;
2415
+ };
2416
+ const computeDonutData = ({ name, currentValue, prevValue, hasPreviousData, }) => ({
2417
+ name,
2418
+ data: [{ key: 'value', value: currentValue }],
2419
+ metadata: {
2420
+ trend: {
2421
+ value: hasPreviousData ? calculatePercentageChange(currentValue, prevValue) : undefined,
2422
+ direction: currentValue >= prevValue ? 'upward' : 'downward',
2423
+ trend: currentValue >= prevValue ? 'positive' : 'negative',
2424
+ },
2425
+ },
2426
+ });
2427
+ const getTotalCountByType = (stats, type) => {
2428
+ const item = stats?.find((stat) => stat?.type?.toLowerCase() === type.toLowerCase());
2429
+ return item?.total ?? 0;
2430
+ };
2431
+ const buildBreakdownDonutData = ({ targets, metricKey, totalsRow, comparisonTotalsRow, sort, }) => {
2432
+ const items = parseBreakdownItems(totalsRow?.[metricKey]);
2433
+ const comparisonItems = parseBreakdownItems(comparisonTotalsRow?.[metricKey]);
2434
+ const hasPreviousData = !!comparisonTotalsRow?.[metricKey];
2435
+ const result = targets.map(({ value, label }) => computeDonutData({
2436
+ name: label,
2437
+ currentValue: getTotalCountByType(items, value),
2438
+ prevValue: getTotalCountByType(comparisonItems, value),
2439
+ hasPreviousData,
2440
+ }));
2441
+ const getValue = (item) => item.data[0]?.value ?? 0;
2442
+ return sort ? [...result].sort((a, b) => getValue(b) - getValue(a)) : result;
393
2443
  };
394
2444
 
395
- const SingleMetricChartCard = ({ metricInfo, lineChartData, isLoading, hideComparison, isEmptyMetricData, onClickTitle, }) => {
2445
+ const DONUT_CHART_MIN_HEIGHT = 294;
2446
+ const COMPACT_MAX_WIDTH = 1500;
2447
+ const MetricDonutChartCard = ({ label, metricKey, targets, totalsRow, comparisonTotalsRow, sort, isLoading, isEmptyMetricData, minHeight = DONUT_CHART_MIN_HEIGHT, onClick, }) => {
2448
+ const tooltip = ANALYTICS_METRIC_TOOLTIP[metricKey];
2449
+ const { windowWidth, windowSize } = useWindowSize();
396
2450
  const [isHovered, setIsHovered] = useState(false);
397
- return (jsx("div", { onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: jsx(Card, { children: jsxs(BlockStack, { gap: "200", children: [jsx(MetricInfoBlock, { item: metricInfo, isHovered: isHovered, isLoading: isLoading, hideComparison: hideComparison, onClickTitle: onClickTitle }), jsx(MetricChart, { lineChartData: lineChartData, isLoading: isLoading, isEmptyMetricData: isEmptyMetricData })] }) }) }));
2451
+ const data = useMemo(() => buildBreakdownDonutData({ targets, metricKey, totalsRow, comparisonTotalsRow, sort }), [targets, metricKey, totalsRow, comparisonTotalsRow, sort]);
2452
+ if (isLoading) {
2453
+ return jsx(MetricDonutChartSkeleton, {});
2454
+ }
2455
+ const formatValue = (value) => {
2456
+ return numberWithCommas(`${value}`);
2457
+ };
2458
+ const handleClickTitle = (event) => {
2459
+ event.stopPropagation();
2460
+ onClick();
2461
+ };
2462
+ const isCompactView = windowWidth.lg && windowSize.width < COMPACT_MAX_WIDTH;
2463
+ return (jsx("div", { onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: jsx(Card, { children: jsxs(BlockStack, { gap: "200", children: [jsx(InlineStack, { children: jsx("div", { className: "hover:cursor-pointer hover:text-[--p-color-text-link-hover]", onClick: handleClickTitle, children: jsxs(InlineStack, { children: [jsx(GTooltipCard, { tooltip: tooltip, children: jsx(Text, { as: "h3", variant: "headingMd", children: label }) }), isHovered && jsx(Icon, { source: SvgChevronRightIcon, tone: "inherit" })] }) }) }), jsx("div", { className: cls('flex items-center justify-center', {
2464
+ 'max-h-[250px] overflow-hidden': isCompactView,
2465
+ }), children: isEmptyMetricData ? (jsx(MetricChartEmpty, { title: "No data yet", description: "Data needs time to gather" })) : (jsx(MetricChartProvider, { minHeight: minHeight, seriesColors: {}, children: jsx(DonutChart, { data: data, legendPosition: "left", showLegendValues: true, showLegend: true, theme: "Light", tooltipOptions: {
2466
+ valueFormatter: formatValue,
2467
+ }, labelFormatter: formatValue }) })) })] }) }) }));
2468
+ };
2469
+
2470
+ const SingleMetricChartCard = ({ metricInfo, lineChartData, isLoading, hideComparison, columnTypes, isEmptyMetricData, onClickTitle, }) => {
2471
+ const [isHovered, setIsHovered] = useState(false);
2472
+ return (jsx("div", { onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: jsx(Card, { children: jsxs(BlockStack, { gap: "200", children: [jsx(MetricInfoBlock, { item: metricInfo, isHovered: isHovered, isLoading: isLoading, hideComparison: hideComparison, onClickTitle: onClickTitle }), jsx(MetricChart, { lineChartData: lineChartData, isLoading: isLoading, isEmptyMetricData: isEmptyMetricData, columnTypes: columnTypes, metricKey: metricInfo.key })] }) }) }));
2473
+ };
2474
+
2475
+ var IMAGE_FIRST_SESSION = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXAAAAC4CAMAAADNC0dgAAAAulBMVEUAAAD39/f39/f39/f39/f39/f8/Pz39/fb5P+WrPj///8aHB3j4+P09vfKzdDo6Ojy8vLl5ebd5f7h6P7n7Pzr6+vu7u5wcXLx8/nt8PsxNDn7+/vGxscphFrEzOS8yfakt/je5Pecsfjh4+zQ2fZjZnDr7vdSVFaHm95UnXt4sZd6f41Ek2/H0visvfTk7+vZ3OSOkJZXY4ipqqvX6OBIUm+u0cGRwKqpqqo3i2Vvc4CwtcGFkba82cvy+RBRAAAAB3RSTlMAduu/IJ8QQSls1wAACLJJREFUeNrs1kEKwEAIBEHdNfH/P84lhJzmtsJA1xMaUeN1516NQ9bOir/ajcOuX/JkuAes/Ho3RiS9tTPFi30yZlVEXI0xO6Iag242+KwMPvBROziZo1Y0RhFcI7g7gmsEd0dwjeDuCK4R3B3BNYK7I7hGcHcE1wjujuAawd0RXCO4O4JrBHdHcI3g7giuEdwdwTWCuyO4RnB3BNcI7u5h1+x2nIaBMHo5ThkrcVpbLVGbJlsVFthQEFqEBO//WnizTUddb6bEPyJInKv26kvPTMZu4v/Cef4L/9dJK1wanVtMAYmRRSHBZYY5KYUbhRfydM4Lrc4ZWgIx05x0wg0iKlP0baERMU9jw6BF5VrnV3WdbU4q4TJH1LAYqJ6+G4hOoWxMUT1ngLEhfffNOCeRcKkw73WTcoOoITKmrypRFYhKAsw4J7Zw8l0tXgAqmnHyULwIqXJUBcB8c9IIt2oXLqBCpgrvgTB97802J4lw3fe3CyBG7L6i9+Bi0wFgrjkphEvE3reLielCDR7cu90AzDUnhfB8uEKHSsVrcYP5SAogSoCZ5iQQLlFVixGKeC2uEMZSNBqAmeYkEG7QOJf2+Ovc4tGar6DGcwBEAJhnTgLhudsS37f3sZtPu3Pr86chpZ9c88xJIByxcnz/+HaZKRqioLByPGy/XxZnAzDPnPjCJeZjvi0y1hBH5Xr4QCkaYJ458YUXqGluk+8z4CucH63kgVLmmRNR+PFQ1/t91g3Cf2wfyXc8FevNalmWzZDy6V6Sh3gpcrOyMUK8mjMH4U29z55ph5543Frj5DtEBWmwEnqaIeV+ey/JQxzh69VSiPGcvy98/dBmF1pUCzJOvv0XTfJQioFyECGfTJCHAOFUVCG4nL8u/Fk3ccKKjJPv0P3D+skDgViRCfIQWlZJRU2TEy780GbX7Gjn+nj2TeSeO2S5FNfcISwuJshD4G5/XYqkOeHCj132Alo1Ld9e+AZU4MPGFUH/Z+UH8uD5f5aqmjQnXDi1N9Hi+NMH49yDviIa5okNt9nn2zttTrjwOnuNGnXU53iyF+G2XjEmwu/57EaIZDnhwsm3S3sKf4LMNx7feoXX3FoJkTYnXPg+G6EbGSra4wrJt9t6eRXhNiLfaXPChdfZKDUq8H8LyM8TQqEJf3NKvtPmhAt/yBjqV99zM1tCD9+iVKhDzwbQ/E6bEy78kFlY4/n1SQ7lda5gyZqIdfplLUTanHDhxzbj6U6IWl7OKinE3f4IU1ndNIEGrqqKzRKmIksxPccAQ3zh++wWbW2Vo9Ln03inzhYBJiLFLe4UYj6cYLSf7xohNjCRlfDIKROdvOIHCk+3O2HPaddlTxxgGqW4SdkovGB1W1wVngOcz1kBQ2Thx332h7Rd17Xt5dsaGBgTLE1z19P09ZmuohR+OcyPiS28zjx5gCmUwhMJE9gIT5bAES6cXzF5mBaPbcJt8QRlZVo8rnCa4OEtnsjE1Cm+EanqGi6c36K8//rMe7bFwWHq5vjw5WPPLo6KpUcKU9cUwpvsNb6+OfOWNd4A4bVZ+3jJ2cUYr9I/hd+Ahgvnl8yP9treWd7eMF4D4TNRflIOuQhYNjd8in9dw4XzE+U3e+ffmzYMhOH9dypZotZ2h4OqxKA0TJqogGnSBP3+n2sLK7mxiEvI2/No1ecLvOjxxflxtpklj5OGaU+NB2LGzCgnOQVee3ZEChNl9Wx9wzBJ8vDyE3tqvCZmxIxymlPAtWeAlO5ziobwdN4jfPpTNF7RMKwsvMkRXBgahodSujdnjQpf9QmfsHFgEjeSCs4psIs9x1Is9YJXeNkrnI1Lwsd9t+rkFNDF7rAUQ73gFR5E4Zv2eQq7a/oe4ZwD3TUdkNJAAnGE386SF75CwvMe4ZxTILOrBVIaYqxLuRGENzx8/82mFd6BCBfOOahwICWS8EwQznw+Lzw7kFLDOjtyTw332ZG1KJxzzqgw1R01pFkLcSL/AjMs5d0Iv8uOfIGEd1mv+4TfvhHhhAjHp5RODjilvAHhARMeiD6Et1yPcA8IBx8L5ZT4j4XlUOHYiw8o3BOjJ9ySgLbw/eQvMhY+oucj3M66OQX0ag+lGFXhcoNtlnybMM0rGtCBEGbXTs4MeudOgZRYH6/qcw2f5bRlmSRbnc+zm39zduDnWSBF9/MsE6QWm9BoQxoQzO40Z1mBDQggRb0BIa9Ked7+aNk+I19n5QV/+91jy24Pt9iAlFgttvkNANBEFsCayDL/v4lMi/G+Aw3GxzFhgZhYOyBW44VXNByjbILH9doXAvnxS91qGo6LY8JqDSsuHC/xki4gvfLFnI5EcOF4iV+4ByKPY8LqDyu+IF9vBsdV2AtNePVhxYXTk9IjCq4C33KCD2vcTVX4HZNxUSovtfrDim8b1JxQGBul8rz6sOLCqdRYi48X37jNZbnCqywmHDde0ihSE+VKd+qXES6cguINk/FG0TfjIvjGj+9QrG/GW0XfjFP3jQunlYJvYB43ngCcgm+1I5hkFhVBpE5FhHwp4c8nmHBgT/JTTSi5URAxamCtJ4hPhFIFzfJmF4oimNzKKcalhIELp7pcCLpXLALDW23d/coR3Swcp66Cnm7GO1XdrFyjutUO+2VCOSeQs4f9MsbmsAfhsF+27QnnlY+znq/KEA6qQ1lWNengc2cP2o2xLvcpqZD+STnGvFbKxx+Y/mKHjmkAAGAgCPl3XQefrpeABL6EVwnfhNcJ34TXCd+E1wnfhNcJ34TXCd+E1wnfhNcJ34TXCd+E1wnfhNcJ34TXCd+E1wnfhNcJ34TXCd+E1wnfhNcJ34TXCd+E1wnfhNcJ34Rfe/VyAjEQA0G09LF12vzTXTA2vs3NDQP9QihEa3cOvubgu3PwNQffnYOvOfjuHFyMHBNKakyoiDGh4BwTarwpSgfQfpsy2YBXXCfAxYWCW3hVBDLg0cfYx6qBV0f5zL/yy4oTLn9JSvy4U7oaTQAAAABJRU5ErkJggg==";
2476
+
2477
+ var IMAGE_ALL_SESSION = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXAAAAC4CAMAAADNC0dgAAAAw1BMVEUAAAD39/f39/f39/f39/f39/f39/f39/f8/Pz39/fb5P////+WrPjj4+MaHB319vfe5v/s7/rp7Ovy8vLx8/nn5+fu7u7n7PzKzdDi6f1wcXL7+/vEzOTGxscphFrd5Pni4+o2OTtTnHpjZnCcsfjQ2fby9/VEk2/f5PFSVFaktvd4spewwPd6gI9mboa6yPWGmt2pqqsuMTbW3OCSwavDz/iwvcJKVHOpqqrl6feLkaGMjo6bm5x+gIA8QUqOo+t3iMFQsBsaAAAACXRSTlMA779wIIDfnxC1qPNnAAAJI0lEQVR42uzWuw3AQAgEUe5nm/4btoMLHG12SCvNK2GEgNie1a/EIa2PGX+zJw67f8lHSxzXRmwrUWLt+U4UGfGZ7JMybUbEnSjTI2ai0MMGr7WCD7xUD05mqSsSpQiuEdwdwTWCuyO4RnB3BNcI7o7gGsHdEVwjuDuCawR3R3CN4O4IrhHcHcE1grsjuEZwdwTXCO6O4BrB3RFcI7g7gmsEd/eya4a9acNAGM5XQ5iJTcIQiLAKVkbpmEZbqfuy//+v5tR1XzqnF5JzDJP2fqlaqXfvPXc+pzT/gdP6D/xfVxjgUmotRZ+SulB5nqtCi6t0LPWZ8fjApVYjq1z1Bd2kgJS8Mse6yJ01LWjxgcvi1bnKX75qEV6yCq0KKV1txTU51jZMbsM1eGMD1y9tnQ8rzUVFI/yUV4BMCqeX7+W1OJZ2AGw8C5/oIIB3Z6HEEJprAgYjB3BXmpuy9HU4lnYYIJFTQ+6AM1joIUTD4OeAqh9eg2PTrdzihjRBHMD57gGDmBh+DlQlL+9YGrZ+OEkQZwHX1r0nNcpFKEnk8JJc3rFZT3XhJHFkOMDh3jujhQgk5UbIS4IxupjjAvuk4cjwgCPdsF7Cy8cYcJTkjVFfjvnmvAaGAG4KHn4g5eULOOAoSvfkmG+uSgWFAa4xLkQ+pmpm6OuDcvemiu+Y7h+kvGlgAzchvSy3N0Mr4tZgIvp6s3x62+KBHfP797A8Nk1Dwh8+uF8+uFsjzE4pRsrnffP1jZG8pGPzGz7vW9V0YpLu15nv/g43GhrMAq7reGPvRnVMHxjwpqchCXDa4R72c8EQapLY2+CNobyk43wkang75eGAT7LpbDwu3Wm/rRDAvZVgAn/eHPa7dbp4Bf5kSwFvAI/rGNEGg9Ur8KfbI3h7z1BM4DKbmVSVSjcvFgLcs4FPNvt1arVwp/bOFAPeWCmxHSPaCfDl8gjeQYFPpi4b7FsMcM9dKeXB0HY62HvJEj+CN2qK6hjRALxCbYiDd7gdPpkNTmXufPiHezwVdcK9T0+1t1vAEl+CN2qK5BjRoK09fpb4HXjjmZUFXCIdGvzmH+45f2pmFje0NoxAHLyxBKI5RjQAV7guwRsHhgU8G/v5iqHzf+fco79StNbGLRPoePLo9Rm8cWdGcYxo3olxxG+UZ44DHO2FSuSDGCt8gvGu3SkQEEVxjGjeidGUOQZwOW6Zr8OnndkuhfwRhzBDKo5jPxpu4Y8aqNG/DsAnfj56YHT7T4KeLW9P+4+SSMxQz44RzW9gQQ04DbxDvi06zP1w+XmdfqAFkhD/fwjumI6GBopa3jlx+pIO+4TusACLc5U53r7WxzpIAiX17RjRfG3rj4xC/wjgHfKVq5Ga17hX/P0N7WqIa+TozzGikcSFN9/g3QW4uZ9J/7l4n61oz1sY3iTxv1/9UMjRo2NEo4lr7/CBd3vgUzpfuapO4/u3arYz0U6PaYMWJy83zaUy3x32ERwjGk08l/N3w7CSojNwOWhMuDIZC/32iuSqHAyydgslbdR64d4GzEdG1cctmwiOEY3uoHuJUxeVuy2itQc+PiOhKcDKmjcay0ALBdodjiOro8FttJ7EcIxodAehLaJ1AJ4NILqCSluTzGragvcmPVc7IzzOPEZwjGi0ShevbK4/oQe8oyR7wJuVhXUcq/6EHPCumrIHvFmPYR3Hqj8JPuDYif0NOLZ4OMcx6qeBTwb12vy6f9EiwIiXab1+f7f6QY14WMeR6k9aP4Pff3rVFyLjTJynQz3L7y7HT4L4PqzjSPUnbTfKL0Phm9EXZGRcm+talPfIQRHPwjqOU3/SdqP8Ye+MetOGASD87DHiWLNEg1ZFqPEDUZRsTIOhbl3//6/aUrU4LeJMclxVVb23vtydPoqdOI65y25mvZb4M3bMiLKKGYh4EDTWuGHg+BuVZdePgfAzLpi7+kEGIt7oGvNu44EXqcDlL5CYm3PUYOB9BiBe6RrzbuOB58nAGUq0I4ZwAHyGiDtBY5FbGrj9lA5Eid6k5T+ngSPipa4x7zYWuE8E3h6ujqbPmiUGHjM2YNbUNObdxgJ3icAvq6fEr1NvfSwGPsz4lr714Rvr3Hjgva6//9dvArgJEHjMAMAFjQk3GfCoOQy086snWdPr8OePNPCYcQp4N7TjG8d28/Pd3hZwE4EbKfD5JRrbdwAciQcehxR72cb2AzgALmn8+sA9GehMWnsSeNA15t3GArdkoDdpORJ4KWgscGNv7bfDwKvjQP7W/ijjBHAnaCxw4xavVtmfYeBttrn84tXmZUYGFq8kjXk3fnk2LsCvlwets6y9/PJs+zJjB5ZnJY15N/YBRFSbPdM60A8gjrV7nnH3F8yZgsYCNwwc7xvdtjcHtVvqEZuvThC/3w10D1ZnRY15N+IhMhL/EHm6al1j3o3YJjFJjtgmca6CrjHvRmwE0u51q6YDd7rGvBsArhhTFvTm8LQ6YWPebRJwy21mpKbNtJygscqN366MxW9XTqsTNubdEHCkgtjKqN3OWTtdY95tMnDPTNHSC5UgbMy7ES9VSQYUft7spI15N+61Qf4LhdWQAwrfWO3GvxiL8/gXY7EqJ2zMu3HAQSJYeGdf/cYqBY3FbvzhBnjCIA83wAr6xrwbe3wHn4eJ1wRvrrHSjT+gBiv3Jko0jld7eWPejQVuF2flFdZMl+uI6xOisdCNP2QMa2E4hWrky5l8Y60bA9wkP+TCpyz4f/IGDCdEY50bfVAkjuO1bxDu0gARjbVu1FGodFwaeUfgJhpr3fjDfqPywhFzJTrsN6pqgjdIfGO9G3Wc9UNsnhcL560RqAw/m7rqUdd1F0pAW9BY6fbxA6b/2KFjGgBgGAhi/FmXwS1d8pINwf+E3ya8CV8nvAlfJ7wJXye8CV8nvAlfJ7wJXye8CV8nvAlfJ7wJXye8CV8nvAlfJ7wJXye8CV8nvAlfJ7wJXye8CV8nvAlfJ7wJXye8CV8nvAl/7dVBCsMwDETRsSQn0f0v3JaWkpV3GTD8d4SPGO2O4GsE3x3B1wi+O4KvEXx3BDfT0TAaioZRaDaMUlfDqMSmOJ2SajRMRuktGyapD/6my9RPsioGI/VXZ+NhUbqrDM78MUfMS18vwGQ/2+yp6lQAAAAASUVORK5CYII=";
2478
+
2479
+ var EAnalyticMode;
2480
+ (function (EAnalyticMode) {
2481
+ EAnalyticMode["ALL_SESSION"] = "ALL_SESSION";
2482
+ EAnalyticMode["FIRST_SESSION"] = "FIRST_SESSION";
2483
+ EAnalyticMode["PAGE_ONLY"] = "PAGE_ONLY";
2484
+ })(EAnalyticMode || (EAnalyticMode = {}));
2485
+
2486
+ const VIEW_BY_OPTIONS = [
2487
+ {
2488
+ id: EAnalyticMode.ALL_SESSION,
2489
+ content: 'All sessions',
2490
+ helpText: 'Count metrics for all sessions where this page shows up anywhere in the journey: before, during, or after other pages.',
2491
+ icon: IMAGE_ALL_SESSION,
2492
+ },
2493
+ {
2494
+ id: EAnalyticMode.FIRST_SESSION,
2495
+ content: 'Entry session only',
2496
+ helpText: 'Count metrics for sessions only where this page was the very first page visited, then track how they moved through the funnel.',
2497
+ icon: IMAGE_FIRST_SESSION,
2498
+ },
2499
+ ];
2500
+ const AnalyticModeSelector = ({ activatorText = 'View by', value, onChange }) => {
2501
+ const options = useMemo(() => {
2502
+ return VIEW_BY_OPTIONS.map((option) => ({
2503
+ ...option,
2504
+ }));
2505
+ }, []);
2506
+ const onSelectMode = (value) => {
2507
+ onChange(value);
2508
+ };
2509
+ return (jsx(GViewBySelector, { activatorText: activatorText, options: options, selected: value, onSelect: onSelectMode, maxWidth: "650px" }));
2510
+ };
2511
+
2512
+ const EXCHANGE_RATE_HELP_URL = 'https://help.shopify.com/en/manual/international/pricing/exchange-rates#auto-convert';
2513
+ const CurrencySelector = ({ currencies, selected, preferredAlignment = 'left', activatorText, onSelect, }) => {
2514
+ const { t } = useTranslation();
2515
+ const onSelectRef = useRef(onSelect);
2516
+ const handleSelection = useCallback((value) => {
2517
+ onSelectRef.current?.(value);
2518
+ }, []);
2519
+ const actionItems = useMemo(() => {
2520
+ if (!currencies)
2521
+ return [];
2522
+ const formattedCurrencies = currencies.map((currency) => ({
2523
+ content: currency,
2524
+ id: currency,
2525
+ }));
2526
+ const hasCurrencyDefault = formattedCurrencies.some((item) => item.id === DEFAULT_CURRENCY_ANALYTIC);
2527
+ if (!hasCurrencyDefault) {
2528
+ formattedCurrencies.push({
2529
+ content: DEFAULT_CURRENCY_ANALYTIC,
2530
+ id: DEFAULT_CURRENCY_ANALYTIC,
2531
+ });
2532
+ }
2533
+ return sortByConditions(formattedCurrencies, [
2534
+ { attr: 'content', order: 'asc', preferredValue: DEFAULT_CURRENCY_ANALYTIC },
2535
+ ]);
2536
+ }, [currencies]);
2537
+ const actionListItems = useMemo(() => {
2538
+ return actionItems.map((option) => ({
2539
+ id: option.id,
2540
+ content: option.content,
2541
+ onAction: () => handleSelection(option.id),
2542
+ active: option.id === selected,
2543
+ suffix: option.id === selected && jsx(Icon, { source: SvgCheckIcon, tone: "success" }),
2544
+ helpText: option.id === DEFAULT_CURRENCY_ANALYTIC && (jsx(Text, { as: "p", fontWeight: "semibold", children: t('Default') })),
2545
+ }));
2546
+ }, [actionItems, selected, handleSelection, t]);
2547
+ const isHidden = useMemo(() => {
2548
+ if (!actionItems?.length)
2549
+ return true;
2550
+ return actionItems.length === 1 && actionItems[0]?.id === DEFAULT_CURRENCY_ANALYTIC;
2551
+ }, [actionItems]);
2552
+ useEffect(() => {
2553
+ onSelectRef.current = onSelect;
2554
+ });
2555
+ if (isHidden)
2556
+ return null;
2557
+ return (jsx(GSelector, { options: actionListItems, selected: selected, variant: "action-list",
2558
+ // value originates from our CurrencyCode option ids, so the widen-to-string round trip is safe
2559
+ onSelect: (value) => handleSelection(value), activatorText: activatorText ?? t('Currency'), maxWidth: "225px", preferredAlignment: preferredAlignment, helpText: jsx(Box, { padding: "200", paddingBlockStart: "300", paddingBlockEnd: "300", borderColor: "border-tertiary", background: 'bg', children: jsx(GI18NText, { as: "p", variant: "bodyMd", transformers: {
2560
+ 1: (text) => (jsx(GTextLink, { linkAction: {
2561
+ url: EXCHANGE_RATE_HELP_URL,
2562
+ target: '_blank',
2563
+ }, children: text }, text + 'text-link')),
2564
+ }, children: t("This will follow Shopify's current exchange rate. [1]Read more[]") }) }) }));
398
2565
  };
399
2566
 
400
- export { EMetricKey, GSelectableMetricChartCard, SingleMetricChartCard };
2567
+ export { ANALYTICS_METRIC_TOOLTIP, AnalyticModeSelector, CAMPAIGN_BACKGROUND_MAIN, CHART_MIN_HEIGHT, COMPARE_DATE_TIME_FILTERS_MAP, ChoiceHelpText, CompareDateTimePickerAlias, CurrencySelector, DATE_TIME_COMPARISON_FILTERS, DEFAULT_CURRENCY_ANALYTIC, DEFAULT_CURRENT_PERIOD_LABEL, DEFAULT_PREVIOUS_PERIOD_LABEL, DateTimeFilterInputs, DateTimeFilters, DateTimePickerContext, DateTimePickerProvider, EAnalyticColumnKey, EAnalyticMode, EDeviceType, EMetricKey, ETrafficSourceType, EVisitorType, GActivatorPopover, GBlockCenter, GButton, GCheckbox, GCheckboxMultiple, GCheckboxSingle, GChoice, GClickable, GDiv, GI18NText, GOptionList, GSelectableMetricChartCard, GSelector, GSkeletonDisplayText, GTextLink, GThumbnail, GTimePicker, GTooltip, GTooltipCard, GViewBySelector, MainDateTimePickerAlias, MetricDonutChartCard, PLACEHOLDER_VALUE, PREVIOUS_PERIOD_FILTER, SERIES_COLORS, SingleMetricChartCard, TARGET_CHANNEL, TARGET_DEVICES, TARGET_VISITOR, THUMB_PRODUCT_DEFAULT, TREND_TONE, convertToDateTimeFilters, createLastDaysRange, formatDate, formatDateTimeRange, formatDayjs, formatMs, formatTime, formatTimeRange, getDateRangeTitle, getDateTimeFilterBase, getDateTimeFilterByAlias, getDateTimeFilterMapping, getEndOfDayBy, getLast12Months, getLast30Days, getLast365Days, getLast7Days, getLast90Days, getLastMonth, getLastYear, getMonthAndYearByDateFilter, getNoComparison, getPreviousMonth, getPreviousPeriod, getPreviousQuarter, getPreviousWeek, getPreviousYear, getToday, getVersionDateDescription, getVersionDateRangeTitle, getYesterday, isDate, isMidnight, isSameDayTimestamp, isValidDate, isValidYearMonthDayDateString, parseYearMonthDayDateString, useDateTimeFilter, useDateTimePicker, useDateTimePickerContext, useVersionDateTimeFilters, variationName };