@bpfdev/oly-ui 1.0.4 → 1.0.6

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.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { SxProps, Theme, ButtonProps } from '@mui/material';
3
3
  import * as React$1 from 'react';
4
- import { ReactNode, ReactElement, CSSProperties } from 'react';
4
+ import React__default, { 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,291 +671,68 @@ 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}.
563
- */
564
- declare const DEFAULT_QUEUE_TIME_BREAKDOWN_INFO_POPOVER: ChartWidgetInfoPopoverContent;
565
-
566
- interface FalconButtonProps extends ButtonProps {
567
- loading?: boolean;
568
- iconPlacement?: 'start' | 'end';
569
- }
570
-
571
- declare const FalconButton: ({ loading, disabled, children, size, variant, type, fullWidth, className, ...props }: FalconButtonProps) => react_jsx_runtime.JSX.Element;
572
-
573
- interface FalconDIstrictFilterOption {
574
- id: string | number;
575
- label: string;
576
- }
577
- interface FalconDIstrictFilterProps {
578
- label?: string;
579
- options?: FalconDIstrictFilterOption[];
580
- value?: FalconDIstrictFilterOption[];
581
- onChange?: (value: FalconDIstrictFilterOption[]) => void;
582
- }
583
-
584
- /** District filter — full implementation can be migrated from apps/docs. */
585
- declare const FalconDIstrictFilter: ({ label, options, value, onChange, }: FalconDIstrictFilterProps) => react_jsx_runtime.JSX.Element;
586
-
587
- interface FalconGrayButtonProps {
588
- text: string;
589
- Icon?: ReactNode;
590
- onClick?: () => void;
591
- }
592
-
593
- declare const FalconGrayButton: ({ text, Icon, onClick, }: FalconGrayButtonProps) => react_jsx_runtime.JSX.Element;
594
-
595
- interface FalconPaginationProps {
596
- pageNo: number;
597
- setPageNo: (n: number) => void;
598
- perPage: number;
599
- setPerPage: (n: number) => void;
600
- totalItems: number;
601
- perPageOptions?: number[];
602
- }
603
-
604
- declare const FalconPagination: ({ pageNo, setPageNo, perPage, setPerPage, totalItems, perPageOptions, }: FalconPaginationProps) => react_jsx_runtime.JSX.Element;
605
-
606
- interface FalconSelectOption {
607
- value: string;
608
- label: string;
609
- }
610
- interface FalconSelectProps {
611
- label: string;
612
- value: string;
613
- onChange: (value: string) => void;
614
- options: string[] | FalconSelectOption[];
615
- disabled?: boolean;
616
- clearable?: boolean;
617
- }
618
-
619
- declare const FalconSelect: ({ label, value, onChange, options, disabled, clearable, }: FalconSelectProps) => react_jsx_runtime.JSX.Element;
620
-
621
- interface FalconSingleSwitchProps {
622
- color?: 'success' | 'warning' | 'error' | 'info' | 'primary' | 'secondary' | 'default';
623
- setStatus?: (status: boolean) => void;
624
- value?: boolean;
625
- onChange?: (event: React.ChangeEvent<HTMLInputElement>, checked: boolean) => void;
626
- }
627
-
628
- declare const FalconSingleSwitch: ({ color, setStatus, value, onChange, }: FalconSingleSwitchProps) => react_jsx_runtime.JSX.Element;
629
-
630
- interface FalconTableProps<T = Record<string, unknown>> {
631
- rows: T[];
632
- getRowId: (row: T) => string | number;
633
- columns: GridColDef[];
634
- pageSizeOptions?: number[];
635
- initialState?: {
636
- pagination?: {
637
- paginationModel: {
638
- pageSize: number;
639
- };
640
- };
641
- };
642
- }
643
-
644
- declare const FalconTable: <T extends Record<string, unknown>>({ rows, getRowId, columns, pageSizeOptions, }: FalconTableProps<T>) => react_jsx_runtime.JSX.Element;
645
-
646
- interface FalconTicketColumsFilterProps {
647
- columns?: {
648
- id: string;
649
- label: string;
650
- }[];
651
- selected?: string[];
652
- onSelectionChange?: (selected: string[]) => void;
653
- }
654
-
655
- /** Column filter UI — full implementation can be migrated from apps/docs. */
656
- declare const FalconTicketColumsFilter: ({ columns, selected, onSelectionChange, }: FalconTicketColumsFilterProps) => react_jsx_runtime.JSX.Element;
657
-
658
- interface FalconTicketFilterProps {
659
- children: ReactNode;
660
- label?: string;
661
- open?: boolean;
662
- onOpenChange?: (open: boolean) => void;
663
- }
664
-
665
- declare const FalconTicketFilter: ({ children, label, open: controlledOpen, onOpenChange, }: FalconTicketFilterProps) => react_jsx_runtime.JSX.Element;
666
-
667
- /** Shared max-width rules for chart cards (WalkinAnalysis-style). */
668
- type ChartCardMaxWidth = number | string | {
669
- xs?: number | string;
670
- sm?: number | string;
671
- md?: number | string;
672
- };
673
-
674
- /** Optional inline styles merged over tooltip defaults (undefined keys keep defaults). */
675
- interface FootfallByAgeGroupsTooltipStyles {
676
- container?: CSSProperties;
677
- /** Each horizontal row in the tooltip */
678
- sectionRow?: CSSProperties;
679
- /** Prefix text like “Time:”, “Overall:” */
680
- metaLabel?: CSSProperties;
681
- /** Values next to meta labels (e.g. “11am”, total count) */
682
- metaValue?: CSSProperties;
683
- /** Colored dot before each series name */
684
- seriesDot?: CSSProperties;
685
- /** Bold series name in tooltip (short \`label\`, e.g. “Kids:”) */
686
- seriesName?: CSSProperties;
687
- /** Numeric value after series name */
688
- seriesValue?: CSSProperties;
689
- }
690
- /** Partial Recharts outer margin; omitted sides use built-in defaults. */
691
- interface FootfallByAgeGroupsChartMargin {
692
- top?: number;
693
- right?: number;
694
- bottom?: number;
695
- left?: number;
696
- }
697
- /** Optional chart chrome colors (stroke / fills). */
698
- interface FootfallByAgeGroupsChartColors {
699
- cartesianGridStroke?: string;
700
- xAxisLineStroke?: string;
701
- axisTickLineStroke?: string;
702
- stackTotalLabelFill?: string;
703
- }
704
-
705
- /**
706
- * Horizontal scrolling of the plot when it is wider than the card.
707
- * - \`auto\` (default): only when \`minWidthPerCategory\` is positive **and** there are **2+** data rows.
708
- * - \`on\`: allow scroll whenever \`minWidthPerCategory\` is positive (including a single bar).
709
- * - \`off\`: never; chart width follows the viewport (\`minWidthPerCategory\` still affects nothing for width).
710
- */
711
- type FootfallByAgeGroupsHorizontalScroll = 'auto' | 'on' | 'off';
712
- interface FootfallByAgeGroupsSeries {
713
- /** Must match a numeric field on each row (e.g. \`Kids\`, \`Teens\`). */
714
- dataKey: string;
715
- /** Short name for **tooltip** rows and \`Bar\` \`name\` (e.g. \`Kids\`). */
716
- label: string;
717
- color: string;
718
- /**
719
- * Optional longer text for the **legend** only (e.g. \`Kids (3-12 years old)\`).
720
- * Omit to use \`label\` in the legend as well.
721
- */
722
- legendLabel?: string;
723
- }
724
- /**
725
- * Each row is one X-axis tick; \`name\` is the label. Other keys match \`series[].dataKey\` with numeric values.
733
+ * The active segment uses a **sliding pill** (animated with **`tabIndicatorTransitionMs`**).
726
734
  */
