@giddaa-housing/ui 1.0.0 → 1.1.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/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 +33 -33
- package/dist/bullet-chart.js +121 -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 +58 -59
- package/dist/chart.js +376 -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 +164 -0
- package/dist/data-table.js +673 -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 +38 -41
- package/dist/funnel-chart.js +167 -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 +88 -89
- package/dist/line-chart.js +142 -104
- 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 +61 -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 +60 -60
- package/dist/pie-chart.js +140 -148
- 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/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 +43 -46
- package/dist/sparkline.js +221 -251
- package/dist/stepper.d.ts +23 -24
- package/dist/stepper.js +149 -246
- package/dist/styles.css +510 -108
- 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 +113 -154
- package/dist/tabs.d.ts +23 -15
- package/dist/tabs.js +71 -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 +54 -57
- package/dist/tree-map.js +227 -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 +28 -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
|
|
@@ -35,12 +32,12 @@ type FunnelChartType = "funnel" | "bars";
|
|
|
35
32
|
/** Where the colour-key legend sits relative to the plot. */
|
|
36
33
|
type FunnelLegendPlacement = "right" | "bottom";
|
|
37
34
|
type FunnelStage = {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
35
|
+
/** Stage name, e.g. "Applied". */
|
|
36
|
+
label: string;
|
|
37
|
+
/** Absolute count reaching this stage. */
|
|
38
|
+
value: number;
|
|
39
|
+
/** Segment colour; defaults to the palette in stage order. */
|
|
40
|
+
fill?: string;
|
|
44
41
|
};
|
|
45
42
|
/**
|
|
46
43
|
* Stage palette, ordered top-of-funnel → bottom: forest → brass → moss → clay →
|
|
@@ -49,36 +46,36 @@ type FunnelStage = {
|
|
|
49
46
|
*/
|
|
50
47
|
declare const FUNNEL_CHART_PALETTE: readonly ["var(--color-forest-700)", "var(--color-brass-500)", "var(--color-moss-600)", "var(--color-clay-500)", "var(--color-stone-500)"];
|
|
51
48
|
type FunnelChartLayout = {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
49
|
+
/** Plot box height in px. */
|
|
50
|
+
height: number;
|
|
51
|
+
/** Plot box width in px — the funnel/bars column; labels + legend flow after. */
|
|
52
|
+
width: number;
|
|
53
|
+
/** Corner radius for the `bars` rendering. */
|
|
54
|
+
barRadius: number;
|
|
55
|
+
/** Bar thickness cap for the `bars` rendering. */
|
|
56
|
+
barMaxSize: number;
|
|
60
57
|
};
|
|
61
58
|
declare const FUNNEL_CHART_LAYOUT: Record<FunnelChartSize, FunnelChartLayout>;
|
|
62
59
|
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
|
-
|
|
60
|
+
/** Stages in funnel order — the widest (top) stage first. */
|
|
61
|
+
data: FunnelStage[];
|
|
62
|
+
/** Plot rendering. Defaults to `funnel`. */
|
|
63
|
+
type?: FunnelChartType;
|
|
64
|
+
/** Explicit size; otherwise inherited from the nearest `SizeProvider`. */
|
|
65
|
+
size?: FunnelChartSize;
|
|
66
|
+
/** Chart heading. Omit to hide the title. */
|
|
67
|
+
title?: React.ReactNode;
|
|
68
|
+
/** Supporting metadata (period, source). Omit to hide the description. */
|
|
69
|
+
description?: React.ReactNode;
|
|
70
|
+
/** Enable the hover value tooltip. Default false. */
|
|
71
|
+
tooltip?: boolean;
|
|
72
|
+
/** Legend placement — a right column or a wrapped bottom row. Default right. */
|
|
73
|
+
legend?: FunnelLegendPlacement;
|
|
74
|
+
/** Format the absolute count in the value label and tooltip. */
|
|
75
|
+
valueFormatter?: (value: number) => string;
|
|
76
|
+
/** Value formatting for the tooltip. Defaults to `number`. */
|
|
77
|
+
valueType?: ChartValueType;
|
|
81
78
|
};
|
|
82
79
|
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 };
|
|
80
|
+
//#endregion
|
|
81
|
+
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,174 @@
|
|
|
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: forest → brass → moss → clay →
|
|
11
|
+
* stone. Giddaa has no `chart-1`…`chart-N` tokens yet, so these map to the brand
|
|
12
|
+
* scales; assign by order, or override per stage with `fill`.
|
|
13
|
+
*/
|
|
14
|
+
const FUNNEL_CHART_PALETTE = [
|
|
15
|
+
"var(--color-forest-700)",
|
|
16
|
+
"var(--color-brass-500)",
|
|
17
|
+
"var(--color-moss-600)",
|
|
18
|
+
"var(--color-clay-500)",
|
|
19
|
+
"var(--color-stone-500)"
|
|
35
20
|
];
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
21
|
+
const FUNNEL_CHART_LAYOUT = {
|
|
22
|
+
sm: {
|
|
23
|
+
height: 150,
|
|
24
|
+
width: 150,
|
|
25
|
+
barRadius: 3,
|
|
26
|
+
barMaxSize: 14
|
|
27
|
+
},
|
|
28
|
+
md: {
|
|
29
|
+
height: 200,
|
|
30
|
+
width: 220,
|
|
31
|
+
barRadius: 4,
|
|
32
|
+
barMaxSize: 18
|
|
33
|
+
},
|
|
34
|
+
lg: {
|
|
35
|
+
height: 264,
|
|
36
|
+
width: 288,
|
|
37
|
+
barRadius: 5,
|
|
38
|
+
barMaxSize: 22
|
|
39
|
+
}
|
|
40
40
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
defaultVariants: { size: "md" }
|
|
41
|
+
/** Vertical stage list — value-label column and the right-hand legend share it. */
|
|
42
|
+
const funnelStageListVariants = cva("flex min-w-0 flex-col", {
|
|
43
|
+
variants: { size: {
|
|
44
|
+
sm: "gap-2 text-gdt-xs",
|
|
45
|
+
md: "gap-3 text-gdt-sm",
|
|
46
|
+
lg: "gap-3.5 text-gdt-sm"
|
|
47
|
+
} },
|
|
48
|
+
defaultVariants: { size: "md" }
|
|
50
49
|
});
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
const funnelLegendDotVariants = cva("shrink-0 rounded-full", {
|
|
51
|
+
variants: { size: {
|
|
52
|
+
sm: "size-2",
|
|
53
|
+
md: "size-2.5",
|
|
54
|
+
lg: "size-3"
|
|
55
|
+
} },
|
|
56
|
+
defaultVariants: { size: "md" }
|
|
56
57
|
});
|
|
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
|
-
] });
|
|
58
|
+
function FunnelChart({ data, type = "funnel", size, title, description, tooltip = false, legend = "right", valueFormatter = (value) => value.toLocaleString("en-NG"), valueType = "number", className, ...props }) {
|
|
59
|
+
const resolvedSize = useComponentSize(size);
|
|
60
|
+
const layout = FUNNEL_CHART_LAYOUT[resolvedSize];
|
|
61
|
+
const stages = data.map((stage, i) => ({
|
|
62
|
+
...stage,
|
|
63
|
+
fill: stage.fill ?? FUNNEL_CHART_PALETTE[i % FUNNEL_CHART_PALETTE.length]
|
|
64
|
+
}));
|
|
65
|
+
const top = stages[0]?.value || 1;
|
|
66
|
+
const config = Object.fromEntries(stages.map((stage) => [stage.label, {
|
|
67
|
+
label: stage.label,
|
|
68
|
+
color: stage.fill
|
|
69
|
+
}]));
|
|
70
|
+
const tooltipNode = tooltip ? /* @__PURE__ */ jsx(ChartTooltip, {
|
|
71
|
+
cursor: false,
|
|
72
|
+
content: /* @__PURE__ */ jsx(ChartTooltipContent, {
|
|
73
|
+
nameKey: "label",
|
|
74
|
+
valueType
|
|
75
|
+
})
|
|
76
|
+
}) : null;
|
|
77
|
+
const chartNode = type === "bars" ? /* @__PURE__ */ jsxs(BarChart, {
|
|
78
|
+
accessibilityLayer: true,
|
|
79
|
+
layout: "vertical",
|
|
80
|
+
data: stages,
|
|
81
|
+
margin: {
|
|
82
|
+
top: 0,
|
|
83
|
+
right: 0,
|
|
84
|
+
bottom: 0,
|
|
85
|
+
left: 0
|
|
86
|
+
},
|
|
87
|
+
barCategoryGap: "0%",
|
|
88
|
+
children: [
|
|
89
|
+
tooltipNode,
|
|
90
|
+
/* @__PURE__ */ jsx(XAxis, {
|
|
91
|
+
type: "number",
|
|
92
|
+
domain: [0, top],
|
|
93
|
+
hide: true
|
|
94
|
+
}),
|
|
95
|
+
/* @__PURE__ */ jsx(YAxis, {
|
|
96
|
+
type: "category",
|
|
97
|
+
dataKey: "label",
|
|
98
|
+
hide: true
|
|
99
|
+
}),
|
|
100
|
+
/* @__PURE__ */ jsx(Bar, {
|
|
101
|
+
dataKey: "value",
|
|
102
|
+
radius: layout.barRadius,
|
|
103
|
+
color: "var(--color-line-subtle)",
|
|
104
|
+
isAnimationActive: false
|
|
105
|
+
})
|
|
106
|
+
]
|
|
107
|
+
}) : /* @__PURE__ */ jsxs(FunnelChart$1, {
|
|
108
|
+
margin: {
|
|
109
|
+
top: 0,
|
|
110
|
+
right: 0,
|
|
111
|
+
bottom: 0,
|
|
112
|
+
left: 0
|
|
113
|
+
},
|
|
114
|
+
children: [tooltipNode, /* @__PURE__ */ jsx(Funnel, {
|
|
115
|
+
data: stages,
|
|
116
|
+
dataKey: "value",
|
|
117
|
+
nameKey: "label",
|
|
118
|
+
isAnimationActive: false
|
|
119
|
+
})]
|
|
120
|
+
});
|
|
121
|
+
const valueLabels = /* @__PURE__ */ jsx("ul", {
|
|
122
|
+
className: cn(funnelStageListVariants({ size: resolvedSize })),
|
|
123
|
+
children: stages.map((stage) => /* @__PURE__ */ jsxs("li", {
|
|
124
|
+
className: "whitespace-nowrap tabular-nums text-fg-primary",
|
|
125
|
+
children: [
|
|
126
|
+
valueFormatter(stage.value),
|
|
127
|
+
" ·",
|
|
128
|
+
" ",
|
|
129
|
+
Math.round(stage.value / top * 100),
|
|
130
|
+
"%"
|
|
131
|
+
]
|
|
132
|
+
}, stage.label))
|
|
133
|
+
});
|
|
134
|
+
const legendNode = /* @__PURE__ */ jsx("ul", {
|
|
135
|
+
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")),
|
|
136
|
+
children: stages.map((stage) => /* @__PURE__ */ jsxs("li", {
|
|
137
|
+
className: "flex items-center gap-2 text-fg-primary",
|
|
138
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
139
|
+
"aria-hidden": "true",
|
|
140
|
+
className: cn(funnelLegendDotVariants({ size: resolvedSize })),
|
|
141
|
+
style: { backgroundColor: stage.fill }
|
|
142
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
143
|
+
className: "min-w-0 truncate",
|
|
144
|
+
children: stage.label
|
|
145
|
+
})]
|
|
146
|
+
}, stage.label))
|
|
147
|
+
});
|
|
148
|
+
return /* @__PURE__ */ jsxs(ChartCard, {
|
|
149
|
+
size: resolvedSize,
|
|
150
|
+
className,
|
|
151
|
+
...props,
|
|
152
|
+
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", {
|
|
153
|
+
className: "flex flex-col gap-4",
|
|
154
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
155
|
+
className: "flex flex-wrap items-center gap-x-6 gap-y-4",
|
|
156
|
+
children: [
|
|
157
|
+
/* @__PURE__ */ jsx(ChartContainer, {
|
|
158
|
+
config,
|
|
159
|
+
className: "aspect-auto shrink-0",
|
|
160
|
+
style: {
|
|
161
|
+
width: layout.width,
|
|
162
|
+
height: layout.height
|
|
163
|
+
},
|
|
164
|
+
children: chartNode
|
|
165
|
+
}),
|
|
166
|
+
valueLabels,
|
|
167
|
+
legend === "right" && legendNode
|
|
168
|
+
]
|
|
169
|
+
}), legend === "bottom" && legendNode]
|
|
170
|
+
})]
|
|
171
|
+
});
|
|
190
172
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
FUNNEL_CHART_PALETTE,
|
|
194
|
-
FunnelChart
|
|
195
|
-
};
|
|
196
|
-
//# sourceMappingURL=funnel-chart.js.map
|
|
173
|
+
//#endregion
|
|
174
|
+
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 };
|