@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/heatmap-chart.d.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ChartCard } 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 } from "./chart.js";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
//#region src/heatmap-chart.d.ts
|
|
8
5
|
/**
|
|
9
6
|
* A heatmap — a row × column grid encoding magnitude as fill intensity.
|
|
10
7
|
* Reach for one to compare a measure across two categorical dimensions at a
|
|
@@ -37,12 +34,12 @@ import 'recharts';
|
|
|
37
34
|
/** Heatmap sizes line up with the three shared `ComponentSize` values. */
|
|
38
35
|
type HeatmapChartSize = ComponentSize;
|
|
39
36
|
type HeatmapChartCellDatum = {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
/** Row category label. */
|
|
38
|
+
row: string;
|
|
39
|
+
/** Column category label. */
|
|
40
|
+
column: string;
|
|
41
|
+
/** Magnitude driving the cell's fill. Omit the datum entirely for "no data". */
|
|
42
|
+
value: number;
|
|
46
43
|
};
|
|
47
44
|
/**
|
|
48
45
|
* Sequential fill ramp — `--color-surface-brand` (already theme-aware) at five
|
|
@@ -54,45 +51,45 @@ type HeatmapChartCellDatum = {
|
|
|
54
51
|
*/
|
|
55
52
|
declare const HEATMAP_CHART_PALETTE: readonly ["rgb(from var(--color-surface-brand) r g b / 0.08)", "rgb(from var(--color-surface-brand) r g b / 0.22)", "rgb(from var(--color-surface-brand) r g b / 0.44)", "rgb(from var(--color-surface-brand) r g b / 0.7)", "rgb(from var(--color-surface-brand) r g b / 1)"];
|
|
56
53
|
type HeatmapChartLayout = {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
54
|
+
/** Width/height of a single (square) cell in px. */
|
|
55
|
+
cellSize: number;
|
|
56
|
+
/** Gap between cells in px. */
|
|
57
|
+
gap: number;
|
|
58
|
+
/** Reserved width for row labels in px. */
|
|
59
|
+
rowLabelWidth: number;
|
|
60
|
+
/** Reserved height for the column header row in px. */
|
|
61
|
+
columnLabelHeight: number;
|
|
62
|
+
/** Row/column label font size in px. */
|
|
63
|
+
labelFontSize: number;
|
|
64
|
+
/** In-cell value label font size in px. */
|
|
65
|
+
valueFontSize: number;
|
|
66
|
+
/** Width of a single legend ramp swatch in px. */
|
|
67
|
+
legendSwatchSize: number;
|
|
71
68
|
};
|
|
72
69
|
declare const HEATMAP_CHART_LAYOUT: Record<HeatmapChartSize, HeatmapChartLayout>;
|
|
73
70
|
type HeatmapChartProps = Omit<React.ComponentProps<typeof ChartCard>, "size" | "children"> & {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
71
|
+
/** Cells — one entry per row/column pair that has a value. */
|
|
72
|
+
data: HeatmapChartCellDatum[];
|
|
73
|
+
/** Row order, top to bottom. Defaults to first-seen order in `data`. */
|
|
74
|
+
rows?: string[];
|
|
75
|
+
/** Column order, left to right. Defaults to first-seen order in `data`. */
|
|
76
|
+
columns?: string[];
|
|
77
|
+
/** Fixed `[min, max]` for the color scale. Defaults to the data's range. */
|
|
78
|
+
domain?: [number, number];
|
|
79
|
+
/** Explicit size; otherwise inherited from the nearest `SizeProvider`. */
|
|
80
|
+
size?: HeatmapChartSize;
|
|
81
|
+
/** Chart heading. Omit to hide the title. */
|
|
82
|
+
title?: React.ReactNode;
|
|
83
|
+
/** Supporting metadata (period, source). Omit to hide the description. */
|
|
84
|
+
description?: React.ReactNode;
|
|
85
|
+
/** Show the sequential-scale legend under the grid. Default true. */
|
|
86
|
+
legend?: boolean;
|
|
87
|
+
/** Print the formatted value inside every cell. Default false — the
|
|
88
|
+
* hover/focus tooltip carries exact figures without crowding the grid. */
|
|
89
|
+
showValues?: boolean;
|
|
90
|
+
/** Format a cell value for the tooltip, legend, and in-cell label. */
|
|
91
|
+
valueFormatter?: (value: number) => string;
|
|
95
92
|
};
|
|
96
93
|
declare function HeatmapChart({ data, rows: rowsProp, columns: columnsProp, domain: domainProp, size, title, description, legend, showValues, valueFormatter, className, ...props }: HeatmapChartProps): React.JSX.Element;
|
|
97
|
-
|
|
98
|
-
export { HEATMAP_CHART_LAYOUT, HEATMAP_CHART_PALETTE, HeatmapChart, type HeatmapChartCellDatum, type HeatmapChartLayout, type HeatmapChartProps, type HeatmapChartSize };
|
|
94
|
+
//#endregion
|
|
95
|
+
export { HEATMAP_CHART_LAYOUT, HEATMAP_CHART_PALETTE, HeatmapChart, type HeatmapChartCellDatum, type HeatmapChartLayout, type HeatmapChartProps, type HeatmapChartSize };
|
package/dist/heatmap-chart.js
CHANGED
|
@@ -1,248 +1,197 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
ChartDescription,
|
|
5
|
-
ChartHeader,
|
|
6
|
-
ChartTitle
|
|
7
|
-
} from "./chunk-NOFXVRWL.js";
|
|
8
|
-
import {
|
|
9
|
-
useComponentSize
|
|
10
|
-
} from "./chunk-HL3ZSYES.js";
|
|
11
|
-
import "./chunk-Y4TTYVNE.js";
|
|
12
|
-
|
|
13
|
-
// src/heatmap-chart.tsx
|
|
14
|
-
import { Fragment } from "react";
|
|
2
|
+
import { useComponentSize } from "./size-context.js";
|
|
3
|
+
import { ChartCard, ChartDescription, ChartHeader, ChartTitle } from "./chart.js";
|
|
15
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
5
|
+
import { Fragment as Fragment$1 } from "react";
|
|
6
|
+
//#region src/heatmap-chart.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Sequential fill ramp — `--color-surface-brand` (already theme-aware) at five
|
|
9
|
+
* magnitude-scaled opacity stops: 8%, 22%, 44%, 70%, 100%. Index 0 is the
|
|
10
|
+
* lowest magnitude bucket, index 4 the highest — assign by bucket order,
|
|
11
|
+
* never by an arbitrary opacity pick. Relative color syntax (`rgb(from … / a)`)
|
|
12
|
+
* keeps each stop a true alpha over whatever surface it sits on, matching the
|
|
13
|
+
* shadow/gradient tokens in `styles/giddaa.css`.
|
|
14
|
+
*/
|
|
15
|
+
const HEATMAP_CHART_PALETTE = [
|
|
16
|
+
"rgb(from var(--color-surface-brand) r g b / 0.08)",
|
|
17
|
+
"rgb(from var(--color-surface-brand) r g b / 0.22)",
|
|
18
|
+
"rgb(from var(--color-surface-brand) r g b / 0.44)",
|
|
19
|
+
"rgb(from var(--color-surface-brand) r g b / 0.7)",
|
|
20
|
+
"rgb(from var(--color-surface-brand) r g b / 1)"
|
|
22
21
|
];
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
22
|
+
const HEATMAP_CHART_LAYOUT = {
|
|
23
|
+
sm: {
|
|
24
|
+
cellSize: 20,
|
|
25
|
+
gap: 3,
|
|
26
|
+
rowLabelWidth: 64,
|
|
27
|
+
columnLabelHeight: 20,
|
|
28
|
+
labelFontSize: 10,
|
|
29
|
+
valueFontSize: 9,
|
|
30
|
+
legendSwatchSize: 14
|
|
31
|
+
},
|
|
32
|
+
md: {
|
|
33
|
+
cellSize: 26,
|
|
34
|
+
gap: 3,
|
|
35
|
+
rowLabelWidth: 80,
|
|
36
|
+
columnLabelHeight: 22,
|
|
37
|
+
labelFontSize: 11,
|
|
38
|
+
valueFontSize: 10,
|
|
39
|
+
legendSwatchSize: 16
|
|
40
|
+
},
|
|
41
|
+
lg: {
|
|
42
|
+
cellSize: 32,
|
|
43
|
+
gap: 4,
|
|
44
|
+
rowLabelWidth: 96,
|
|
45
|
+
columnLabelHeight: 24,
|
|
46
|
+
labelFontSize: 12,
|
|
47
|
+
valueFontSize: 11,
|
|
48
|
+
legendSwatchSize: 18
|
|
49
|
+
}
|
|
51
50
|
};
|
|
51
|
+
/** Joins a row/column pair into a stable lookup key. */
|
|
52
52
|
function cellKey(row, column) {
|
|
53
|
-
|
|
53
|
+
return `${row}␟${column}`;
|
|
54
54
|
}
|
|
55
|
+
/** Buckets a value into one of the five palette steps (1 = lowest, 5 = highest). */
|
|
55
56
|
function heatmapStep(value, domain) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
const [min, max] = domain;
|
|
58
|
+
if (max <= min) return HEATMAP_CHART_PALETTE.length;
|
|
59
|
+
const ratio = (value - min) / (max - min);
|
|
60
|
+
const step = Math.ceil(ratio * HEATMAP_CHART_PALETTE.length);
|
|
61
|
+
return Math.min(HEATMAP_CHART_PALETTE.length, Math.max(1, step));
|
|
61
62
|
}
|
|
62
|
-
function HeatmapChart({
|
|
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
|
-
className: "flex items-center truncate pr-2 text-fg-secondary",
|
|
122
|
-
style: {
|
|
123
|
-
fontSize: layout.labelFontSize,
|
|
124
|
-
height: layout.cellSize
|
|
125
|
-
},
|
|
126
|
-
title: row,
|
|
127
|
-
children: row
|
|
128
|
-
}
|
|
129
|
-
),
|
|
130
|
-
columns.map((column) => /* @__PURE__ */ jsx(
|
|
131
|
-
HeatmapChartCell,
|
|
132
|
-
{
|
|
133
|
-
row,
|
|
134
|
-
column,
|
|
135
|
-
value: valuesByKey.get(cellKey(row, column)),
|
|
136
|
-
domain,
|
|
137
|
-
layout,
|
|
138
|
-
showValue: showValues,
|
|
139
|
-
valueFormatter
|
|
140
|
-
},
|
|
141
|
-
column
|
|
142
|
-
))
|
|
143
|
-
] }, row))
|
|
144
|
-
]
|
|
145
|
-
}
|
|
146
|
-
) }),
|
|
147
|
-
legend && /* @__PURE__ */ jsx(
|
|
148
|
-
HeatmapChartLegend,
|
|
149
|
-
{
|
|
150
|
-
domain,
|
|
151
|
-
layout,
|
|
152
|
-
valueFormatter
|
|
153
|
-
}
|
|
154
|
-
)
|
|
155
|
-
] })
|
|
156
|
-
] });
|
|
63
|
+
function HeatmapChart({ data, rows: rowsProp, columns: columnsProp, domain: domainProp, size, title, description, legend = true, showValues = false, valueFormatter = (value) => value.toLocaleString("en-NG"), className, ...props }) {
|
|
64
|
+
const resolvedSize = useComponentSize(size);
|
|
65
|
+
const layout = HEATMAP_CHART_LAYOUT[resolvedSize];
|
|
66
|
+
const rows = rowsProp ?? Array.from(new Set(data.map((d) => d.row)));
|
|
67
|
+
const columns = columnsProp ?? Array.from(new Set(data.map((d) => d.column)));
|
|
68
|
+
const valuesByKey = new Map(data.map((datum) => [cellKey(datum.row, datum.column), datum.value]));
|
|
69
|
+
const values = data.map((datum) => datum.value);
|
|
70
|
+
const domain = domainProp ?? [values.length ? Math.min(...values) : 0, values.length ? Math.max(...values) : 1];
|
|
71
|
+
return /* @__PURE__ */ jsxs(ChartCard, {
|
|
72
|
+
size: resolvedSize,
|
|
73
|
+
className,
|
|
74
|
+
...props,
|
|
75
|
+
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", {
|
|
76
|
+
className: "flex flex-col gap-3",
|
|
77
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
78
|
+
className: "overflow-x-auto",
|
|
79
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
80
|
+
className: "inline-grid",
|
|
81
|
+
style: {
|
|
82
|
+
gridTemplateColumns: `${layout.rowLabelWidth}px repeat(${columns.length}, ${layout.cellSize}px)`,
|
|
83
|
+
gap: layout.gap
|
|
84
|
+
},
|
|
85
|
+
children: [
|
|
86
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true" }),
|
|
87
|
+
columns.map((column) => /* @__PURE__ */ jsx("span", {
|
|
88
|
+
className: "flex items-end justify-center truncate px-0.5 pb-1 text-fg-secondary",
|
|
89
|
+
style: {
|
|
90
|
+
fontSize: layout.labelFontSize,
|
|
91
|
+
height: layout.columnLabelHeight
|
|
92
|
+
},
|
|
93
|
+
title: column,
|
|
94
|
+
children: column
|
|
95
|
+
}, column)),
|
|
96
|
+
rows.map((row) => /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
|
|
97
|
+
className: "flex items-center truncate pr-2 text-fg-secondary",
|
|
98
|
+
style: {
|
|
99
|
+
fontSize: layout.labelFontSize,
|
|
100
|
+
height: layout.cellSize
|
|
101
|
+
},
|
|
102
|
+
title: row,
|
|
103
|
+
children: row
|
|
104
|
+
}), columns.map((column) => /* @__PURE__ */ jsx(HeatmapChartCell, {
|
|
105
|
+
row,
|
|
106
|
+
column,
|
|
107
|
+
value: valuesByKey.get(cellKey(row, column)),
|
|
108
|
+
domain,
|
|
109
|
+
layout,
|
|
110
|
+
showValue: showValues,
|
|
111
|
+
valueFormatter
|
|
112
|
+
}, column))] }, row))
|
|
113
|
+
]
|
|
114
|
+
})
|
|
115
|
+
}), legend && /* @__PURE__ */ jsx(HeatmapChartLegend, {
|
|
116
|
+
domain,
|
|
117
|
+
layout,
|
|
118
|
+
valueFormatter
|
|
119
|
+
})]
|
|
120
|
+
})]
|
|
121
|
+
});
|
|
157
122
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
/* @__PURE__ */ jsx(
|
|
203
|
-
"span",
|
|
204
|
-
{
|
|
205
|
-
role: "tooltip",
|
|
206
|
-
className: "pointer-events-none absolute bottom-full left-1/2 z-10 mb-1.5 -translate-x-1/2 whitespace-nowrap rounded-md border border-line-subtle bg-surface-overlay px-2 py-1 text-fg-primary text-gdt-xs opacity-0 shadow-2 transition-opacity group-hover/cell:opacity-100 group-focus-visible/cell:opacity-100",
|
|
207
|
-
children: label
|
|
208
|
-
}
|
|
209
|
-
)
|
|
210
|
-
]
|
|
211
|
-
}
|
|
212
|
-
);
|
|
123
|
+
/**
|
|
124
|
+
* One grid cell. Missing data (no matching datum for this row/column) renders
|
|
125
|
+
* a dashed placeholder and is skipped from tab order — there is nothing to
|
|
126
|
+
* announce or hover. A valued cell is a focusable, hoverable swatch: the
|
|
127
|
+
* `aria-label` carries the row/column/value so screen readers get the exact
|
|
128
|
+
* figure without relying on the visual tooltip, which mirrors it for sighted
|
|
129
|
+
* hover/keyboard-focus use.
|
|
130
|
+
*/
|
|
131
|
+
function HeatmapChartCell({ row, column, value, domain, layout, showValue, valueFormatter }) {
|
|
132
|
+
if (value == null) return /* @__PURE__ */ jsx("span", {
|
|
133
|
+
className: "rounded-[4px] border border-line-subtle border-dashed",
|
|
134
|
+
style: {
|
|
135
|
+
width: layout.cellSize,
|
|
136
|
+
height: layout.cellSize
|
|
137
|
+
},
|
|
138
|
+
title: `${row} · ${column}: no data`
|
|
139
|
+
});
|
|
140
|
+
const step = heatmapStep(value, domain);
|
|
141
|
+
const color = HEATMAP_CHART_PALETTE[step - 1];
|
|
142
|
+
const formatted = valueFormatter(value);
|
|
143
|
+
const label = `${row} · ${column}: ${formatted}`;
|
|
144
|
+
const textColor = step >= 4 ? "var(--color-fg-on-brand)" : "var(--color-fg-primary)";
|
|
145
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
146
|
+
type: "button",
|
|
147
|
+
className: "group/cell relative flex items-center justify-center rounded-[4px] outline-none focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)]",
|
|
148
|
+
style: {
|
|
149
|
+
width: layout.cellSize,
|
|
150
|
+
height: layout.cellSize,
|
|
151
|
+
backgroundColor: color
|
|
152
|
+
},
|
|
153
|
+
"aria-label": label,
|
|
154
|
+
children: [showValue && /* @__PURE__ */ jsx("span", {
|
|
155
|
+
className: "pointer-events-none tabular-nums",
|
|
156
|
+
style: {
|
|
157
|
+
fontSize: layout.valueFontSize,
|
|
158
|
+
color: textColor
|
|
159
|
+
},
|
|
160
|
+
children: formatted
|
|
161
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
162
|
+
role: "tooltip",
|
|
163
|
+
className: "pointer-events-none absolute bottom-full left-1/2 z-10 mb-1.5 -translate-x-1/2 whitespace-nowrap rounded-md border border-line-subtle bg-surface-overlay px-2 py-1 text-fg-primary text-gdt-xs opacity-0 shadow-2 transition-opacity group-hover/cell:opacity-100 group-focus-visible/cell:opacity-100",
|
|
164
|
+
children: label
|
|
165
|
+
})]
|
|
166
|
+
});
|
|
213
167
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
);
|
|
168
|
+
/** Sequential-scale legend — the opacity ramp bounded by the domain's min/max. */
|
|
169
|
+
function HeatmapChartLegend({ domain, layout, valueFormatter }) {
|
|
170
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
171
|
+
className: "flex items-center gap-2 text-fg-caption-placeholder",
|
|
172
|
+
style: { fontSize: layout.labelFontSize },
|
|
173
|
+
children: [
|
|
174
|
+
/* @__PURE__ */ jsx("span", {
|
|
175
|
+
className: "tabular-nums",
|
|
176
|
+
children: valueFormatter(domain[0])
|
|
177
|
+
}),
|
|
178
|
+
/* @__PURE__ */ jsx("div", {
|
|
179
|
+
className: "flex overflow-hidden rounded-[3px]",
|
|
180
|
+
children: HEATMAP_CHART_PALETTE.map((color) => /* @__PURE__ */ jsx("span", {
|
|
181
|
+
"aria-hidden": "true",
|
|
182
|
+
style: {
|
|
183
|
+
backgroundColor: color,
|
|
184
|
+
width: layout.legendSwatchSize,
|
|
185
|
+
height: layout.legendSwatchSize / 2
|
|
186
|
+
}
|
|
187
|
+
}, color))
|
|
188
|
+
}),
|
|
189
|
+
/* @__PURE__ */ jsx("span", {
|
|
190
|
+
className: "tabular-nums",
|
|
191
|
+
children: valueFormatter(domain[1])
|
|
192
|
+
})
|
|
193
|
+
]
|
|
194
|
+
});
|
|
242
195
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
HEATMAP_CHART_PALETTE,
|
|
246
|
-
HeatmapChart
|
|
247
|
-
};
|
|
248
|
-
//# sourceMappingURL=heatmap-chart.js.map
|
|
196
|
+
//#endregion
|
|
197
|
+
export { HEATMAP_CHART_LAYOUT, HEATMAP_CHART_PALETTE, HeatmapChart };
|
package/dist/infotip.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
declare function
|
|
5
|
-
declare function InfotipTrigger({ ...props }: Popover.Trigger.Props): React.JSX.Element;
|
|
1
|
+
import { Popover } from "@base-ui/react/popover";
|
|
2
|
+
//#region src/infotip.d.ts
|
|
3
|
+
declare function Infotip({ ...props }: Popover.Root.Props): import("react").JSX.Element;
|
|
4
|
+
declare function InfotipTrigger({ ...props }: Popover.Trigger.Props): import("react").JSX.Element;
|
|
6
5
|
type InfotipContentProps = Popover.Popup.Props & Pick<Popover.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset"> & Pick<Popover.Portal.Props, "container"> & {
|
|
7
|
-
|
|
6
|
+
showArrow?: boolean;
|
|
8
7
|
};
|
|
9
|
-
declare function InfotipContent({ className, container, side, sideOffset, align, alignOffset, showArrow, children, ...props }: InfotipContentProps):
|
|
10
|
-
|
|
11
|
-
export { Infotip, InfotipContent, InfotipTrigger };
|
|
8
|
+
declare function InfotipContent({ className, container, side, sideOffset, align, alignOffset, showArrow, children, ...props }: InfotipContentProps): import("react").JSX.Element;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { Infotip, InfotipContent, InfotipTrigger };
|