727
- type FootfallByAgeGroupsRow = {
728
- name: string;
729
- } & Record<string, string | number>;
730
- interface FootfallByAgeGroupsProps {
731
- /** Card heading — **centered**; \`headerActions\` (if any) sit on the right without shifting it. */
732
- title: string;
733
- data: FootfallByAgeGroupsRow[];
734
- /** Stacked series bottom-to-top (first item is bottom of stack). */
735
- series: FootfallByAgeGroupsSeries[];
736
- /** Plot height in px. Default: 430 */
737
- chartHeight?: number;
738
- /**
739
- * Minimum pixels reserved per X-axis category so the chart can grow wider than the card and scroll horizontally.
740
- * Set `0` to disable (chart stays `100%` wide only). Default: **56**.
741
- * Used only when horizontal scrolling is active — see \`horizontalScroll\`.
742
- */
743
- minWidthPerCategory?: number;
744
- /**
745
- * When the plot may scroll horizontally. Default \`auto\`: **off** for a single row, **on** for two or more
746
- * (if \`minWidthPerCategory\` is positive). Use \`off\` to avoid a scrollbar; \`on\` to always allow it.
747
- */
748
- horizontalScroll?: FootfallByAgeGroupsHorizontalScroll;
749
- /**
750
- * Recharts \`maxBarSize\`: caps how thick each vertical bar is when the category band is very wide
751
- * (e.g. a single region in a wide scroll area). Default: **36** px, and never wider than the category
752
- * width cap (\`minWidthPerCategory\` when positive, else **56**).
753
- */
754
- maxBarSize?: number;
755
- cardMaxWidth?: ChartCardMaxWidth;
756
- /** Outer card; merged after defaults (padding, border, width, etc.). */
757
- cardSx?: SxProps$1<Theme$1>;
758
- /** Wrapper around the centered title row (relative positioning). */
759
- titleRowSx?: SxProps$1<Theme$1>;
760
- /** Card heading \`Typography\`; merged after default weight/color. */
761
- titleSx?: SxProps$1<Theme$1>;
762
- /** Under the title row. */
763
- dividerSx?: SxProps$1<Theme$1>;
764
- /** Legend flex row (when \`showLegend\`). */
765
- legendRowSx?: SxProps$1<Theme$1>;
766
- /** Each legend item row (swatch + label). */
767
- legendItemSx?: SxProps$1<Theme$1>;
768
- /** Color swatch \`Box\` in the legend. */
769
- legendSwatchSx?: SxProps$1<Theme$1>;
770
- /** Legend text \`Typography\`. */
771
- legendLabelSx?: SxProps$1<Theme$1>;
772
- /** Scrollable chart viewport. */
773
- chartScrollAreaSx?: SxProps$1<Theme$1>;
774
- /** Outer vertical \`Stack\` (card body). */
775
- stackSx?: SxProps$1<Theme$1>;
776
- /** Empty state wrapper when \`data\` is empty. */
777
- emptyStateSx?: SxProps$1<Theme$1>;
778
- /** “No data” \`Typography\`. */
779
- emptyStateTextSx?: SxProps$1<Theme$1>;
780
- /** Filters / info control — **absolutely positioned** on the right of the title row. */
781
- headerActions?: ReactNode;
782
- /** Tooltip label before the category value. Default: \`Time\` */
783
- tooltipCategoryLabel?: string;
784
- /** Tooltip label before the stacked total. Default: \`Overall\` */
785
- tooltipOverallLabel?: string;
786
- /** Merge over default tooltip inline styles. */
787
- tooltipStyles?: FootfallByAgeGroupsTooltipStyles;
788
- /** Color key legend above the plot (from \`series\`). Default: \`true\`. */
789
- showLegend?: boolean;
790
- /** Recharts \`BarChart\` margin; partial merge with defaults. */
791
- chartMargin?: FootfallByAgeGroupsChartMargin;
792
- /** Grid / axis / bar-top label colors. */
793
- chartColors?: FootfallByAgeGroupsChartColors;
794
- /** Opacity for non-hovered stacks while another bar is hovered. Default: \`0.35\` */
795
- dimmedStackOpacity?: number;
796
- /** 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;
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;
819
736
 
820
737
  /** How the trend / baseline row is laid out under the main value. */
821
738
  type KpiTrendLayout = 'row' | 'stacked';
@@ -864,6 +781,22 @@ type KpiTrend = {
864
781
  type KpiStatCardInfoPlacement = 'title' | 'value';
865
782
  /** Shape of the decorative icon backdrop (top-right). */
866
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
+ }
867
800
  type KpiStatCardShared = {
868
801
  /** Iconify icon id, e.g. `mdi:store` */
869
802
  icon: string;
@@ -909,6 +842,8 @@ type KpiStatCardShared = {
909
842
  cardMaxHeightPx?: number;
910
843
  /** Extra root `Paper` styles — merges last; use to override borders, shadows, width, etc. */
911
844
  sx?: SxProps$1<Theme$1>;
845
+ /** Targeted typography `sx` without fragile parent selectors. */
846
+ customization?: KpiStatCardCustomization;
912
847
  };
913
848
  type KpiStatCardInlineProps = KpiStatCardShared & {
914
849
  variant: 'inline';
@@ -962,7 +897,569 @@ type KpiStatCardDetailedProps = KpiStatCardShared & {
962
897
  };
963
898
  type KpiStatCardProps = KpiStatCardInlineProps | KpiStatCardDetailedProps;
964
899
 
965
- declare const KpiStatCard: (props: KpiStatCardProps) => react_jsx_runtime.JSX.Element;
900
+ declare const KpiStatCard: (props: KpiStatCardProps) => react_jsx_runtime.JSX.Element;
901
+
902
+ interface FalconButtonProps extends ButtonProps {
903
+ loading?: boolean;
904
+ iconPlacement?: 'start' | 'end';
905
+ }
906
+
907
+ declare const FalconButton: ({ loading, disabled, children, size, variant, type, fullWidth, className, ...props }: FalconButtonProps) => react_jsx_runtime.JSX.Element;
908
+
909
+ interface MonthData {
910
+ label: string;
911
+ count: number;
912
+ }
913
+ interface FalconAuditTimelineProps {
914
+ /**
915
+ * Title of the component
916
+ * @default 'Audit Timeline'
917
+ */
918
+ title?: string;
919
+ /**
920
+ * Months data array
921
+ */
922
+ months?: MonthData[];
923
+ /**
924
+ * Initial selected month label
925
+ * @default 'Mar'
926
+ */
927
+ initialSelectedMonth?: string;
928
+ /**
929
+ * Current year to display
930
+ * @default 2026
931
+ */
932
+ year?: number;
933
+ /**
934
+ * Message when no audits are scheduled
935
+ * @default 'No Audit Scheduled'
936
+ */
937
+ emptyStateMessage?: string;
938
+ /**
939
+ * Text for the export button
940
+ * @default 'Export Report'
941
+ */
942
+ exportButtonText?: string;
943
+ /**
944
+ * Text for the upcoming status button
945
+ * @default 'Upcoming'
946
+ */
947
+ upcomingButtonText?: string;
948
+ /**
949
+ * Show/Hide title
950
+ * @default true
951
+ */
952
+ showTitle?: boolean;
953
+ /**
954
+ * Show/Hide year selector
955
+ * @default true
956
+ */
957
+ showYearSelector?: boolean;
958
+ /**
959
+ * Callback on month change
960
+ */
961
+ onMonthChange?: (month: string) => void;
962
+ /**
963
+ * Callback for previous year click
964
+ */
965
+ onPrevYearClick?: () => void;
966
+ /**
967
+ * Callback for next year click
968
+ */
969
+ onNextYearClick?: () => void;
970
+ /**
971
+ * Callback for export report click
972
+ */
973
+ onExportReportClick?: (event: React__default.MouseEvent, date: string) => void;
974
+ /**
975
+ * Custom brand font
976
+ * @default '"Neue Haas Grotesk Display Pro", Arial, sans-serif'
977
+ */
978
+ brandFont?: string;
979
+ /**
980
+ * Custom inter font
981
+ * @default '"Inter", Arial, sans-serif'
982
+ */
983
+ interFont?: string;
984
+ /** Header Font Size */
985
+ headerFontSize?: string;
986
+ /** Header Font Weight */
987
+ headerFontWeight?: string | number;
988
+ /** Month Button Label Font Size */
989
+ monthFontSize?: string;
990
+ /** Month Button Label Font Weight */
991
+ monthFontWeight?: string | number;
992
+ /** Date Label Font Size */
993
+ eventDateSize?: string;
994
+ /** Date Label Font Weight */
995
+ eventDateWeight?: string | number;
996
+ /** Card Border Radius */
997
+ borderRadius?: string;
998
+ /** Card Border Width */
999
+ borderWidth?: string;
1000
+ /** Card Border Color */
1001
+ borderColor?: string;
1002
+ /** Card Box Shadow */
1003
+ boxShadow?: string;
1004
+ /** Primary color for selected state */
1005
+ primaryColor?: string;
1006
+ /** Color for completed status dot */
1007
+ completedColor?: string;
1008
+ /** Color for upcoming status dot */
1009
+ upcomingColor?: string;
1010
+ /** Background color for unselected month */
1011
+ inactiveMonthBg?: string;
1012
+ /** Background color for event card */
1013
+ eventCardBg?: string;
1014
+ /** Text color for header */
1015
+ headerColor?: string;
1016
+ /** Custom calendar icon */
1017
+ calendarIcon?: string | React__default.ReactNode;
1018
+ /** Custom chevron left icon */
1019
+ chevronLeftIcon?: string | React__default.ReactNode;
1020
+ /** Custom chevron right icon */
1021
+ chevronRightIcon?: string | React__default.ReactNode;
1022
+ /** Custom export/upload icon */
1023
+ exportIcon?: string | React__default.ReactNode;
1024
+ }
1025
+
1026
+ declare const FalconAuditTimeline: React__default.FC<FalconAuditTimelineProps>;
1027
+
1028
+ interface FalconExportDialogProps {
1029
+ /**
1030
+ * Dialog title
1031
+ * @default 'Export Report'
1032
+ */
1033
+ title?: string;
1034
+ /**
1035
+ * Label for the 'From' date selection box
1036
+ * @default 'From'
1037
+ */
1038
+ fromDateTitle?: string;
1039
+ /**
1040
+ * Initial 'From' date value
1041
+ * @default ''
1042
+ */
1043
+ fromDateValue?: string;
1044
+ /**
1045
+ * Label for the 'To' date selection box
1046
+ * @default 'To'
1047
+ */
1048
+ toDateTitle?: string;
1049
+ /**
1050
+ * Initial 'To' date value
1051
+ * @default ''
1052
+ */
1053
+ toDateValue?: string;
1054
+ /**
1055
+ * Callback function triggered on dialog close
1056
+ */
1057
+ onClose?: () => void;
1058
+ /**
1059
+ * Callback function triggered on export action
1060
+ * @param data - Object containing CSV and PDF selection state
1061
+ */
1062
+ onExport?: (data: {
1063
+ csv: boolean;
1064
+ pdf: boolean;
1065
+ }) => void;
1066
+ /**
1067
+ * Label for the export button
1068
+ * @default 'Export'
1069
+ */
1070
+ exportButtonText?: string;
1071
+ /**
1072
+ * Label for the close button
1073
+ * @default 'Close'
1074
+ */
1075
+ closeButtonText?: string;
1076
+ /**
1077
+ * Initial state for the CSV export checkbox
1078
+ * @default true
1079
+ */
1080
+ initialExportCsv?: boolean;
1081
+ /**
1082
+ * Initial state for the PDF export checkbox
1083
+ * @default false
1084
+ */
1085
+ initialExportPdf?: boolean;
1086
+ /**
1087
+ * Custom calendar icon (Iconify icon name)
1088
+ * @default 'solar:calendar-bold'
1089
+ */
1090
+ calendarIcon?: string;
1091
+ /**
1092
+ * Primary color for export actions and checked states
1093
+ * @default '#401070'
1094
+ */
1095
+ primaryColor?: string;
1096
+ /**
1097
+ * Secondary color for close action
1098
+ * @default '#DFDFE0'
1099
+ */
1100
+ secondaryColor?: string;
1101
+ /**
1102
+ * Text color for the dialog title
1103
+ * @default '#000000'
1104
+ */
1105
+ titleColor?: string;
1106
+ /**
1107
+ * Custom brand font for headers and labels
1108
+ * @default '"Neue Haas Grotesk Display Pro", Arial, sans-serif'
1109
+ */
1110
+ brandFont?: string;
1111
+ /**
1112
+ * Custom font for buttons and main UI text
1113
+ * @default '"Roboto", Arial, sans-serif'
1114
+ */
1115
+ robotoFont?: string;
1116
+ /** Title font size */
1117
+ titleFontSize?: string;
1118
+ /** Title font weight */
1119
+ titleFontWeight?: string | number;
1120
+ /** Label font size (Form labels and check labels) */
1121
+ labelFontSize?: string;
1122
+ /** Label font weight */
1123
+ labelFontWeight?: string | number;
1124
+ /** Value font size (Date values) */
1125
+ valueFontSize?: string;
1126
+ /** Value font weight */
1127
+ valueFontWeight?: string | number;
1128
+ /** Dialog border radius */
1129
+ borderRadius?: string | number;
1130
+ /** Dialog box shadow */
1131
+ boxShadow?: string;
1132
+ /** Export button width */
1133
+ exportButtonWidth?: string | number;
1134
+ /** Export button height */
1135
+ exportButtonHeight?: string | number;
1136
+ /** Close button width */
1137
+ closeButtonWidth?: string | number;
1138
+ /** Close button height */
1139
+ closeButtonHeight?: string | number;
1140
+ /** Date input box width */
1141
+ dateBoxWidth?: string | number;
1142
+ /** Date input box height */
1143
+ dateBoxHeight?: string | number;
1144
+ /** Text for CSV export checkbox */
1145
+ exportCsvText?: string;
1146
+ /** Text for PDF export checkbox */
1147
+ exportPdfText?: string;
1148
+ /** Primary color for calendar (selected day bg, header icons) */
1149
+ calendarPrimaryColor?: string;
1150
+ /** Text color for the selected day in calendar */
1151
+ calendarSelectedTextColor?: string;
1152
+ /** Background color for the calendar picker */
1153
+ calendarBackgroundColor?: string;
1154
+ /** Text color for the months/year header in calendar */
1155
+ calendarHeaderColor?: string;
1156
+ /** Text color for the S/M/T/W/T/F/S day labels */
1157
+ calendarDayLabelColor?: string;
1158
+ /** Text color for dates in the calendar */
1159
+ calendarDateColor?: string;
1160
+ /** Color for the format checkboxes */
1161
+ checkboxColor?: string;
1162
+ /** Hover background color for the main export button */
1163
+ exportButtonHoverBg?: string;
1164
+ /** Hover background color for the main close button */
1165
+ closeButtonHoverBg?: string;
1166
+ /** Background color for the calendar apply button */
1167
+ calendarApplyButtonBg?: string;
1168
+ /** Hover background color for the calendar apply button */
1169
+ calendarApplyButtonHoverBg?: string;
1170
+ /** Background color for the calendar cancel button */
1171
+ calendarCancelButtonBg?: string;
1172
+ /** Hover background color for the calendar cancel button */
1173
+ calendarCancelButtonHoverBg?: string;
1174
+ }
1175
+
1176
+ declare const FalconExportDialog: React__default.FC<FalconExportDialogProps>;
1177
+
1178
+ interface FilterOption {
1179
+ /** Label for the filter dropdown (e.g., 'Region') */
1180
+ label: string;
1181
+ /** Number of selected items by default */
1182
+ selected: number;
1183
+ /** List of selectable stores for this region */
1184
+ stores?: string[];
1185
+ }
1186
+ interface FalconExportReportDialogProps {
1187
+ /**
1188
+ * Dialog title
1189
+ * @default 'Export Report'
1190
+ */
1191
+ title?: string;
1192
+ /**
1193
+ * Callback function triggered on dialog close
1194
+ */
1195
+ onClose?: () => void;
1196
+ /**
1197
+ * Callback function triggered on export action
1198
+ * @param data - Object containing CSV and PDF selection state
1199
+ */
1200
+ onExport?: (data: {
1201
+ csv: boolean;
1202
+ pdf: boolean;
1203
+ }) => void;
1204
+ /**
1205
+ * Filter options to display in the mini variant
1206
+ * @default DEFAULT_FILTERS
1207
+ */
1208
+ filters?: FilterOption[];
1209
+ /**
1210
+ * Mapping for filter labels to store lists if not provided in filters
1211
+ */
1212
+ filterStoreMapping?: Record<string, string[]>;
1213
+ /**
1214
+ * Label for the export button
1215
+ * @default 'Export'
1216
+ */
1217
+ exportButtonText?: string;
1218
+ /**
1219
+ * Label for the close button
1220
+ * @default 'Close'
1221
+ */
1222
+ closeButtonText?: string;
1223
+ /**
1224
+ * Initial state for the CSV export checkbox
1225
+ * @default true
1226
+ */
1227
+ initialExportCsv?: boolean;
1228
+ /**
1229
+ * Initial state for the PDF export checkbox
1230
+ * @default false
1231
+ */
1232
+ initialExportPdf?: boolean;
1233
+ /**
1234
+ * Primary color for export actions and checked states
1235
+ * @default '#401070'
1236
+ */
1237
+ primaryColor?: string;
1238
+ /**
1239
+ * Secondary color for close action
1240
+ * @default '#DFDFE0'
1241
+ */
1242
+ secondaryColor?: string;
1243
+ /**
1244
+ * Text color for the dialog title
1245
+ * @default '#000000'
1246
+ */
1247
+ titleColor?: string;
1248
+ /**
1249
+ * Custom brand font for headers and labels
1250
+ * @default '"Neue Haas Grotesk Display Pro", Arial, sans-serif'
1251
+ */
1252
+ brandFont?: string;
1253
+ /**
1254
+ * Custom font for buttons and main UI text
1255
+ * @default '"Roboto", Arial, sans-serif'
1256
+ */
1257
+ robotoFont?: string;
1258
+ /** Title font size */
1259
+ titleFontSize?: string;
1260
+ /** Title font weight */
1261
+ titleFontWeight?: string | number;
1262
+ /** Filter title font size (the 'Filter' label) */
1263
+ filterTitleFontSize?: string;
1264
+ /** Filter title font weight */
1265
+ filterTitleFontWeight?: string | number;
1266
+ /** Label font size (Form labels and check labels) */
1267
+ labelFontSize?: string;
1268
+ /** Label font weight */
1269
+ labelFontWeight?: string | number;
1270
+ /** Value font size (Selected count values) */
1271
+ valueFontSize?: string;
1272
+ /** Value font weight */
1273
+ valueFontWeight?: string | number;
1274
+ /** Dialog border radius */
1275
+ borderRadius?: string | number;
1276
+ /** Dialog box shadow */
1277
+ boxShadow?: string;
1278
+ /** Export button width */
1279
+ exportButtonWidth?: string | number;
1280
+ /** Export button height */
1281
+ exportButtonHeight?: string | number;
1282
+ /** Close button width */
1283
+ closeButtonWidth?: string | number;
1284
+ /** Close button height */
1285
+ closeButtonHeight?: string | number;
1286
+ /** Filter dropdown box width */
1287
+ filterBoxWidth?: string | number;
1288
+ /** Filter dropdown box height */
1289
+ filterBoxHeight?: string | number;
1290
+ /** Text for CSV export checkbox */
1291
+ exportCsvText?: string;
1292
+ /** Text for PDF export checkbox */
1293
+ exportPdfText?: string;
1294
+ /** Background color for the regional dropdowns */
1295
+ dropdownBackgroundColor?: string;
1296
+ /** Text color for the stores in the dropdown */
1297
+ dropdownTextColor?: string;
1298
+ /** Font family for items in the dropdown */
1299
+ dropdownItemFontFamily?: string;
1300
+ /** Font size for items in the dropdown */
1301
+ dropdownItemFontSize?: string;
1302
+ /** Hover color for items in the dropdown */
1303
+ dropdownHoverColor?: string;
1304
+ /** Color for all checkboxes */
1305
+ checkboxColor?: string;
1306
+ /** Hover background color for the main export button */
1307
+ exportButtonHoverBg?: string;
1308
+ /** Hover background color for the main close button */
1309
+ closeButtonHoverBg?: string;
1310
+ /** Background color for the dropdown apply button */
1311
+ dropdownApplyButtonBg?: string;
1312
+ /** Hover background color for the dropdown apply button */
1313
+ dropdownApplyButtonHoverBg?: string;
1314
+ /** Background color for the dropdown clear button */
1315
+ dropdownClearButtonBg?: string;
1316
+ /** Hover background color for the dropdown clear button */
1317
+ dropdownClearButtonHoverBg?: string;
1318
+ }
1319
+
1320
+ declare const FalconExportReportDialog: React__default.FC<FalconExportReportDialogProps>;
1321
+
1322
+ interface FalconDIstrictFilterOption {
1323
+ id: string | number;
1324
+ label: string;
1325
+ }
1326
+ interface FalconDIstrictFilterProps {
1327
+ label?: string;
1328
+ options?: FalconDIstrictFilterOption[];
1329
+ value?: FalconDIstrictFilterOption[];
1330
+ onChange?: (value: FalconDIstrictFilterOption[]) => void;
1331
+ }
1332
+
1333
+ /** District filter — full implementation can be migrated from apps/docs. */
1334
+ declare const FalconDIstrictFilter: ({ label, options, value, onChange, }: FalconDIstrictFilterProps) => react_jsx_runtime.JSX.Element;
1335
+
1336
+ interface FalconGrayButtonProps {
1337
+ text: string;
1338
+ Icon?: ReactNode;
1339
+ onClick?: () => void;
1340
+ }
1341
+
1342
+ declare const FalconGrayButton: ({ text, Icon, onClick, }: FalconGrayButtonProps) => react_jsx_runtime.JSX.Element;
1343
+
1344
+ interface FalconPaginationProps {
1345
+ pageNo: number;
1346
+ setPageNo: (n: number) => void;
1347
+ perPage: number;
1348
+ setPerPage: (n: number) => void;
1349
+ totalItems: number;
1350
+ perPageOptions?: number[];
1351
+ }
1352
+
1353
+ declare const FalconPagination: ({ pageNo, setPageNo, perPage, setPerPage, totalItems, perPageOptions, }: FalconPaginationProps) => react_jsx_runtime.JSX.Element;
1354
+
1355
+ interface FalconSelectOption {
1356
+ value: string;
1357
+ label: string;
1358
+ }
1359
+ interface FalconSelectProps {
1360
+ label: string;
1361
+ value: string;
1362
+ onChange: (value: string) => void;
1363
+ options: string[] | FalconSelectOption[];
1364
+ disabled?: boolean;
1365
+ clearable?: boolean;
1366
+ }
1367
+
1368
+ declare const FalconSelect: ({ label, value, onChange, options, disabled, clearable, }: FalconSelectProps) => react_jsx_runtime.JSX.Element;
1369
+
1370
+ interface FalconSingleSwitchProps {
1371
+ color?: 'success' | 'warning' | 'error' | 'info' | 'primary' | 'secondary' | 'default';
1372
+ setStatus?: (status: boolean) => void;
1373
+ value?: boolean;
1374
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>, checked: boolean) => void;
1375
+ }
1376
+
1377
+ declare const FalconSingleSwitch: ({ color, setStatus, value, onChange, }: FalconSingleSwitchProps) => react_jsx_runtime.JSX.Element;
1378
+
1379
+ interface FalconTableProps<T = Record<string, unknown>> {
1380
+ rows: T[];
1381
+ getRowId: (row: T) => string | number;
1382
+ columns: GridColDef[];
1383
+ pageSizeOptions?: number[];
1384
+ initialState?: {
1385
+ pagination?: {
1386
+ paginationModel: {
1387
+ pageSize: number;
1388
+ };
1389
+ };
1390
+ };
1391
+ }
1392
+
1393
+ declare const FalconTable: <T extends Record<string, unknown>>({ rows, getRowId, columns, pageSizeOptions, }: FalconTableProps<T>) => react_jsx_runtime.JSX.Element;
1394
+
1395
+ interface FalconTicketColumsFilterProps {
1396
+ columns?: {
1397
+ id: string;
1398
+ label: string;
1399
+ }[];
1400
+ selected?: string[];
1401
+ onSelectionChange?: (selected: string[]) => void;
1402
+ }
1403
+
1404
+ /** Column filter UI — full implementation can be migrated from apps/docs. */
1405
+ declare const FalconTicketColumsFilter: ({ columns, selected, onSelectionChange, }: FalconTicketColumsFilterProps) => react_jsx_runtime.JSX.Element;
1406
+
1407
+ interface FalconTicketFilterProps {
1408
+ children: ReactNode;
1409
+ label?: string;
1410
+ open?: boolean;
1411
+ onOpenChange?: (open: boolean) => void;
1412
+ }
1413
+
1414
+ declare const FalconTicketFilter: ({ children, label, open: controlledOpen, onOpenChange, }: FalconTicketFilterProps) => react_jsx_runtime.JSX.Element;
1415
+
1416
+ /**
1417
+ * Ready-made **`ChartWidgetInfoPopoverContent`** for **TimePeriodFilter** (D / W / M / Y) when you want
1418
+ * generic help — **not** tied to **QueueTimeBreakdown** or any other specific card.
1419
+ *
1420
+ * **Use this when:** you show the period control next to charts or KPIs on any page and need a short
1421
+ * explanation of what the control does and why it matters, without duplicating copy in your app.
1422
+ *
1423
+ * **What it contains (for authors / Storybook):**
1424
+ * - **`title`:** “Time period” — names the control.
1425
+ * - **`description`:** Explains that switching day / week / month / year changes grouping or how the time axis is labelled.
1426
+ * - **`helpTitle`:** “How does it help?”
1427
+ * - **`helpBullets`:** (1) Align the view with your reporting window; (2) Keep period in sync with other controls on the page.
1428
+ *
1429
+ * Pass as **`infoPopover={TIME_PERIOD_FILTER_INFO_POPOVER}`** on **TimePeriodFilter**, or use your own
1430
+ * **`ChartWidgetInfoPopoverContent`** if you need product-specific wording.
1431
+ */
1432
+ declare const TIME_PERIOD_FILTER_INFO_POPOVER: ChartWidgetInfoPopoverContent;
1433
+ /**
1434
+ * Info copy aligned with the **QueueTimeBreakdown** composite card (header next to D/W/M/Y).
1435
+ * **QueueTimeBreakdown** uses this when **`infoPopover`** is omitted on the card.
1436
+ * Use **`TIME_PERIOD_FILTER_INFO_POPOVER`** instead when the filter is not on that card.
1437
+ */
1438
+ declare const TIME_PERIOD_FILTER_INFO_POPOVER_BREAKDOWN: ChartWidgetInfoPopoverContent;
1439
+ /** @deprecated Use {@link TIME_PERIOD_FILTER_INFO_POPOVER}. */
1440
+ declare const CHART_PERIOD_FILTER_INFO_POPOVER: ChartWidgetInfoPopoverContent;
1441
+ /** @deprecated Use {@link TIME_PERIOD_FILTER_INFO_POPOVER_BREAKDOWN}. */
1442
+ declare const QUEUE_TIME_BREAKDOWN_INFO_POPOVER: ChartWidgetInfoPopoverContent;
1443
+ /**
1444
+ * @deprecated Use {@link TIME_PERIOD_FILTER_INFO_POPOVER_BREAKDOWN}.
1445
+ */
1446
+ declare const DEFAULT_QUEUE_TIME_BREAKDOWN_INFO_POPOVER: ChartWidgetInfoPopoverContent;
1447
+
1448
+ interface HeatMapLegendItem {
1449
+ label: string;
1450
+ color: string;
1451
+ }
1452
+ interface HeatMapChartLegendProps {
1453
+ title: string;
1454
+ items: HeatMapLegendItem[];
1455
+ gradientId: string;
1456
+ gradientStops: {
1457
+ offset: string;
1458
+ color: string;
1459
+ }[];
1460
+ }
1461
+
1462
+ declare const HeatMapChartLegend: ({ title, items, gradientId, gradientStops, }: HeatMapChartLegendProps) => react_jsx_runtime.JSX.Element;
966
1463
 
967
1464
  interface ProgressBarNumberProps {
968
1465
  number: number;
@@ -972,103 +1469,152 @@ interface ProgressBarNumberProps {
972
1469
 
973
1470
  declare const ProgressBarNumber: ({ number, progress, numColor, }: ProgressBarNumberProps) => react_jsx_runtime.JSX.Element;
974
1471
 
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 | {
1472
+ /** Shared max-width rules for chart cards (WalkinAnalysis-style). */
1473
+ type ChartCardMaxWidth = number | string | {
986
1474
  xs?: number | string;
987
1475
  sm?: number | string;
988
1476
  md?: number | string;
989
1477
  };
990
- /** Same shape as `ChartWidgetSegmentedTab`; rendered with `ChartWidgetSegmentedTabs` inside WalkinAnalysis. */
991
- interface WalkinAnalysisTab {
992
- id: string;
993
- label: string;
1478
+
1479
+ /** Optional inline styles merged over tooltip defaults (undefined keys keep defaults). */
1480
+ interface FootfallByAgeGroupsTooltipStyles {
1481
+ container?: CSSProperties;
1482
+ /** Each horizontal row in the tooltip */
1483
+ sectionRow?: CSSProperties;
1484
+ /** Prefix text like “Time:”, “Overall:” */
1485
+ metaLabel?: CSSProperties;
1486
+ /** Values next to meta labels (e.g. “11am”, total count) */
1487
+ metaValue?: CSSProperties;
1488
+ /** Colored dot before each series name */
1489
+ seriesDot?: CSSProperties;
1490
+ /** Bold series name in tooltip (short \`label\`, e.g. “Kids:”) */
1491
+ seriesName?: CSSProperties;
1492
+ /** Numeric value after series name */
1493
+ seriesValue?: CSSProperties;
1494
+ }
1495
+ /** Partial Recharts outer margin; omitted sides use built-in defaults. */
1496
+ interface FootfallByAgeGroupsChartMargin {
1497
+ top?: number;
1498
+ right?: number;
1499
+ bottom?: number;
1500
+ left?: number;
1501
+ }
1502
+ /** Optional chart chrome colors (stroke / fills). */
1503
+ interface FootfallByAgeGroupsChartColors {
1504
+ cartesianGridStroke?: string;
1505
+ xAxisLineStroke?: string;
1506
+ axisTickLineStroke?: string;
1507
+ stackTotalLabelFill?: string;
994
1508
  }
1509
+
995
1510
  /**
996
- * Optional `fontSize` overrides (number → px). Omitted keys keep the built-in defaults.
1511
+ * Horizontal scrolling of the plot when it is wider than the card.
1512
+ * - \`auto\` (default): only when \`minWidthPerCategory\` is positive **and** there are **2+** data rows.
1513
+ * - \`on\`: allow scroll whenever \`minWidthPerCategory\` is positive (including a single bar).
1514
+ * - \`off\`: never; chart width follows the viewport (\`minWidthPerCategory\` still affects nothing for width).
997
1515
  */
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”). */
1516
+ type FootfallByAgeGroupsHorizontalScroll = 'auto' | 'on' | 'off';
1517
+ interface FootfallByAgeGroupsSeries {
1518
+ /** Must match a numeric field on each row (e.g. \`Kids\`, \`Teens\`). */
1519
+ dataKey: string;
1520
+ /** Short name for **tooltip** rows and \`Bar\` \`name\` (e.g. \`Kids\`). */
1011
1521
  label: string;
1012
- count: number;
1013
- /** Segment fill in the pie and legend swatch color. */
1014
1522
  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
1523
  /**
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.
1524
+ * Optional longer text for the **legend** only (e.g. \`Kids (3-12 years old)\`).
1525
+ * Omit to use \`label\` in the legend as well.
1024
1526
  */
1025
- legendInfo?: ReactNode;
1527
+ legendLabel?: string;
1026
1528
  }
1027
- interface WalkinAnalysisProps {
1529
+ /**
1530
+ * Each row is one X-axis tick; \`name\` is the label. Other keys match \`series[].dataKey\` with numeric values.
1531
+ */
1532
+ type FootfallByAgeGroupsRow = {
1533
+ name: string;
1534
+ } & Record<string, string | number>;
1535
+ interface FootfallByAgeGroupsTooltipRenderContext {
1536
+ tooltipProps: TooltipContentProps;
1537
+ rows: FootfallByAgeGroupsRow[];
1538
+ series: FootfallByAgeGroupsSeries[];
1539
+ }
1540
+ interface FootfallByAgeGroupsProps {
1541
+ /** Card heading — **centered**; \`headerActions\` (if any) sit on the right without shifting it. */
1028
1542
  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;
1543
+ data: FootfallByAgeGroupsRow[];
1544
+ /** Stacked series bottom-to-top (first item is bottom of stack). */
1545
+ series: FootfallByAgeGroupsSeries[];
1546
+ /** Plot height in px. Default: 430 */
1547
+ chartHeight?: number;
1037
1548
  /**
1038
- * Merged onto **ChartWidgetSegmentedTabs** `rootSx` after `fullWidth` width rules — use for `width`, `maxWidth`, alignment, etc.
1549
+ * Minimum pixels reserved per X-axis category so the chart can grow wider than the card and scroll horizontally.
1550
+ * Set `0` to disable (chart stays `100%` wide only). Default: **56**.
1551
+ * Used only when horizontal scrolling is active — see \`horizontalScroll\`.
1039
1552
  */
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>;
1553
+ minWidthPerCategory?: number;
1046
1554
  /**
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).
1555
+ * When the plot may scroll horizontally. Default \`auto\`: **off** for a single row, **on** for two or more
1556
+ * (if \`minWidthPerCategory\` is positive). Use \`off\` to avoid a scrollbar; \`on\` to always allow it.
1049
1557
  */
1050
- cardMaxWidth?: WalkinAnalysisCardMaxWidth;
1558
+ horizontalScroll?: FootfallByAgeGroupsHorizontalScroll;
1051
1559
  /**
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.
1560
+ * Recharts \`maxBarSize\`: caps how thick each vertical bar is when the category band is very wide
1561
+ * (e.g. a single region in a wide scroll area). Default: **36** px, and never wider than the category
1562
+ * width cap (\`minWidthPerCategory\` when positive, else **56**).
1055
1563
  */
1056
- pieSize?: WalkinAnalysisPieSize;
1057
- /** Per-region `fontSize` overrides (numbers are px). */
1058
- typography?: WalkinAnalysisTypography;
1564
+ maxBarSize?: number;
1565
+ cardMaxWidth?: ChartCardMaxWidth;
1566
+ /** Outer card; merged after defaults (padding, border, width, etc.). */
1567
+ cardSx?: SxProps$1<Theme$1>;
1568
+ /** Wrapper around the centered title row (relative positioning). */
1569
+ titleRowSx?: SxProps$1<Theme$1>;
1570
+ /** Card heading \`Typography\`; merged after default weight/color. */
1571
+ titleSx?: SxProps$1<Theme$1>;
1572
+ /** Under the title row. */
1573
+ dividerSx?: SxProps$1<Theme$1>;
1574
+ /** Legend flex row (when \`showLegend\`). */
1575
+ legendRowSx?: SxProps$1<Theme$1>;
1576
+ /** Each legend item row (swatch + label). */
1577
+ legendItemSx?: SxProps$1<Theme$1>;
1578
+ /** Color swatch \`Box\` in the legend. */
1579
+ legendSwatchSx?: SxProps$1<Theme$1>;
1580
+ /** Legend text \`Typography\`. */
1581
+ legendLabelSx?: SxProps$1<Theme$1>;
1582
+ /** Scrollable chart viewport. */
1583
+ chartScrollAreaSx?: SxProps$1<Theme$1>;
1584
+ /** Outer vertical \`Stack\` (card body). */
1585
+ stackSx?: SxProps$1<Theme$1>;
1586
+ /** Empty state wrapper when \`data\` is empty. */
1587
+ emptyStateSx?: SxProps$1<Theme$1>;
1588
+ /** “No data” \`Typography\`. */
1589
+ emptyStateTextSx?: SxProps$1<Theme$1>;
1590
+ /** Filters / info control — **absolutely positioned** on the right of the title row. */
1591
+ headerActions?: ReactNode;
1592
+ /** Tooltip label before the category value. Default: \`Time\` */
1593
+ tooltipCategoryLabel?: string;
1594
+ /** Tooltip label before the stacked total. Default: \`Overall\` */
1595
+ tooltipOverallLabel?: string;
1596
+ /** Merge over default tooltip inline styles. */
1597
+ tooltipStyles?: FootfallByAgeGroupsTooltipStyles;
1059
1598
  /**
1060
- * Recharts **`Pie`** animation. Defaults **true** / **400** ms.
1061
- * There is no horizontal plot scroll on this card (pie layout); only animation applies.
1599
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
1062
1600
  */
1063
- isChartAnimationActive?: boolean;
1064
- chartAnimationDuration?: number;
1601
+ renderTooltip?: (context: FootfallByAgeGroupsTooltipRenderContext) => ReactNode;
1602
+ /** Color key legend above the plot (from \`series\`). Default: \`true\`. */
1603
+ showLegend?: boolean;
1604
+ /** Recharts \`BarChart\` margin; partial merge with defaults. */
1605
+ chartMargin?: FootfallByAgeGroupsChartMargin;
1606
+ /** Grid / axis / bar-top label colors. */
1607
+ chartColors?: FootfallByAgeGroupsChartColors;
1608
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
1609
+ /** Opacity for non-hovered stacks while another bar is hovered. Default: \`0.35\` */
1610
+ dimmedStackOpacity?: number;
1611
+ /** Recharts \`stackId\` for stacked \`Bar\`s. Default: \`footfall-by-age-groups\` */
1612
+ barStackId?: string;
1613
+ /** Copy when \`data\` is empty. Default: \`No data\` */
1614
+ emptyStateText?: string;
1065
1615
  }
1066
1616
 
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;
1617
+ 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
1618
 
1073
1619
  /** Optional inline styles merged over tooltip defaults (undefined keys keep defaults). */
1074
1620
  interface FootfallByGenderTooltipStyles {
@@ -1112,6 +1658,10 @@ interface FootfallByGenderRow {
1112
1658
  male: number;
1113
1659
  female: number;
1114
1660
  }
1661
+ interface FootfallByGenderTooltipRenderContext {
1662
+ tooltipProps: TooltipContentProps;
1663
+ rows: FootfallByGenderRow[];
1664
+ }
1115
1665
  interface FootfallByGenderProps {
1116
1666
  /** Card heading — **centered**; \`headerActions\` (if any) sit on the right without shifting it. */
1117
1667
  title: string;
@@ -1191,10 +1741,15 @@ interface FootfallByGenderProps {
1191
1741
  tooltipOverallLabel?: string;
1192
1742
  /** Merge over default tooltip inline styles. */
1193
1743
  tooltipStyles?: FootfallByGenderTooltipStyles;
1744
+ /**
1745
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
1746
+ */
1747
+ renderTooltip?: (context: FootfallByGenderTooltipRenderContext) => ReactNode;
1194
1748
  /** Recharts \`BarChart\` margin; partial merge after defaults (your values override). */
1195
1749
  chartMargin?: FootfallByGenderChartMargin;
1196
1750
  /** Grid / axis / bar-top label colors. */
1197
1751
  chartColors?: FootfallByGenderChartColors;
1752
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
1198
1753
  /**
1199
1754
  * Y-axis tick formatter. Default: compact \`k\` suffix for thousands.
1200
1755
  */
@@ -1206,7 +1761,7 @@ interface FootfallByGenderProps {
1206
1761
  /**
1207
1762
  * Grouped bar chart: two series (male / female) per category, with hover dimming and a custom tooltip.
1208
1763
  */
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;
1764
+ 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
1765
 
1211
1766
  interface PasserbyConversionTooltipStyles {
1212
1767
  container?: CSSProperties;
@@ -1248,6 +1803,11 @@ interface PasserbyConversionRow {
1248
1803
  */
1249
1804
  conversion: number | null;
1250
1805
  }
1806
+ interface PasserbyConversionTooltipRenderContext {
1807
+ tooltipProps: TooltipContentProps;
1808
+ rows: PasserbyConversionRow[];
1809
+ showConversionLine: boolean;
1810
+ }
1251
1811
  interface PasserbyConversionProps {
1252
1812
  title: string;
1253
1813
  data: PasserbyConversionRow[];
@@ -1318,6 +1878,10 @@ interface PasserbyConversionProps {
1318
1878
  /** Tick formatter for the right (conversion) Y-axis. */
1319
1879
  conversionAxisTickFormatter?: (value: number) => string;
1320
1880
  tooltipStyles?: PasserbyConversionTooltipStyles;
1881
+ /**
1882
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
1883
+ */
1884
+ renderTooltip?: (context: PasserbyConversionTooltipRenderContext) => ReactNode;
1321
1885
  showLegend?: boolean;
1322
1886
  /**
1323
1887
  * When `true` and at least one row has a finite `conversion`, render the line and right axis.
@@ -1327,6 +1891,7 @@ interface PasserbyConversionProps {
1327
1891
  showBarValueLabels?: boolean;
1328
1892
  chartMargin?: PasserbyConversionChartMargin;
1329
1893
  chartColors?: PasserbyConversionChartColors;
1894
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
1330
1895
  emptyStateText?: string;
1331
1896
  /**
1332
1897
  * When `true`, Recharts animates bars and the conversion line on first draw and when values change.
@@ -1342,7 +1907,129 @@ interface PasserbyConversionProps {
1342
1907
  scrollChartToEndOnDataChange?: boolean;
1343
1908
  }
1344
1909
 
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;
1910
+ 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;
1911
+
1912
+ /** Pie diameter: fixed px, or per-breakpoint (`xs` / `sm` / `md` match MUI breakpoints). */
1913
+ type WalkinAnalysisPieSize = number | {
1914
+ xs?: number;
1915
+ sm?: number;
1916
+ md?: number;
1917
+ };
1918
+ /**
1919
+ * Card `max-width`: a number is pixels on all breakpoints; a string is any CSS length;
1920
+ * an object sets `maxWidth` per breakpoint (numbers become px). Omitted keys use `100%` (xs) and `640` (sm).
1921
+ */
1922
+ type WalkinAnalysisCardMaxWidth = number | string | {
1923
+ xs?: number | string;
1924
+ sm?: number | string;
1925
+ md?: number | string;
1926
+ };
1927
+ /** Same shape as `ChartWidgetSegmentedTab`; rendered with `ChartWidgetSegmentedTabs` inside WalkinAnalysis. */
1928
+ interface WalkinAnalysisTab {
1929
+ id: string;
1930
+ label: string;
1931
+ }
1932
+ /** Optional `sx` for title row layout, title text, legend column layout, and legend typographies. */
1933
+ interface WalkinAnalysisCustomization {
1934
+ /** Merged onto the **title row** `Stack` (title + `headerActions`) after built-in styles. */
1935
+ titleRowStackSx?: SxProps$1<Theme$1>;
1936
+ /** Merged onto the card **title** `Typography` after built-in styles. */
1937
+ titleSx?: SxProps$1<Theme$1>;
1938
+ /** Merged onto the **legend column** `Stack` (list of slice rows) after built-in styles. */
1939
+ legendColumnStackSx?: SxProps$1<Theme$1>;
1940
+ /** Merged onto each legend **label** and **count** `Typography` after built-in styles. */
1941
+ legendTypographySx?: SxProps$1<Theme$1>;
1942
+ }
1943
+ /**
1944
+ * Optional `fontSize` overrides (number → px). Omitted keys keep the built-in defaults.
1945
+ */
1946
+ interface WalkinAnalysisTypography {
1947
+ title?: number | string;
1948
+ tabs?: number | string;
1949
+ piePercent?: number | string;
1950
+ legendLabel?: number | string;
1951
+ legendValue?: number | string;
1952
+ tooltipTitle?: number | string;
1953
+ tooltipValue?: number | string;
1954
+ emptyState?: number | string;
1955
+ }
1956
+ interface WalkinAnalysisSlice {
1957
+ id: string;
1958
+ /** Legend title and accessible pie summary (e.g. “Individual Walk-ins”). */
1959
+ label: string;
1960
+ count: number;
1961
+ /** Segment fill in the pie and legend swatch color. */
1962
+ color: string;
1963
+ /** Legend title text color (default **`#0f172a`**, lifestyle section title). */
1964
+ legendLabelColor?: string;
1965
+ /** Legend count / percentage line color (default **`#64748B`**). */
1966
+ legendValueColor?: string;
1967
+ /** Fill for the percentage label inside the pie slice (default `#fff`). */
1968
+ segmentPercentColor?: string;
1969
+ /**
1970
+ * Optional control after the legend count line — e.g. **`<ChartWidgetInfoButton popover={…} />`**
1971
+ * from `@bpfdev/oly-ui` so legend info matches the header info pattern.
1972
+ */
1973
+ legendInfo?: ReactNode;
1974
+ }
1975
+ interface WalkinAnalysisProps {
1976
+ title: string;
1977
+ tabs: WalkinAnalysisTab[];
1978
+ activeTabId: string;
1979
+ onTabChange: (tabId: string) => void;
1980
+ /**
1981
+ * Omit or `true`: scope tabs span the card width (default — forwarded as **ChartWidgetSegmentedTabs** `fullWidth`).
1982
+ * `false`: pill track only as wide as the labels.
1983
+ */
1984
+ segmentedTabsFullWidth?: boolean;
1985
+ /**
1986
+ * Merged onto **ChartWidgetSegmentedTabs** `rootSx` after `fullWidth` width rules — use for `width`, `maxWidth`, alignment, etc.
1987
+ */
1988
+ segmentedTabsSx?: SxProps$1<Theme$1>;
1989
+ /** Each item’s `label`, `count`, and `color` drive pie segments and legend; optional colors override legend / in-slice % text. */
1990
+ slices: WalkinAnalysisSlice[];
1991
+ /** Right side of the title row: compose `WidgetHeaderFilter`, `ChartWidgetHeaderSeparator`, `ChartWidgetInfoButton`, or custom nodes. */
1992
+ headerActions?: ReactNode;
1993
+ cardSx?: SxProps$1<Theme$1>;
1994
+ /**
1995
+ * Card maximum width. Defaults to full width on xs and 640px from sm up.
1996
+ * Use `cardSx` for further layout overrides (it merges after this).
1997
+ */
1998
+ cardMaxWidth?: WalkinAnalysisCardMaxWidth;
1999
+ /**
2000
+ * Pie diameter (px). Use a number for the same size on all screens.
2001
+ * Use an object to set sizes at `xs`, `sm`, and `md` (unset keys use 180, 220, 260).
2002
+ * Omit for built-in responsive sizing across breakpoints.
2003
+ */
2004
+ pieSize?: WalkinAnalysisPieSize;
2005
+ /** Per-region `fontSize` overrides (numbers are px). */
2006
+ typography?: WalkinAnalysisTypography;
2007
+ /** Targeted `sx` for title row, legend column, and typographies (avoid brittle `cardSx` descendant selectors). */
2008
+ customization?: WalkinAnalysisCustomization;
2009
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
2010
+ /**
2011
+ * Recharts **`Pie`** animation. Defaults **true** / **400** ms.
2012
+ * There is no horizontal plot scroll on this card (pie layout); only animation applies.
2013
+ */
2014
+ isChartAnimationActive?: boolean;
2015
+ chartAnimationDuration?: number;
2016
+ /**
2017
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
2018
+ */
2019
+ renderTooltip?: (context: WalkinAnalysisTooltipRenderContext) => ReactNode;
2020
+ }
2021
+ interface WalkinAnalysisTooltipRenderContext {
2022
+ tooltipProps: TooltipContentProps;
2023
+ slices: WalkinAnalysisSlice[];
2024
+ total: number;
2025
+ activeTabId: string;
2026
+ }
2027
+
2028
+ /**
2029
+ * Walk-in style analysis card: title row (optional `headerActions`), tabs, Recharts pie, legend.
2030
+ * Pie and legend are driven by `slices` (`label`, `count`, `color`, optional legend / segment % colors).
2031
+ */
2032
+ 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
2033
 
1347
2034
  interface WalkinTrafficTooltipStyles {
1348
2035
  /** Outer flex wrapper (arrow + card). */
@@ -1388,6 +2075,11 @@ interface WalkinTrafficRow {
1388
2075
  /** Footfall growth % vs last year for this slot; drives **FF Growth%** row and direction icon. */
1389
2076
  ffGrowthPercent?: number | null;
1390
2077
  }
2078
+ interface WalkinTrafficTooltipRenderContext {
2079
+ tooltipProps: TooltipContentProps;
2080
+ rows: WalkinTrafficRow[];
2081
+ showTrendLine: boolean;
2082
+ }
1391
2083
  interface WalkinTrafficProps {
1392
2084
  title: string;
1393
2085
  data: WalkinTrafficRow[];
@@ -1434,6 +2126,10 @@ interface WalkinTrafficProps {
1434
2126
  /** @deprecated Use **`tooltipTimeLabel`** instead. */
1435
2127
  tooltipHourLabel?: string;
1436
2128
  tooltipStyles?: WalkinTrafficTooltipStyles;
2129
+ /**
2130
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
2131
+ */
2132
+ renderTooltip?: (context: WalkinTrafficTooltipRenderContext) => ReactNode;
1437
2133
  showLegend?: boolean;
1438
2134
  /**
1439
2135
  * When `true` and at least one row has a finite `trend`, render the line.
@@ -1445,6 +2141,7 @@ interface WalkinTrafficProps {
1445
2141
  showBarValueLabels?: boolean;
1446
2142
  chartMargin?: WalkinTrafficChartMargin;
1447
2143
  chartColors?: WalkinTrafficChartColors;
2144
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
1448
2145
  yAxisTickFormatter?: (value: number) => string;
1449
2146
  emptyStateText?: string;
1450
2147
  /**
@@ -1460,7 +2157,190 @@ interface WalkinTrafficProps {
1460
2157
  scrollChartToEndOnDataChange?: boolean;
1461
2158
  }
1462
2159
 
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;
2160
+ 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;
2161
+
2162
+ /** Primary line + tooltip fill (violet). */
2163
+ declare const BILLING_COUNTER_LINE_PRIMARY: "#7C3AED";
2164
+ /** Default pill track behind segmented tabs. */
2165
+ declare const BILLING_COUNTER_TABS_TRACK_BG: "#E8E8E8";
2166
+
2167
+ type BillingCounterChartMargin = {
2168
+ top?: number;
2169
+ right?: number;
2170
+ bottom?: number;
2171
+ left?: number;
2172
+ };
2173
+ /**
2174
+ * Simple panel tooltip: thin **grey bar** on top, then white body. Each line uses **muted prefix**
2175
+ * (**Date:** / **Total:**) + **bold dark value** (same pattern as the earlier two-row design).
2176
+ */
2177
+ type BillingCounterAnalyticsTooltipTheme = {
2178
+ borderColor?: string;
2179
+ borderRadiusPx?: number;
2180
+ boxShadow?: string;
2181
+ /** Grey strip at the top (no text). @default **#E5E7EB** */
2182
+ topBarBackground?: string;
2183
+ /** Height of the grey strip in px. @default **8** */
2184
+ topBarHeightPx?: number;
2185
+ bodyBackground?: string;
2186
+ /** **Date:** / **Total:** label colour. @default **#6B7280** */
2187
+ prefixColor?: string;
2188
+ /** Date string and numeric value colour. @default **#111827** */
2189
+ valueColor?: string;
2190
+ /**
2191
+ * When set without **prefixColor** / **valueColor**, both prefix and value use this single colour
2192
+ * (legacy / compact override).
2193
+ */
2194
+ textColor?: string;
2195
+ fontSizePx?: number;
2196
+ /** Space between the two text lines in px. @default **6** */
2197
+ lineGapPx?: number;
2198
+ dateLabelPrefix?: string;
2199
+ totalLabelPrefix?: string;
2200
+ /** **Date:** / **Total:** — default **400** */
2201
+ prefixFontWeight?: number;
2202
+ /** Time label and numeric value — default **700** */
2203
+ valueFontWeight?: number;
2204
+ bodyStyle?: CSSProperties;
2205
+ };
2206
+ /**
2207
+ * Optional layout / theme overrides for **BillingCounterAnalytics** and its children.
2208
+ * Pass via **`customization`** on the component or **BillingCounterAnalyticsCustomizationProvider**.
2209
+ */
2210
+ type BillingCounterAnalyticsCustomization = {
2211
+ rootCard?: {
2212
+ sx?: SxProps$1<Theme$1>;
2213
+ elevation?: number;
2214
+ };
2215
+ header?: {
2216
+ titleSx?: SxProps$1<Theme$1>;
2217
+ };
2218
+ /** Merged into **ChartWidgetSegmentedTabs** alongside billing defaults. */
2219
+ segmentedTabs?: {
2220
+ trackBackgroundColor?: string;
2221
+ activeTabBackground?: string;
2222
+ activeTabColor?: string;
2223
+ inactiveTabColor?: string;
2224
+ activeTabBoxShadow?: string;
2225
+ rootSx?: SxProps$1<Theme$1>;
2226
+ tabFontSize?: number | string;
2227
+ fullWidth?: boolean;
2228
+ /** Segmented tab flex layout; billing defaults to **equalWidth** (tabs fill the track). */
2229
+ tabLayout?: ChartWidgetSegmentedTabLayout;
2230
+ activeTabFontWeight?: number;
2231
+ inactiveTabFontWeight?: number;
2232
+ };
2233
+ lineChart?: {
2234
+ heightPx?: number;
2235
+ lineColor?: string;
2236
+ lineStrokeWidth?: number;
2237
+ gridStroke?: string;
2238
+ gridStrokeDasharray?: string;
2239
+ margin?: BillingCounterChartMargin;
2240
+ xAxisTickFill?: string;
2241
+ yAxisTickFill?: string;
2242
+ yAxisWidth?: number;
2243
+ tooltip?: BillingCounterAnalyticsTooltipTheme;
2244
+ cursorStroke?: string;
2245
+ cursorStrokeDasharray?: string;
2246
+ /**
2247
+ * Line path: **`linear`** = straight segments (sharp corners). **`monotone`** = smooth curve.
2248
+ * @default **`linear`**
2249
+ */
2250
+ lineType?: 'linear' | 'monotone' | 'step' | 'stepBefore' | 'stepAfter' | 'natural';
2251
+ };
2252
+ };
2253
+
2254
+ declare const DEFAULT_BILLING_COUNTER_ANALYTICS_INFO_POPOVER: ChartWidgetInfoPopoverContent;
2255
+
2256
+ type BillingCounterAnalyticsPoint = {
2257
+ /** X-axis tick (e.g. Jan 12, Today). */
2258
+ label: string;
2259
+ value: number;
2260
+ };
2261
+ type BillingCounterAnalyticsTooltipRenderContext = {
2262
+ tooltipProps: TooltipContentProps;
2263
+ data: BillingCounterAnalyticsPoint[];
2264
+ activeTabId: string;
2265
+ };
2266
+ type BillingCounterAnalyticsProps = {
2267
+ /** Card title (left side of the header row). */
2268
+ title?: string;
2269
+ tabs: ChartWidgetSegmentedTab[];
2270
+ activeTabId: string;
2271
+ onTabChange: (tabId: string) => void;
2272
+ /**
2273
+ * Series for the active tab only. Ignored when **`seriesByTabId`** is set.
2274
+ */
2275
+ data?: BillingCounterAnalyticsPoint[];
2276
+ /**
2277
+ * All tab series keyed by **`tabs[].id`**. When set, overrides **`data`**.
2278
+ */
2279
+ seriesByTabId?: Record<string, BillingCounterAnalyticsPoint[]>;
2280
+ /** Y-axis domain. @default `[0, 100]` */
2281
+ yAxisDomain?: [number, number];
2282
+ /** Y-axis tick values. @default `[20, 40, 60, 80, 100]` */
2283
+ yAxisTicks?: number[];
2284
+ /**
2285
+ * Header info popover. Defaults to built-in copy; **`null`** hides separator + info button.
2286
+ */
2287
+ infoPopover?: ChartWidgetInfoPopoverContent | null;
2288
+ /**
2289
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
2290
+ */
2291
+ renderTooltip?: (context: BillingCounterAnalyticsTooltipRenderContext) => ReactNode;
2292
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
2293
+ customization?: BillingCounterAnalyticsCustomization;
2294
+ };
2295
+
2296
+ declare const billingCounterDefaultTabs: ChartWidgetSegmentedTab[];
2297
+ /** Demo datasets aligned with **billingCounterDefaultTabs** ids. */
2298
+ declare const billingCounterMockSeriesByTabId: Record<string, BillingCounterAnalyticsPoint[]>;
2299
+
2300
+ /**
2301
+ * Billing counter analytics card: title row (optional info), pill tabs, Recharts line chart with violet styling.
2302
+ */
2303
+ declare function BillingCounterAnalytics({ title, tabs, activeTabId, onTabChange, data, seriesByTabId, yAxisDomain, yAxisTicks, infoPopover, renderTooltip, emptyStatePlaceholderProps, customization, }: BillingCounterAnalyticsProps): React$1.ReactElement;
2304
+
2305
+ type BillingCounterAnalyticsCustomizationProviderProps = {
2306
+ value: BillingCounterAnalyticsCustomization;
2307
+ children: React$1.ReactNode;
2308
+ };
2309
+ declare function BillingCounterAnalyticsCustomizationProvider({ value, children, }: BillingCounterAnalyticsCustomizationProviderProps): React$1.ReactElement;
2310
+ declare function useBillingCounterAnalyticsCustomization(): BillingCounterAnalyticsCustomization;
2311
+
2312
+ /**
2313
+ * Shared queue-time visualization palette (stacked bar, donut, area).
2314
+ * Four violet shades, light → dark (segment index order) — pill bar / donut / area.
2315
+ */
2316
+ declare const QUEUE_CHART_COLORS: readonly ["#E9E5FF", "#C4B5FD", "#8B5CF6", "#6D28D9"];
2317
+ /** Thin horizontal stacked bar height (px); pill radius uses half of this. */
2318
+ declare const QUEUE_STACKED_BAR_THICKNESS_PX = 8;
2319
+
2320
+ type QueueTimeBreakdownCustomizationProviderProps = {
2321
+ value: QueueTimeBreakdownCustomization;
2322
+ children: React$1.ReactNode;
2323
+ };
2324
+ declare function QueueTimeBreakdownCustomizationProvider({ value, children, }: QueueTimeBreakdownCustomizationProviderProps): React$1.ReactElement;
2325
+ declare function useQueueTimeBreakdownCustomization(): QueueTimeBreakdownCustomization;
2326
+
2327
+ declare function mergeCss(a: CSSProperties, b?: CSSProperties): CSSProperties;
2328
+ declare function mergeSx(...parts: Array<SxProps$1<Theme$1> | undefined>): SxProps$1<Theme$1> | undefined;
2329
+ declare function mergeRechartsTooltipStyles(overrides?: QueueTimeRechartsTooltipTheme): {
2330
+ contentStyle: CSSProperties;
2331
+ itemStyle: CSSProperties;
2332
+ labelStyle: CSSProperties;
2333
+ wrapperStyle: CSSProperties;
2334
+ };
2335
+ declare function mergeAreaTooltipStyles(overrides?: QueueTimeAreaTooltipTheme): Required<QueueTimeAreaTooltipTheme>;
2336
+
2337
+ /** Demo data for Storybook / prototyping. */
2338
+ declare function generateMockPerformanceData(): QueueTimeBreakdownBarRow[];
2339
+
2340
+ /**
2341
+ * Queue time breakdown dashboard widget: stacked bars, queue buckets, donut comparison, area chart (Recharts).
2342
+ */
2343
+ declare function QueueTimeBreakdown({ data, Donut_data, donutYesterdayData, headerImageSrc, headlineTotal, headlineSubtitle, dataComparisonTitle, queueBucketLegend, title, infoPopover, headlineInfoPopover, renderAreaTooltip, renderDonutTooltip, renderStackedBarTooltip, customization, }: QueueTimeBreakdownProps): React$1.ReactElement;
1464
2344
 
1465
2345
  /**
1466
2346
  * Treemap data helpers for FootFallHeatMap.
@@ -1569,10 +2449,38 @@ declare function metricForNode(node: unknown, sortBy: 'walkins' | 'dwell'): numb
1569
2449
  /** Read optional `zone_kpi_strip` / `zoneKpiStrip` from a hierarchy or flat API node. */
1570
2450
  declare function parseZoneKpiStripFromRaw(node: Record<string, unknown>): ZoneKpiStripPayload | undefined;
1571
2451
  declare function hashColor(seed: string): string;
1572
- declare function buildTreemapNodes({ container, sortBy, pathKey, }: {
2452
+ /**
2453
+ * Optional treemap tile fill: **vivid** HSL tuning from **`hashColor(seed)`**, or a full **`tileColorFromSeed`** override.
2454
+ * Pass **`treemap.tileColors`** on **`FootFallHeatMapView`**, or use **`createTreemapTileColorResolver`** inside **`tree.buildNodes`**.
2455
+ */
2456
+ type FootFallHeatMapTreemapColorCustomization = {
2457
+ /** Replace the built-in vivid / hash pipeline entirely. */
2458
+ tileColorFromSeed?: (seed: string) => string;
2459
+ /** Multiply base saturation after conversion to HSL. @default **1.48** */
2460
+ saturationBoost?: number;
2461
+ /** Added after boost; result is clamped to **1**. @default **0.1** */
2462
+ saturationFloor?: number;
2463
+ /** Clamp lightness lower bound (**0–1**). @default **0.38** */
2464
+ lightnessClampMin?: number;
2465
+ /** Clamp lightness upper bound (**0–1**). @default **0.55** */
2466
+ lightnessClampMax?: number;
2467
+ /** Scale base lightness from hash before clamp. @default **0.96** */
2468
+ lightnessScale?: number;
2469
+ /** Offset after scale. @default **0.02** */
2470
+ lightnessOffset?: number;
2471
+ };
2472
+ /**
2473
+ * - **`undefined` / `null`** → **`hashColor`** only.
2474
+ * - **`{ tileColorFromSeed }`** → use that resolver.
2475
+ * - **Any other object** (including **`{}`**) → vivid HSL pipeline with defaults merged from **`customization`**.
2476
+ */
2477
+ declare function createTreemapTileColorResolver(customization?: FootFallHeatMapTreemapColorCustomization | null): (seed: string) => string;
2478
+ declare function buildTreemapNodes({ container, sortBy, pathKey, tileColorFromSeed, }: {
1573
2479
  container: Record<string, unknown>;
1574
2480
  sortBy: 'walkins' | 'dwell';
1575
2481
  pathKey: string;
2482
+ /** When set, used for `color`; otherwise **`hashColor(\`${pathKey}/${name}\`)`**. */
2483
+ tileColorFromSeed?: (seed: string) => string;
1576
2484
  }): TreemapNode[];
1577
2485
  declare function getNestedList(payload: TreemapNode & {
1578
2486
  children?: TreemapNode[];
@@ -1607,6 +2515,20 @@ type FootFallHeatMapIcons = {
1607
2515
  /** Iconify id for the title-row info button. */
1608
2516
  headerInfo?: string;
1609
2517
  };
2518
+ /**
2519
+ * Optional `sx` for visitor/dwell **metric chips** inside each treemap `foreignObject` tile
2520
+ * (replaces brittle `& foreignObject > .MuiStack-root …` overrides on a parent wrapper).
2521
+ */
2522
+ type FootFallHeatMapTileMetricsCustomization = {
2523
+ /** Merged onto the **row** `Stack` that wraps both metric pills (below title / %). */
2524
+ metricsRowStackSx?: SxProps$1<Theme$1>;
2525
+ /** Merged onto each **pill** `Stack` (visitors + dwell) after built-in chip styles. */
2526
+ metricPillStackSx?: SxProps$1<Theme$1>;
2527
+ /** Merged onto the **numeric Typography** inside each pill after built-in styles. */
2528
+ metricPillValueTypographySx?: SxProps$1<Theme$1>;
2529
+ /** Merged onto the **icon circle `Box`** inside each pill after built-in styles. */
2530
+ metricPillIconBoxSx?: SxProps$1<Theme$1>;
2531
+ };
1610
2532
  type FootFallHeatMapTreemapLayout = {
1611
2533
  /** Pixel height when a breadcrumb strip is visible above the chart. */
1612
2534
  heightWithBreadcrumb?: number;
@@ -1622,6 +2544,13 @@ type FootFallHeatMapTreemapLayout = {
1622
2544
  fill?: string;
1623
2545
  /** MUI `sx` merged onto the blank terminal-details body below the KPI strip. */
1624
2546
  leafDetailsBodySx?: SxProps$1<Theme$1>;
2547
+ /** Per-tile visitor/dwell metric chip styling (merged on real `Stack` / `Typography` / `Box` nodes). */
2548
+ tileMetrics?: FootFallHeatMapTileMetricsCustomization;
2549
+ /**
2550
+ * Treemap tile **fill** tuning: vivid HSL pipeline from **`hashColor(seed)`**, or a full **`tileColorFromSeed`** override.
2551
+ * Wired into default **`buildTreemapNodes`** and passed as **`options.tileColorFromSeed`** to **`tree.buildNodes`**.
2552
+ */
2553
+ tileColors?: FootFallHeatMapTreemapColorCustomization;
1625
2554
  };
1626
2555
  type FootFallHeatMapTreeOptions = {
1627
2556
  /** Starting hierarchy level shown in treemap for hierarchical payloads. */
@@ -1657,6 +2586,8 @@ type FootFallHeatMapTreeOptions = {
1657
2586
  */
1658
2587
  buildNodes?: (initialData: ZoneAnalyticsHierarchy | ZoneAnalyticsFlatItem[] | null, options: {
1659
2588
  sortBy: 'walkins' | 'dwell';
2589
+ /** From **`treemap.tileColors`** — use for tile `color` fields (same resolver as built-in tree). */
2590
+ tileColorFromSeed?: (seed: string) => string;
1660
2591
  }) => TreemapNode[];
1661
2592
  };
1662
2593
  /** KPI numbers used for the summary row and passed to `summaryCards`. */
@@ -1676,6 +2607,17 @@ type FootFallHeatMapKpiSummaryCardItem = {
1676
2607
  /** Per-card icon color; falls back to `statCardIconColor`. */
1677
2608
  iconColor?: string;
1678
2609
  };
2610
+ type FootFallHeatMapKpiStripSegmentTooltipRenderContext = {
2611
+ segment: {
2612
+ id: string;
2613
+ label: string;
2614
+ value: number;
2615
+ color?: string;
2616
+ };
2617
+ segmentIndex: number;
2618
+ itemLabel: string;
2619
+ itemValue: number;
2620
+ };
1679
2621
  /**
1680
2622
  * Optional styling for the zone KPI block: summary stat cards, outer panel, segmented bar, and tooltips.
1681
2623
  * Segment colors cycle by index when the palette is shorter than the number of segments.
@@ -1701,6 +2643,11 @@ type FootFallHeatMapKpiStripPresentation = {
1701
2643
  segmentValueSx?: SxProps$1<Theme$1>;
1702
2644
  /** Merged onto the segment tooltip card (popover). */
1703
2645
  segmentTooltipCardSx?: SxProps$1<Theme$1>;
2646
+ /**
2647
+ * Full custom renderer for segmented bar tooltips.
2648
+ * When provided, default tooltip card layout is skipped.
2649
+ */
2650
+ renderSegmentTooltip?: (context: FootFallHeatMapKpiStripSegmentTooltipRenderContext) => ReactNode;
1704
2651
  /**
1705
2652
  * Build any number of summary KPI cards from live zone metrics. When the returned array is **non-empty**,
1706
2653
  * it replaces the default “No. of Stores” / “Overall Visitors” pair. Return `[]` to hide all summary cards.
@@ -1729,222 +2676,19 @@ type FootFallHeatMapViewProps = {
1729
2676
  * panel; `statCardSx` / `statCardIconColor`; segment row + tooltip styling.
1730
2677
  */
1731
2678
  kpiStrip?: FootFallHeatMapKpiStripPresentation;
2679
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
1732
2680
  };
1733
2681
 
1734
2682
  /**
1735
2683
  * In-store zone treemap with drill-down and leaf KPIs. Pass `initialData` from your API or mocks.
1736
2684
  */
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;
2685
+ 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
2686
 
1739
2687
  /** Zone KPI grid using MUI layout. */
1740
2688
  declare const ZoneWiseKpiCards: ({ metrics }: {
1741
2689
  metrics: ZoneAnalyticsMetrics;
1742
2690
  }) => react_jsx_runtime.JSX.Element;
1743
2691
 
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
2692
  type PeakBillingHoursChartMargin = {
1949
2693
  top?: number;
1950
2694
  right?: number;
@@ -2005,6 +2749,11 @@ type PeakBillingHoursPoint = {
2005
2749
  /** Bar height; **0** omits the value label and draws a flat bar. */
2006
2750
  value: number;
2007
2751
  };
2752
+ type PeakBillingHoursTooltipRenderContext = {
2753
+ tooltipProps: TooltipContentProps;
2754
+ data: PeakBillingHoursPoint[];
2755
+ activeTabId: string;
2756
+ };
2008
2757
  type PeakBillingHoursProps = {
2009
2758
  title?: string;
2010
2759
  /** Shown after the title (e.g. **(Last 7 days)**). */
@@ -2017,6 +2766,11 @@ type PeakBillingHoursProps = {
2017
2766
  yAxisDomain?: [number, number];
2018
2767
  yAxisTicks?: number[];
2019
2768
  infoPopover?: ChartWidgetInfoPopoverContent | null;
2769
+ /**
2770
+ * Full custom tooltip renderer. When provided, default tooltip layout is skipped.
2771
+ */
2772
+ renderTooltip?: (context: PeakBillingHoursTooltipRenderContext) => ReactNode;
2773
+ emptyStatePlaceholderProps?: ChartEmptyStateProps;
2020
2774
  customization?: PeakBillingHoursCustomization;
2021
2775
  };
2022
2776
 
@@ -2029,7 +2783,7 @@ declare const peakBillingHoursMockSeriesByTabId: Record<string, PeakBillingHours
2029
2783
  * Peak billing hours card: title + subtitle, info control, violet segmented tabs (intrinsic),
2030
2784
  * vertical bar chart with square tops, value labels, and panel tooltip.
2031
2785
  */
2032
- declare function PeakBillingHours({ title, subtitle, tabs, activeTabId, onTabChange, data, seriesByTabId, yAxisDomain, yAxisTicks, infoPopover, customization, }: PeakBillingHoursProps): React$1.ReactElement;
2786
+ declare function PeakBillingHours({ title, subtitle, tabs, activeTabId, onTabChange, data, seriesByTabId, yAxisDomain, yAxisTicks, infoPopover, renderTooltip, emptyStatePlaceholderProps, customization, }: PeakBillingHoursProps): React$1.ReactElement;
2033
2787
 
2034
2788
  type PeakBillingHoursCustomizationProviderProps = {
2035
2789
  value: PeakBillingHoursCustomization;
@@ -2058,4 +2812,4 @@ interface FalconThemeProviderProps {
2058
2812
 
2059
2813
  declare const FalconThemeProvider: ({ children, mode: modeProp, settings, }: FalconThemeProviderProps) => react_jsx_runtime.JSX.Element;
2060
2814
 
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 };
2815
+ 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, FalconAuditTimeline, type FalconAuditTimelineProps, FalconButton, type FalconButtonProps, FalconDIstrictFilter, type FalconDIstrictFilterOption, type FalconDIstrictFilterProps, FalconExportDialog, type FalconExportDialogProps, FalconExportReportDialog, type FalconExportReportDialogProps, 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 FilterOption, 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, type MonthData, 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 };