@bpfdev/oly-ui 1.0.4 → 1.0.5

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.
package/dist/index.d.mts CHANGED
@@ -3,6 +3,7 @@ import { SxProps, Theme, ButtonProps } from '@mui/material';
3
3
  import * as React$1 from 'react';
4
4
  import { ReactNode, ReactElement, CSSProperties } from 'react';
5
5
  import { SxProps as SxProps$1, Theme as Theme$1 } from '@mui/material/styles';
6
+ import { TooltipContentProps } from 'recharts';
6
7
  import { GridColDef } from '@mui/x-data-grid';
7
8
 
8
9
  interface AddCommentInputProps {
@@ -101,35 +102,6 @@ interface ButtonWithIconProps extends ButtonProps {
101
102
 
102
103
  declare const ButtonWithIcon: ({ size, variant, children, icon, ...props }: ButtonWithIconProps) => react_jsx_runtime.JSX.Element;
103
104
 
104
- /** Style props actually used by the header filter (trigger + list popper only; no search / checkboxes / apply row). */
105
- type WidgetHeaderFilterStyleProps = Pick<FalconMultiSelectStyleProps, 'triggerBg' | 'triggerColor' | 'triggerMinWidth' | 'triggerBorderRadius' | 'triggerSx' | 'popperWidth' | 'popperBorderColor' | 'popperBorderColorDark' | 'popperBg' | 'popperBgDark' | 'popperColor' | 'popperColorDark'> & {
106
- /**
107
- * When `true` (default), the dropdown panel tracks the trigger width.
108
- * When `false`, the panel uses `popperWidth`, or **300** if `popperWidth` is omitted.
109
- */
110
- popperMatchTrigger?: boolean;
111
- /** Merged into the dropdown `Paper` after base styles (e.g. `minWidth`, `maxWidth`, padding). */
112
- popperSx?: SxProps<Theme>;
113
- };
114
- /** Props for the widget header filter: two-line trigger + simple option list. */
115
- type WidgetHeaderFilterProps = {
116
- /** First line of the trigger (full string), e.g. **Select gender** or **Region**. */
117
- label: string;
118
- list: FalconMultiSelectOption[];
119
- data: FalconMultiSelectOption[];
120
- setData: (value: FalconMultiSelectOption[]) => void;
121
- } & Partial<WidgetHeaderFilterStyleProps>;
122
- /** Alias for toolbar props that include this filter. */
123
- type WidgetHeaderMultiSelectConfig = WidgetHeaderFilterProps;
124
-
125
- /**
126
- * Widget header filter styled like the provided mock:
127
- * two-line trigger + simple dropdown list.
128
- */
129
- declare const WidgetHeaderFilter: ({ label, list, data, setData, triggerBg, triggerColor, triggerMinWidth, triggerBorderRadius, triggerSx, popperMatchTrigger, popperWidth, popperSx, popperBorderColor, popperBorderColorDark, popperBg, popperBgDark, popperColor, popperColorDark, }: WidgetHeaderFilterProps) => react_jsx_runtime.JSX.Element;
130
-
131
- declare const ChartWidgetHeaderSeparator: () => react_jsx_runtime.JSX.Element;
132
-
133
105
  interface ChartWidgetInfoPopoverContent {
134
106
  title: string;
135
107
  description: string;
@@ -170,6 +142,110 @@ interface ChartWidgetInfoButtonProps {
170
142
 
171
143
  declare const ChartWidgetInfoButton: ({ onClick, ariaLabel, sx, iconColor, buttonBg, buttonHoverBg, iconSize: iconSizeProp, buttonSize: buttonSizeProp, popover, popoverWidth: popoverWidthProp, density, }: ChartWidgetInfoButtonProps) => react_jsx_runtime.JSX.Element;
172
144
 
145
+ declare const ChartWidgetHeaderSeparator: () => react_jsx_runtime.JSX.Element;
146
+
147
+ type ChartEmptyStateProps = {
148
+ /** Min-height of the container. Defaults to 300. */
149
+ minHeight?: number | string;
150
+ /** Iconify icon name. Set to null to hide. Defaults to 'mdi:chart-box-outline'. */
151
+ icon?: string | null;
152
+ /** Size of the icon in pixels. Defaults to 40. */
153
+ iconSize?: number;
154
+ /** Color of the icon. Defaults to '#9CA3AF'. */
155
+ iconColor?: string;
156
+ /** Primary message. Set to null to hide. Defaults to 'No Data Available'. */
157
+ title?: string | null;
158
+ /** Secondary message. Set to null to hide. Defaults to "There's no data to display in this chart yet". */
159
+ subtitle?: string | null;
160
+ /** Vertical gap between elements. Defaults to 1. */
161
+ gap?: number;
162
+ /** Custom MUI sx styles for the outermost Box container. */
163
+ containerSx?: SxProps$1<Theme$1>;
164
+ /** Custom MUI sx styles for the title Typography. */
165
+ titleSx?: SxProps$1<Theme$1>;
166
+ /** Custom MUI sx styles for the subtitle Typography. */
167
+ subtitleSx?: SxProps$1<Theme$1>;
168
+ /** Font weight for the title. Defaults to 700. */
169
+ titleWeight?: number | string;
170
+ /** Font weight for the subtitle. Defaults to 400. */
171
+ subtitleWeight?: number | string;
172
+ /** Layout orientation. Defaults to 'column'. */
173
+ direction?: 'column' | 'row';
174
+ };
175
+
176
+ /**
177
+ * A reusable empty state / placeholder component specifically for charts.
178
+ */
179
+ declare function ChartEmptyState({ minHeight, icon, iconSize, iconColor, title, subtitle, gap, containerSx, titleSx, subtitleSx, titleWeight, subtitleWeight, direction, }: ChartEmptyStateProps): React$1.ReactElement;
180
+
181
+ /** Style props actually used by the header filter (trigger + list popper only; no search / checkboxes / apply row). */
182
+ type WidgetHeaderFilterStyleProps = Pick<FalconMultiSelectStyleProps, 'triggerBg' | 'triggerColor' | 'triggerMinWidth' | 'triggerBorderRadius' | 'triggerSx' | 'popperWidth' | 'popperBorderColor' | 'popperBorderColorDark' | 'popperBg' | 'popperBgDark' | 'popperColor' | 'popperColorDark'> & {
183
+ /**
184
+ * When `true` (default), the dropdown panel tracks the trigger width.
185
+ * When `false`, the panel uses `popperWidth`, or **300** if `popperWidth` is omitted.
186
+ */
187
+ popperMatchTrigger?: boolean;
188
+ /** Merged into the dropdown `Paper` after base styles (e.g. `minWidth`, `maxWidth`, padding). */
189
+ popperSx?: SxProps<Theme>;
190
+ };
191
+ /** Props for the widget header filter: two-line trigger + simple option list. */
192
+ type WidgetHeaderFilterProps = {
193
+ /** First line of the trigger (full string), e.g. **Select gender** or **Region**. */
194
+ label: string;
195
+ list: FalconMultiSelectOption[];
196
+ /** Optional grouped options for `multiSelect` mode (renders section headers like the design mock). */
197
+ groupedList?: ReadonlyArray<{
198
+ title: string;
199
+ options: FalconMultiSelectOption[];
200
+ }>;
201
+ data: FalconMultiSelectOption[];
202
+ setData: (value: FalconMultiSelectOption[]) => void;
203
+ /** Enables checkbox-based multi select with search + Apply/Cancel row. */
204
+ multiSelect?: boolean;
205
+ /** Search field placeholder for `multiSelect` mode. @default 'Search' */
206
+ searchPlaceholder?: string;
207
+ /** Apply button label for `multiSelect` mode. @default 'Apply' */
208
+ applyLabel?: string;
209
+ /** Cancel button label for `multiSelect` mode. @default 'Cancel' */
210
+ cancelLabel?: string;
211
+ /** Checkbox unchecked color for `multiSelect` mode. @default '#5B5B69' */
212
+ checkboxColor?: string;
213
+ /** Checkbox checked color for `multiSelect` mode. @default '#6750A4' */
214
+ checkboxCheckedColor?: string;
215
+ /** Section header background for grouped rows. @default 'rgba(0,0,0,0.03)' */
216
+ groupHeaderBg?: string;
217
+ /** Section header text color. @default '#111827' */
218
+ groupHeaderColor?: string;
219
+ /** Section header font size. @default 14 */
220
+ groupHeaderFontSize?: number;
221
+ /** Row text color in options list. @default '#111827' */
222
+ optionTextColor?: string;
223
+ /** Search icon color. @default '#49454F' */
224
+ searchIconColor?: string;
225
+ /** Search input text color. @default '#111827' */
226
+ searchTextColor?: string;
227
+ /** Search placeholder color. @default '#6B7280' */
228
+ searchPlaceholderColor?: string;
229
+ /** Apply button background color. @default '#6750A4' */
230
+ applyBg?: string;
231
+ /** Apply button text color. @default '#FFFFFF' */
232
+ applyColor?: string;
233
+ /** Cancel button background color. @default 'transparent' */
234
+ cancelBg?: string;
235
+ /** Cancel button text color. @default '#374151' */
236
+ cancelColor?: string;
237
+ /** Cancel button border color. @default '#9CA3AF' */
238
+ cancelBorderColor?: string;
239
+ } & Partial<WidgetHeaderFilterStyleProps>;
240
+ /** Alias for toolbar props that include this filter. */
241
+ type WidgetHeaderMultiSelectConfig = WidgetHeaderFilterProps;
242
+
243
+ /**
244
+ * Widget header filter styled like the provided mock:
245
+ * two-line trigger + simple dropdown list.
246
+ */
247
+ declare const WidgetHeaderFilter: ({ label, list, groupedList, data, setData, triggerBg, triggerColor, triggerMinWidth, triggerBorderRadius, triggerSx, popperMatchTrigger, popperWidth, popperSx, popperBorderColor, popperBorderColorDark, popperBg, popperBgDark, popperColor, popperColorDark, multiSelect, searchPlaceholder, applyLabel, cancelLabel, checkboxColor, checkboxCheckedColor, groupHeaderBg, groupHeaderColor, groupHeaderFontSize, optionTextColor, searchIconColor, searchTextColor, searchPlaceholderColor, applyBg, applyColor, cancelBg, cancelColor, cancelBorderColor, }: WidgetHeaderFilterProps) => react_jsx_runtime.JSX.Element;
248
+
173
249
  /** One slice inside a row’s bar (e.g. age band). Widths are proportional to `value` within the row. */
174
250
  interface RankedBarListSegment {
175
251
  id: string;
@@ -179,6 +255,22 @@ interface RankedBarListSegment {
179
255
  /** Segment fill; stacks left → right inside the row’s filled width. */
180
256
  color: string;
181
257
  }
258
+ /** Optional `sx` for the card title, inner list column headers, and each data row’s typographies. */
259
+ interface RankedBarListCustomization {
260
+ /** Merged onto the card **title** `Typography` (`h2`) after built-in styles. */
261
+ titleSx?: SxProps$1<Theme$1>;
262
+ /** Merged onto both **list** column header `Typography` nodes (label + value header). */
263
+ listHeaderSx?: SxProps$1<Theme$1>;
264
+ /** Merged onto each row’s **label** `Typography`. */
265
+ rowTypographySx?: SxProps$1<Theme$1>;
266
+ /** Merged onto each row’s **numeric value** `Typography`. */
267
+ valueTypographySx?: SxProps$1<Theme$1>;
268
+ /**
269
+ * When set, overrides the top-level **`showSortControl`** prop for the list header sort icon
270
+ * next to **`listHeaderLabel`**. Use **`false`** to hide it when wiring styles through **`customization`** only.
271
+ */
272
+ showSortControl?: boolean;
273
+ }
182
274
  interface RankedBarListItem {
183
275
  id: string;
184
276
  /** Row label (e.g. camera id). */
@@ -191,6 +283,10 @@ interface RankedBarListItem {
191
283
  */
192
284
  segments?: RankedBarListSegment[];
193
285
  }
286
+ interface RankedBarListSegmentTooltipRenderContext {
287
+ segment: RankedBarListSegment;
288
+ row: RankedBarListItem;
289
+ }
194
290
  interface RankedBarListProps {
195
291
  /** Card title (e.g. “No. of Alerts Generated by Cameras”). */
196
292
  title: string;
@@ -209,7 +305,10 @@ interface RankedBarListProps {
209
305
  listHeaderLabel?: string;
210
306
  /** Right column header above numeric values. */
211
307
  valueColumnHeader?: string;
212
- /** Show sort icon next to `listHeaderLabel`. */
308
+ /**
309
+ * Show sort icon next to `listHeaderLabel` (default **true**).
310
+ * Override per render via **`customization.showSortControl`** when that property is set.
311
+ */
213
312
  showSortControl?: boolean;
214
313
  /** Called when the sort icon is clicked. */
215
314
  onSortClick?: () => void;
@@ -225,6 +324,11 @@ interface RankedBarListProps {
225
324
  * Tooltip for a stacked segment. Default: **label**, **" : "**, and **value** (e.g. Teens (13-21 years) : 38).
226
325
  */
227
326
  formatSegmentTooltip?: (segment: RankedBarListSegment, row: RankedBarListItem) => string;
327
+ /**
328
+ * Full custom renderer for stacked segment tooltips.
329
+ * When provided, `formatSegmentTooltip` and default card layout are bypassed.
330
+ */
331
+ renderSegmentTooltip?: (context: RankedBarListSegmentTooltipRenderContext) => ReactNode;
228
332
  /**
229
333
  * MUI **`sx`** merged onto the segment tooltip **card** (white panel: border, shadow, rounded corners; stacked bars only).
230
334
  * The Popper wrapper stays transparent; style the panel here.
@@ -249,6 +353,7 @@ interface RankedBarListProps {
249
353
  md?: number | string;
250
354
  };
251
355
  cardSx?: SxProps$1<Theme$1>;
356
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
252
357
  /** Copy when `items` is empty. Default **No data**. */
253
358
  emptyStateText?: string;
254
359
  /**
@@ -262,76 +367,15 @@ interface RankedBarListProps {
262
367
  * Set **`false`** to preserve manual scroll position.
263
368
  */
264
369
  scrollListToTopOnItemsChange?: boolean;
370
+ /** Targeted `sx` for list headers and row text without deep nested selectors. */
371
+ customization?: RankedBarListCustomization;
265
372
  }
266
373
 
267
374
  /**
268
375
  * Ranked list widget: title row, optional header actions, scrollable list of labels with
269
376
  * horizontal bars sized by numeric value (highest value = full bar width).
270
377
  */
271
- declare const RankedBarList: ({ title, items, sortByValueDescending, maxValue: maxValueProp, listHeaderLabel, valueColumnHeader, showSortControl, onSortClick, headerActions, barColor, barTrackColor, barHeight, formatSegmentTooltip, segmentTooltipSx, listMaxHeight, fullWidth, fillHeight, cardMaxWidth, cardSx, emptyStateText, isBarWidthAnimationActive, scrollListToTopOnItemsChange, }: RankedBarListProps) => react_jsx_runtime.JSX.Element;
272
-
273
- /** How tab segments use horizontal space inside the pill track. */
274
- type ChartWidgetSegmentedTabLayout = 'intrinsic' | 'equalWidth';
275
- interface ChartWidgetSegmentedTab {
276
- id: string;
277
- label: string;
278
- }
279
- interface ChartWidgetSegmentedTabsProps {
280
- tabs: ChartWidgetSegmentedTab[];
281
- activeTabId: string;
282
- onTabChange: (tabId: string) => void;
283
- /** @default 'Scope' */
284
- ariaLabel?: string;
285
- /**
286
- * When true (default), the track stretches to the parent width.
287
- * When false, the pill track is only as wide as the tabs (`fit-content`).
288
- */
289
- fullWidth?: boolean;
290
- /** Tab label `fontSize` (number → px). Default **14**. */
291
- tabFontSize?: number | string;
292
- rootSx?: SxProps$1<Theme$1>;
293
- /** Pill track background. @default `#ECECEC` */
294
- trackBackgroundColor?: string;
295
- /** Selected segment background. @default `#fff` */
296
- activeTabBackground?: string;
297
- /** Selected segment text color. @default `#2a2a2a` */
298
- activeTabColor?: string;
299
- /** Unselected segment text color. @default `#2a2a2a` */
300
- inactiveTabColor?: string;
301
- /**
302
- * Selected segment box shadow. @default light elevation. Use **`'none'`** for flat violet pills.
303
- */
304
- activeTabBoxShadow?: string;
305
- /**
306
- * **`intrinsic`** (default): tabs size to their labels and sit at the **start** of the track (empty space
307
- * may appear on the right when **`fullWidth`** is true). **`equalWidth`**: each tab grows so segments **fill**
308
- * the track — typical for full-width dashboard bars.
309
- */
310
- tabLayout?: ChartWidgetSegmentedTabLayout;
311
- /** Selected tab `fontWeight`. @default **700** */
312
- activeTabFontWeight?: number;
313
- /** Unselected tab `fontWeight`. @default **600** */
314
- inactiveTabFontWeight?: number;
315
- /**
316
- * Duration (ms) for the sliding selection pill when switching tabs.
317
- * @default 260
318
- */
319
- tabIndicatorTransitionMs?: number;
320
- }
321
-
322
- /**
323
- * Pill-style segmented control for chart cards (e.g. Walk-in scope tabs, billing analytics).
324
- *
325
- * **Defaults** match the classic walk-in look: grey track, **white** selected pill, dark text, light shadow.
326
- * Override **`trackBackgroundColor`**, **`activeTabBackground`**, **`activeTabColor`**, **`inactiveTabColor`**, and
327
- * **`activeTabBoxShadow`** for other themes (e.g. violet selected pill + white text, **`activeTabBoxShadow: 'none'`**).
328
- *
329
- * Use **`tabLayout="equalWidth"`** when the track is full width and each tab should grow to **fill** the bar;
330
- * default **`intrinsic`** keeps label-sized pills aligned to the **start** (walk-in style).
331
- *
332
- * The active segment uses a **sliding pill** (animated with **`tabIndicatorTransitionMs`**).
333
- */
334
- declare const ChartWidgetSegmentedTabs: ({ tabs, activeTabId, onTabChange, ariaLabel, fullWidth, tabFontSize, rootSx, trackBackgroundColor, activeTabBackground, activeTabColor, inactiveTabColor, activeTabBoxShadow, tabLayout, activeTabFontWeight, inactiveTabFontWeight, tabIndicatorTransitionMs, }: ChartWidgetSegmentedTabsProps) => react_jsx_runtime.JSX.Element;
378
+ declare const RankedBarList: ({ title, items, sortByValueDescending, maxValue: maxValueProp, listHeaderLabel, valueColumnHeader, showSortControl: showSortControlProp, onSortClick, headerActions, barColor, barTrackColor, barHeight, formatSegmentTooltip, renderSegmentTooltip, segmentTooltipSx, listMaxHeight, fullWidth, fillHeight, cardMaxWidth, cardSx, emptyStatePlaceholderProps, isBarWidthAnimationActive, scrollListToTopOnItemsChange, customization, }: RankedBarListProps) => react_jsx_runtime.JSX.Element;
335
379
 
336
380
  /** Partial **ChartWidgetInfoButton** props (popover always comes from **`infoPopover`** on **TimePeriodFilter**). */
337
381
  type TimePeriodFilterInfoButtonPresentation = Partial<Omit<ChartWidgetInfoButtonProps, 'popover'>>;
@@ -393,6 +437,8 @@ type QueueTimeBreakdownCustomization = {
393
437
  rootCard?: {
394
438
  sx?: SxProps$1<Theme$1>;
395
439
  elevation?: number;
440
+ /** Merged into the outer shell `CardContent` (padding, gaps). */
441
+ cardContentSx?: SxProps$1<Theme$1>;
396
442
  };
397
443
  periodFilter?: TimePeriodFilterTheme;
398
444
  header?: {
@@ -404,9 +450,26 @@ type QueueTimeBreakdownCustomization = {
404
450
  ruleColor?: string;
405
451
  labelPercentSx?: SxProps$1<Theme$1>;
406
452
  labelRangeSx?: SxProps$1<Theme$1>;
453
+ /**
454
+ * Merged into the flex row under each bar (segment percent + range labels).
455
+ * Prefer this over targeting `.MuiBox-root:nth-of-type(...)` on the card root.
456
+ */
457
+ labelRowContainerSx?: SxProps$1<Theme$1>;
407
458
  tooltip?: QueueTimeRechartsTooltipTheme;
408
459
  };
460
+ /**
461
+ * First grid column: headline + stacked bars + data-comparison block.
462
+ * Lets hosts adjust spacing without coupling to internal DOM order.
463
+ */
464
+ leftColumn?: {
465
+ /** Outer `Stack` (`gap={1}`) wrapping the header block and bar list. */
466
+ columnStackSx?: SxProps$1<Theme$1>;
467
+ /** `Stack` that wraps the mapped `QueueTimeBreakdownStackedBar` list. */
468
+ barRowsStackSx?: SxProps$1<Theme$1>;
469
+ };
409
470
  dataComparison?: {
471
+ /** “Data comparison” title line above the donut comparison card. */
472
+ titleSx?: SxProps$1<Theme$1>;
410
473
  cardSx?: SxProps$1<Theme$1>;
411
474
  dividerSx?: SxProps$1<Theme$1>;
412
475
  };
@@ -442,6 +505,65 @@ type QueueTimeBreakdownCustomization = {
442
505
  };
443
506
  };
444
507
 
508
+ type QueueTimeAreaSeriesPoint = {
509
+ name: string;
510
+ data: number[];
511
+ };
512
+ type QueueTimeBreakdownAreaProps = {
513
+ series: QueueTimeAreaSeriesPoint[];
514
+ xAxis: string[];
515
+ renderTooltip?: (context: QueueTimeBreakdownAreaTooltipRenderContext) => ReactNode;
516
+ };
517
+ type QueueTimeBreakdownAreaTooltipRenderContext = {
518
+ tooltipProps: TooltipContentProps;
519
+ chartData: Record<string, string | number>[];
520
+ series: QueueTimeAreaSeriesPoint[];
521
+ xAxis: string[];
522
+ };
523
+ declare const QueueTimeBreakdownArea: ({ series, xAxis, renderTooltip, }: QueueTimeBreakdownAreaProps) => React$1.ReactElement;
524
+
525
+ declare function getQueueTimeBreakdownAreaXAxisData(type: QueueTimeChartFilter): string[];
526
+ declare function getQueueTimeBreakdownAreaSeriesData(type: QueueTimeChartFilter): QueueTimeAreaSeriesPoint[];
527
+
528
+ type QueueTimeBreakdownDonutProps = {
529
+ chartFilter: QueueTimeChartFilter;
530
+ averageData: number[];
531
+ LabelName: string;
532
+ labels?: readonly string[];
533
+ renderTooltip?: (context: QueueTimeBreakdownDonutTooltipRenderContext) => ReactNode;
534
+ };
535
+ type PieDatum = {
536
+ name: string;
537
+ value: number;
538
+ };
539
+ type QueueTimeBreakdownDonutTooltipRenderContext = {
540
+ tooltipProps: TooltipContentProps;
541
+ pieData: PieDatum[];
542
+ total: number;
543
+ chartFilter: QueueTimeChartFilter;
544
+ labelName: string;
545
+ };
546
+ declare function QueueTimeBreakdownDonut({ chartFilter, averageData, LabelName, labels, renderTooltip, }: QueueTimeBreakdownDonutProps): React$1.ReactElement;
547
+
548
+ type QueueTimeBreakdownStackedBarProps = {
549
+ row: QueueTimeBreakdownBarRow;
550
+ /** One entry per segment: percent line + range line (aligned under each slice). */
551
+ legendRows: readonly QueueBucketLegendItem[];
552
+ renderTooltip?: (context: QueueTimeBreakdownStackedBarTooltipRenderContext) => ReactNode;
553
+ };
554
+ type QueueTimeBreakdownStackedBarTooltipRenderContext = {
555
+ row: QueueTimeBreakdownBarRow;
556
+ segmentIndex: number;
557
+ percent: number;
558
+ count: number;
559
+ color: string;
560
+ };
561
+ /**
562
+ * Custom horizontal 100% stacked bar — slim pill with rounded ends.
563
+ * Segments are individually hoverable with MUI tooltips.
564
+ */
565
+ declare function QueueTimeBreakdownStackedBar({ row, legendRows, renderTooltip, }: QueueTimeBreakdownStackedBarProps): React$1.ReactElement;
566
+
445
567
  /**
446
568
  * Header illustration for the queue breakdown card.
447
569
  * Default GIF path (place under app **`public`** or override with **`headerImageSrc`**).
@@ -497,6 +619,24 @@ type QueueTimeBreakdownProps = {
497
619
  * **`ChartWidgetInfoButton`**. Standalone **`TimePeriodFilter`** does not inject popover copy implicitly.
498
620
  */
499
621
  infoPopover?: ChartWidgetInfoPopoverContent | null;
622
+ /**
623
+ * Info popover shown beside the headline subtitle ("Avg. Queue Time Breakdown...").
624
+ * Defaults to the same content used by `infoPopover` when omitted.
625
+ * Pass `null` to hide the subtitle info button.
626
+ */
627
+ headlineInfoPopover?: ChartWidgetInfoPopoverContent | null;
628
+ /**
629
+ * Full custom tooltip renderer for the area chart.
630
+ */
631
+ renderAreaTooltip?: QueueTimeBreakdownAreaProps['renderTooltip'];
632
+ /**
633
+ * Full custom tooltip renderer for both donut charts.
634
+ */
635
+ renderDonutTooltip?: QueueTimeBreakdownDonutProps['renderTooltip'];
636
+ /**
637
+ * Full custom tooltip renderer for each stacked bar row.
638
+ */
639
+ renderStackedBarTooltip?: QueueTimeBreakdownStackedBarProps['renderTooltip'];
500
640
  /** Visual / layout overrides for all sub-widgets (tooltips, palette, D/W/M/Y control, etc.). */
501
641
  customization?: QueueTimeBreakdownCustomization;
502
642
  };
@@ -531,37 +671,233 @@ type TimePeriodFilterProps = {
531
671
  */
532
672
  declare function TimePeriodFilter({ selectedFilter, onFilterChange, infoPopover, infoButtonProps, sx, }: TimePeriodFilterProps): React$1.ReactElement;
533
673
 
674
+ /** How tab segments use horizontal space inside the pill track. */
675
+ type ChartWidgetSegmentedTabLayout = 'intrinsic' | 'equalWidth';
676
+ interface ChartWidgetSegmentedTab {
677
+ id: string;
678
+ label: string;
679
+ }
680
+ interface ChartWidgetSegmentedTabsProps {
681
+ tabs: ChartWidgetSegmentedTab[];
682
+ activeTabId: string;
683
+ onTabChange: (tabId: string) => void;
684
+ /** @default 'Scope' */
685
+ ariaLabel?: string;
686
+ /**
687
+ * When true (default), the track stretches to the parent width.
688
+ * When false, the pill track is only as wide as the tabs (`fit-content`).
689
+ */
690
+ fullWidth?: boolean;
691
+ /** Tab label `fontSize` (number → px). Default **14**. */
692
+ tabFontSize?: number | string;
693
+ rootSx?: SxProps$1<Theme$1>;
694
+ /** Pill track background. @default `#ECECEC` */
695
+ trackBackgroundColor?: string;
696
+ /** Selected segment background. @default `#fff` */
697
+ activeTabBackground?: string;
698
+ /** Selected segment text color. @default `#2a2a2a` */
699
+ activeTabColor?: string;
700
+ /** Unselected segment text color. @default `#2a2a2a` */
701
+ inactiveTabColor?: string;
702
+ /**
703
+ * Selected segment box shadow. @default light elevation. Use **`'none'`** for flat violet pills.
704
+ */
705
+ activeTabBoxShadow?: string;
706
+ /**
707
+ * **`intrinsic`** (default): tabs size to their labels and sit at the **start** of the track (empty space
708
+ * may appear on the right when **`fullWidth`** is true). **`equalWidth`**: each tab grows so segments **fill**
709
+ * the track — typical for full-width dashboard bars.
710
+ */
711
+ tabLayout?: ChartWidgetSegmentedTabLayout;
712
+ /** Selected tab `fontWeight`. @default **700** */
713
+ activeTabFontWeight?: number;
714
+ /** Unselected tab `fontWeight`. @default **600** */
715
+ inactiveTabFontWeight?: number;
716
+ /**
717
+ * Duration (ms) for the sliding selection pill when switching tabs.
718
+ * @default 260
719
+ */
720
+ tabIndicatorTransitionMs?: number;
721
+ }
722
+
534
723
  /**
535
- * Ready-made **`ChartWidgetInfoPopoverContent`** for **TimePeriodFilter** (D / W / M / Y) when you want
536
- * generic help — **not** tied to **QueueTimeBreakdown** or any other specific card.
724
+ * Pill-style segmented control for chart cards (e.g. Walk-in scope tabs, billing analytics).
537
725
  *
538
- * **Use this when:** you show the period control next to charts or KPIs on any page and need a short
539
- * explanation of what the control does and why it matters, without duplicating copy in your app.
726
+ * **Defaults** match the classic walk-in look: grey track, **white** selected pill, dark text, light shadow.
727
+ * Override **`trackBackgroundColor`**, **`activeTabBackground`**, **`activeTabColor`**, **`inactiveTabColor`**, and
728
+ * **`activeTabBoxShadow`** for other themes (e.g. violet selected pill + white text, **`activeTabBoxShadow: 'none'`**).
540
729
  *
541
- * **What it contains (for authors / Storybook):**
542
- * - **`title`:** “Time period” — names the control.
543
- * - **`description`:** Explains that switching day / week / month / year changes grouping or how the time axis is labelled.
544
- * - **`helpTitle`:** “How does it help?”
545
- * - **`helpBullets`:** (1) Align the view with your reporting window; (2) Keep period in sync with other controls on the page.
730
+ * Use **`tabLayout="equalWidth"`** when the track is full width and each tab should grow to **fill** the bar;
731
+ * default **`intrinsic`** keeps label-sized pills aligned to the **start** (walk-in style).
546
732
  *
547
- * Pass as **`infoPopover={TIME_PERIOD_FILTER_INFO_POPOVER}`** on **TimePeriodFilter**, or use your own
548
- * **`ChartWidgetInfoPopoverContent`** if you need product-specific wording.
549
- */
550
- declare const TIME_PERIOD_FILTER_INFO_POPOVER: ChartWidgetInfoPopoverContent;
551
- /**
552
- * Info copy aligned with the **QueueTimeBreakdown** composite card (header next to D/W/M/Y).
553
- * **QueueTimeBreakdown** uses this when **`infoPopover`** is omitted on the card.
554
- * Use **`TIME_PERIOD_FILTER_INFO_POPOVER`** instead when the filter is not on that card.
555
- */
556
- declare const TIME_PERIOD_FILTER_INFO_POPOVER_BREAKDOWN: ChartWidgetInfoPopoverContent;
557
- /** @deprecated Use {@link TIME_PERIOD_FILTER_INFO_POPOVER}. */
558
- declare const CHART_PERIOD_FILTER_INFO_POPOVER: ChartWidgetInfoPopoverContent;
559
- /** @deprecated Use {@link TIME_PERIOD_FILTER_INFO_POPOVER_BREAKDOWN}. */
560
- declare const QUEUE_TIME_BREAKDOWN_INFO_POPOVER: ChartWidgetInfoPopoverContent;
561
- /**
562
- * @deprecated Use {@link TIME_PERIOD_FILTER_INFO_POPOVER_BREAKDOWN}.
733
+ * The active segment uses a **sliding pill** (animated with **`tabIndicatorTransitionMs`**).
563
734
  */
564
- declare const DEFAULT_QUEUE_TIME_BREAKDOWN_INFO_POPOVER: ChartWidgetInfoPopoverContent;
735
+ declare const ChartWidgetSegmentedTabs: ({ tabs, activeTabId, onTabChange, ariaLabel, fullWidth, tabFontSize, rootSx, trackBackgroundColor, activeTabBackground, activeTabColor, inactiveTabColor, activeTabBoxShadow, tabLayout, activeTabFontWeight, inactiveTabFontWeight, tabIndicatorTransitionMs, }: ChartWidgetSegmentedTabsProps) => react_jsx_runtime.JSX.Element;
736
+
737
+ /** How the trend / baseline row is laid out under the main value. */
738
+ type KpiTrendLayout = 'row' | 'stacked';
739
+ type KpiTrend = {
740
+ /**
741
+ * **row** (default) — one line: optional %, direction arrow, comparison (caption style).
742
+ * **stacked** — comparison on its **own line** below the value (e.g. schedule cards: value `4 - 5pm`,
743
+ * line below `yesterday is 3 - 4pm` in **comparisonColor**). No %/arrow row.
744
+ */
745
+ layout?: KpiTrendLayout;
746
+ /**
747
+ * Change vs baseline, e.g. `"82%"`. Only used when **`layout`** is **`row`** (or omitted).
748
+ */
749
+ percentLabel?: string;
750
+ /**
751
+ * Baseline / comparison copy (required for **`row`**).
752
+ * For **`stacked`**, omit when using **`comparisonPrefix`** + **`comparisonHighlight`** (split line).
753
+ */
754
+ comparisonText?: string | ReactNode;
755
+ /**
756
+ * **Stacked only:** static copy before the API window (muted). Pair with **`comparisonHighlight`**.
757
+ * Example: `"yesterday is "` (include trailing space if needed).
758
+ */
759
+ comparisonPrefix?: string;
760
+ /**
761
+ * **Stacked only:** dynamic value from the API (accent color — default violet). Pair with **`comparisonPrefix`**.
762
+ * Example: `"3 - 4pm"`.
763
+ */
764
+ comparisonHighlight?: string;
765
+ /**
766
+ * Arrow + tint for **`layout: 'row'`**. Ignored when **`layout: 'stacked'`** (pass a dummy if required by callers).
767
+ */
768
+ direction: 'up' | 'down';
769
+ /**
770
+ * **Stacked:** color for **`comparisonHighlight`** only (split mode), or entire line if you pass a single **`comparisonText`** (default line color is **muted** unless **`comparisonColor`** is set).
771
+ * @default `#5E35B1` for the highlight segment in split mode.
772
+ */
773
+ comparisonColor?: string;
774
+ /**
775
+ * **Stacked split:** color for **`comparisonPrefix`** (muted segment). CSS string or MUI palette path.
776
+ * @default \`text.secondary\` (theme)
777
+ */
778
+ comparisonPrefixColor?: string;
779
+ };
780
+ /** Where the optional info button sits in the detailed layout. */
781
+ type KpiStatCardInfoPlacement = 'title' | 'value';
782
+ /** Shape of the decorative icon backdrop (top-right). */
783
+ type KpiStatCardIconBackdropShape = 'rounded' | 'round';
784
+ /** Optional `sx` hooks for the title and primary metric lines (inline + detailed). */
785
+ interface KpiStatCardCustomization {
786
+ /** Merged onto the **title** `Typography` after built-in styles. */
787
+ labelTypographySx?: SxProps$1<Theme$1>;
788
+ /** Merged onto the **value** `Typography` after built-in styles. */
789
+ valueTypographySx?: SxProps$1<Theme$1>;
790
+ /**
791
+ * Merged onto the **trend comparison** line when **`trend.layout`** is **`row`** (caption next to % / arrow).
792
+ */
793
+ trendComparisonTypographySx?: SxProps$1<Theme$1>;
794
+ /**
795
+ * Merged onto **stacked** trend UI (`trend.layout: 'stacked'`): split prefix/highlight **Typography** nodes,
796
+ * a single **`comparisonText`** line, or the rich **`comparisonText`** `Box`.
797
+ */
798
+ stackedComparisonTypographySx?: SxProps$1<Theme$1>;
799
+ }
800
+ type KpiStatCardShared = {
801
+ /** Iconify icon id, e.g. `mdi:store` */
802
+ icon: string;
803
+ /** Icon color (CSS). */
804
+ iconColor?: string;
805
+ /** Icon size in px. */
806
+ iconSize?: number;
807
+ title: string;
808
+ value: string | number;
809
+ /**
810
+ * When \`value\` is a finite **number**, animate changes with an internal ease-out tween (no extra
811
+ * dependencies). Set \`false\` to show a static formatted number. Ignored for strings and non-finite numbers.
812
+ * @default true
813
+ */
814
+ animateValue?: boolean;
815
+ /**
816
+ * Duration for **`animateValue`** (ms).
817
+ * @default 1000
818
+ */
819
+ valueAnimationDurationMs?: number;
820
+ /**
821
+ * Passed to **`Number.prototype.toLocaleString`** as grouping (thousands separators).
822
+ * @default true
823
+ */
824
+ valueAnimationUseGrouping?: boolean;
825
+ /**
826
+ * BCP 47 locale for **`toLocaleString`** when animating; omit for the runtime default locale.
827
+ */
828
+ valueAnimationLocale?: string;
829
+ /**
830
+ * Large primary metric color (inline + detailed).
831
+ * @default '#000000'
832
+ */
833
+ metricColor?: string;
834
+ /**
835
+ * Minimum height of the root `Paper` (px).
836
+ * @default Inline **96**; detailed **118**.
837
+ */
838
+ cardMinHeightPx?: number;
839
+ /**
840
+ * Maximum height of the root `Paper` (px). When set, the card uses `overflow: auto` so content can scroll.
841
+ */
842
+ cardMaxHeightPx?: number;
843
+ /** Extra root `Paper` styles — merges last; use to override borders, shadows, width, etc. */
844
+ sx?: SxProps$1<Theme$1>;
845
+ /** Targeted typography `sx` without fragile parent selectors. */
846
+ customization?: KpiStatCardCustomization;
847
+ };
848
+ type KpiStatCardInlineProps = KpiStatCardShared & {
849
+ variant: 'inline';
850
+ };
851
+ type KpiStatCardDetailedProps = KpiStatCardShared & {
852
+ variant: 'detailed';
853
+ trend: KpiTrend;
854
+ /**
855
+ * Popover for **ChartWidgetInfoButton** (same shape as other chart widgets).
856
+ * Placement is controlled by **`infoPlacement`**.
857
+ */
858
+ infoPopover?: ChartWidgetInfoPopoverContent;
859
+ /**
860
+ * Where to show **ChartWidgetInfoButton** when **`infoPopover`** is set.
861
+ * @default 'value'
862
+ */
863
+ infoPlacement?: KpiStatCardInfoPlacement;
864
+ /** Background of the decorative icon container (top-right) */
865
+ iconBackdropColor?: string;
866
+ /**
867
+ * **rounded** — rounded rectangle (squircle). **round** — circle.
868
+ * @default 'rounded'
869
+ */
870
+ iconBackdropShape?: KpiStatCardIconBackdropShape;
871
+ /** Color for trend % + arrow (defaults by direction) */
872
+ trendColor?: string;
873
+ /** Optional slot above title (e.g. filter) */
874
+ slotHeader?: ReactNode;
875
+ /**
876
+ * Title line color (CSS or MUI palette path e.g. \`text.secondary\`).
877
+ * @default \`text.secondary\`
878
+ */
879
+ titleColor?: string;
880
+ /** Card width in px. @default 247 */
881
+ cardWidthPx?: number;
882
+ /** Root padding in px. @default 12 */
883
+ cardPaddingPx?: number;
884
+ /** Vertical gap between title / value / trend blocks (px). @default 8 */
885
+ blockGapPx?: number;
886
+ /** Decorative icon badge width and height (px). @default 48 */
887
+ iconBackdropSizePx?: number;
888
+ /** Row trend: font size for % and comparison text (px). @default 12 */
889
+ rowTrendFontSizePx?: number;
890
+ /** Row trend: direction arrow icon size (px). @default 16 */
891
+ rowTrendIconSizePx?: number;
892
+ /**
893
+ * Row trend: comparison string color (CSS or palette key).
894
+ * @default \`text.secondary\`
895
+ */
896
+ rowTrendComparisonColor?: string;
897
+ };
898
+ type KpiStatCardProps = KpiStatCardInlineProps | KpiStatCardDetailedProps;
899
+
900
+ declare const KpiStatCard: (props: KpiStatCardProps) => react_jsx_runtime.JSX.Element;
565
901
 
566
902
  interface FalconButtonProps extends ButtonProps {
567
903
  loading?: boolean;
@@ -664,6 +1000,62 @@ interface FalconTicketFilterProps {
664
1000
 
665
1001
  declare const FalconTicketFilter: ({ children, label, open: controlledOpen, onOpenChange, }: FalconTicketFilterProps) => react_jsx_runtime.JSX.Element;
666
1002
 
1003
+ /**
1004
+ * Ready-made **`ChartWidgetInfoPopoverContent`** for **TimePeriodFilter** (D / W / M / Y) when you want
1005
+ * generic help — **not** tied to **QueueTimeBreakdown** or any other specific card.
1006
+ *
1007
+ * **Use this when:** you show the period control next to charts or KPIs on any page and need a short
1008
+ * explanation of what the control does and why it matters, without duplicating copy in your app.
1009
+ *
1010
+ * **What it contains (for authors / Storybook):**
1011
+ * - **`title`:** “Time period” — names the control.
1012
+ * - **`description`:** Explains that switching day / week / month / year changes grouping or how the time axis is labelled.
1013
+ * - **`helpTitle`:** “How does it help?”
1014
+ * - **`helpBullets`:** (1) Align the view with your reporting window; (2) Keep period in sync with other controls on the page.
1015
+ *
1016
+ * Pass as **`infoPopover={TIME_PERIOD_FILTER_INFO_POPOVER}`** on **TimePeriodFilter**, or use your own
1017
+ * **`ChartWidgetInfoPopoverContent`** if you need product-specific wording.
1018
+ */
1019
+ declare const TIME_PERIOD_FILTER_INFO_POPOVER: ChartWidgetInfoPopoverContent;
1020
+ /**
1021
+ * Info copy aligned with the **QueueTimeBreakdown** composite card (header next to D/W/M/Y).
1022
+ * **QueueTimeBreakdown** uses this when **`infoPopover`** is omitted on the card.
1023
+ * Use **`TIME_PERIOD_FILTER_INFO_POPOVER`** instead when the filter is not on that card.
1024
+ */
1025
+ declare const TIME_PERIOD_FILTER_INFO_POPOVER_BREAKDOWN: ChartWidgetInfoPopoverContent;
1026
+ /** @deprecated Use {@link TIME_PERIOD_FILTER_INFO_POPOVER}. */
1027
+ declare const CHART_PERIOD_FILTER_INFO_POPOVER: ChartWidgetInfoPopoverContent;
1028
+ /** @deprecated Use {@link TIME_PERIOD_FILTER_INFO_POPOVER_BREAKDOWN}. */
1029
+ declare const QUEUE_TIME_BREAKDOWN_INFO_POPOVER: ChartWidgetInfoPopoverContent;
1030
+ /**
1031
+ * @deprecated Use {@link TIME_PERIOD_FILTER_INFO_POPOVER_BREAKDOWN}.
1032
+ */
1033
+ declare const DEFAULT_QUEUE_TIME_BREAKDOWN_INFO_POPOVER: ChartWidgetInfoPopoverContent;
1034
+
1035
+ interface HeatMapLegendItem {
1036
+ label: string;
1037
+ color: string;
1038
+ }
1039
+ interface HeatMapChartLegendProps {
1040
+ title: string;
1041
+ items: HeatMapLegendItem[];
1042
+ gradientId: string;
1043
+ gradientStops: {
1044
+ offset: string;
1045
+ color: string;
1046
+ }[];
1047
+ }
1048
+
1049
+ declare const HeatMapChartLegend: ({ title, items, gradientId, gradientStops, }: HeatMapChartLegendProps) => react_jsx_runtime.JSX.Element;
1050
+
1051
+ interface ProgressBarNumberProps {
1052
+ number: number;
1053
+ progress: 0 | 50 | 100;
1054
+ numColor: string;
1055
+ }
1056
+
1057
+ declare const ProgressBarNumber: ({ number, progress, numColor, }: ProgressBarNumberProps) => react_jsx_runtime.JSX.Element;
1058
+
667
1059
  /** Shared max-width rules for chart cards (WalkinAnalysis-style). */
668
1060
  type ChartCardMaxWidth = number | string | {
669
1061
  xs?: number | string;
@@ -727,6 +1119,11 @@ interface FootfallByAgeGroupsSeries {
727
1119
  type FootfallByAgeGroupsRow = {
728
1120
  name: string;
729
1121
  } & Record<string, string | number>;
1122
+ interface FootfallByAgeGroupsTooltipRenderContext {
1123
+ tooltipProps: TooltipContentProps;
1124
+ rows: FootfallByAgeGroupsRow[];
1125
+ series: FootfallByAgeGroupsSeries[];
1126
+ }
730
1127
  interface FootfallByAgeGroupsProps {
731
1128
  /** Card heading — **centered**; \`headerActions\` (if any) sit on the right without shifting it. */
732
1129
  title: string;
@@ -785,290 +1182,26 @@ interface FootfallByAgeGroupsProps {
785
1182
  tooltipOverallLabel?: string;
786
1183
  /** Merge over default tooltip inline styles. */
787
1184
  tooltipStyles?: FootfallByAgeGroupsTooltipStyles;
1185
+ /**
1186
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
1187
+ */
1188
+ renderTooltip?: (context: FootfallByAgeGroupsTooltipRenderContext) => ReactNode;
788
1189
  /** Color key legend above the plot (from \`series\`). Default: \`true\`. */
789
1190
  showLegend?: boolean;
790
1191
  /** Recharts \`BarChart\` margin; partial merge with defaults. */
791
1192
  chartMargin?: FootfallByAgeGroupsChartMargin;
792
1193
  /** Grid / axis / bar-top label colors. */
793
1194
  chartColors?: FootfallByAgeGroupsChartColors;
1195
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
794
1196
  /** Opacity for non-hovered stacks while another bar is hovered. Default: \`0.35\` */
795
1197
  dimmedStackOpacity?: number;
796
1198
  /** Recharts \`stackId\` for stacked \`Bar\`s. Default: \`footfall-by-age-groups\` */
797
- barStackId?: string;
798
- /** Copy when \`data\` is empty. Default: \`No data\` */
799
- emptyStateText?: string;
800
- }
801
-
802
- declare function FootfallByAgeGroups({ title, data, series, chartHeight, minWidthPerCategory, horizontalScroll: horizontalScrollProp, maxBarSize: maxBarSizeProp, cardMaxWidth, cardSx, titleRowSx, titleSx, dividerSx, legendRowSx, legendItemSx, legendSwatchSx, legendLabelSx, chartScrollAreaSx, stackSx, emptyStateSx, emptyStateTextSx, headerActions, tooltipCategoryLabel, tooltipOverallLabel, tooltipStyles, showLegend, chartMargin: chartMarginProp, chartColors: chartColorsProp, dimmedStackOpacity, barStackId, emptyStateText, }: FootfallByAgeGroupsProps): react_jsx_runtime.JSX.Element;
803
-
804
- interface HeatMapLegendItem {
805
- label: string;
806
- color: string;
807
- }
808
- interface HeatMapChartLegendProps {
809
- title: string;
810
- items: HeatMapLegendItem[];
811
- gradientId: string;
812
- gradientStops: {
813
- offset: string;
814
- color: string;
815
- }[];
816
- }
817
-
818
- declare const HeatMapChartLegend: ({ title, items, gradientId, gradientStops, }: HeatMapChartLegendProps) => react_jsx_runtime.JSX.Element;
819
-
820
- /** How the trend / baseline row is laid out under the main value. */
821
- type KpiTrendLayout = 'row' | 'stacked';
822
- type KpiTrend = {
823
- /**
824
- * **row** (default) — one line: optional %, direction arrow, comparison (caption style).
825
- * **stacked** — comparison on its **own line** below the value (e.g. schedule cards: value `4 - 5pm`,
826
- * line below `yesterday is 3 - 4pm` in **comparisonColor**). No %/arrow row.
827
- */
828
- layout?: KpiTrendLayout;
829
- /**
830
- * Change vs baseline, e.g. `"82%"`. Only used when **`layout`** is **`row`** (or omitted).
831
- */
832
- percentLabel?: string;
833
- /**
834
- * Baseline / comparison copy (required for **`row`**).
835
- * For **`stacked`**, omit when using **`comparisonPrefix`** + **`comparisonHighlight`** (split line).
836
- */
837
- comparisonText?: string | ReactNode;
838
- /**
839
- * **Stacked only:** static copy before the API window (muted). Pair with **`comparisonHighlight`**.
840
- * Example: `"yesterday is "` (include trailing space if needed).
841
- */
842
- comparisonPrefix?: string;
843
- /**
844
- * **Stacked only:** dynamic value from the API (accent color — default violet). Pair with **`comparisonPrefix`**.
845
- * Example: `"3 - 4pm"`.
846
- */
847
- comparisonHighlight?: string;
848
- /**
849
- * Arrow + tint for **`layout: 'row'`**. Ignored when **`layout: 'stacked'`** (pass a dummy if required by callers).
850
- */
851
- direction: 'up' | 'down';
852
- /**
853
- * **Stacked:** color for **`comparisonHighlight`** only (split mode), or entire line if you pass a single **`comparisonText`** (default line color is **muted** unless **`comparisonColor`** is set).
854
- * @default `#5E35B1` for the highlight segment in split mode.
855
- */
856
- comparisonColor?: string;
857
- /**
858
- * **Stacked split:** color for **`comparisonPrefix`** (muted segment). CSS string or MUI palette path.
859
- * @default \`text.secondary\` (theme)
860
- */
861
- comparisonPrefixColor?: string;
862
- };
863
- /** Where the optional info button sits in the detailed layout. */
864
- type KpiStatCardInfoPlacement = 'title' | 'value';
865
- /** Shape of the decorative icon backdrop (top-right). */
866
- type KpiStatCardIconBackdropShape = 'rounded' | 'round';
867
- type KpiStatCardShared = {
868
- /** Iconify icon id, e.g. `mdi:store` */
869
- icon: string;
870
- /** Icon color (CSS). */
871
- iconColor?: string;
872
- /** Icon size in px. */
873
- iconSize?: number;
874
- title: string;
875
- value: string | number;
876
- /**
877
- * When \`value\` is a finite **number**, animate changes with an internal ease-out tween (no extra
878
- * dependencies). Set \`false\` to show a static formatted number. Ignored for strings and non-finite numbers.
879
- * @default true
880
- */
881
- animateValue?: boolean;
882
- /**
883
- * Duration for **`animateValue`** (ms).
884
- * @default 1000
885
- */
886
- valueAnimationDurationMs?: number;
887
- /**
888
- * Passed to **`Number.prototype.toLocaleString`** as grouping (thousands separators).
889
- * @default true
890
- */
891
- valueAnimationUseGrouping?: boolean;
892
- /**
893
- * BCP 47 locale for **`toLocaleString`** when animating; omit for the runtime default locale.
894
- */
895
- valueAnimationLocale?: string;
896
- /**
897
- * Large primary metric color (inline + detailed).
898
- * @default '#000000'
899
- */
900
- metricColor?: string;
901
- /**
902
- * Minimum height of the root `Paper` (px).
903
- * @default Inline **96**; detailed **118**.
904
- */
905
- cardMinHeightPx?: number;
906
- /**
907
- * Maximum height of the root `Paper` (px). When set, the card uses `overflow: auto` so content can scroll.
908
- */
909
- cardMaxHeightPx?: number;
910
- /** Extra root `Paper` styles — merges last; use to override borders, shadows, width, etc. */
911
- sx?: SxProps$1<Theme$1>;
912
- };
913
- type KpiStatCardInlineProps = KpiStatCardShared & {
914
- variant: 'inline';
915
- };
916
- type KpiStatCardDetailedProps = KpiStatCardShared & {
917
- variant: 'detailed';
918
- trend: KpiTrend;
919
- /**
920
- * Popover for **ChartWidgetInfoButton** (same shape as other chart widgets).
921
- * Placement is controlled by **`infoPlacement`**.
922
- */
923
- infoPopover?: ChartWidgetInfoPopoverContent;
924
- /**
925
- * Where to show **ChartWidgetInfoButton** when **`infoPopover`** is set.
926
- * @default 'value'
927
- */
928
- infoPlacement?: KpiStatCardInfoPlacement;
929
- /** Background of the decorative icon container (top-right) */
930
- iconBackdropColor?: string;
931
- /**
932
- * **rounded** — rounded rectangle (squircle). **round** — circle.
933
- * @default 'rounded'
934
- */
935
- iconBackdropShape?: KpiStatCardIconBackdropShape;
936
- /** Color for trend % + arrow (defaults by direction) */
937
- trendColor?: string;
938
- /** Optional slot above title (e.g. filter) */
939
- slotHeader?: ReactNode;
940
- /**
941
- * Title line color (CSS or MUI palette path e.g. \`text.secondary\`).
942
- * @default \`text.secondary\`
943
- */
944
- titleColor?: string;
945
- /** Card width in px. @default 247 */
946
- cardWidthPx?: number;
947
- /** Root padding in px. @default 12 */
948
- cardPaddingPx?: number;
949
- /** Vertical gap between title / value / trend blocks (px). @default 8 */
950
- blockGapPx?: number;
951
- /** Decorative icon badge width and height (px). @default 48 */
952
- iconBackdropSizePx?: number;
953
- /** Row trend: font size for % and comparison text (px). @default 12 */
954
- rowTrendFontSizePx?: number;
955
- /** Row trend: direction arrow icon size (px). @default 16 */
956
- rowTrendIconSizePx?: number;
957
- /**
958
- * Row trend: comparison string color (CSS or palette key).
959
- * @default \`text.secondary\`
960
- */
961
- rowTrendComparisonColor?: string;
962
- };
963
- type KpiStatCardProps = KpiStatCardInlineProps | KpiStatCardDetailedProps;
964
-
965
- declare const KpiStatCard: (props: KpiStatCardProps) => react_jsx_runtime.JSX.Element;
966
-
967
- interface ProgressBarNumberProps {
968
- number: number;
969
- progress: 0 | 50 | 100;
970
- numColor: string;
971
- }
972
-
973
- declare const ProgressBarNumber: ({ number, progress, numColor, }: ProgressBarNumberProps) => react_jsx_runtime.JSX.Element;
974
-
975
- /** Pie diameter: fixed px, or per-breakpoint (`xs` / `sm` / `md` match MUI breakpoints). */
976
- type WalkinAnalysisPieSize = number | {
977
- xs?: number;
978
- sm?: number;
979
- md?: number;
980
- };
981
- /**
982
- * Card `max-width`: a number is pixels on all breakpoints; a string is any CSS length;
983
- * an object sets `maxWidth` per breakpoint (numbers become px). Omitted keys use `100%` (xs) and `640` (sm).
984
- */
985
- type WalkinAnalysisCardMaxWidth = number | string | {
986
- xs?: number | string;
987
- sm?: number | string;
988
- md?: number | string;
989
- };
990
- /** Same shape as `ChartWidgetSegmentedTab`; rendered with `ChartWidgetSegmentedTabs` inside WalkinAnalysis. */
991
- interface WalkinAnalysisTab {
992
- id: string;
993
- label: string;
994
- }
995
- /**
996
- * Optional `fontSize` overrides (number → px). Omitted keys keep the built-in defaults.
997
- */
998
- interface WalkinAnalysisTypography {
999
- title?: number | string;
1000
- tabs?: number | string;
1001
- piePercent?: number | string;
1002
- legendLabel?: number | string;
1003
- legendValue?: number | string;
1004
- tooltipTitle?: number | string;
1005
- tooltipValue?: number | string;
1006
- emptyState?: number | string;
1007
- }
1008
- interface WalkinAnalysisSlice {
1009
- id: string;
1010
- /** Legend title and accessible pie summary (e.g. “Individual Walk-ins”). */
1011
- label: string;
1012
- count: number;
1013
- /** Segment fill in the pie and legend swatch color. */
1014
- color: string;
1015
- /** Legend title text color (default `#424242`). */
1016
- legendLabelColor?: string;
1017
- /** Legend count / percentage line color (default `#333`). */
1018
- legendValueColor?: string;
1019
- /** Fill for the percentage label inside the pie slice (default `#fff`). */
1020
- segmentPercentColor?: string;
1021
- /**
1022
- * Optional control after the legend count line — e.g. **`<ChartWidgetInfoButton popover={…} />`**
1023
- * from `@bpfdev/oly-ui` so legend info matches the header info pattern.
1024
- */
1025
- legendInfo?: ReactNode;
1026
- }
1027
- interface WalkinAnalysisProps {
1028
- title: string;
1029
- tabs: WalkinAnalysisTab[];
1030
- activeTabId: string;
1031
- onTabChange: (tabId: string) => void;
1032
- /**
1033
- * Omit or `true`: scope tabs span the card width (default — forwarded as **ChartWidgetSegmentedTabs** `fullWidth`).
1034
- * `false`: pill track only as wide as the labels.
1035
- */
1036
- segmentedTabsFullWidth?: boolean;
1037
- /**
1038
- * Merged onto **ChartWidgetSegmentedTabs** `rootSx` after `fullWidth` width rules — use for `width`, `maxWidth`, alignment, etc.
1039
- */
1040
- segmentedTabsSx?: SxProps$1<Theme$1>;
1041
- /** Each item’s `label`, `count`, and `color` drive pie segments and legend; optional colors override legend / in-slice % text. */
1042
- slices: WalkinAnalysisSlice[];
1043
- /** Right side of the title row: compose `WidgetHeaderFilter`, `ChartWidgetHeaderSeparator`, `ChartWidgetInfoButton`, or custom nodes. */
1044
- headerActions?: ReactNode;
1045
- cardSx?: SxProps$1<Theme$1>;
1046
- /**
1047
- * Card maximum width. Defaults to full width on xs and 640px from sm up.
1048
- * Use `cardSx` for further layout overrides (it merges after this).
1049
- */
1050
- cardMaxWidth?: WalkinAnalysisCardMaxWidth;
1051
- /**
1052
- * Pie diameter (px). Use a number for the same size on all screens.
1053
- * Use an object to set sizes at `xs`, `sm`, and `md` (unset keys use 180, 220, 260).
1054
- * Omit for built-in responsive sizing across breakpoints.
1055
- */
1056
- pieSize?: WalkinAnalysisPieSize;
1057
- /** Per-region `fontSize` overrides (numbers are px). */
1058
- typography?: WalkinAnalysisTypography;
1059
- /**
1060
- * Recharts **`Pie`** animation. Defaults **true** / **400** ms.
1061
- * There is no horizontal plot scroll on this card (pie layout); only animation applies.
1062
- */
1063
- isChartAnimationActive?: boolean;
1064
- chartAnimationDuration?: number;
1199
+ barStackId?: string;
1200
+ /** Copy when \`data\` is empty. Default: \`No data\` */
1201
+ emptyStateText?: string;
1065
1202
  }
1066
1203
 
1067
- /**
1068
- * Walk-in style analysis card: title row (optional `headerActions`), tabs, Recharts pie, legend.
1069
- * Pie and legend are driven by `slices` (`label`, `count`, `color`, optional legend / segment % colors).
1070
- */
1071
- declare const WalkinAnalysis: ({ title, tabs, activeTabId, onTabChange, segmentedTabsFullWidth, segmentedTabsSx, slices, headerActions, cardSx, cardMaxWidth, pieSize, typography, isChartAnimationActive, chartAnimationDuration, }: WalkinAnalysisProps) => react_jsx_runtime.JSX.Element;
1204
+ declare function FootfallByAgeGroups({ title, data, series, chartHeight, minWidthPerCategory, horizontalScroll: horizontalScrollProp, maxBarSize: maxBarSizeProp, cardMaxWidth, cardSx, titleRowSx, titleSx, dividerSx, legendRowSx, legendItemSx, legendSwatchSx, legendLabelSx, chartScrollAreaSx, stackSx, emptyStateSx, headerActions, tooltipCategoryLabel, tooltipOverallLabel, tooltipStyles, renderTooltip, showLegend, chartMargin: chartMarginProp, chartColors: chartColorsProp, emptyStatePlaceholderProps, dimmedStackOpacity, barStackId, }: FootfallByAgeGroupsProps): react_jsx_runtime.JSX.Element;
1072
1205
 
1073
1206
  /** Optional inline styles merged over tooltip defaults (undefined keys keep defaults). */
1074
1207
  interface FootfallByGenderTooltipStyles {
@@ -1112,6 +1245,10 @@ interface FootfallByGenderRow {
1112
1245
  male: number;
1113
1246
  female: number;
1114
1247
  }
1248
+ interface FootfallByGenderTooltipRenderContext {
1249
+ tooltipProps: TooltipContentProps;
1250
+ rows: FootfallByGenderRow[];
1251
+ }
1115
1252
  interface FootfallByGenderProps {
1116
1253
  /** Card heading — **centered**; \`headerActions\` (if any) sit on the right without shifting it. */
1117
1254
  title: string;
@@ -1191,10 +1328,15 @@ interface FootfallByGenderProps {
1191
1328
  tooltipOverallLabel?: string;
1192
1329
  /** Merge over default tooltip inline styles. */
1193
1330
  tooltipStyles?: FootfallByGenderTooltipStyles;
1331
+ /**
1332
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
1333
+ */
1334
+ renderTooltip?: (context: FootfallByGenderTooltipRenderContext) => ReactNode;
1194
1335
  /** Recharts \`BarChart\` margin; partial merge after defaults (your values override). */
1195
1336
  chartMargin?: FootfallByGenderChartMargin;
1196
1337
  /** Grid / axis / bar-top label colors. */
1197
1338
  chartColors?: FootfallByGenderChartColors;
1339
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
1198
1340
  /**
1199
1341
  * Y-axis tick formatter. Default: compact \`k\` suffix for thousands.
1200
1342
  */
@@ -1206,7 +1348,7 @@ interface FootfallByGenderProps {
1206
1348
  /**
1207
1349
  * Grouped bar chart: two series (male / female) per category, with hover dimming and a custom tooltip.
1208
1350
  */
1209
- declare function FootfallByGender({ title, data, seriesLabels: seriesLabelsProp, seriesColors: seriesColorsProp, chartHeight, minWidthPerCategory, horizontalScroll: horizontalScrollProp, maxBarSize: maxBarSizeProp, barGap, showLegend, showBarValueLabels, dimmedBarOpacity, hoveredBarOpacity, cardMaxWidth, cardSx, titleRowSx, titleSx, dividerSx, legendOverlaySx, legendItemSx, legendSwatchSx, legendLabelSx, chartViewportSx, chartScrollAreaSx, stackSx, emptyStateSx, emptyStateTextSx, headerActions, tooltipCategoryLabel, tooltipOverallLabel, tooltipStyles, chartMargin: chartMarginProp, chartColors: chartColorsProp, yAxisTickFormatter, emptyStateText, }: FootfallByGenderProps): react_jsx_runtime.JSX.Element;
1351
+ declare function FootfallByGender({ title, data, seriesLabels: seriesLabelsProp, seriesColors: seriesColorsProp, chartHeight, minWidthPerCategory, horizontalScroll: horizontalScrollProp, maxBarSize: maxBarSizeProp, barGap, showLegend, showBarValueLabels, dimmedBarOpacity, hoveredBarOpacity, cardMaxWidth, cardSx, titleRowSx, titleSx, dividerSx, legendOverlaySx, legendItemSx, legendSwatchSx, legendLabelSx, chartViewportSx, chartScrollAreaSx, stackSx, emptyStateSx, headerActions, tooltipCategoryLabel, tooltipOverallLabel, tooltipStyles, renderTooltip, chartMargin: chartMarginProp, chartColors: chartColorsProp, emptyStatePlaceholderProps, yAxisTickFormatter, }: FootfallByGenderProps): react_jsx_runtime.JSX.Element;
1210
1352
 
1211
1353
  interface PasserbyConversionTooltipStyles {
1212
1354
  container?: CSSProperties;
@@ -1248,6 +1390,11 @@ interface PasserbyConversionRow {
1248
1390
  */
1249
1391
  conversion: number | null;
1250
1392
  }
1393
+ interface PasserbyConversionTooltipRenderContext {
1394
+ tooltipProps: TooltipContentProps;
1395
+ rows: PasserbyConversionRow[];
1396
+ showConversionLine: boolean;
1397
+ }
1251
1398
  interface PasserbyConversionProps {
1252
1399
  title: string;
1253
1400
  data: PasserbyConversionRow[];
@@ -1318,6 +1465,10 @@ interface PasserbyConversionProps {
1318
1465
  /** Tick formatter for the right (conversion) Y-axis. */
1319
1466
  conversionAxisTickFormatter?: (value: number) => string;
1320
1467
  tooltipStyles?: PasserbyConversionTooltipStyles;
1468
+ /**
1469
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
1470
+ */
1471
+ renderTooltip?: (context: PasserbyConversionTooltipRenderContext) => ReactNode;
1321
1472
  showLegend?: boolean;
1322
1473
  /**
1323
1474
  * When `true` and at least one row has a finite `conversion`, render the line and right axis.
@@ -1327,6 +1478,7 @@ interface PasserbyConversionProps {
1327
1478
  showBarValueLabels?: boolean;
1328
1479
  chartMargin?: PasserbyConversionChartMargin;
1329
1480
  chartColors?: PasserbyConversionChartColors;
1481
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
1330
1482
  emptyStateText?: string;
1331
1483
  /**
1332
1484
  * When `true`, Recharts animates bars and the conversion line on first draw and when values change.
@@ -1342,7 +1494,129 @@ interface PasserbyConversionProps {
1342
1494
  scrollChartToEndOnDataChange?: boolean;
1343
1495
  }
1344
1496
 
1345
- declare function PasserbyConversion({ title, data, timeSlots, fillMissingTimeSlots, chartHeight, passerbySeriesName, walkInsSeriesName, conversionSeriesName, lineType, minWidthPerCategory, horizontalScroll: horizontalScrollProp, maxBarSize: maxBarSizeProp, barGap, cardMaxWidth, cardSx, titleRowSx, titleSx, dividerSx, legendRowSx, legendItemSx, legendSwatchSx, legendLabelSx, chartScrollAreaSx, stackSx, emptyStateSx, emptyStateTextSx, headerActions, tooltipTimeLabel, tooltipOverallLabel, tooltipWalkInsLabel, tooltipPasserbyLabel, tooltipConversionLabel, formatTooltipConversion, conversionAxisLabel, yAxisTickFormatter, conversionAxisTickFormatter, tooltipStyles, showLegend, showConversionLine: showConversionLineProp, showBarValueLabels, chartMargin: chartMarginProp, chartColors: chartColorsProp, emptyStateText, isChartAnimationActive, chartAnimationDuration, scrollChartToEndOnDataChange, }: PasserbyConversionProps): react_jsx_runtime.JSX.Element;
1497
+ declare function PasserbyConversion({ title, data, timeSlots, fillMissingTimeSlots, chartHeight, passerbySeriesName, walkInsSeriesName, conversionSeriesName, lineType, minWidthPerCategory, horizontalScroll: horizontalScrollProp, maxBarSize: maxBarSizeProp, barGap, cardMaxWidth, cardSx, titleRowSx, titleSx, dividerSx, legendRowSx, legendItemSx, legendSwatchSx, legendLabelSx, chartScrollAreaSx, stackSx, emptyStateSx, headerActions, tooltipTimeLabel, tooltipOverallLabel, tooltipWalkInsLabel, tooltipPasserbyLabel, tooltipConversionLabel, formatTooltipConversion, conversionAxisLabel, yAxisTickFormatter, conversionAxisTickFormatter, tooltipStyles, renderTooltip, showLegend, showConversionLine: showConversionLineProp, showBarValueLabels, chartMargin: chartMarginProp, chartColors: chartColorsProp, emptyStatePlaceholderProps, isChartAnimationActive, chartAnimationDuration, scrollChartToEndOnDataChange, }: PasserbyConversionProps): react_jsx_runtime.JSX.Element;
1498
+
1499
+ /** Pie diameter: fixed px, or per-breakpoint (`xs` / `sm` / `md` match MUI breakpoints). */
1500
+ type WalkinAnalysisPieSize = number | {
1501
+ xs?: number;
1502
+ sm?: number;
1503
+ md?: number;
1504
+ };
1505
+ /**
1506
+ * Card `max-width`: a number is pixels on all breakpoints; a string is any CSS length;
1507
+ * an object sets `maxWidth` per breakpoint (numbers become px). Omitted keys use `100%` (xs) and `640` (sm).
1508
+ */
1509
+ type WalkinAnalysisCardMaxWidth = number | string | {
1510
+ xs?: number | string;
1511
+ sm?: number | string;
1512
+ md?: number | string;
1513
+ };
1514
+ /** Same shape as `ChartWidgetSegmentedTab`; rendered with `ChartWidgetSegmentedTabs` inside WalkinAnalysis. */
1515
+ interface WalkinAnalysisTab {
1516
+ id: string;
1517
+ label: string;
1518
+ }
1519
+ /** Optional `sx` for title row layout, title text, legend column layout, and legend typographies. */
1520
+ interface WalkinAnalysisCustomization {
1521
+ /** Merged onto the **title row** `Stack` (title + `headerActions`) after built-in styles. */
1522
+ titleRowStackSx?: SxProps$1<Theme$1>;
1523
+ /** Merged onto the card **title** `Typography` after built-in styles. */
1524
+ titleSx?: SxProps$1<Theme$1>;
1525
+ /** Merged onto the **legend column** `Stack` (list of slice rows) after built-in styles. */
1526
+ legendColumnStackSx?: SxProps$1<Theme$1>;
1527
+ /** Merged onto each legend **label** and **count** `Typography` after built-in styles. */
1528
+ legendTypographySx?: SxProps$1<Theme$1>;
1529
+ }
1530
+ /**
1531
+ * Optional `fontSize` overrides (number → px). Omitted keys keep the built-in defaults.
1532
+ */
1533
+ interface WalkinAnalysisTypography {
1534
+ title?: number | string;
1535
+ tabs?: number | string;
1536
+ piePercent?: number | string;
1537
+ legendLabel?: number | string;
1538
+ legendValue?: number | string;
1539
+ tooltipTitle?: number | string;
1540
+ tooltipValue?: number | string;
1541
+ emptyState?: number | string;
1542
+ }
1543
+ interface WalkinAnalysisSlice {
1544
+ id: string;
1545
+ /** Legend title and accessible pie summary (e.g. “Individual Walk-ins”). */
1546
+ label: string;
1547
+ count: number;
1548
+ /** Segment fill in the pie and legend swatch color. */
1549
+ color: string;
1550
+ /** Legend title text color (default **`#0f172a`**, lifestyle section title). */
1551
+ legendLabelColor?: string;
1552
+ /** Legend count / percentage line color (default **`#64748B`**). */
1553
+ legendValueColor?: string;
1554
+ /** Fill for the percentage label inside the pie slice (default `#fff`). */
1555
+ segmentPercentColor?: string;
1556
+ /**
1557
+ * Optional control after the legend count line — e.g. **`<ChartWidgetInfoButton popover={…} />`**
1558
+ * from `@bpfdev/oly-ui` so legend info matches the header info pattern.
1559
+ */
1560
+ legendInfo?: ReactNode;
1561
+ }
1562
+ interface WalkinAnalysisProps {
1563
+ title: string;
1564
+ tabs: WalkinAnalysisTab[];
1565
+ activeTabId: string;
1566
+ onTabChange: (tabId: string) => void;
1567
+ /**
1568
+ * Omit or `true`: scope tabs span the card width (default — forwarded as **ChartWidgetSegmentedTabs** `fullWidth`).
1569
+ * `false`: pill track only as wide as the labels.
1570
+ */
1571
+ segmentedTabsFullWidth?: boolean;
1572
+ /**
1573
+ * Merged onto **ChartWidgetSegmentedTabs** `rootSx` after `fullWidth` width rules — use for `width`, `maxWidth`, alignment, etc.
1574
+ */
1575
+ segmentedTabsSx?: SxProps$1<Theme$1>;
1576
+ /** Each item’s `label`, `count`, and `color` drive pie segments and legend; optional colors override legend / in-slice % text. */
1577
+ slices: WalkinAnalysisSlice[];
1578
+ /** Right side of the title row: compose `WidgetHeaderFilter`, `ChartWidgetHeaderSeparator`, `ChartWidgetInfoButton`, or custom nodes. */
1579
+ headerActions?: ReactNode;
1580
+ cardSx?: SxProps$1<Theme$1>;
1581
+ /**
1582
+ * Card maximum width. Defaults to full width on xs and 640px from sm up.
1583
+ * Use `cardSx` for further layout overrides (it merges after this).
1584
+ */
1585
+ cardMaxWidth?: WalkinAnalysisCardMaxWidth;
1586
+ /**
1587
+ * Pie diameter (px). Use a number for the same size on all screens.
1588
+ * Use an object to set sizes at `xs`, `sm`, and `md` (unset keys use 180, 220, 260).
1589
+ * Omit for built-in responsive sizing across breakpoints.
1590
+ */
1591
+ pieSize?: WalkinAnalysisPieSize;
1592
+ /** Per-region `fontSize` overrides (numbers are px). */
1593
+ typography?: WalkinAnalysisTypography;
1594
+ /** Targeted `sx` for title row, legend column, and typographies (avoid brittle `cardSx` descendant selectors). */
1595
+ customization?: WalkinAnalysisCustomization;
1596
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
1597
+ /**
1598
+ * Recharts **`Pie`** animation. Defaults **true** / **400** ms.
1599
+ * There is no horizontal plot scroll on this card (pie layout); only animation applies.
1600
+ */
1601
+ isChartAnimationActive?: boolean;
1602
+ chartAnimationDuration?: number;
1603
+ /**
1604
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
1605
+ */
1606
+ renderTooltip?: (context: WalkinAnalysisTooltipRenderContext) => ReactNode;
1607
+ }
1608
+ interface WalkinAnalysisTooltipRenderContext {
1609
+ tooltipProps: TooltipContentProps;
1610
+ slices: WalkinAnalysisSlice[];
1611
+ total: number;
1612
+ activeTabId: string;
1613
+ }
1614
+
1615
+ /**
1616
+ * Walk-in style analysis card: title row (optional `headerActions`), tabs, Recharts pie, legend.
1617
+ * Pie and legend are driven by `slices` (`label`, `count`, `color`, optional legend / segment % colors).
1618
+ */
1619
+ declare const WalkinAnalysis: ({ title, tabs, activeTabId, onTabChange, segmentedTabsFullWidth, segmentedTabsSx, slices, headerActions, cardSx, cardMaxWidth, pieSize, typography, customization, emptyStatePlaceholderProps, renderTooltip, isChartAnimationActive, chartAnimationDuration, }: WalkinAnalysisProps) => react_jsx_runtime.JSX.Element;
1346
1620
 
1347
1621
  interface WalkinTrafficTooltipStyles {
1348
1622
  /** Outer flex wrapper (arrow + card). */
@@ -1388,6 +1662,11 @@ interface WalkinTrafficRow {
1388
1662
  /** Footfall growth % vs last year for this slot; drives **FF Growth%** row and direction icon. */
1389
1663
  ffGrowthPercent?: number | null;
1390
1664
  }
1665
+ interface WalkinTrafficTooltipRenderContext {
1666
+ tooltipProps: TooltipContentProps;
1667
+ rows: WalkinTrafficRow[];
1668
+ showTrendLine: boolean;
1669
+ }
1391
1670
  interface WalkinTrafficProps {
1392
1671
  title: string;
1393
1672
  data: WalkinTrafficRow[];
@@ -1434,6 +1713,10 @@ interface WalkinTrafficProps {
1434
1713
  /** @deprecated Use **`tooltipTimeLabel`** instead. */
1435
1714
  tooltipHourLabel?: string;
1436
1715
  tooltipStyles?: WalkinTrafficTooltipStyles;
1716
+ /**
1717
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
1718
+ */
1719
+ renderTooltip?: (context: WalkinTrafficTooltipRenderContext) => ReactNode;
1437
1720
  showLegend?: boolean;
1438
1721
  /**
1439
1722
  * When `true` and at least one row has a finite `trend`, render the line.
@@ -1445,6 +1728,7 @@ interface WalkinTrafficProps {
1445
1728
  showBarValueLabels?: boolean;
1446
1729
  chartMargin?: WalkinTrafficChartMargin;
1447
1730
  chartColors?: WalkinTrafficChartColors;
1731
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
1448
1732
  yAxisTickFormatter?: (value: number) => string;
1449
1733
  emptyStateText?: string;
1450
1734
  /**
@@ -1460,7 +1744,190 @@ interface WalkinTrafficProps {
1460
1744
  scrollChartToEndOnDataChange?: boolean;
1461
1745
  }
1462
1746
 
1463
- declare function WalkinTraffic({ title, data, chartHeight, barSeriesName, lineSeriesName, lineType, minWidthPerCategory, horizontalScroll: horizontalScrollProp, maxBarSize: maxBarSizeProp, cardMaxWidth, cardSx, titleRowSx, titleSx, dividerSx, legendRowSx, legendItemSx, legendSwatchSx, legendLabelSx, chartScrollAreaSx, stackSx, emptyStateSx, emptyStateTextSx, headerActions, tooltipTitle, tooltipTimeLabel, tooltipCurrentYearLabel, tooltipLastYearLabel, tooltipGrowthLabel, tooltipFooterNote: tooltipFooterNoteProp, tooltipHourLabel, tooltipStyles, showLegend, showTrendLine: showTrendLineProp, showLineInLegend, showBarValueLabels, chartMargin: chartMarginProp, chartColors: chartColorsProp, yAxisTickFormatter, emptyStateText, isChartAnimationActive, chartAnimationDuration, scrollChartToEndOnDataChange, }: WalkinTrafficProps): react_jsx_runtime.JSX.Element;
1747
+ declare function WalkinTraffic({ title, data, chartHeight, barSeriesName, lineSeriesName, lineType, minWidthPerCategory, horizontalScroll: horizontalScrollProp, maxBarSize: maxBarSizeProp, cardMaxWidth, cardSx, titleRowSx, titleSx, dividerSx, legendRowSx, legendItemSx, legendSwatchSx, legendLabelSx, chartScrollAreaSx, stackSx, emptyStateSx, headerActions, tooltipTitle, tooltipTimeLabel, tooltipCurrentYearLabel, tooltipLastYearLabel, tooltipGrowthLabel, tooltipFooterNote: tooltipFooterNoteProp, tooltipHourLabel, tooltipStyles, renderTooltip, showLegend, showTrendLine: showTrendLineProp, showLineInLegend, showBarValueLabels, chartMargin: chartMarginProp, chartColors: chartColorsProp, emptyStatePlaceholderProps, yAxisTickFormatter, isChartAnimationActive, chartAnimationDuration, scrollChartToEndOnDataChange, }: WalkinTrafficProps): react_jsx_runtime.JSX.Element;
1748
+
1749
+ /** Primary line + tooltip fill (violet). */
1750
+ declare const BILLING_COUNTER_LINE_PRIMARY: "#7C3AED";
1751
+ /** Default pill track behind segmented tabs. */
1752
+ declare const BILLING_COUNTER_TABS_TRACK_BG: "#E8E8E8";
1753
+
1754
+ type BillingCounterChartMargin = {
1755
+ top?: number;
1756
+ right?: number;
1757
+ bottom?: number;
1758
+ left?: number;
1759
+ };
1760
+ /**
1761
+ * Simple panel tooltip: thin **grey bar** on top, then white body. Each line uses **muted prefix**
1762
+ * (**Date:** / **Total:**) + **bold dark value** (same pattern as the earlier two-row design).
1763
+ */
1764
+ type BillingCounterAnalyticsTooltipTheme = {
1765
+ borderColor?: string;
1766
+ borderRadiusPx?: number;
1767
+ boxShadow?: string;
1768
+ /** Grey strip at the top (no text). @default **#E5E7EB** */
1769
+ topBarBackground?: string;
1770
+ /** Height of the grey strip in px. @default **8** */
1771
+ topBarHeightPx?: number;
1772
+ bodyBackground?: string;
1773
+ /** **Date:** / **Total:** label colour. @default **#6B7280** */
1774
+ prefixColor?: string;
1775
+ /** Date string and numeric value colour. @default **#111827** */
1776
+ valueColor?: string;
1777
+ /**
1778
+ * When set without **prefixColor** / **valueColor**, both prefix and value use this single colour
1779
+ * (legacy / compact override).
1780
+ */
1781
+ textColor?: string;
1782
+ fontSizePx?: number;
1783
+ /** Space between the two text lines in px. @default **6** */
1784
+ lineGapPx?: number;
1785
+ dateLabelPrefix?: string;
1786
+ totalLabelPrefix?: string;
1787
+ /** **Date:** / **Total:** — default **400** */
1788
+ prefixFontWeight?: number;
1789
+ /** Time label and numeric value — default **700** */
1790
+ valueFontWeight?: number;
1791
+ bodyStyle?: CSSProperties;
1792
+ };
1793
+ /**
1794
+ * Optional layout / theme overrides for **BillingCounterAnalytics** and its children.
1795
+ * Pass via **`customization`** on the component or **BillingCounterAnalyticsCustomizationProvider**.
1796
+ */
1797
+ type BillingCounterAnalyticsCustomization = {
1798
+ rootCard?: {
1799
+ sx?: SxProps$1<Theme$1>;
1800
+ elevation?: number;
1801
+ };
1802
+ header?: {
1803
+ titleSx?: SxProps$1<Theme$1>;
1804
+ };
1805
+ /** Merged into **ChartWidgetSegmentedTabs** alongside billing defaults. */
1806
+ segmentedTabs?: {
1807
+ trackBackgroundColor?: string;
1808
+ activeTabBackground?: string;
1809
+ activeTabColor?: string;
1810
+ inactiveTabColor?: string;
1811
+ activeTabBoxShadow?: string;
1812
+ rootSx?: SxProps$1<Theme$1>;
1813
+ tabFontSize?: number | string;
1814
+ fullWidth?: boolean;
1815
+ /** Segmented tab flex layout; billing defaults to **equalWidth** (tabs fill the track). */
1816
+ tabLayout?: ChartWidgetSegmentedTabLayout;
1817
+ activeTabFontWeight?: number;
1818
+ inactiveTabFontWeight?: number;
1819
+ };
1820
+ lineChart?: {
1821
+ heightPx?: number;
1822
+ lineColor?: string;
1823
+ lineStrokeWidth?: number;
1824
+ gridStroke?: string;
1825
+ gridStrokeDasharray?: string;
1826
+ margin?: BillingCounterChartMargin;
1827
+ xAxisTickFill?: string;
1828
+ yAxisTickFill?: string;
1829
+ yAxisWidth?: number;
1830
+ tooltip?: BillingCounterAnalyticsTooltipTheme;
1831
+ cursorStroke?: string;
1832
+ cursorStrokeDasharray?: string;
1833
+ /**
1834
+ * Line path: **`linear`** = straight segments (sharp corners). **`monotone`** = smooth curve.
1835
+ * @default **`linear`**
1836
+ */
1837
+ lineType?: 'linear' | 'monotone' | 'step' | 'stepBefore' | 'stepAfter' | 'natural';
1838
+ };
1839
+ };
1840
+
1841
+ declare const DEFAULT_BILLING_COUNTER_ANALYTICS_INFO_POPOVER: ChartWidgetInfoPopoverContent;
1842
+
1843
+ type BillingCounterAnalyticsPoint = {
1844
+ /** X-axis tick (e.g. Jan 12, Today). */
1845
+ label: string;
1846
+ value: number;
1847
+ };
1848
+ type BillingCounterAnalyticsTooltipRenderContext = {
1849
+ tooltipProps: TooltipContentProps;
1850
+ data: BillingCounterAnalyticsPoint[];
1851
+ activeTabId: string;
1852
+ };
1853
+ type BillingCounterAnalyticsProps = {
1854
+ /** Card title (left side of the header row). */
1855
+ title?: string;
1856
+ tabs: ChartWidgetSegmentedTab[];
1857
+ activeTabId: string;
1858
+ onTabChange: (tabId: string) => void;
1859
+ /**
1860
+ * Series for the active tab only. Ignored when **`seriesByTabId`** is set.
1861
+ */
1862
+ data?: BillingCounterAnalyticsPoint[];
1863
+ /**
1864
+ * All tab series keyed by **`tabs[].id`**. When set, overrides **`data`**.
1865
+ */
1866
+ seriesByTabId?: Record<string, BillingCounterAnalyticsPoint[]>;
1867
+ /** Y-axis domain. @default `[0, 100]` */
1868
+ yAxisDomain?: [number, number];
1869
+ /** Y-axis tick values. @default `[20, 40, 60, 80, 100]` */
1870
+ yAxisTicks?: number[];
1871
+ /**
1872
+ * Header info popover. Defaults to built-in copy; **`null`** hides separator + info button.
1873
+ */
1874
+ infoPopover?: ChartWidgetInfoPopoverContent | null;
1875
+ /**
1876
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
1877
+ */
1878
+ renderTooltip?: (context: BillingCounterAnalyticsTooltipRenderContext) => ReactNode;
1879
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
1880
+ customization?: BillingCounterAnalyticsCustomization;
1881
+ };
1882
+
1883
+ declare const billingCounterDefaultTabs: ChartWidgetSegmentedTab[];
1884
+ /** Demo datasets aligned with **billingCounterDefaultTabs** ids. */
1885
+ declare const billingCounterMockSeriesByTabId: Record<string, BillingCounterAnalyticsPoint[]>;
1886
+
1887
+ /**
1888
+ * Billing counter analytics card: title row (optional info), pill tabs, Recharts line chart with violet styling.
1889
+ */
1890
+ declare function BillingCounterAnalytics({ title, tabs, activeTabId, onTabChange, data, seriesByTabId, yAxisDomain, yAxisTicks, infoPopover, renderTooltip, emptyStatePlaceholderProps, customization, }: BillingCounterAnalyticsProps): React$1.ReactElement;
1891
+
1892
+ type BillingCounterAnalyticsCustomizationProviderProps = {
1893
+ value: BillingCounterAnalyticsCustomization;
1894
+ children: React$1.ReactNode;
1895
+ };
1896
+ declare function BillingCounterAnalyticsCustomizationProvider({ value, children, }: BillingCounterAnalyticsCustomizationProviderProps): React$1.ReactElement;
1897
+ declare function useBillingCounterAnalyticsCustomization(): BillingCounterAnalyticsCustomization;
1898
+
1899
+ /**
1900
+ * Shared queue-time visualization palette (stacked bar, donut, area).
1901
+ * Four violet shades, light → dark (segment index order) — pill bar / donut / area.
1902
+ */
1903
+ declare const QUEUE_CHART_COLORS: readonly ["#E9E5FF", "#C4B5FD", "#8B5CF6", "#6D28D9"];
1904
+ /** Thin horizontal stacked bar height (px); pill radius uses half of this. */
1905
+ declare const QUEUE_STACKED_BAR_THICKNESS_PX = 8;
1906
+
1907
+ type QueueTimeBreakdownCustomizationProviderProps = {
1908
+ value: QueueTimeBreakdownCustomization;
1909
+ children: React$1.ReactNode;
1910
+ };
1911
+ declare function QueueTimeBreakdownCustomizationProvider({ value, children, }: QueueTimeBreakdownCustomizationProviderProps): React$1.ReactElement;
1912
+ declare function useQueueTimeBreakdownCustomization(): QueueTimeBreakdownCustomization;
1913
+
1914
+ declare function mergeCss(a: CSSProperties, b?: CSSProperties): CSSProperties;
1915
+ declare function mergeSx(...parts: Array<SxProps$1<Theme$1> | undefined>): SxProps$1<Theme$1> | undefined;
1916
+ declare function mergeRechartsTooltipStyles(overrides?: QueueTimeRechartsTooltipTheme): {
1917
+ contentStyle: CSSProperties;
1918
+ itemStyle: CSSProperties;
1919
+ labelStyle: CSSProperties;
1920
+ wrapperStyle: CSSProperties;
1921
+ };
1922
+ declare function mergeAreaTooltipStyles(overrides?: QueueTimeAreaTooltipTheme): Required<QueueTimeAreaTooltipTheme>;
1923
+
1924
+ /** Demo data for Storybook / prototyping. */
1925
+ declare function generateMockPerformanceData(): QueueTimeBreakdownBarRow[];
1926
+
1927
+ /**
1928
+ * Queue time breakdown dashboard widget: stacked bars, queue buckets, donut comparison, area chart (Recharts).
1929
+ */
1930
+ declare function QueueTimeBreakdown({ data, Donut_data, donutYesterdayData, headerImageSrc, headlineTotal, headlineSubtitle, dataComparisonTitle, queueBucketLegend, title, infoPopover, headlineInfoPopover, renderAreaTooltip, renderDonutTooltip, renderStackedBarTooltip, customization, }: QueueTimeBreakdownProps): React$1.ReactElement;
1464
1931
 
1465
1932
  /**
1466
1933
  * Treemap data helpers for FootFallHeatMap.
@@ -1569,10 +2036,38 @@ declare function metricForNode(node: unknown, sortBy: 'walkins' | 'dwell'): numb
1569
2036
  /** Read optional `zone_kpi_strip` / `zoneKpiStrip` from a hierarchy or flat API node. */
1570
2037
  declare function parseZoneKpiStripFromRaw(node: Record<string, unknown>): ZoneKpiStripPayload | undefined;
1571
2038
  declare function hashColor(seed: string): string;
1572
- declare function buildTreemapNodes({ container, sortBy, pathKey, }: {
2039
+ /**
2040
+ * Optional treemap tile fill: **vivid** HSL tuning from **`hashColor(seed)`**, or a full **`tileColorFromSeed`** override.
2041
+ * Pass **`treemap.tileColors`** on **`FootFallHeatMapView`**, or use **`createTreemapTileColorResolver`** inside **`tree.buildNodes`**.
2042
+ */
2043
+ type FootFallHeatMapTreemapColorCustomization = {
2044
+ /** Replace the built-in vivid / hash pipeline entirely. */
2045
+ tileColorFromSeed?: (seed: string) => string;
2046
+ /** Multiply base saturation after conversion to HSL. @default **1.48** */
2047
+ saturationBoost?: number;
2048
+ /** Added after boost; result is clamped to **1**. @default **0.1** */
2049
+ saturationFloor?: number;
2050
+ /** Clamp lightness lower bound (**0–1**). @default **0.38** */
2051
+ lightnessClampMin?: number;
2052
+ /** Clamp lightness upper bound (**0–1**). @default **0.55** */
2053
+ lightnessClampMax?: number;
2054
+ /** Scale base lightness from hash before clamp. @default **0.96** */
2055
+ lightnessScale?: number;
2056
+ /** Offset after scale. @default **0.02** */
2057
+ lightnessOffset?: number;
2058
+ };
2059
+ /**
2060
+ * - **`undefined` / `null`** → **`hashColor`** only.
2061
+ * - **`{ tileColorFromSeed }`** → use that resolver.
2062
+ * - **Any other object** (including **`{}`**) → vivid HSL pipeline with defaults merged from **`customization`**.
2063
+ */
2064
+ declare function createTreemapTileColorResolver(customization?: FootFallHeatMapTreemapColorCustomization | null): (seed: string) => string;
2065
+ declare function buildTreemapNodes({ container, sortBy, pathKey, tileColorFromSeed, }: {
1573
2066
  container: Record<string, unknown>;
1574
2067
  sortBy: 'walkins' | 'dwell';
1575
2068
  pathKey: string;
2069
+ /** When set, used for `color`; otherwise **`hashColor(\`${pathKey}/${name}\`)`**. */
2070
+ tileColorFromSeed?: (seed: string) => string;
1576
2071
  }): TreemapNode[];
1577
2072
  declare function getNestedList(payload: TreemapNode & {
1578
2073
  children?: TreemapNode[];
@@ -1607,6 +2102,20 @@ type FootFallHeatMapIcons = {
1607
2102
  /** Iconify id for the title-row info button. */
1608
2103
  headerInfo?: string;
1609
2104
  };
2105
+ /**
2106
+ * Optional `sx` for visitor/dwell **metric chips** inside each treemap `foreignObject` tile
2107
+ * (replaces brittle `& foreignObject > .MuiStack-root …` overrides on a parent wrapper).
2108
+ */
2109
+ type FootFallHeatMapTileMetricsCustomization = {
2110
+ /** Merged onto the **row** `Stack` that wraps both metric pills (below title / %). */
2111
+ metricsRowStackSx?: SxProps$1<Theme$1>;
2112
+ /** Merged onto each **pill** `Stack` (visitors + dwell) after built-in chip styles. */
2113
+ metricPillStackSx?: SxProps$1<Theme$1>;
2114
+ /** Merged onto the **numeric Typography** inside each pill after built-in styles. */
2115
+ metricPillValueTypographySx?: SxProps$1<Theme$1>;
2116
+ /** Merged onto the **icon circle `Box`** inside each pill after built-in styles. */
2117
+ metricPillIconBoxSx?: SxProps$1<Theme$1>;
2118
+ };
1610
2119
  type FootFallHeatMapTreemapLayout = {
1611
2120
  /** Pixel height when a breadcrumb strip is visible above the chart. */
1612
2121
  heightWithBreadcrumb?: number;
@@ -1622,6 +2131,13 @@ type FootFallHeatMapTreemapLayout = {
1622
2131
  fill?: string;
1623
2132
  /** MUI `sx` merged onto the blank terminal-details body below the KPI strip. */
1624
2133
  leafDetailsBodySx?: SxProps$1<Theme$1>;
2134
+ /** Per-tile visitor/dwell metric chip styling (merged on real `Stack` / `Typography` / `Box` nodes). */
2135
+ tileMetrics?: FootFallHeatMapTileMetricsCustomization;
2136
+ /**
2137
+ * Treemap tile **fill** tuning: vivid HSL pipeline from **`hashColor(seed)`**, or a full **`tileColorFromSeed`** override.
2138
+ * Wired into default **`buildTreemapNodes`** and passed as **`options.tileColorFromSeed`** to **`tree.buildNodes`**.
2139
+ */
2140
+ tileColors?: FootFallHeatMapTreemapColorCustomization;
1625
2141
  };
1626
2142
  type FootFallHeatMapTreeOptions = {
1627
2143
  /** Starting hierarchy level shown in treemap for hierarchical payloads. */
@@ -1657,6 +2173,8 @@ type FootFallHeatMapTreeOptions = {
1657
2173
  */
1658
2174
  buildNodes?: (initialData: ZoneAnalyticsHierarchy | ZoneAnalyticsFlatItem[] | null, options: {
1659
2175
  sortBy: 'walkins' | 'dwell';
2176
+ /** From **`treemap.tileColors`** — use for tile `color` fields (same resolver as built-in tree). */
2177
+ tileColorFromSeed?: (seed: string) => string;
1660
2178
  }) => TreemapNode[];
1661
2179
  };
1662
2180
  /** KPI numbers used for the summary row and passed to `summaryCards`. */
@@ -1676,6 +2194,17 @@ type FootFallHeatMapKpiSummaryCardItem = {
1676
2194
  /** Per-card icon color; falls back to `statCardIconColor`. */
1677
2195
  iconColor?: string;
1678
2196
  };
2197
+ type FootFallHeatMapKpiStripSegmentTooltipRenderContext = {
2198
+ segment: {
2199
+ id: string;
2200
+ label: string;
2201
+ value: number;
2202
+ color?: string;
2203
+ };
2204
+ segmentIndex: number;
2205
+ itemLabel: string;
2206
+ itemValue: number;
2207
+ };
1679
2208
  /**
1680
2209
  * Optional styling for the zone KPI block: summary stat cards, outer panel, segmented bar, and tooltips.
1681
2210
  * Segment colors cycle by index when the palette is shorter than the number of segments.
@@ -1701,6 +2230,11 @@ type FootFallHeatMapKpiStripPresentation = {
1701
2230
  segmentValueSx?: SxProps$1<Theme$1>;
1702
2231
  /** Merged onto the segment tooltip card (popover). */
1703
2232
  segmentTooltipCardSx?: SxProps$1<Theme$1>;
2233
+ /**
2234
+ * Full custom renderer for segmented bar tooltips.
2235
+ * When provided, default tooltip card layout is skipped.
2236
+ */
2237
+ renderSegmentTooltip?: (context: FootFallHeatMapKpiStripSegmentTooltipRenderContext) => ReactNode;
1704
2238
  /**
1705
2239
  * Build any number of summary KPI cards from live zone metrics. When the returned array is **non-empty**,
1706
2240
  * it replaces the default “No. of Stores” / “Overall Visitors” pair. Return `[]` to hide all summary cards.
@@ -1729,222 +2263,19 @@ type FootFallHeatMapViewProps = {
1729
2263
  * panel; `statCardSx` / `statCardIconColor`; segment row + tooltip styling.
1730
2264
  */
1731
2265
  kpiStrip?: FootFallHeatMapKpiStripPresentation;
2266
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
1732
2267
  };
1733
2268
 
1734
2269
  /**
1735
2270
  * In-store zone treemap with drill-down and leaf KPIs. Pass `initialData` from your API or mocks.
1736
2271
  */
1737
- declare function FootFallHeatMapView({ initialData, isLoading, isFetching, error, title, infoTooltip, brandLabel, icons: iconsProp, iconSize: iconSizeProp, iconColor: iconColorProp, headerInfoIconSize, treemap: treemapProp, tree: treeProp, kpiStrip: kpiStripPresentation, }: FootFallHeatMapViewProps): react_jsx_runtime.JSX.Element;
2272
+ declare function FootFallHeatMapView({ initialData, isLoading, isFetching, error, title, infoTooltip, brandLabel, icons: iconsProp, iconSize: iconSizeProp, iconColor: iconColorProp, headerInfoIconSize, treemap: treemapProp, tree: treeProp, kpiStrip: kpiStripPresentation, emptyStatePlaceholderProps, }: FootFallHeatMapViewProps): react_jsx_runtime.JSX.Element;
1738
2273
 
1739
2274
  /** Zone KPI grid using MUI layout. */
1740
2275
  declare const ZoneWiseKpiCards: ({ metrics }: {
1741
2276
  metrics: ZoneAnalyticsMetrics;
1742
2277
  }) => react_jsx_runtime.JSX.Element;
1743
2278
 
1744
- /**
1745
- * Shared queue-time visualization palette (stacked bar, donut, area).
1746
- * Four violet shades, light → dark (segment index order) — pill bar / donut / area.
1747
- */
1748
- declare const QUEUE_CHART_COLORS: readonly ["#E9E5FF", "#C4B5FD", "#8B5CF6", "#6D28D9"];
1749
- /** Thin horizontal stacked bar height (px); pill radius uses half of this. */
1750
- declare const QUEUE_STACKED_BAR_THICKNESS_PX = 8;
1751
-
1752
- type QueueTimeBreakdownCustomizationProviderProps = {
1753
- value: QueueTimeBreakdownCustomization;
1754
- children: React$1.ReactNode;
1755
- };
1756
- declare function QueueTimeBreakdownCustomizationProvider({ value, children, }: QueueTimeBreakdownCustomizationProviderProps): React$1.ReactElement;
1757
- declare function useQueueTimeBreakdownCustomization(): QueueTimeBreakdownCustomization;
1758
-
1759
- declare function mergeCss(a: CSSProperties, b?: CSSProperties): CSSProperties;
1760
- declare function mergeSx(...parts: Array<SxProps$1<Theme$1> | undefined>): SxProps$1<Theme$1> | undefined;
1761
- declare function mergeRechartsTooltipStyles(overrides?: QueueTimeRechartsTooltipTheme): {
1762
- contentStyle: CSSProperties;
1763
- itemStyle: CSSProperties;
1764
- labelStyle: CSSProperties;
1765
- wrapperStyle: CSSProperties;
1766
- };
1767
- declare function mergeAreaTooltipStyles(overrides?: QueueTimeAreaTooltipTheme): Required<QueueTimeAreaTooltipTheme>;
1768
-
1769
- /** Demo data for Storybook / prototyping. */
1770
- declare function generateMockPerformanceData(): QueueTimeBreakdownBarRow[];
1771
-
1772
- /**
1773
- * Queue time breakdown dashboard widget: stacked bars, queue buckets, donut comparison, area chart (Recharts).
1774
- */
1775
- declare function QueueTimeBreakdown({ data, Donut_data, donutYesterdayData, headerImageSrc, headlineTotal, headlineSubtitle, dataComparisonTitle, queueBucketLegend, title, infoPopover, customization, }: QueueTimeBreakdownProps): React$1.ReactElement;
1776
-
1777
- type QueueTimeBreakdownDonutProps = {
1778
- chartFilter: QueueTimeChartFilter;
1779
- averageData: number[];
1780
- LabelName: string;
1781
- labels?: readonly string[];
1782
- };
1783
- declare function QueueTimeBreakdownDonut({ chartFilter, averageData, LabelName, labels, }: QueueTimeBreakdownDonutProps): React$1.ReactElement;
1784
-
1785
- type QueueTimeBreakdownStackedBarProps = {
1786
- row: QueueTimeBreakdownBarRow;
1787
- /** One entry per segment: percent line + range line (aligned under each slice). */
1788
- legendRows: readonly QueueBucketLegendItem[];
1789
- };
1790
- /**
1791
- * Horizontal 100% stacked bar (Recharts) — slim pill, framed by two rules; labels use the same flex widths as data.
1792
- */
1793
- declare function QueueTimeBreakdownStackedBar({ row, legendRows, }: QueueTimeBreakdownStackedBarProps): React$1.ReactElement;
1794
-
1795
- type QueueTimeAreaSeriesPoint = {
1796
- name: string;
1797
- data: number[];
1798
- };
1799
- type QueueTimeBreakdownAreaProps = {
1800
- series: QueueTimeAreaSeriesPoint[];
1801
- xAxis: string[];
1802
- };
1803
- declare const QueueTimeBreakdownArea: ({ series, xAxis, }: QueueTimeBreakdownAreaProps) => React$1.ReactElement;
1804
-
1805
- declare function getQueueTimeBreakdownAreaXAxisData(type: QueueTimeChartFilter): string[];
1806
- declare function getQueueTimeBreakdownAreaSeriesData(type: QueueTimeChartFilter): QueueTimeAreaSeriesPoint[];
1807
-
1808
- /** Primary line + tooltip fill (violet). */
1809
- declare const BILLING_COUNTER_LINE_PRIMARY: "#7C3AED";
1810
- /** Default pill track behind segmented tabs. */
1811
- declare const BILLING_COUNTER_TABS_TRACK_BG: "#E8E8E8";
1812
-
1813
- type BillingCounterChartMargin = {
1814
- top?: number;
1815
- right?: number;
1816
- bottom?: number;
1817
- left?: number;
1818
- };
1819
- /**
1820
- * Simple panel tooltip: thin **grey bar** on top, then white body. Each line uses **muted prefix**
1821
- * (**Date:** / **Total:**) + **bold dark value** (same pattern as the earlier two-row design).
1822
- */
1823
- type BillingCounterAnalyticsTooltipTheme = {
1824
- borderColor?: string;
1825
- borderRadiusPx?: number;
1826
- boxShadow?: string;
1827
- /** Grey strip at the top (no text). @default **#E5E7EB** */
1828
- topBarBackground?: string;
1829
- /** Height of the grey strip in px. @default **8** */
1830
- topBarHeightPx?: number;
1831
- bodyBackground?: string;
1832
- /** **Date:** / **Total:** label colour. @default **#6B7280** */
1833
- prefixColor?: string;
1834
- /** Date string and numeric value colour. @default **#111827** */
1835
- valueColor?: string;
1836
- /**
1837
- * When set without **prefixColor** / **valueColor**, both prefix and value use this single colour
1838
- * (legacy / compact override).
1839
- */
1840
- textColor?: string;
1841
- fontSizePx?: number;
1842
- /** Space between the two text lines in px. @default **6** */
1843
- lineGapPx?: number;
1844
- dateLabelPrefix?: string;
1845
- totalLabelPrefix?: string;
1846
- /** **Date:** / **Total:** — default **400** */
1847
- prefixFontWeight?: number;
1848
- /** Time label and numeric value — default **700** */
1849
- valueFontWeight?: number;
1850
- bodyStyle?: CSSProperties;
1851
- };
1852
- /**
1853
- * Optional layout / theme overrides for **BillingCounterAnalytics** and its children.
1854
- * Pass via **`customization`** on the component or **BillingCounterAnalyticsCustomizationProvider**.
1855
- */
1856
- type BillingCounterAnalyticsCustomization = {
1857
- rootCard?: {
1858
- sx?: SxProps$1<Theme$1>;
1859
- elevation?: number;
1860
- };
1861
- header?: {
1862
- titleSx?: SxProps$1<Theme$1>;
1863
- };
1864
- /** Merged into **ChartWidgetSegmentedTabs** alongside billing defaults. */
1865
- segmentedTabs?: {
1866
- trackBackgroundColor?: string;
1867
- activeTabBackground?: string;
1868
- activeTabColor?: string;
1869
- inactiveTabColor?: string;
1870
- activeTabBoxShadow?: string;
1871
- rootSx?: SxProps$1<Theme$1>;
1872
- tabFontSize?: number | string;
1873
- fullWidth?: boolean;
1874
- /** Segmented tab flex layout; billing defaults to **equalWidth** (tabs fill the track). */
1875
- tabLayout?: ChartWidgetSegmentedTabLayout;
1876
- activeTabFontWeight?: number;
1877
- inactiveTabFontWeight?: number;
1878
- };
1879
- lineChart?: {
1880
- heightPx?: number;
1881
- lineColor?: string;
1882
- lineStrokeWidth?: number;
1883
- gridStroke?: string;
1884
- gridStrokeDasharray?: string;
1885
- margin?: BillingCounterChartMargin;
1886
- xAxisTickFill?: string;
1887
- yAxisTickFill?: string;
1888
- yAxisWidth?: number;
1889
- tooltip?: BillingCounterAnalyticsTooltipTheme;
1890
- cursorStroke?: string;
1891
- cursorStrokeDasharray?: string;
1892
- /**
1893
- * Line path: **`linear`** = straight segments (sharp corners). **`monotone`** = smooth curve.
1894
- * @default **`linear`**
1895
- */
1896
- lineType?: 'linear' | 'monotone' | 'step' | 'stepBefore' | 'stepAfter' | 'natural';
1897
- };
1898
- };
1899
-
1900
- declare const DEFAULT_BILLING_COUNTER_ANALYTICS_INFO_POPOVER: ChartWidgetInfoPopoverContent;
1901
-
1902
- type BillingCounterAnalyticsPoint = {
1903
- /** X-axis tick (e.g. Jan 12, Today). */
1904
- label: string;
1905
- value: number;
1906
- };
1907
- type BillingCounterAnalyticsProps = {
1908
- /** Card title (left side of the header row). */
1909
- title?: string;
1910
- tabs: ChartWidgetSegmentedTab[];
1911
- activeTabId: string;
1912
- onTabChange: (tabId: string) => void;
1913
- /**
1914
- * Series for the active tab only. Ignored when **`seriesByTabId`** is set.
1915
- */
1916
- data?: BillingCounterAnalyticsPoint[];
1917
- /**
1918
- * All tab series keyed by **`tabs[].id`**. When set, overrides **`data`**.
1919
- */
1920
- seriesByTabId?: Record<string, BillingCounterAnalyticsPoint[]>;
1921
- /** Y-axis domain. @default `[0, 100]` */
1922
- yAxisDomain?: [number, number];
1923
- /** Y-axis tick values. @default `[20, 40, 60, 80, 100]` */
1924
- yAxisTicks?: number[];
1925
- /**
1926
- * Header info popover. Defaults to built-in copy; **`null`** hides separator + info button.
1927
- */
1928
- infoPopover?: ChartWidgetInfoPopoverContent | null;
1929
- customization?: BillingCounterAnalyticsCustomization;
1930
- };
1931
-
1932
- declare const billingCounterDefaultTabs: ChartWidgetSegmentedTab[];
1933
- /** Demo datasets aligned with **billingCounterDefaultTabs** ids. */
1934
- declare const billingCounterMockSeriesByTabId: Record<string, BillingCounterAnalyticsPoint[]>;
1935
-
1936
- /**
1937
- * Billing counter analytics card: title row (optional info), pill tabs, Recharts line chart with violet styling.
1938
- */
1939
- declare function BillingCounterAnalytics({ title, tabs, activeTabId, onTabChange, data, seriesByTabId, yAxisDomain, yAxisTicks, infoPopover, customization, }: BillingCounterAnalyticsProps): React$1.ReactElement;
1940
-
1941
- type BillingCounterAnalyticsCustomizationProviderProps = {
1942
- value: BillingCounterAnalyticsCustomization;
1943
- children: React$1.ReactNode;
1944
- };
1945
- declare function BillingCounterAnalyticsCustomizationProvider({ value, children, }: BillingCounterAnalyticsCustomizationProviderProps): React$1.ReactElement;
1946
- declare function useBillingCounterAnalyticsCustomization(): BillingCounterAnalyticsCustomization;
1947
-
1948
2279
  type PeakBillingHoursChartMargin = {
1949
2280
  top?: number;
1950
2281
  right?: number;
@@ -2005,6 +2336,11 @@ type PeakBillingHoursPoint = {
2005
2336
  /** Bar height; **0** omits the value label and draws a flat bar. */
2006
2337
  value: number;
2007
2338
  };
2339
+ type PeakBillingHoursTooltipRenderContext = {
2340
+ tooltipProps: TooltipContentProps;
2341
+ data: PeakBillingHoursPoint[];
2342
+ activeTabId: string;
2343
+ };
2008
2344
  type PeakBillingHoursProps = {
2009
2345
  title?: string;
2010
2346
  /** Shown after the title (e.g. **(Last 7 days)**). */
@@ -2017,6 +2353,11 @@ type PeakBillingHoursProps = {
2017
2353
  yAxisDomain?: [number, number];
2018
2354
  yAxisTicks?: number[];
2019
2355
  infoPopover?: ChartWidgetInfoPopoverContent | null;
2356
+ /**
2357
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
2358
+ */
2359
+ renderTooltip?: (context: PeakBillingHoursTooltipRenderContext) => ReactNode;
2360
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
2020
2361
  customization?: PeakBillingHoursCustomization;
2021
2362
  };
2022
2363
 
@@ -2029,7 +2370,7 @@ declare const peakBillingHoursMockSeriesByTabId: Record<string, PeakBillingHours
2029
2370
  * Peak billing hours card: title + subtitle, info control, violet segmented tabs (intrinsic),
2030
2371
  * vertical bar chart with square tops, value labels, and panel tooltip.
2031
2372
  */
2032
- declare function PeakBillingHours({ title, subtitle, tabs, activeTabId, onTabChange, data, seriesByTabId, yAxisDomain, yAxisTicks, infoPopover, customization, }: PeakBillingHoursProps): React$1.ReactElement;
2373
+ declare function PeakBillingHours({ title, subtitle, tabs, activeTabId, onTabChange, data, seriesByTabId, yAxisDomain, yAxisTicks, infoPopover, renderTooltip, emptyStatePlaceholderProps, customization, }: PeakBillingHoursProps): React$1.ReactElement;
2033
2374
 
2034
2375
  type PeakBillingHoursCustomizationProviderProps = {
2035
2376
  value: PeakBillingHoursCustomization;
@@ -2058,4 +2399,4 @@ interface FalconThemeProviderProps {
2058
2399
 
2059
2400
  declare const FalconThemeProvider: ({ children, mode: modeProp, settings, }: FalconThemeProviderProps) => react_jsx_runtime.JSX.Element;
2060
2401
 
2061
- export { AddCommentInput, type AddCommentInputProps, AdvancedFiltersDialog, type AdvancedFiltersDialogProps, BILLING_COUNTER_LINE_PRIMARY, BILLING_COUNTER_TABS_TRACK_BG, BillingCounterAnalytics, type BillingCounterAnalyticsCustomization, BillingCounterAnalyticsCustomizationProvider, type BillingCounterAnalyticsPoint, type BillingCounterAnalyticsProps, type BillingCounterAnalyticsTooltipTheme, type BillingCounterChartMargin, ButtonWithIcon, type ButtonWithIconProps, CHART_PERIOD_FILTER_INFO_POPOVER, ChartWidgetHeaderSeparator, ChartWidgetInfoButton, type ChartWidgetInfoButtonProps, type ChartWidgetInfoPopoverContent, RankedBarList as ChartWidgetRankedBarList, type RankedBarListItem as ChartWidgetRankedBarListItem, type RankedBarListProps as ChartWidgetRankedBarListProps, type RankedBarListSegment as ChartWidgetRankedBarSegment, type ChartWidgetSegmentedTab, type ChartWidgetSegmentedTabLayout, ChartWidgetSegmentedTabs, type ChartWidgetSegmentedTabsProps, DEFAULT_BILLING_COUNTER_ANALYTICS_INFO_POPOVER, DEFAULT_FOOTFALL_TILE_ICONS, DEFAULT_PEAK_BILLING_HOURS_INFO_POPOVER, DEFAULT_QUEUE_TIME_BREAKDOWN_INFO_POPOVER, FalconButton, type FalconButtonProps, FalconDIstrictFilter, type FalconDIstrictFilterOption, type FalconDIstrictFilterProps, FalconGrayButton, type FalconGrayButtonProps, FalconMultiSelect, type FalconMultiSelectOption, type FalconMultiSelectProps, type FalconMultiSelectStyleProps, FalconPagination, type FalconPaginationProps, FalconSelect, type FalconSelectOption, type FalconSelectProps, FalconSingleSwitch, type FalconSingleSwitchProps, FalconTable, type FalconTableProps, type FalconThemeDirection, type FalconThemeMode, FalconThemeProvider, type FalconThemeProviderProps, type FalconThemeSettings, FalconTicketColumsFilter, type FalconTicketColumsFilterProps, FalconTicketFilter, type FalconTicketFilterProps, type FootFallHeatMapIconColor, type FootFallHeatMapIconSize, type FootFallHeatMapIconSizeContext, type FootFallHeatMapIcons, type FootFallHeatMapKpiStripPresentation, type FootFallHeatMapKpiSummaryCardItem, type FootFallHeatMapSummaryKpis, type FootFallHeatMapTileIconRole, type FootFallHeatMapTreeOptions, type FootFallHeatMapTreemapLayout, FootFallHeatMapView, type FootFallHeatMapViewProps, FootfallByAgeGroups, type ChartCardMaxWidth as FootfallByAgeGroupsCardMaxWidth, type FootfallByAgeGroupsChartColors, type FootfallByAgeGroupsChartMargin, type FootfallByAgeGroupsHorizontalScroll, type FootfallByAgeGroupsProps, type FootfallByAgeGroupsRow, type FootfallByAgeGroupsSeries, type FootfallByAgeGroupsTooltipStyles, FootfallByGender, type ChartCardMaxWidth as FootfallByGenderCardMaxWidth, type FootfallByGenderChartColors, type FootfallByGenderChartMargin, type FootfallByGenderHorizontalScroll, type FootfallByGenderProps, type FootfallByGenderRow, type FootfallByGenderTooltipStyles, HeatMapChartLegend, type HeatMapChartLegendProps, type HeatMapLegendItem, KpiStatCard, type KpiStatCardDetailedProps, type KpiStatCardIconBackdropShape, type KpiStatCardInfoPlacement, type KpiStatCardInlineProps, type KpiStatCardProps, type KpiTrend, type KpiTrendLayout, PasserbyConversion, type ChartCardMaxWidth as PasserbyConversionCardMaxWidth, type PasserbyConversionChartColors, type PasserbyConversionChartMargin, type PasserbyConversionHorizontalScroll, type PasserbyConversionProps, type PasserbyConversionRow, type PasserbyConversionTooltipStyles, PeakBillingHours, type PeakBillingHoursChartMargin, type PeakBillingHoursCustomization, PeakBillingHoursCustomizationProvider, type PeakBillingHoursPoint, type PeakBillingHoursProps, ProgressBarNumber, type ProgressBarNumberProps, QUEUE_CHART_COLORS, QUEUE_STACKED_BAR_THICKNESS_PX, QUEUE_TIME_BREAKDOWN_DEFAULT_HEADER_IMAGE_SRC, QUEUE_TIME_BREAKDOWN_INFO_POPOVER, type QueueBucketLegendItem, type QueueTimeAreaSeriesPoint, type QueueTimeAreaTooltipTheme, QueueTimeBreakdown, QueueTimeBreakdownArea, type QueueTimeBreakdownAreaProps, type QueueTimeBreakdownBarRow, type QueueTimeBreakdownCustomization, QueueTimeBreakdownCustomizationProvider, QueueTimeBreakdownDonut, type QueueTimeBreakdownDonutProps, type QueueTimeBreakdownProps, QueueTimeBreakdownStackedBar, type QueueTimeBreakdownStackedBarProps, type QueueTimeChartFilter, TimePeriodFilter as QueueTimePeriodFilter, type QueueTimePeriodFilterInfoButtonPresentation, type TimePeriodFilterProps as QueueTimePeriodFilterProps, type QueueTimePeriodFilterTheme, type QueueTimeRechartsTooltipTheme, type QueueTimeStackedSeriesItem, RankedBarList, type RankedBarListItem, type RankedBarListProps, type RankedBarListSegment, TIME_PERIOD_FILTER_INFO_POPOVER, TIME_PERIOD_FILTER_INFO_POPOVER_BREAKDOWN, TimePeriodFilter, type TimePeriodFilterInfoButtonPresentation, type TimePeriodFilterProps, type TimePeriodFilterTheme, type TreemapNode, WalkinAnalysis, type WalkinAnalysisCardMaxWidth, type WalkinAnalysisPieSize, type WalkinAnalysisProps, type WalkinAnalysisSlice, type WalkinAnalysisTab, type WalkinAnalysisTypography, WalkinTraffic, WalkinTraffic as WalkinTrafficByHour, type ChartCardMaxWidth as WalkinTrafficByHourCardMaxWidth, type WalkinTrafficChartColors as WalkinTrafficByHourChartColors, type WalkinTrafficChartMargin as WalkinTrafficByHourChartMargin, type WalkinTrafficHorizontalScroll as WalkinTrafficByHourHorizontalScroll, type WalkinTrafficProps as WalkinTrafficByHourProps, type WalkinTrafficRow as WalkinTrafficByHourRow, type WalkinTrafficTooltipStyles as WalkinTrafficByHourTooltipStyles, type ChartCardMaxWidth as WalkinTrafficCardMaxWidth, type WalkinTrafficChartColors, type WalkinTrafficChartMargin, type WalkinTrafficHorizontalScroll, type WalkinTrafficProps, type WalkinTrafficRow, type WalkinTrafficTooltipStyles, WidgetHeaderFilter, type WidgetHeaderFilterProps, type WidgetHeaderFilterStyleProps, type WidgetHeaderMultiSelectConfig, type ZoneAnalyticsFlatItem, type ZoneAnalyticsHierarchy, type ZoneAnalyticsMetrics, type ZoneKpiStripPayload, ZoneWiseKpiCards, billingCounterDefaultTabs, billingCounterMockSeriesByTabId, buildTreemapNodes, generateMockPerformanceData, getChildContainer, getNestedList, getQueueTimeBreakdownAreaSeriesData, getQueueTimeBreakdownAreaXAxisData, hashColor, isPlainObject, mergeAreaTooltipStyles, mergeCss, mergeRechartsTooltipStyles, mergeSx, metricForNode, parseMinutes, parseZoneKpiStripFromRaw, peakBillingHoursDefaultTabs, peakBillingHoursMockSeriesByTabId, peakBillingHoursVisitsMock, preprocessData, skipSingleBranchLevels, toRechartsTreemapData, useBillingCounterAnalyticsCustomization, usePeakBillingHoursCustomization, useQueueTimeBreakdownCustomization };
2402
+ export { AddCommentInput, type AddCommentInputProps, AdvancedFiltersDialog, type AdvancedFiltersDialogProps, BILLING_COUNTER_LINE_PRIMARY, BILLING_COUNTER_TABS_TRACK_BG, BillingCounterAnalytics, type BillingCounterAnalyticsCustomization, BillingCounterAnalyticsCustomizationProvider, type BillingCounterAnalyticsPoint, type BillingCounterAnalyticsProps, type BillingCounterAnalyticsTooltipRenderContext, type BillingCounterAnalyticsTooltipTheme, type BillingCounterChartMargin, ButtonWithIcon, type ButtonWithIconProps, CHART_PERIOD_FILTER_INFO_POPOVER, ChartEmptyState, type ChartEmptyStateProps, ChartWidgetHeaderSeparator, ChartWidgetInfoButton, type ChartWidgetInfoButtonProps, type ChartWidgetInfoPopoverContent, RankedBarList as ChartWidgetRankedBarList, type RankedBarListItem as ChartWidgetRankedBarListItem, type RankedBarListProps as ChartWidgetRankedBarListProps, type RankedBarListSegment as ChartWidgetRankedBarSegment, type ChartWidgetSegmentedTab, type ChartWidgetSegmentedTabLayout, ChartWidgetSegmentedTabs, type ChartWidgetSegmentedTabsProps, DEFAULT_BILLING_COUNTER_ANALYTICS_INFO_POPOVER, DEFAULT_FOOTFALL_TILE_ICONS, DEFAULT_PEAK_BILLING_HOURS_INFO_POPOVER, DEFAULT_QUEUE_TIME_BREAKDOWN_INFO_POPOVER, FalconButton, type FalconButtonProps, FalconDIstrictFilter, type FalconDIstrictFilterOption, type FalconDIstrictFilterProps, FalconGrayButton, type FalconGrayButtonProps, FalconMultiSelect, type FalconMultiSelectOption, type FalconMultiSelectProps, type FalconMultiSelectStyleProps, FalconPagination, type FalconPaginationProps, FalconSelect, type FalconSelectOption, type FalconSelectProps, FalconSingleSwitch, type FalconSingleSwitchProps, FalconTable, type FalconTableProps, type FalconThemeDirection, type FalconThemeMode, FalconThemeProvider, type FalconThemeProviderProps, type FalconThemeSettings, FalconTicketColumsFilter, type FalconTicketColumsFilterProps, FalconTicketFilter, type FalconTicketFilterProps, type FootFallHeatMapIconColor, type FootFallHeatMapIconSize, type FootFallHeatMapIconSizeContext, type FootFallHeatMapIcons, type FootFallHeatMapKpiStripPresentation, type FootFallHeatMapKpiStripSegmentTooltipRenderContext, type FootFallHeatMapKpiSummaryCardItem, type FootFallHeatMapSummaryKpis, type FootFallHeatMapTileIconRole, type FootFallHeatMapTileMetricsCustomization, type FootFallHeatMapTreeOptions, type FootFallHeatMapTreemapColorCustomization, type FootFallHeatMapTreemapLayout, FootFallHeatMapView, type FootFallHeatMapViewProps, FootfallByAgeGroups, type ChartCardMaxWidth as FootfallByAgeGroupsCardMaxWidth, type FootfallByAgeGroupsChartColors, type FootfallByAgeGroupsChartMargin, type FootfallByAgeGroupsHorizontalScroll, type FootfallByAgeGroupsProps, type FootfallByAgeGroupsRow, type FootfallByAgeGroupsSeries, type FootfallByAgeGroupsTooltipRenderContext, type FootfallByAgeGroupsTooltipStyles, FootfallByGender, type ChartCardMaxWidth as FootfallByGenderCardMaxWidth, type FootfallByGenderChartColors, type FootfallByGenderChartMargin, type FootfallByGenderHorizontalScroll, type FootfallByGenderProps, type FootfallByGenderRow, type FootfallByGenderTooltipRenderContext, type FootfallByGenderTooltipStyles, HeatMapChartLegend, type HeatMapChartLegendProps, type HeatMapLegendItem, KpiStatCard, type KpiStatCardCustomization, type KpiStatCardDetailedProps, type KpiStatCardIconBackdropShape, type KpiStatCardInfoPlacement, type KpiStatCardInlineProps, type KpiStatCardProps, type KpiTrend, type KpiTrendLayout, PasserbyConversion, type ChartCardMaxWidth as PasserbyConversionCardMaxWidth, type PasserbyConversionChartColors, type PasserbyConversionChartMargin, type PasserbyConversionHorizontalScroll, type PasserbyConversionProps, type PasserbyConversionRow, type PasserbyConversionTooltipRenderContext, type PasserbyConversionTooltipStyles, PeakBillingHours, type PeakBillingHoursChartMargin, type PeakBillingHoursCustomization, PeakBillingHoursCustomizationProvider, type PeakBillingHoursPoint, type PeakBillingHoursProps, type PeakBillingHoursTooltipRenderContext, ProgressBarNumber, type ProgressBarNumberProps, QUEUE_CHART_COLORS, QUEUE_STACKED_BAR_THICKNESS_PX, QUEUE_TIME_BREAKDOWN_DEFAULT_HEADER_IMAGE_SRC, QUEUE_TIME_BREAKDOWN_INFO_POPOVER, type QueueBucketLegendItem, type QueueTimeAreaSeriesPoint, type QueueTimeAreaTooltipTheme, QueueTimeBreakdown, QueueTimeBreakdownArea, type QueueTimeBreakdownAreaProps, type QueueTimeBreakdownAreaTooltipRenderContext, type QueueTimeBreakdownBarRow, type QueueTimeBreakdownCustomization, QueueTimeBreakdownCustomizationProvider, QueueTimeBreakdownDonut, type QueueTimeBreakdownDonutProps, type QueueTimeBreakdownDonutTooltipRenderContext, type QueueTimeBreakdownProps, QueueTimeBreakdownStackedBar, type QueueTimeBreakdownStackedBarProps, type QueueTimeBreakdownStackedBarTooltipRenderContext, type QueueTimeChartFilter, TimePeriodFilter as QueueTimePeriodFilter, type QueueTimePeriodFilterInfoButtonPresentation, type TimePeriodFilterProps as QueueTimePeriodFilterProps, type QueueTimePeriodFilterTheme, type QueueTimeRechartsTooltipTheme, type QueueTimeStackedSeriesItem, RankedBarList, type RankedBarListCustomization, type RankedBarListItem, type RankedBarListProps, type RankedBarListSegment, type RankedBarListSegmentTooltipRenderContext, TIME_PERIOD_FILTER_INFO_POPOVER, TIME_PERIOD_FILTER_INFO_POPOVER_BREAKDOWN, TimePeriodFilter, type TimePeriodFilterInfoButtonPresentation, type TimePeriodFilterProps, type TimePeriodFilterTheme, type TreemapNode, WalkinAnalysis, type WalkinAnalysisCardMaxWidth, type WalkinAnalysisCustomization, type WalkinAnalysisPieSize, type WalkinAnalysisProps, type WalkinAnalysisSlice, type WalkinAnalysisTab, type WalkinAnalysisTooltipRenderContext, type WalkinAnalysisTypography, WalkinTraffic, WalkinTraffic as WalkinTrafficByHour, type ChartCardMaxWidth as WalkinTrafficByHourCardMaxWidth, type WalkinTrafficChartColors as WalkinTrafficByHourChartColors, type WalkinTrafficChartMargin as WalkinTrafficByHourChartMargin, type WalkinTrafficHorizontalScroll as WalkinTrafficByHourHorizontalScroll, type WalkinTrafficProps as WalkinTrafficByHourProps, type WalkinTrafficRow as WalkinTrafficByHourRow, type WalkinTrafficTooltipStyles as WalkinTrafficByHourTooltipStyles, type ChartCardMaxWidth as WalkinTrafficCardMaxWidth, type WalkinTrafficChartColors, type WalkinTrafficChartMargin, type WalkinTrafficHorizontalScroll, type WalkinTrafficProps, type WalkinTrafficRow, type WalkinTrafficTooltipRenderContext, type WalkinTrafficTooltipStyles, WidgetHeaderFilter, type WidgetHeaderFilterProps, type WidgetHeaderFilterStyleProps, type WidgetHeaderMultiSelectConfig, type ZoneAnalyticsFlatItem, type ZoneAnalyticsHierarchy, type ZoneAnalyticsMetrics, type ZoneKpiStripPayload, ZoneWiseKpiCards, billingCounterDefaultTabs, billingCounterMockSeriesByTabId, buildTreemapNodes, createTreemapTileColorResolver, generateMockPerformanceData, getChildContainer, getNestedList, getQueueTimeBreakdownAreaSeriesData, getQueueTimeBreakdownAreaXAxisData, hashColor, isPlainObject, mergeAreaTooltipStyles, mergeCss, mergeRechartsTooltipStyles, mergeSx, metricForNode, parseMinutes, parseZoneKpiStripFromRaw, peakBillingHoursDefaultTabs, peakBillingHoursMockSeriesByTabId, peakBillingHoursVisitsMock, preprocessData, skipSingleBranchLevels, toRechartsTreemapData, useBillingCounterAnalyticsCustomization, usePeakBillingHoursCustomization, useQueueTimeBreakdownCustomization };