@giddaa-housing/ui 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/generated/shared.css +1 -1
- package/css/giddaa.css +12 -2
- package/dist/accordion.d.ts +9 -10
- package/dist/accordion.js +41 -87
- package/dist/activity-timeline.d.ts +12 -16
- package/dist/activity-timeline.js +83 -198
- package/dist/alert.d.ts +8 -9
- package/dist/alert.js +53 -111
- package/dist/auth-layout.d.ts +4 -4
- package/dist/auth-layout.js +143 -294
- package/dist/avatar.d.ts +6 -6
- package/dist/avatar.js +49 -19
- package/dist/badge.d.ts +12 -14
- package/dist/badge.js +71 -11
- package/dist/bar-chart.d.ts +65 -67
- package/dist/bar-chart.js +232 -207
- package/dist/breadcrumb.d.ts +5 -5
- package/dist/breadcrumb.js +56 -118
- package/dist/bullet-chart.d.ts +41 -37
- package/dist/bullet-chart.js +125 -148
- package/dist/button-BZIeyUw6.d.ts +17 -0
- package/dist/button-group.d.ts +13 -16
- package/dist/button-group.js +39 -88
- package/dist/button.d.ts +2 -19
- package/dist/button.js +94 -13
- package/dist/calendar.d.ts +6 -6
- package/dist/calendar.js +138 -17
- package/dist/card.d.ts +14 -16
- package/dist/card.js +59 -145
- package/dist/carousel.d.ts +34 -35
- package/dist/carousel.js +335 -20
- package/dist/chart.d.ts +90 -63
- package/dist/chart.js +573 -28
- package/dist/checkbox.d.ts +10 -12
- package/dist/checkbox.js +82 -47
- package/dist/cn-BI_4DMBf.js +23 -0
- package/dist/collapsible.d.ts +7 -8
- package/dist/collapsible.js +22 -47
- package/dist/combobox.d.ts +10 -10
- package/dist/combobox.js +236 -44
- package/dist/cta.d.ts +12 -14
- package/dist/cta.js +175 -341
- package/dist/currency-selector.d.ts +31 -32
- package/dist/currency-selector.js +106 -184
- package/dist/data-table.d.ts +168 -0
- package/dist/data-table.js +676 -0
- package/dist/date-picker.d.ts +22 -23
- package/dist/date-picker.js +119 -192
- package/dist/details-card.d.ts +7 -7
- package/dist/details-card.js +104 -253
- package/dist/dialog.d.ts +13 -14
- package/dist/dialog.js +116 -209
- package/dist/dropdown-menu.d.ts +13 -13
- package/dist/dropdown-menu.js +180 -37
- package/dist/dropzone.d.ts +55 -55
- package/dist/dropzone.js +327 -439
- package/dist/editorial-card.d.ts +23 -25
- package/dist/editorial-card.js +129 -296
- package/dist/empty-state.d.ts +8 -9
- package/dist/empty-state.js +48 -105
- package/dist/field.d.ts +23 -25
- package/dist/field.js +110 -221
- package/dist/filter.d.ts +118 -0
- package/dist/filter.js +775 -0
- package/dist/footer.d.ts +8 -15
- package/dist/footer.js +197 -400
- package/dist/funnel-chart.d.ts +49 -48
- package/dist/funnel-chart.js +170 -189
- package/dist/gallery-indicator.d.ts +11 -12
- package/dist/gallery-indicator.js +75 -12
- package/dist/heatmap-chart.d.ts +47 -50
- package/dist/heatmap-chart.js +186 -237
- package/dist/infotip.d.ts +8 -9
- package/dist/infotip.js +33 -59
- package/dist/input-CfoEJ8A6.d.ts +12 -0
- package/dist/input-group.d.ts +16 -20
- package/dist/input-group.js +99 -23
- package/dist/input-size-context-C-SFx9sx.d.ts +10 -0
- package/dist/input-size-context.d.ts +2 -11
- package/dist/input-size-context.js +17 -9
- package/dist/input.d.ts +2 -13
- package/dist/input.js +27 -11
- package/dist/item.d.ts +7 -8
- package/dist/item.js +22 -59
- package/dist/kpi-card.d.ts +18 -20
- package/dist/kpi-card.js +84 -192
- package/dist/label.d.ts +6 -6
- package/dist/label.js +40 -8
- package/dist/line-chart.d.ts +200 -129
- package/dist/line-chart.js +330 -105
- package/dist/list-item.d.ts +22 -0
- package/dist/list-item.js +84 -0
- package/dist/logo.d.ts +4 -4
- package/dist/logo.js +92 -9
- package/dist/map-indicator.d.ts +7 -7
- package/dist/map-indicator.js +80 -106
- package/dist/match.d.ts +10 -11
- package/dist/match.js +62 -107
- package/dist/media-gallery-hero.d.ts +40 -42
- package/dist/media-gallery-hero.js +182 -343
- package/dist/media-player.d.ts +17 -17
- package/dist/media-player.js +873 -1348
- package/dist/multi-step-form.d.ts +56 -0
- package/dist/multi-step-form.js +342 -0
- package/dist/number-input.d.ts +34 -34
- package/dist/number-input.js +64 -117
- package/dist/page-header.d.ts +10 -11
- package/dist/page-header.js +34 -79
- package/dist/pagination.d.ts +17 -21
- package/dist/pagination.js +132 -207
- package/dist/password-input.d.ts +5 -13
- package/dist/password-input.js +31 -55
- package/dist/phone-input.d.ts +19 -20
- package/dist/phone-input.js +226 -344
- package/dist/photo-gallery.d.ts +19 -19
- package/dist/photo-gallery.js +313 -449
- package/dist/picker-lzgmsNfG.js +32 -0
- package/dist/pie-chart.d.ts +121 -90
- package/dist/pie-chart.js +183 -149
- package/dist/popover.d.ts +9 -9
- package/dist/popover.js +72 -23
- package/dist/price-tag.d.ts +26 -27
- package/dist/price-tag.js +113 -173
- package/dist/progress.d.ts +16 -17
- package/dist/progress.js +169 -24
- package/dist/property-listing-card.d.ts +14 -17
- package/dist/property-listing-card.js +102 -220
- package/dist/purchase-option-card.d.ts +79 -0
- package/dist/purchase-option-card.js +176 -0
- package/dist/radar-chart.d.ts +29 -31
- package/dist/radar-chart.js +162 -137
- package/dist/radio-group.d.ts +11 -13
- package/dist/radio-group.js +46 -60
- package/dist/review-block.d.ts +14 -16
- package/dist/review-block.js +154 -10
- package/dist/rich-text-editor.d.ts +30 -14
- package/dist/rich-text-editor.js +592 -716
- package/dist/scatter-chart.d.ts +45 -47
- package/dist/scatter-chart.js +236 -240
- package/dist/search-input.d.ts +8 -16
- package/dist/search-input.js +57 -109
- package/dist/select.d.ts +8 -8
- package/dist/select.js +144 -27
- package/dist/separator.d.ts +8 -9
- package/dist/separator.js +32 -8
- package/dist/sheet.d.ts +11 -11
- package/dist/sheet.js +103 -24
- package/dist/sidebar.d.ts +32 -37
- package/dist/sidebar.js +364 -634
- package/dist/size-context-D4mYvcg8.d.ts +10 -0
- package/dist/size-context.d.ts +2 -11
- package/dist/size-context.js +17 -9
- package/dist/skeleton.d.ts +4 -5
- package/dist/skeleton.js +12 -8
- package/dist/slider.d.ts +8 -9
- package/dist/slider.js +64 -135
- package/dist/sparkline.d.ts +68 -58
- package/dist/sparkline.js +315 -251
- package/dist/stepper.d.ts +23 -24
- package/dist/stepper.js +149 -246
- package/dist/styles.css +1004 -116
- package/dist/switch.d.ts +10 -12
- package/dist/switch.js +48 -70
- package/dist/table-card.d.ts +35 -0
- package/dist/table-card.js +125 -0
- package/dist/table.d.ts +18 -14
- package/dist/table.js +117 -154
- package/dist/tabs.d.ts +33 -15
- package/dist/tabs.js +110 -18
- package/dist/tag.d.ts +21 -23
- package/dist/tag.js +103 -159
- package/dist/testimonial-block.d.ts +18 -19
- package/dist/testimonial-block.js +189 -358
- package/dist/textarea-IS_D8pXf.d.ts +11 -0
- package/dist/textarea.d.ts +2 -12
- package/dist/textarea.js +24 -11
- package/dist/time-picker.d.ts +11 -11
- package/dist/time-picker.js +245 -302
- package/dist/toast.d.ts +16 -18
- package/dist/toast.js +154 -205
- package/dist/tooltip.d.ts +8 -9
- package/dist/tooltip.js +37 -12
- package/dist/tree-map.d.ts +59 -62
- package/dist/tree-map.js +226 -269
- package/dist/use-uncontrolled-CLfM1XbB.js +21 -0
- package/dist/waterfall-chart.d.ts +94 -97
- package/dist/waterfall-chart.js +455 -552
- package/package.json +36 -9
- package/dist/accordion.js.map +0 -1
- package/dist/activity-timeline.js.map +0 -1
- package/dist/alert.js.map +0 -1
- package/dist/auth-layout.js.map +0 -1
- package/dist/avatar.js.map +0 -1
- package/dist/badge.js.map +0 -1
- package/dist/bar-chart.js.map +0 -1
- package/dist/breadcrumb.js.map +0 -1
- package/dist/bullet-chart.js.map +0 -1
- package/dist/button-group.js.map +0 -1
- package/dist/button.js.map +0 -1
- package/dist/calendar.js.map +0 -1
- package/dist/card.js.map +0 -1
- package/dist/carousel.js.map +0 -1
- package/dist/chart.js.map +0 -1
- package/dist/checkbox.js.map +0 -1
- package/dist/chunk-322YCNVL.js +0 -278
- package/dist/chunk-322YCNVL.js.map +0 -1
- package/dist/chunk-3ACQVT7A.js +0 -25
- package/dist/chunk-3ACQVT7A.js.map +0 -1
- package/dist/chunk-3T65TLJX.js +0 -334
- package/dist/chunk-3T65TLJX.js.map +0 -1
- package/dist/chunk-6ZSGQHH2.js +0 -192
- package/dist/chunk-6ZSGQHH2.js.map +0 -1
- package/dist/chunk-7TBMLFGW.js +0 -41
- package/dist/chunk-7TBMLFGW.js.map +0 -1
- package/dist/chunk-B4H6RNDH.js +0 -135
- package/dist/chunk-B4H6RNDH.js.map +0 -1
- package/dist/chunk-BUXCGZ6X.js +0 -219
- package/dist/chunk-BUXCGZ6X.js.map +0 -1
- package/dist/chunk-CHII2QHH.js +0 -58
- package/dist/chunk-CHII2QHH.js.map +0 -1
- package/dist/chunk-DMNOXRRW.js +0 -147
- package/dist/chunk-DMNOXRRW.js.map +0 -1
- package/dist/chunk-EFSOSSIC.js +0 -130
- package/dist/chunk-EFSOSSIC.js.map +0 -1
- package/dist/chunk-FZDSVMKY.js +0 -363
- package/dist/chunk-FZDSVMKY.js.map +0 -1
- package/dist/chunk-GJOFIJS3.js +0 -246
- package/dist/chunk-GJOFIJS3.js.map +0 -1
- package/dist/chunk-HL3ZSYES.js +0 -23
- package/dist/chunk-HL3ZSYES.js.map +0 -1
- package/dist/chunk-JVLUBAPB.js +0 -129
- package/dist/chunk-JVLUBAPB.js.map +0 -1
- package/dist/chunk-KDPYSOYZ.js +0 -64
- package/dist/chunk-KDPYSOYZ.js.map +0 -1
- package/dist/chunk-KSMDANKI.js +0 -43
- package/dist/chunk-KSMDANKI.js.map +0 -1
- package/dist/chunk-MEKCCOP5.js +0 -46
- package/dist/chunk-MEKCCOP5.js.map +0 -1
- package/dist/chunk-NOFXVRWL.js +0 -451
- package/dist/chunk-NOFXVRWL.js.map +0 -1
- package/dist/chunk-PC5MHNVA.js +0 -171
- package/dist/chunk-PC5MHNVA.js.map +0 -1
- package/dist/chunk-QKAQZ2GU.js +0 -122
- package/dist/chunk-QKAQZ2GU.js.map +0 -1
- package/dist/chunk-QZHSHSVV.js +0 -26
- package/dist/chunk-QZHSHSVV.js.map +0 -1
- package/dist/chunk-RBMK26XD.js +0 -19
- package/dist/chunk-RBMK26XD.js.map +0 -1
- package/dist/chunk-SFNJGF6M.js +0 -262
- package/dist/chunk-SFNJGF6M.js.map +0 -1
- package/dist/chunk-UJJNLGTM.js +0 -112
- package/dist/chunk-UJJNLGTM.js.map +0 -1
- package/dist/chunk-VGR4ZWJ3.js +0 -418
- package/dist/chunk-VGR4ZWJ3.js.map +0 -1
- package/dist/chunk-XG47P6D4.js +0 -99
- package/dist/chunk-XG47P6D4.js.map +0 -1
- package/dist/chunk-XZZAHNVM.js +0 -21
- package/dist/chunk-XZZAHNVM.js.map +0 -1
- package/dist/chunk-Y4TTYVNE.js +0 -36
- package/dist/chunk-Y4TTYVNE.js.map +0 -1
- package/dist/chunk-YDWIHW6Q.js +0 -69
- package/dist/chunk-YDWIHW6Q.js.map +0 -1
- package/dist/collapsible.js.map +0 -1
- package/dist/combobox.js.map +0 -1
- package/dist/cta.js.map +0 -1
- package/dist/currency-selector.js.map +0 -1
- package/dist/date-picker.js.map +0 -1
- package/dist/details-card.js.map +0 -1
- package/dist/dialog.js.map +0 -1
- package/dist/dropdown-menu.js.map +0 -1
- package/dist/dropzone.js.map +0 -1
- package/dist/editorial-card.js.map +0 -1
- package/dist/empty-state.js.map +0 -1
- package/dist/field.js.map +0 -1
- package/dist/footer.js.map +0 -1
- package/dist/funnel-chart.js.map +0 -1
- package/dist/gallery-indicator.js.map +0 -1
- package/dist/heatmap-chart.js.map +0 -1
- package/dist/infotip.js.map +0 -1
- package/dist/input-group.js.map +0 -1
- package/dist/input-size-context.js.map +0 -1
- package/dist/input.js.map +0 -1
- package/dist/item.js.map +0 -1
- package/dist/kpi-card.js.map +0 -1
- package/dist/label.js.map +0 -1
- package/dist/line-chart.js.map +0 -1
- package/dist/logo.js.map +0 -1
- package/dist/map-indicator.js.map +0 -1
- package/dist/match.js.map +0 -1
- package/dist/media-gallery-hero.js.map +0 -1
- package/dist/media-player.js.map +0 -1
- package/dist/number-input.js.map +0 -1
- package/dist/page-header.js.map +0 -1
- package/dist/pagination.js.map +0 -1
- package/dist/password-input.js.map +0 -1
- package/dist/phone-input.js.map +0 -1
- package/dist/photo-gallery.js.map +0 -1
- package/dist/pie-chart.js.map +0 -1
- package/dist/popover.js.map +0 -1
- package/dist/price-tag.js.map +0 -1
- package/dist/progress.js.map +0 -1
- package/dist/property-listing-card.js.map +0 -1
- package/dist/radar-chart.js.map +0 -1
- package/dist/radio-group.js.map +0 -1
- package/dist/review-block.js.map +0 -1
- package/dist/rich-text-editor.js.map +0 -1
- package/dist/scatter-chart.js.map +0 -1
- package/dist/search-input.js.map +0 -1
- package/dist/select.js.map +0 -1
- package/dist/separator.js.map +0 -1
- package/dist/sheet.js.map +0 -1
- package/dist/sidebar.js.map +0 -1
- package/dist/size-context.js.map +0 -1
- package/dist/skeleton.js.map +0 -1
- package/dist/slider.js.map +0 -1
- package/dist/sparkline.js.map +0 -1
- package/dist/stepper.js.map +0 -1
- package/dist/switch.js.map +0 -1
- package/dist/tab-list.d.ts +0 -38
- package/dist/tab-list.js +0 -123
- package/dist/tab-list.js.map +0 -1
- package/dist/table.js.map +0 -1
- package/dist/tabs.js.map +0 -1
- package/dist/tag.js.map +0 -1
- package/dist/testimonial-block.js.map +0 -1
- package/dist/textarea.js.map +0 -1
- package/dist/time-picker.js.map +0 -1
- package/dist/toast.js.map +0 -1
- package/dist/tooltip.js.map +0 -1
- package/dist/tree-map.js.map +0 -1
- package/dist/waterfall-chart.js.map +0 -1
package/dist/funnel-chart.d.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ChartCard, ChartValueType } from
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
import 'class-variance-authority';
|
|
6
|
-
import 'recharts';
|
|
7
|
-
|
|
1
|
+
import { t as ComponentSize } from "./size-context-D4mYvcg8.js";
|
|
2
|
+
import { ChartCard, ChartValueType } from "./chart.js";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
//#region src/funnel-chart.d.ts
|
|
8
5
|
/**
|
|
9
6
|
* A staged conversion chart for drop-off analytics. Two renderings share one
|
|
10
7
|
* component — `funnel` draws connected, edge-sharing trapezoids (recharts
|
|
@@ -12,9 +9,10 @@ import 'recharts';
|
|
|
12
9
|
* (recharts `BarChart`, vertical layout) over a faint 100 % reference, using
|
|
13
10
|
* recharts' built-in `Bar` `background`. Both read top-down as the audience
|
|
14
11
|
* drops off, and both reuse the same stage data, palette, value-label column,
|
|
15
|
-
* legend, frame, and tooltip — only the inner plot differs (the same
|
|
16
|
-
* `Sparkline
|
|
17
|
-
* directly here, never
|
|
12
|
+
* legend, frame, and tooltip — only the inner plot differs (the same
|
|
13
|
+
* split-by-render-style approach as the `Sparkline*` components). Per the chart
|
|
14
|
+
* architecture the recharts primitives are rendered directly here, never
|
|
15
|
+
* wrapped.
|
|
18
16
|
*
|
|
19
17
|
* @example
|
|
20
18
|
* <FunnelChart
|
|
@@ -35,50 +33,53 @@ type FunnelChartType = "funnel" | "bars";
|
|
|
35
33
|
/** Where the colour-key legend sits relative to the plot. */
|
|
36
34
|
type FunnelLegendPlacement = "right" | "bottom";
|
|
37
35
|
type FunnelStage = {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
/** Stage name, e.g. "Applied". */
|
|
37
|
+
label: string;
|
|
38
|
+
/** Absolute count reaching this stage. */
|
|
39
|
+
value: number;
|
|
40
|
+
/** Segment colour; defaults to the palette in stage order. */
|
|
41
|
+
fill?: string;
|
|
44
42
|
};
|
|
45
43
|
/**
|
|
46
|
-
* Stage palette, ordered top-of-funnel → bottom
|
|
47
|
-
*
|
|
48
|
-
*
|
|
44
|
+
* Stage palette, ordered top-of-funnel → bottom. A funnel encodes *magnitude*
|
|
45
|
+
* (each stage is a share of the one above), not identity, so — like
|
|
46
|
+
* `heatmap-chart` — stages take one theme-aware hue (`surface-brand`) at a
|
|
47
|
+
* descending opacity ramp rather than distinct categorical hues. The ramp is
|
|
48
|
+
* floored (down to 20%, not the heatmap's 8%) so the faintest stage's legend dot
|
|
49
|
+
* stays legible. Assign by order, or override per stage with `fill`.
|
|
49
50
|
*/
|
|
50
|
-
declare const FUNNEL_CHART_PALETTE: readonly ["var(--color-
|
|
51
|
+
declare const FUNNEL_CHART_PALETTE: readonly ["rgb(from var(--color-surface-brand) r g b / 1)", "rgb(from var(--color-surface-brand) r g b / 0.78)", "rgb(from var(--color-surface-brand) r g b / 0.56)", "rgb(from var(--color-surface-brand) r g b / 0.36)", "rgb(from var(--color-surface-brand) r g b / 0.2)"];
|
|
51
52
|
type FunnelChartLayout = {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
/** Plot box height in px. */
|
|
54
|
+
height: number;
|
|
55
|
+
/** Plot box width in px — the funnel/bars column; labels + legend flow after. */
|
|
56
|
+
width: number;
|
|
57
|
+
/** Corner radius for the `bars` rendering. */
|
|
58
|
+
barRadius: number;
|
|
59
|
+
/** Bar thickness cap for the `bars` rendering. */
|
|
60
|
+
barMaxSize: number;
|
|
60
61
|
};
|
|
61
62
|
declare const FUNNEL_CHART_LAYOUT: Record<FunnelChartSize, FunnelChartLayout>;
|
|
62
63
|
type FunnelChartProps = Omit<React.ComponentProps<typeof ChartCard>, "size" | "children"> & {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
64
|
+
/** Stages in funnel order — the widest (top) stage first. */
|
|
65
|
+
data: FunnelStage[];
|
|
66
|
+
/** Plot rendering. Defaults to `funnel`. */
|
|
67
|
+
type?: FunnelChartType;
|
|
68
|
+
/** Explicit size; otherwise inherited from the nearest `SizeProvider`. */
|
|
69
|
+
size?: FunnelChartSize;
|
|
70
|
+
/** Chart heading. Omit to hide the title. */
|
|
71
|
+
title?: React.ReactNode;
|
|
72
|
+
/** Supporting metadata (period, source). Omit to hide the description. */
|
|
73
|
+
description?: React.ReactNode;
|
|
74
|
+
/** Enable the hover value tooltip. Default false. */
|
|
75
|
+
tooltip?: boolean;
|
|
76
|
+
/** Legend placement — a right column or a wrapped bottom row. Default right. */
|
|
77
|
+
legend?: FunnelLegendPlacement;
|
|
78
|
+
/** Format the absolute count in the value label and tooltip. */
|
|
79
|
+
valueFormatter?: (value: number) => string;
|
|
80
|
+
/** Value formatting for the tooltip. Defaults to `number`. */
|
|
81
|
+
valueType?: ChartValueType;
|
|
81
82
|
};
|
|
82
83
|
declare function FunnelChart({ data, type, size, title, description, tooltip, legend, valueFormatter, valueType, className, ...props }: FunnelChartProps): React.JSX.Element;
|
|
83
|
-
|
|
84
|
-
export { FUNNEL_CHART_LAYOUT, FUNNEL_CHART_PALETTE, FunnelChart, type FunnelChartLayout, type FunnelChartProps, type FunnelChartSize, type FunnelChartType, type FunnelLegendPlacement, type FunnelStage };
|
|
84
|
+
//#endregion
|
|
85
|
+
export { FUNNEL_CHART_LAYOUT, FUNNEL_CHART_PALETTE, FunnelChart, type FunnelChartLayout, type FunnelChartProps, type FunnelChartSize, type FunnelChartType, type FunnelLegendPlacement, type FunnelStage };
|
package/dist/funnel-chart.js
CHANGED
|
@@ -1,196 +1,177 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
ChartDescription,
|
|
6
|
-
ChartHeader,
|
|
7
|
-
ChartTitle,
|
|
8
|
-
ChartTooltip,
|
|
9
|
-
ChartTooltipContent
|
|
10
|
-
} from "./chunk-NOFXVRWL.js";
|
|
11
|
-
import {
|
|
12
|
-
useComponentSize
|
|
13
|
-
} from "./chunk-HL3ZSYES.js";
|
|
14
|
-
import {
|
|
15
|
-
cn
|
|
16
|
-
} from "./chunk-Y4TTYVNE.js";
|
|
17
|
-
|
|
18
|
-
// src/funnel-chart.tsx
|
|
19
|
-
import { cva } from "class-variance-authority";
|
|
20
|
-
import {
|
|
21
|
-
Bar,
|
|
22
|
-
BarChart,
|
|
23
|
-
Funnel,
|
|
24
|
-
FunnelChart as RechartsFunnelChart,
|
|
25
|
-
XAxis,
|
|
26
|
-
YAxis
|
|
27
|
-
} from "recharts";
|
|
2
|
+
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
|
+
import { useComponentSize } from "./size-context.js";
|
|
4
|
+
import { ChartCard, ChartContainer, ChartDescription, ChartHeader, ChartTitle, ChartTooltip, ChartTooltipContent } from "./chart.js";
|
|
28
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
6
|
+
import { cva } from "class-variance-authority";
|
|
7
|
+
import { Bar, BarChart, Funnel, FunnelChart as FunnelChart$1, XAxis, YAxis } from "recharts";
|
|
8
|
+
//#region src/funnel-chart.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Stage palette, ordered top-of-funnel → bottom. A funnel encodes *magnitude*
|
|
11
|
+
* (each stage is a share of the one above), not identity, so — like
|
|
12
|
+
* `heatmap-chart` — stages take one theme-aware hue (`surface-brand`) at a
|
|
13
|
+
* descending opacity ramp rather than distinct categorical hues. The ramp is
|
|
14
|
+
* floored (down to 20%, not the heatmap's 8%) so the faintest stage's legend dot
|
|
15
|
+
* stays legible. Assign by order, or override per stage with `fill`.
|
|
16
|
+
*/
|
|
17
|
+
const FUNNEL_CHART_PALETTE = [
|
|
18
|
+
"rgb(from var(--color-surface-brand) r g b / 1)",
|
|
19
|
+
"rgb(from var(--color-surface-brand) r g b / 0.78)",
|
|
20
|
+
"rgb(from var(--color-surface-brand) r g b / 0.56)",
|
|
21
|
+
"rgb(from var(--color-surface-brand) r g b / 0.36)",
|
|
22
|
+
"rgb(from var(--color-surface-brand) r g b / 0.2)"
|
|
35
23
|
];
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
24
|
+
const FUNNEL_CHART_LAYOUT = {
|
|
25
|
+
sm: {
|
|
26
|
+
height: 150,
|
|
27
|
+
width: 150,
|
|
28
|
+
barRadius: 3,
|
|
29
|
+
barMaxSize: 14
|
|
30
|
+
},
|
|
31
|
+
md: {
|
|
32
|
+
height: 200,
|
|
33
|
+
width: 220,
|
|
34
|
+
barRadius: 4,
|
|
35
|
+
barMaxSize: 18
|
|
36
|
+
},
|
|
37
|
+
lg: {
|
|
38
|
+
height: 264,
|
|
39
|
+
width: 288,
|
|
40
|
+
barRadius: 5,
|
|
41
|
+
barMaxSize: 22
|
|
42
|
+
}
|
|
40
43
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
defaultVariants: { size: "md" }
|
|
44
|
+
/** Vertical stage list — value-label column and the right-hand legend share it. */
|
|
45
|
+
const funnelStageListVariants = cva("flex min-w-0 flex-col", {
|
|
46
|
+
variants: { size: {
|
|
47
|
+
sm: "gap-2 text-gdt-xs",
|
|
48
|
+
md: "gap-3 text-gdt-sm",
|
|
49
|
+
lg: "gap-3.5 text-gdt-sm"
|
|
50
|
+
} },
|
|
51
|
+
defaultVariants: { size: "md" }
|
|
50
52
|
});
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
const funnelLegendDotVariants = cva("shrink-0 rounded-full", {
|
|
54
|
+
variants: { size: {
|
|
55
|
+
sm: "size-2",
|
|
56
|
+
md: "size-2.5",
|
|
57
|
+
lg: "size-3"
|
|
58
|
+
} },
|
|
59
|
+
defaultVariants: { size: "md" }
|
|
56
60
|
});
|
|
57
|
-
function FunnelChart({
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
description != null && /* @__PURE__ */ jsx(ChartDescription, { children: description })
|
|
172
|
-
] }),
|
|
173
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
174
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-4", children: [
|
|
175
|
-
/* @__PURE__ */ jsx(
|
|
176
|
-
ChartContainer,
|
|
177
|
-
{
|
|
178
|
-
config,
|
|
179
|
-
className: "aspect-auto shrink-0",
|
|
180
|
-
style: { width: layout.width, height: layout.height },
|
|
181
|
-
children: chartNode
|
|
182
|
-
}
|
|
183
|
-
),
|
|
184
|
-
valueLabels,
|
|
185
|
-
legend === "right" && legendNode
|
|
186
|
-
] }),
|
|
187
|
-
legend === "bottom" && legendNode
|
|
188
|
-
] })
|
|
189
|
-
] });
|
|
61
|
+
function FunnelChart({ data, type = "funnel", size, title, description, tooltip = false, legend = "right", valueFormatter = (value) => value.toLocaleString("en-NG"), valueType = "number", className, ...props }) {
|
|
62
|
+
const resolvedSize = useComponentSize(size);
|
|
63
|
+
const layout = FUNNEL_CHART_LAYOUT[resolvedSize];
|
|
64
|
+
const stages = data.map((stage, i) => ({
|
|
65
|
+
...stage,
|
|
66
|
+
fill: stage.fill ?? FUNNEL_CHART_PALETTE[i % FUNNEL_CHART_PALETTE.length]
|
|
67
|
+
}));
|
|
68
|
+
const top = stages[0]?.value || 1;
|
|
69
|
+
const config = Object.fromEntries(stages.map((stage) => [stage.label, {
|
|
70
|
+
label: stage.label,
|
|
71
|
+
color: stage.fill
|
|
72
|
+
}]));
|
|
73
|
+
const tooltipNode = tooltip ? /* @__PURE__ */ jsx(ChartTooltip, {
|
|
74
|
+
cursor: false,
|
|
75
|
+
content: /* @__PURE__ */ jsx(ChartTooltipContent, {
|
|
76
|
+
nameKey: "label",
|
|
77
|
+
valueType
|
|
78
|
+
})
|
|
79
|
+
}) : null;
|
|
80
|
+
const chartNode = type === "bars" ? /* @__PURE__ */ jsxs(BarChart, {
|
|
81
|
+
accessibilityLayer: true,
|
|
82
|
+
layout: "vertical",
|
|
83
|
+
data: stages,
|
|
84
|
+
margin: {
|
|
85
|
+
top: 0,
|
|
86
|
+
right: 0,
|
|
87
|
+
bottom: 0,
|
|
88
|
+
left: 0
|
|
89
|
+
},
|
|
90
|
+
barCategoryGap: "0%",
|
|
91
|
+
children: [
|
|
92
|
+
tooltipNode,
|
|
93
|
+
/* @__PURE__ */ jsx(XAxis, {
|
|
94
|
+
type: "number",
|
|
95
|
+
domain: [0, top],
|
|
96
|
+
hide: true
|
|
97
|
+
}),
|
|
98
|
+
/* @__PURE__ */ jsx(YAxis, {
|
|
99
|
+
type: "category",
|
|
100
|
+
dataKey: "label",
|
|
101
|
+
hide: true
|
|
102
|
+
}),
|
|
103
|
+
/* @__PURE__ */ jsx(Bar, {
|
|
104
|
+
dataKey: "value",
|
|
105
|
+
radius: layout.barRadius,
|
|
106
|
+
color: "var(--color-line-subtle)",
|
|
107
|
+
isAnimationActive: false
|
|
108
|
+
})
|
|
109
|
+
]
|
|
110
|
+
}) : /* @__PURE__ */ jsxs(FunnelChart$1, {
|
|
111
|
+
margin: {
|
|
112
|
+
top: 0,
|
|
113
|
+
right: 0,
|
|
114
|
+
bottom: 0,
|
|
115
|
+
left: 0
|
|
116
|
+
},
|
|
117
|
+
children: [tooltipNode, /* @__PURE__ */ jsx(Funnel, {
|
|
118
|
+
data: stages,
|
|
119
|
+
dataKey: "value",
|
|
120
|
+
nameKey: "label",
|
|
121
|
+
isAnimationActive: false
|
|
122
|
+
})]
|
|
123
|
+
});
|
|
124
|
+
const valueLabels = /* @__PURE__ */ jsx("ul", {
|
|
125
|
+
className: cn(funnelStageListVariants({ size: resolvedSize })),
|
|
126
|
+
children: stages.map((stage) => /* @__PURE__ */ jsxs("li", {
|
|
127
|
+
className: "whitespace-nowrap tabular-nums text-fg-primary",
|
|
128
|
+
children: [
|
|
129
|
+
valueFormatter(stage.value),
|
|
130
|
+
" ·",
|
|
131
|
+
" ",
|
|
132
|
+
Math.round(stage.value / top * 100),
|
|
133
|
+
"%"
|
|
134
|
+
]
|
|
135
|
+
}, stage.label))
|
|
136
|
+
});
|
|
137
|
+
const legendNode = /* @__PURE__ */ jsx("ul", {
|
|
138
|
+
className: cn(legend === "right" ? funnelStageListVariants({ size: resolvedSize }) : cn("flex flex-row flex-wrap items-center gap-x-4 gap-y-2", resolvedSize === "sm" ? "text-gdt-xs" : "text-gdt-sm")),
|
|
139
|
+
children: stages.map((stage) => /* @__PURE__ */ jsxs("li", {
|
|
140
|
+
className: "flex items-center gap-2 text-fg-primary",
|
|
141
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
142
|
+
"aria-hidden": "true",
|
|
143
|
+
className: cn(funnelLegendDotVariants({ size: resolvedSize })),
|
|
144
|
+
style: { backgroundColor: stage.fill }
|
|
145
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
146
|
+
className: "min-w-0 truncate",
|
|
147
|
+
children: stage.label
|
|
148
|
+
})]
|
|
149
|
+
}, stage.label))
|
|
150
|
+
});
|
|
151
|
+
return /* @__PURE__ */ jsxs(ChartCard, {
|
|
152
|
+
size: resolvedSize,
|
|
153
|
+
className,
|
|
154
|
+
...props,
|
|
155
|
+
children: [(title != null || description != null) && /* @__PURE__ */ jsxs(ChartHeader, { children: [title != null && /* @__PURE__ */ jsx(ChartTitle, { children: title }), description != null && /* @__PURE__ */ jsx(ChartDescription, { children: description })] }), /* @__PURE__ */ jsxs("div", {
|
|
156
|
+
className: "flex flex-col gap-4",
|
|
157
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
158
|
+
className: "flex flex-wrap items-center gap-x-6 gap-y-4",
|
|
159
|
+
children: [
|
|
160
|
+
/* @__PURE__ */ jsx(ChartContainer, {
|
|
161
|
+
config,
|
|
162
|
+
className: "aspect-auto shrink-0",
|
|
163
|
+
style: {
|
|
164
|
+
width: layout.width,
|
|
165
|
+
height: layout.height
|
|
166
|
+
},
|
|
167
|
+
children: chartNode
|
|
168
|
+
}),
|
|
169
|
+
valueLabels,
|
|
170
|
+
legend === "right" && legendNode
|
|
171
|
+
]
|
|
172
|
+
}), legend === "bottom" && legendNode]
|
|
173
|
+
})]
|
|
174
|
+
});
|
|
190
175
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
FUNNEL_CHART_PALETTE,
|
|
194
|
-
FunnelChart
|
|
195
|
-
};
|
|
196
|
-
//# sourceMappingURL=funnel-chart.js.map
|
|
176
|
+
//#endregion
|
|
177
|
+
export { FUNNEL_CHART_LAYOUT, FUNNEL_CHART_PALETTE, FunnelChart };
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { VariantProps } from "class-variance-authority";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
//#region src/gallery-indicator.d.ts
|
|
5
4
|
type GalleryIndicatorSize = "sm" | "md" | "lg";
|
|
6
5
|
declare const galleryIndicatorVariants: (props?: ({
|
|
7
|
-
|
|
8
|
-
} &
|
|
6
|
+
size?: "lg" | "md" | "sm" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
9
8
|
type GalleryIndicatorProps = React.ComponentProps<"span"> & VariantProps<typeof galleryIndicatorVariants> & {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
photoCount?: number;
|
|
10
|
+
currentPhoto?: number;
|
|
11
|
+
totalPhotos?: number;
|
|
12
|
+
label?: string;
|
|
14
13
|
};
|
|
15
14
|
declare function GalleryIndicatorIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
|
|
16
15
|
declare function GalleryIndicator({ className, size, photoCount, currentPhoto, totalPhotos, label, children, ...props }: GalleryIndicatorProps): React.JSX.Element;
|
|
17
|
-
|
|
18
|
-
export { GalleryIndicator, GalleryIndicatorIcon, type GalleryIndicatorProps, type GalleryIndicatorSize, galleryIndicatorVariants };
|
|
16
|
+
//#endregion
|
|
17
|
+
export { GalleryIndicator, GalleryIndicatorIcon, type GalleryIndicatorProps, type GalleryIndicatorSize, galleryIndicatorVariants };
|
|
@@ -1,12 +1,75 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
1
|
+
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
//#region src/gallery-indicator.tsx
|
|
5
|
+
const galleryIndicatorVariants = cva("inline-flex w-fit shrink-0 items-center justify-center rounded-[100px] bg-black/40 px-3 font-bold leading-none whitespace-nowrap text-white shadow-[0px_0px_4px_0px_rgba(0,0,0,0.1)] backdrop-blur-[15px] sm:px-4", {
|
|
6
|
+
variants: { size: {
|
|
7
|
+
sm: "h-[35px] gap-2 text-gdt-xs sm:gap-4 [&>svg]:size-5",
|
|
8
|
+
md: "h-10 gap-2 text-gdt-sm sm:gap-4 [&>svg]:size-5",
|
|
9
|
+
lg: "h-10 gap-2 text-gdt-lg sm:h-[50px] sm:gap-4 [&>svg]:size-6"
|
|
10
|
+
} },
|
|
11
|
+
defaultVariants: { size: "md" }
|
|
12
|
+
});
|
|
13
|
+
function GalleryIndicatorIcon(props) {
|
|
14
|
+
return /* @__PURE__ */ jsxs("svg", {
|
|
15
|
+
"aria-hidden": "true",
|
|
16
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
17
|
+
viewBox: "0 0 24 24",
|
|
18
|
+
fill: "none",
|
|
19
|
+
...props,
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ jsx("path", {
|
|
22
|
+
d: "M5.75 17.5 3.63 7.62a2 2 0 0 1 1.53-2.37l9.66-2.07a2 2 0 0 1 2.37 1.53l.27 1.29",
|
|
23
|
+
stroke: "currentColor",
|
|
24
|
+
strokeLinecap: "round",
|
|
25
|
+
strokeLinejoin: "round",
|
|
26
|
+
strokeWidth: "2"
|
|
27
|
+
}),
|
|
28
|
+
/* @__PURE__ */ jsx("rect", {
|
|
29
|
+
width: "14.5",
|
|
30
|
+
height: "12.5",
|
|
31
|
+
x: "7",
|
|
32
|
+
y: "7.5",
|
|
33
|
+
stroke: "currentColor",
|
|
34
|
+
strokeLinejoin: "round",
|
|
35
|
+
strokeWidth: "2",
|
|
36
|
+
rx: "2"
|
|
37
|
+
}),
|
|
38
|
+
/* @__PURE__ */ jsx("path", {
|
|
39
|
+
d: "m8.75 17 3.31-3.31a1.25 1.25 0 0 1 1.77 0L17.25 17",
|
|
40
|
+
stroke: "currentColor",
|
|
41
|
+
strokeLinecap: "round",
|
|
42
|
+
strokeLinejoin: "round",
|
|
43
|
+
strokeWidth: "2"
|
|
44
|
+
}),
|
|
45
|
+
/* @__PURE__ */ jsx("path", {
|
|
46
|
+
d: "m15.5 15.25.81-.81a1.25 1.25 0 0 1 1.77 0L20.5 16.86",
|
|
47
|
+
stroke: "currentColor",
|
|
48
|
+
strokeLinecap: "round",
|
|
49
|
+
strokeLinejoin: "round",
|
|
50
|
+
strokeWidth: "2"
|
|
51
|
+
}),
|
|
52
|
+
/* @__PURE__ */ jsx("circle", {
|
|
53
|
+
cx: "17.25",
|
|
54
|
+
cy: "11.25",
|
|
55
|
+
r: "1.25",
|
|
56
|
+
fill: "currentColor"
|
|
57
|
+
})
|
|
58
|
+
]
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function GalleryIndicator({ className, size = "md", photoCount = 35, currentPhoto, totalPhotos = photoCount, label, children, ...props }) {
|
|
62
|
+
const resolvedLabel = children ?? label ?? (currentPhoto === void 0 ? `View All ${photoCount} Photos` : `${currentPhoto}/${totalPhotos}`);
|
|
63
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
64
|
+
"data-slot": "gallery-indicator",
|
|
65
|
+
"data-size": size,
|
|
66
|
+
className: cn(galleryIndicatorVariants({ size }), className),
|
|
67
|
+
...props,
|
|
68
|
+
children: [/* @__PURE__ */ jsx(GalleryIndicatorIcon, { className: "shrink-0 text-white" }), /* @__PURE__ */ jsx("span", {
|
|
69
|
+
className: "min-w-0 truncate",
|
|
70
|
+
children: resolvedLabel
|
|
71
|
+
})]
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//#endregion
|
|
75
|
+
export { GalleryIndicator, GalleryIndicatorIcon, galleryIndicatorVariants };
|