@cronus-ui/ui 0.6.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/LICENSE +21 -0
- package/README.md +262 -0
- package/dist/charts/animation.d.ts +11 -0
- package/dist/charts/animation.js +29 -0
- package/dist/charts/area-chart-loading.d.ts +34 -0
- package/dist/charts/area-chart-loading.js +22 -0
- package/dist/charts/area-chart.d.ts +48 -0
- package/dist/charts/area-chart.js +57 -0
- package/dist/charts/area-gradient-defs.d.ts +20 -0
- package/dist/charts/area-gradient-defs.js +15 -0
- package/dist/charts/area.d.ts +76 -0
- package/dist/charts/area.js +104 -0
- package/dist/charts/background.d.ts +27 -0
- package/dist/charts/background.js +68 -0
- package/dist/charts/bar-chart-loading.d.ts +17 -0
- package/dist/charts/bar-chart-loading.js +14 -0
- package/dist/charts/bar-chart.d.ts +55 -0
- package/dist/charts/bar-chart.js +432 -0
- package/dist/charts/bar-depth-geometry.d.ts +33 -0
- package/dist/charts/bar-depth-geometry.js +38 -0
- package/dist/charts/bar-depth.d.ts +157 -0
- package/dist/charts/bar-depth.js +586 -0
- package/dist/charts/bar-squares-layout.d.ts +28 -0
- package/dist/charts/bar-squares-layout.js +47 -0
- package/dist/charts/bar-squares.d.ts +49 -0
- package/dist/charts/bar-squares.js +207 -0
- package/dist/charts/bar-x-axis.d.ts +14 -0
- package/dist/charts/bar-x-axis.js +73 -0
- package/dist/charts/bar-y-axis.d.ts +12 -0
- package/dist/charts/bar-y-axis.js +64 -0
- package/dist/charts/bar.d.ts +41 -0
- package/dist/charts/bar.js +208 -0
- package/dist/charts/candlestick-chart.d.ts +46 -0
- package/dist/charts/candlestick-chart.js +203 -0
- package/dist/charts/candlestick.d.ts +24 -0
- package/dist/charts/candlestick.js +139 -0
- package/dist/charts/chart-brush-handle.d.ts +15 -0
- package/dist/charts/chart-brush-handle.js +47 -0
- package/dist/charts/chart-brush-layout.d.ts +27 -0
- package/dist/charts/chart-brush-layout.js +42 -0
- package/dist/charts/chart-brush-selection-overlay.d.ts +19 -0
- package/dist/charts/chart-brush-selection-overlay.js +44 -0
- package/dist/charts/chart-brush-track-overlay.d.ts +23 -0
- package/dist/charts/chart-brush-track-overlay.js +65 -0
- package/dist/charts/chart-brush.d.ts +32 -0
- package/dist/charts/chart-brush.js +116 -0
- package/dist/charts/chart-center-typography.d.ts +12 -0
- package/dist/charts/chart-center-typography.js +12 -0
- package/dist/charts/chart-child-passthrough.d.ts +17 -0
- package/dist/charts/chart-child-passthrough.js +74 -0
- package/dist/charts/chart-config-context.d.ts +26 -0
- package/dist/charts/chart-config-context.js +47 -0
- package/dist/charts/chart-context.d.ts +199 -0
- package/dist/charts/chart-context.js +201 -0
- package/dist/charts/chart-defs.d.ts +13 -0
- package/dist/charts/chart-defs.js +49 -0
- package/dist/charts/chart-formatters.d.ts +10 -0
- package/dist/charts/chart-formatters.js +28 -0
- package/dist/charts/chart-legend-hover.d.ts +13 -0
- package/dist/charts/chart-legend-hover.js +18 -0
- package/dist/charts/chart-legend.d.ts +55 -0
- package/dist/charts/chart-legend.js +30 -0
- package/dist/charts/chart-loading-label.d.ts +10 -0
- package/dist/charts/chart-loading-label.js +21 -0
- package/dist/charts/chart-phase.d.ts +31 -0
- package/dist/charts/chart-phase.js +21 -0
- package/dist/charts/chart-reveal-clip.d.ts +24 -0
- package/dist/charts/chart-reveal-clip.js +24 -0
- package/dist/charts/chart-scale.d.ts +12 -0
- package/dist/charts/chart-scale.js +17 -0
- package/dist/charts/chart-stat-flow.d.ts +36 -0
- package/dist/charts/chart-stat-flow.js +23 -0
- package/dist/charts/choropleth/choropleth-chart.d.ts +43 -0
- package/dist/charts/choropleth/choropleth-chart.js +218 -0
- package/dist/charts/choropleth/choropleth-context.d.ts +86 -0
- package/dist/charts/choropleth/choropleth-context.js +106 -0
- package/dist/charts/choropleth/choropleth-feature.d.ts +13 -0
- package/dist/charts/choropleth/choropleth-feature.js +125 -0
- package/dist/charts/choropleth/choropleth-graticule.d.ts +11 -0
- package/dist/charts/choropleth/choropleth-graticule.js +12 -0
- package/dist/charts/choropleth/choropleth-tooltip.d.ts +31 -0
- package/dist/charts/choropleth/choropleth-tooltip.js +50 -0
- package/dist/charts/choropleth/index.d.ts +7 -0
- package/dist/charts/choropleth/index.js +6 -0
- package/dist/charts/composed-chart.d.ts +36 -0
- package/dist/charts/composed-chart.js +152 -0
- package/dist/charts/dash-tail-stroke.d.ts +18 -0
- package/dist/charts/dash-tail-stroke.js +13 -0
- package/dist/charts/decimate-time-series.d.ts +10 -0
- package/dist/charts/decimate-time-series.js +112 -0
- package/dist/charts/fade-edges.d.ts +34 -0
- package/dist/charts/fade-edges.js +35 -0
- package/dist/charts/filter-data-by-x-domain.d.ts +5 -0
- package/dist/charts/filter-data-by-x-domain.js +42 -0
- package/dist/charts/funnel-chart.d.ts +91 -0
- package/dist/charts/funnel-chart.js +302 -0
- package/dist/charts/gauge-label-layout.d.ts +22 -0
- package/dist/charts/gauge-label-layout.js +44 -0
- package/dist/charts/gauge.d.ts +56 -0
- package/dist/charts/gauge.js +307 -0
- package/dist/charts/generate-chart-skeleton-data.d.ts +16 -0
- package/dist/charts/generate-chart-skeleton-data.js +25 -0
- package/dist/charts/grid.d.ts +58 -0
- package/dist/charts/grid.js +80 -0
- package/dist/charts/heatmap/generate-heatmap-skeleton-data.d.ts +4 -0
- package/dist/charts/heatmap/generate-heatmap-skeleton-data.js +12 -0
- package/dist/charts/heatmap/heatmap-animation.d.ts +41 -0
- package/dist/charts/heatmap/heatmap-animation.js +85 -0
- package/dist/charts/heatmap/heatmap-cells.d.ts +21 -0
- package/dist/charts/heatmap/heatmap-cells.js +265 -0
- package/dist/charts/heatmap/heatmap-chart-loading.d.ts +21 -0
- package/dist/charts/heatmap/heatmap-chart-loading.js +14 -0
- package/dist/charts/heatmap/heatmap-chart.d.ts +80 -0
- package/dist/charts/heatmap/heatmap-chart.js +275 -0
- package/dist/charts/heatmap/heatmap-colors.d.ts +70 -0
- package/dist/charts/heatmap/heatmap-colors.js +113 -0
- package/dist/charts/heatmap/heatmap-context.d.ts +109 -0
- package/dist/charts/heatmap/heatmap-context.js +69 -0
- package/dist/charts/heatmap/heatmap-legend-gradient.d.ts +20 -0
- package/dist/charts/heatmap/heatmap-legend-gradient.js +44 -0
- package/dist/charts/heatmap/heatmap-legend-swatch.d.ts +8 -0
- package/dist/charts/heatmap/heatmap-legend-swatch.js +26 -0
- package/dist/charts/heatmap/heatmap-legend.d.ts +41 -0
- package/dist/charts/heatmap/heatmap-legend.js +68 -0
- package/dist/charts/heatmap/heatmap-pattern-defs.d.ts +5 -0
- package/dist/charts/heatmap/heatmap-pattern-defs.js +25 -0
- package/dist/charts/heatmap/heatmap-resolve-separator.d.ts +8 -0
- package/dist/charts/heatmap/heatmap-resolve-separator.js +82 -0
- package/dist/charts/heatmap/heatmap-separator.d.ts +63 -0
- package/dist/charts/heatmap/heatmap-separator.js +71 -0
- package/dist/charts/heatmap/heatmap-tooltip.d.ts +30 -0
- package/dist/charts/heatmap/heatmap-tooltip.js +20 -0
- package/dist/charts/heatmap/heatmap-utils.d.ts +175 -0
- package/dist/charts/heatmap/heatmap-utils.js +595 -0
- package/dist/charts/heatmap/heatmap-x-axis.d.ts +7 -0
- package/dist/charts/heatmap/heatmap-x-axis.js +54 -0
- package/dist/charts/heatmap/heatmap-y-axis.d.ts +14 -0
- package/dist/charts/heatmap/heatmap-y-axis.js +37 -0
- package/dist/charts/heatmap/index.d.ts +15 -0
- package/dist/charts/heatmap/index.js +15 -0
- package/dist/charts/heatmap/use-delayed-tooltip-data.d.ts +3 -0
- package/dist/charts/heatmap/use-delayed-tooltip-data.js +53 -0
- package/dist/charts/highlight-segment-bounds.d.ts +18 -0
- package/dist/charts/highlight-segment-bounds.js +36 -0
- package/dist/charts/highlight-segment.d.ts +22 -0
- package/dist/charts/highlight-segment.js +14 -0
- package/dist/charts/index.d.ts +106 -0
- package/dist/charts/index.js +133 -0
- package/dist/charts/indicator-fade.d.ts +15 -0
- package/dist/charts/indicator-fade.js +42 -0
- package/dist/charts/legend/index.d.ts +8 -0
- package/dist/charts/legend/index.js +10 -0
- package/dist/charts/legend/legend-context.d.ts +48 -0
- package/dist/charts/legend/legend-context.js +34 -0
- package/dist/charts/legend/legend-item.d.ts +12 -0
- package/dist/charts/legend/legend-item.js +11 -0
- package/dist/charts/legend/legend-label.d.ts +9 -0
- package/dist/charts/legend/legend-label.js +10 -0
- package/dist/charts/legend/legend-marker.d.ts +9 -0
- package/dist/charts/legend/legend-marker.js +11 -0
- package/dist/charts/legend/legend-progress.d.ts +13 -0
- package/dist/charts/legend/legend-progress.js +15 -0
- package/dist/charts/legend/legend-value.d.ts +17 -0
- package/dist/charts/legend/legend-value.js +11 -0
- package/dist/charts/legend/legend.d.ts +23 -0
- package/dist/charts/legend/legend.js +43 -0
- package/dist/charts/line-chart-loading.d.ts +34 -0
- package/dist/charts/line-chart-loading.js +22 -0
- package/dist/charts/line-chart.d.ts +46 -0
- package/dist/charts/line-chart.js +91 -0
- package/dist/charts/line-loading-pulse.d.ts +20 -0
- package/dist/charts/line-loading-pulse.js +124 -0
- package/dist/charts/line-loading-timing.d.ts +10 -0
- package/dist/charts/line-loading-timing.js +10 -0
- package/dist/charts/line-series-terminal-marker.d.ts +16 -0
- package/dist/charts/line-series-terminal-marker.js +46 -0
- package/dist/charts/line.d.ts +64 -0
- package/dist/charts/line.js +96 -0
- package/dist/charts/live-line-chart.d.ts +35 -0
- package/dist/charts/live-line-chart.js +374 -0
- package/dist/charts/live-line.d.ts +39 -0
- package/dist/charts/live-line.js +78 -0
- package/dist/charts/live-x-axis.d.ts +12 -0
- package/dist/charts/live-x-axis.js +85 -0
- package/dist/charts/live-y-axis.d.ts +16 -0
- package/dist/charts/live-y-axis.js +137 -0
- package/dist/charts/loading-sweep.d.ts +66 -0
- package/dist/charts/loading-sweep.js +174 -0
- package/dist/charts/markers/chart-markers.d.ts +25 -0
- package/dist/charts/markers/chart-markers.js +87 -0
- package/dist/charts/markers/index.d.ts +3 -0
- package/dist/charts/markers/index.js +3 -0
- package/dist/charts/markers/marker-group.d.ts +88 -0
- package/dist/charts/markers/marker-group.js +171 -0
- package/dist/charts/motion-utils.d.ts +9 -0
- package/dist/charts/motion-utils.js +28 -0
- package/dist/charts/notch-gauge-shared.d.ts +49 -0
- package/dist/charts/notch-gauge-shared.js +103 -0
- package/dist/charts/path-stroke-utils.d.ts +20 -0
- package/dist/charts/path-stroke-utils.js +55 -0
- package/dist/charts/pattern-area.d.ts +21 -0
- package/dist/charts/pattern-area.js +19 -0
- package/dist/charts/pattern-preset.d.ts +26 -0
- package/dist/charts/pattern-preset.js +83 -0
- package/dist/charts/pie-center-shell.d.ts +24 -0
- package/dist/charts/pie-center-shell.js +109 -0
- package/dist/charts/pie-center.d.ts +46 -0
- package/dist/charts/pie-center.js +46 -0
- package/dist/charts/pie-chart.d.ts +50 -0
- package/dist/charts/pie-chart.js +248 -0
- package/dist/charts/pie-context.d.ts +74 -0
- package/dist/charts/pie-context.js +95 -0
- package/dist/charts/pie-slice.d.ts +28 -0
- package/dist/charts/pie-slice.js +180 -0
- package/dist/charts/profit-loss-legend-hover.d.ts +11 -0
- package/dist/charts/profit-loss-legend-hover.js +12 -0
- package/dist/charts/profit-loss-legend.d.ts +17 -0
- package/dist/charts/profit-loss-legend.js +18 -0
- package/dist/charts/profit-loss-line.d.ts +27 -0
- package/dist/charts/profit-loss-line.js +77 -0
- package/dist/charts/profit-loss-segments.d.ts +12 -0
- package/dist/charts/profit-loss-segments.js +86 -0
- package/dist/charts/projection-config.d.ts +11 -0
- package/dist/charts/projection-config.js +80 -0
- package/dist/charts/projection-line-end-marker.d.ts +15 -0
- package/dist/charts/projection-line-end-marker.js +27 -0
- package/dist/charts/projection-line.d.ts +40 -0
- package/dist/charts/projection-line.js +79 -0
- package/dist/charts/projection-utils.d.ts +46 -0
- package/dist/charts/projection-utils.js +253 -0
- package/dist/charts/radar-area.d.ts +17 -0
- package/dist/charts/radar-area.js +84 -0
- package/dist/charts/radar-axis.d.ts +14 -0
- package/dist/charts/radar-axis.js +24 -0
- package/dist/charts/radar-chart.d.ts +36 -0
- package/dist/charts/radar-chart.js +89 -0
- package/dist/charts/radar-context.d.ts +68 -0
- package/dist/charts/radar-context.js +87 -0
- package/dist/charts/radar-grid.d.ts +16 -0
- package/dist/charts/radar-grid.js +40 -0
- package/dist/charts/radar-labels.d.ts +16 -0
- package/dist/charts/radar-labels.js +29 -0
- package/dist/charts/reference-area-config.d.ts +10 -0
- package/dist/charts/reference-area-config.js +39 -0
- package/dist/charts/reference-area-geometry.d.ts +23 -0
- package/dist/charts/reference-area-geometry.js +68 -0
- package/dist/charts/reference-area-registration-context.d.ts +8 -0
- package/dist/charts/reference-area-registration-context.js +7 -0
- package/dist/charts/reference-area.d.ts +52 -0
- package/dist/charts/reference-area.js +101 -0
- package/dist/charts/ring-center.d.ts +46 -0
- package/dist/charts/ring-center.js +41 -0
- package/dist/charts/ring-chart.d.ts +41 -0
- package/dist/charts/ring-chart.js +212 -0
- package/dist/charts/ring-context.d.ts +66 -0
- package/dist/charts/ring-context.js +92 -0
- package/dist/charts/ring.d.ts +11 -0
- package/dist/charts/ring.js +104 -0
- package/dist/charts/sankey/index.d.ts +6 -0
- package/dist/charts/sankey/index.js +6 -0
- package/dist/charts/sankey/sankey-chart.d.ts +39 -0
- package/dist/charts/sankey/sankey-chart.js +117 -0
- package/dist/charts/sankey/sankey-context.d.ts +69 -0
- package/dist/charts/sankey/sankey-context.js +23 -0
- package/dist/charts/sankey/sankey-link.d.ts +26 -0
- package/dist/charts/sankey/sankey-link.js +155 -0
- package/dist/charts/sankey/sankey-node.d.ts +29 -0
- package/dist/charts/sankey/sankey-node.js +200 -0
- package/dist/charts/sankey/sankey-tooltip.d.ts +24 -0
- package/dist/charts/sankey/sankey-tooltip.js +70 -0
- package/dist/charts/scatter-chart-shell.d.ts +21 -0
- package/dist/charts/scatter-chart-shell.js +152 -0
- package/dist/charts/scatter-chart.d.ts +32 -0
- package/dist/charts/scatter-chart.js +56 -0
- package/dist/charts/scatter-svg.d.ts +6 -0
- package/dist/charts/scatter-svg.js +16 -0
- package/dist/charts/scatter.d.ts +21 -0
- package/dist/charts/scatter.js +30 -0
- package/dist/charts/segment.d.ts +26 -0
- package/dist/charts/segment.js +42 -0
- package/dist/charts/series-bar-layout.d.ts +18 -0
- package/dist/charts/series-bar-layout.js +31 -0
- package/dist/charts/series-bar.d.ts +20 -0
- package/dist/charts/series-bar.js +120 -0
- package/dist/charts/series-dash-tail-overlay.d.ts +17 -0
- package/dist/charts/series-dash-tail-overlay.js +39 -0
- package/dist/charts/series-highlight-layer.d.ts +23 -0
- package/dist/charts/series-highlight-layer.js +21 -0
- package/dist/charts/series-hover-dim.d.ts +29 -0
- package/dist/charts/series-hover-dim.js +26 -0
- package/dist/charts/series-markers.d.ts +14 -0
- package/dist/charts/series-markers.js +98 -0
- package/dist/charts/series-path-utils.d.ts +19 -0
- package/dist/charts/series-path-utils.js +60 -0
- package/dist/charts/series-point-marker.d.ts +48 -0
- package/dist/charts/series-point-marker.js +48 -0
- package/dist/charts/shimmering-text.d.ts +23 -0
- package/dist/charts/shimmering-text.js +31 -0
- package/dist/charts/static-chart-preview-context.d.ts +7 -0
- package/dist/charts/static-chart-preview-context.js +12 -0
- package/dist/charts/sunburst-breadcrumb.d.ts +16 -0
- package/dist/charts/sunburst-breadcrumb.js +26 -0
- package/dist/charts/sunburst-center.d.ts +5 -0
- package/dist/charts/sunburst-center.js +17 -0
- package/dist/charts/sunburst-chart.d.ts +30 -0
- package/dist/charts/sunburst-chart.js +263 -0
- package/dist/charts/sunburst-context.d.ts +61 -0
- package/dist/charts/sunburst-context.js +112 -0
- package/dist/charts/sunburst-data.d.ts +9 -0
- package/dist/charts/sunburst-data.js +2 -0
- package/dist/charts/sunburst-hint.d.ts +13 -0
- package/dist/charts/sunburst-hint.js +31 -0
- package/dist/charts/sunburst-labels.d.ts +9 -0
- package/dist/charts/sunburst-labels.js +63 -0
- package/dist/charts/sunburst-segment.d.ts +11 -0
- package/dist/charts/sunburst-segment.js +78 -0
- package/dist/charts/sunburst.d.ts +101 -0
- package/dist/charts/sunburst.js +396 -0
- package/dist/charts/time-series-chart-shell.d.ts +47 -0
- package/dist/charts/time-series-chart-shell.js +390 -0
- package/dist/charts/tooltip/chart-tooltip.d.ts +76 -0
- package/dist/charts/tooltip/chart-tooltip.js +150 -0
- package/dist/charts/tooltip/date-ticker.d.ts +11 -0
- package/dist/charts/tooltip/date-ticker.js +77 -0
- package/dist/charts/tooltip/index.d.ts +7 -0
- package/dist/charts/tooltip/index.js +7 -0
- package/dist/charts/tooltip/tooltip-box.d.ts +48 -0
- package/dist/charts/tooltip/tooltip-box.js +114 -0
- package/dist/charts/tooltip/tooltip-content.d.ts +18 -0
- package/dist/charts/tooltip/tooltip-content.js +9 -0
- package/dist/charts/tooltip/tooltip-dot.d.ts +28 -0
- package/dist/charts/tooltip/tooltip-dot.js +54 -0
- package/dist/charts/tooltip/tooltip-indicator.d.ts +45 -0
- package/dist/charts/tooltip/tooltip-indicator.js +65 -0
- package/dist/charts/use-animated-series-path.d.ts +19 -0
- package/dist/charts/use-animated-series-path.js +93 -0
- package/dist/charts/use-animated-y-domains.d.ts +14 -0
- package/dist/charts/use-animated-y-domains.js +150 -0
- package/dist/charts/use-chart-interaction.d.ts +41 -0
- package/dist/charts/use-chart-interaction.js +244 -0
- package/dist/charts/use-chart-phase-orchestrator.d.ts +23 -0
- package/dist/charts/use-chart-phase-orchestrator.js +139 -0
- package/dist/charts/use-enter-complete.d.ts +8 -0
- package/dist/charts/use-enter-complete.js +23 -0
- package/dist/charts/use-grid-shimmer.d.ts +16 -0
- package/dist/charts/use-grid-shimmer.js +63 -0
- package/dist/charts/use-highlight-segment.d.ts +14 -0
- package/dist/charts/use-highlight-segment.js +34 -0
- package/dist/charts/use-mount-progress.d.ts +4 -0
- package/dist/charts/use-mount-progress.js +22 -0
- package/dist/charts/use-scatter-chart-interaction.d.ts +35 -0
- package/dist/charts/use-scatter-chart-interaction.js +228 -0
- package/dist/charts/use-scheduled-tooltip.d.ts +9 -0
- package/dist/charts/use-scheduled-tooltip.js +76 -0
- package/dist/charts/visx-pattern.d.ts +19 -0
- package/dist/charts/visx-pattern.js +20 -0
- package/dist/charts/x-axis.d.ts +27 -0
- package/dist/charts/x-axis.js +415 -0
- package/dist/charts/y-axis-scales.d.ts +26 -0
- package/dist/charts/y-axis-scales.js +72 -0
- package/dist/charts/y-axis-ticks.d.ts +12 -0
- package/dist/charts/y-axis-ticks.js +24 -0
- package/dist/charts/y-axis.d.ts +22 -0
- package/dist/charts/y-axis.js +80 -0
- package/dist/charts/y-domain-utils.d.ts +27 -0
- package/dist/charts/y-domain-utils.js +88 -0
- package/dist/components/accordion.d.ts +6 -0
- package/dist/components/accordion.js +20 -0
- package/dist/components/alert-dialog.d.ts +18 -0
- package/dist/components/alert-dialog.js +41 -0
- package/dist/components/alert.d.ts +24 -0
- package/dist/components/alert.js +46 -0
- package/dist/components/animated-button.d.ts +5 -0
- package/dist/components/animated-button.js +16 -0
- package/dist/components/animated-list.d.ts +26 -0
- package/dist/components/animated-list.js +25 -0
- package/dist/components/animated-number.d.ts +67 -0
- package/dist/components/animated-number.js +131 -0
- package/dist/components/app-shell.d.ts +27 -0
- package/dist/components/app-shell.js +18 -0
- package/dist/components/area-chart.d.ts +11 -0
- package/dist/components/area-chart.js +12 -0
- package/dist/components/aspect-ratio.d.ts +16 -0
- package/dist/components/aspect-ratio.js +14 -0
- package/dist/components/aurora-background.d.ts +3 -0
- package/dist/components/aurora-background.js +8 -0
- package/dist/components/autocomplete.d.ts +55 -0
- package/dist/components/autocomplete.js +279 -0
- package/dist/components/avatar-group.d.ts +39 -0
- package/dist/components/avatar-group.js +50 -0
- package/dist/components/avatar.d.ts +5 -0
- package/dist/components/avatar.js +17 -0
- package/dist/components/badge.d.ts +10 -0
- package/dist/components/badge.js +35 -0
- package/dist/components/banner.d.ts +45 -0
- package/dist/components/banner.js +80 -0
- package/dist/components/bar-chart.d.ts +11 -0
- package/dist/components/bar-chart.js +9 -0
- package/dist/components/border-beam.d.ts +45 -0
- package/dist/components/border-beam.js +48 -0
- package/dist/components/breadcrumb.d.ts +12 -0
- package/dist/components/breadcrumb.js +35 -0
- package/dist/components/button-group.d.ts +7 -0
- package/dist/components/button-group.js +10 -0
- package/dist/components/button.d.ts +12 -0
- package/dist/components/button.js +39 -0
- package/dist/components/calendar.d.ts +7 -0
- package/dist/components/calendar.js +71 -0
- package/dist/components/candlestick-chart.d.ts +13 -0
- package/dist/components/candlestick-chart.js +66 -0
- package/dist/components/card-stack.d.ts +28 -0
- package/dist/components/card-stack.js +47 -0
- package/dist/components/card.d.ts +9 -0
- package/dist/components/card.js +32 -0
- package/dist/components/carousel.d.ts +82 -0
- package/dist/components/carousel.js +310 -0
- package/dist/components/chart.d.ts +100 -0
- package/dist/components/chart.js +210 -0
- package/dist/components/checkbox.d.ts +3 -0
- package/dist/components/checkbox.js +11 -0
- package/dist/components/chip.d.ts +80 -0
- package/dist/components/chip.js +186 -0
- package/dist/components/choropleth-chart.d.ts +12 -0
- package/dist/components/choropleth-chart.js +31 -0
- package/dist/components/click-spark.d.ts +19 -0
- package/dist/components/click-spark.js +51 -0
- package/dist/components/code-block.d.ts +13 -0
- package/dist/components/code-block.js +20 -0
- package/dist/components/code-tabs.d.ts +51 -0
- package/dist/components/code-tabs.js +150 -0
- package/dist/components/collapsible.d.ts +5 -0
- package/dist/components/collapsible.js +12 -0
- package/dist/components/color-picker.d.ts +30 -0
- package/dist/components/color-picker.js +300 -0
- package/dist/components/combobox.d.ts +33 -0
- package/dist/components/combobox.js +32 -0
- package/dist/components/command.d.ts +87 -0
- package/dist/components/command.js +44 -0
- package/dist/components/comparison-slider.d.ts +17 -0
- package/dist/components/comparison-slider.js +81 -0
- package/dist/components/composed-chart.d.ts +13 -0
- package/dist/components/composed-chart.js +22 -0
- package/dist/components/confetti.d.ts +21 -0
- package/dist/components/confetti.js +111 -0
- package/dist/components/confirmation-dialog.d.ts +46 -0
- package/dist/components/confirmation-dialog.js +102 -0
- package/dist/components/context-menu.d.ts +28 -0
- package/dist/components/context-menu.js +52 -0
- package/dist/components/copy-button.d.ts +13 -0
- package/dist/components/copy-button.js +72 -0
- package/dist/components/countdown.d.ts +58 -0
- package/dist/components/countdown.js +106 -0
- package/dist/components/credit-card-input.d.ts +62 -0
- package/dist/components/credit-card-input.js +211 -0
- package/dist/components/currency-input.d.ts +86 -0
- package/dist/components/currency-input.js +215 -0
- package/dist/components/data-table.d.ts +232 -0
- package/dist/components/data-table.js +359 -0
- package/dist/components/date-picker.d.ts +66 -0
- package/dist/components/date-picker.js +55 -0
- package/dist/components/date-range-picker.d.ts +59 -0
- package/dist/components/date-range-picker.js +59 -0
- package/dist/components/description-list.d.ts +84 -0
- package/dist/components/description-list.js +138 -0
- package/dist/components/dialog.d.ts +26 -0
- package/dist/components/dialog.js +35 -0
- package/dist/components/dock.d.ts +34 -0
- package/dist/components/dock.js +61 -0
- package/dist/components/dot-pattern.d.ts +24 -0
- package/dist/components/dot-pattern.js +19 -0
- package/dist/components/drawer.d.ts +22 -0
- package/dist/components/drawer.js +37 -0
- package/dist/components/dropdown-menu.d.ts +32 -0
- package/dist/components/dropdown-menu.js +56 -0
- package/dist/components/dynamic-island.d.ts +26 -0
- package/dist/components/dynamic-island.js +31 -0
- package/dist/components/empty.d.ts +7 -0
- package/dist/components/empty.js +24 -0
- package/dist/components/expandable-tabs.d.ts +24 -0
- package/dist/components/expandable-tabs.js +30 -0
- package/dist/components/fab.d.ts +35 -0
- package/dist/components/fab.js +36 -0
- package/dist/components/field.d.ts +6 -0
- package/dist/components/field.js +22 -0
- package/dist/components/file-dropzone.d.ts +28 -0
- package/dist/components/file-dropzone.js +59 -0
- package/dist/components/flickering-grid.d.ts +25 -0
- package/dist/components/flickering-grid.js +30 -0
- package/dist/components/flip-card.d.ts +70 -0
- package/dist/components/flip-card.js +117 -0
- package/dist/components/floating-label-input.d.ts +34 -0
- package/dist/components/floating-label-input.js +25 -0
- package/dist/components/form.d.ts +25 -0
- package/dist/components/form.js +68 -0
- package/dist/components/frame.d.ts +12 -0
- package/dist/components/frame.js +10 -0
- package/dist/components/funnel-chart.d.ts +11 -0
- package/dist/components/funnel-chart.js +16 -0
- package/dist/components/gauge-chart.d.ts +8 -0
- package/dist/components/gauge-chart.js +10 -0
- package/dist/components/glare-hover.d.ts +15 -0
- package/dist/components/glare-hover.js +64 -0
- package/dist/components/glass-card.d.ts +3 -0
- package/dist/components/glass-card.js +8 -0
- package/dist/components/gradient-border.d.ts +7 -0
- package/dist/components/gradient-border.js +8 -0
- package/dist/components/gradient-text.d.ts +6 -0
- package/dist/components/gradient-text.js +10 -0
- package/dist/components/grid-pattern.d.ts +23 -0
- package/dist/components/grid-pattern.js +18 -0
- package/dist/components/heatmap-chart.d.ts +6 -0
- package/dist/components/heatmap-chart.js +8 -0
- package/dist/components/heatmap.d.ts +28 -0
- package/dist/components/heatmap.js +41 -0
- package/dist/components/highlighter.d.ts +20 -0
- package/dist/components/highlighter.js +19 -0
- package/dist/components/hover-card.d.ts +5 -0
- package/dist/components/hover-card.js +12 -0
- package/dist/components/image-zoom.d.ts +47 -0
- package/dist/components/image-zoom.js +125 -0
- package/dist/components/input-group.d.ts +10 -0
- package/dist/components/input-group.js +12 -0
- package/dist/components/input-otp.d.ts +18 -0
- package/dist/components/input-otp.js +38 -0
- package/dist/components/input.d.ts +6 -0
- package/dist/components/input.js +8 -0
- package/dist/components/json-viewer.d.ts +43 -0
- package/dist/components/json-viewer.js +313 -0
- package/dist/components/kanban.d.ts +31 -0
- package/dist/components/kanban.js +143 -0
- package/dist/components/kbd.d.ts +3 -0
- package/dist/components/kbd.js +8 -0
- package/dist/components/label.d.ts +3 -0
- package/dist/components/label.js +9 -0
- package/dist/components/light-rays.d.ts +19 -0
- package/dist/components/light-rays.js +20 -0
- package/dist/components/lightbox.d.ts +24 -0
- package/dist/components/lightbox.js +68 -0
- package/dist/components/line-chart.d.ts +10 -0
- package/dist/components/line-chart.js +9 -0
- package/dist/components/live-line-chart.d.ts +12 -0
- package/dist/components/live-line-chart.js +42 -0
- package/dist/components/logo-carousel.d.ts +27 -0
- package/dist/components/logo-carousel.js +101 -0
- package/dist/components/magnetic.d.ts +44 -0
- package/dist/components/magnetic.js +172 -0
- package/dist/components/marquee.d.ts +71 -0
- package/dist/components/marquee.js +141 -0
- package/dist/components/masonry.d.ts +16 -0
- package/dist/components/masonry.js +84 -0
- package/dist/components/menubar.d.ts +33 -0
- package/dist/components/menubar.js +56 -0
- package/dist/components/meteors.d.ts +20 -0
- package/dist/components/meteors.js +39 -0
- package/dist/components/metric.d.ts +9 -0
- package/dist/components/metric.js +35 -0
- package/dist/components/mode-toggle.d.ts +32 -0
- package/dist/components/mode-toggle.js +40 -0
- package/dist/components/morphing-popover.d.ts +91 -0
- package/dist/components/morphing-popover.js +194 -0
- package/dist/components/motion-presets.d.ts +9 -0
- package/dist/components/motion-presets.js +20 -0
- package/dist/components/multi-select.d.ts +54 -0
- package/dist/components/multi-select.js +0 -0
- package/dist/components/navigation-menu.d.ts +12 -0
- package/dist/components/navigation-menu.js +42 -0
- package/dist/components/noise.d.ts +19 -0
- package/dist/components/noise.js +18 -0
- package/dist/components/notification-center.d.ts +68 -0
- package/dist/components/notification-center.js +57 -0
- package/dist/components/number-input.d.ts +45 -0
- package/dist/components/number-input.js +148 -0
- package/dist/components/orbit.d.ts +77 -0
- package/dist/components/orbit.js +100 -0
- package/dist/components/pagination.d.ts +16 -0
- package/dist/components/pagination.js +34 -0
- package/dist/components/particles.d.ts +18 -0
- package/dist/components/particles.js +92 -0
- package/dist/components/password-input.d.ts +16 -0
- package/dist/components/password-input.js +49 -0
- package/dist/components/phone-input.d.ts +67 -0
- package/dist/components/phone-input.js +225 -0
- package/dist/components/pie-chart.d.ts +12 -0
- package/dist/components/pie-chart.js +13 -0
- package/dist/components/pill-nav.d.ts +25 -0
- package/dist/components/pill-nav.js +66 -0
- package/dist/components/popover.d.ts +7 -0
- package/dist/components/popover.js +15 -0
- package/dist/components/profit-loss-chart.d.ts +10 -0
- package/dist/components/profit-loss-chart.js +8 -0
- package/dist/components/progress.d.ts +10 -0
- package/dist/components/progress.js +17 -0
- package/dist/components/progressive-blur.d.ts +24 -0
- package/dist/components/progressive-blur.js +43 -0
- package/dist/components/radar-chart.d.ts +9 -0
- package/dist/components/radar-chart.js +9 -0
- package/dist/components/radio-group.d.ts +4 -0
- package/dist/components/radio-group.js +15 -0
- package/dist/components/rating.d.ts +29 -0
- package/dist/components/rating.js +94 -0
- package/dist/components/resizable.d.ts +57 -0
- package/dist/components/resizable.js +73 -0
- package/dist/components/retro-grid.d.ts +25 -0
- package/dist/components/retro-grid.js +26 -0
- package/dist/components/reveal.d.ts +9 -0
- package/dist/components/reveal.js +14 -0
- package/dist/components/rich-text-editor.d.ts +28 -0
- package/dist/components/rich-text-editor.js +83 -0
- package/dist/components/ring-chart.d.ts +13 -0
- package/dist/components/ring-chart.js +16 -0
- package/dist/components/ripple.d.ts +25 -0
- package/dist/components/ripple.js +26 -0
- package/dist/components/sankey-chart.d.ts +16 -0
- package/dist/components/sankey-chart.js +8 -0
- package/dist/components/scatter-chart.d.ts +12 -0
- package/dist/components/scatter-chart.js +9 -0
- package/dist/components/scheduler.d.ts +50 -0
- package/dist/components/scheduler.js +93 -0
- package/dist/components/scramble-text.d.ts +39 -0
- package/dist/components/scramble-text.js +78 -0
- package/dist/components/scroll-area.d.ts +13 -0
- package/dist/components/scroll-area.js +14 -0
- package/dist/components/scroll-progress.d.ts +19 -0
- package/dist/components/scroll-progress.js +67 -0
- package/dist/components/segmented-control.d.ts +48 -0
- package/dist/components/segmented-control.js +222 -0
- package/dist/components/select.d.ts +12 -0
- package/dist/components/select.js +43 -0
- package/dist/components/separator.d.ts +3 -0
- package/dist/components/separator.js +9 -0
- package/dist/components/sheet.d.ts +25 -0
- package/dist/components/sheet.js +47 -0
- package/dist/components/shimmer.d.ts +3 -0
- package/dist/components/shimmer.js +8 -0
- package/dist/components/shiny-text.d.ts +20 -0
- package/dist/components/shiny-text.js +24 -0
- package/dist/components/sidebar.d.ts +92 -0
- package/dist/components/sidebar.js +290 -0
- package/dist/components/signature-pad.d.ts +44 -0
- package/dist/components/signature-pad.js +317 -0
- package/dist/components/skeleton.d.ts +3 -0
- package/dist/components/skeleton.js +8 -0
- package/dist/components/slider.d.ts +10 -0
- package/dist/components/slider.js +27 -0
- package/dist/components/sonner.d.ts +9 -0
- package/dist/components/sonner.js +17 -0
- package/dist/components/sparkles-text.d.ts +19 -0
- package/dist/components/sparkles-text.js +36 -0
- package/dist/components/sparkline.d.ts +22 -0
- package/dist/components/sparkline.js +100 -0
- package/dist/components/spinner.d.ts +10 -0
- package/dist/components/spinner.js +20 -0
- package/dist/components/spinning-text.d.ts +29 -0
- package/dist/components/spinning-text.js +40 -0
- package/dist/components/split-button.d.ts +71 -0
- package/dist/components/split-button.js +30 -0
- package/dist/components/spotlight-card.d.ts +11 -0
- package/dist/components/spotlight-card.js +63 -0
- package/dist/components/star-border.d.ts +19 -0
- package/dist/components/star-border.js +18 -0
- package/dist/components/status-dot.d.ts +60 -0
- package/dist/components/status-dot.js +76 -0
- package/dist/components/stepper.d.ts +98 -0
- package/dist/components/stepper.js +164 -0
- package/dist/components/sunburst-chart.d.ts +11 -0
- package/dist/components/sunburst-chart.js +45 -0
- package/dist/components/switch.d.ts +3 -0
- package/dist/components/switch.js +10 -0
- package/dist/components/table-of-contents.d.ts +64 -0
- package/dist/components/table-of-contents.js +0 -0
- package/dist/components/table.d.ts +10 -0
- package/dist/components/table.js +38 -0
- package/dist/components/tabs.d.ts +6 -0
- package/dist/components/tabs.js +22 -0
- package/dist/components/tags-input.d.ts +39 -0
- package/dist/components/tags-input.js +86 -0
- package/dist/components/terminal.d.ts +86 -0
- package/dist/components/terminal.js +182 -0
- package/dist/components/text-effect.d.ts +71 -0
- package/dist/components/text-effect.js +166 -0
- package/dist/components/textarea.d.ts +6 -0
- package/dist/components/textarea.js +8 -0
- package/dist/components/tilt-card.d.ts +30 -0
- package/dist/components/tilt-card.js +84 -0
- package/dist/components/time-picker.d.ts +58 -0
- package/dist/components/time-picker.js +245 -0
- package/dist/components/timeline.d.ts +81 -0
- package/dist/components/timeline.js +165 -0
- package/dist/components/toggle-group.d.ts +12 -0
- package/dist/components/toggle-group.js +23 -0
- package/dist/components/toggle.d.ts +12 -0
- package/dist/components/toggle.js +25 -0
- package/dist/components/toolbar.d.ts +14 -0
- package/dist/components/toolbar.js +89 -0
- package/dist/components/tooltip.d.ts +29 -0
- package/dist/components/tooltip.js +48 -0
- package/dist/components/tree-view.d.ts +45 -0
- package/dist/components/tree-view.js +197 -0
- package/dist/components/typing-text.d.ts +49 -0
- package/dist/components/typing-text.js +90 -0
- package/dist/components/usage-meter.d.ts +30 -0
- package/dist/components/usage-meter.js +90 -0
- package/dist/components/video-player.d.ts +48 -0
- package/dist/components/video-player.js +216 -0
- package/dist/components/word-rotate.d.ts +40 -0
- package/dist/components/word-rotate.js +34 -0
- package/dist/index.d.ts +306 -0
- package/dist/index.js +179 -0
- package/dist/lib/cn.d.ts +7 -0
- package/dist/lib/cn.js +10 -0
- package/dist/lib/demo-saas.d.ts +171 -0
- package/dist/lib/demo-saas.js +210 -0
- package/dist/lib/demo-store.d.ts +157 -0
- package/dist/lib/demo-store.js +353 -0
- package/dist/testing/index.d.ts +76 -0
- package/dist/testing/index.js +116 -0
- package/package.json +941 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, forwardRef, useContext, useId, useMemo } from "react";
|
|
4
|
+
import * as RechartsPrimitive from "recharts";
|
|
5
|
+
import { cn } from "../lib/cn.js";
|
|
6
|
+
// Supported themes and their CSS selector prefixes.
|
|
7
|
+
const THEMES = { light: "", dark: ".dark" };
|
|
8
|
+
/** Map series to a ChartConfig using chart-1..5 when color is omitted. */
|
|
9
|
+
export function chartSeriesConfig(series) {
|
|
10
|
+
const config = {};
|
|
11
|
+
for (const [index, item] of series.entries()) {
|
|
12
|
+
config[item.key] = {
|
|
13
|
+
label: item.label,
|
|
14
|
+
color: item.color ?? `var(--cronus-chart-${(index % 5) + 1})`,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return config;
|
|
18
|
+
}
|
|
19
|
+
const ChartContext = createContext(null);
|
|
20
|
+
// Pinned locale: a bare `toLocaleString()` would format by ambient locale and
|
|
21
|
+
// render differently on the server than in the browser.
|
|
22
|
+
const TOOLTIP_NUMBER = new Intl.NumberFormat("en-US");
|
|
23
|
+
function useChart() {
|
|
24
|
+
const context = useContext(ChartContext);
|
|
25
|
+
if (!context) {
|
|
26
|
+
throw new Error("useChart must be used within a <ChartContainer />");
|
|
27
|
+
}
|
|
28
|
+
return context;
|
|
29
|
+
}
|
|
30
|
+
const ChartContainer = forwardRef(({ id, className, children, config, ...props }, ref) => {
|
|
31
|
+
const uniqueId = useId();
|
|
32
|
+
const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
|
|
33
|
+
return (_jsx(ChartContext.Provider, { value: { config }, children: _jsxs("div", { "data-slot": "chart", "data-chart": chartId, ref: ref, className: cn("flex aspect-video justify-center text-xs [&_.recharts-cartesian-grid_line]:stroke-border/50 [&_.recharts-cartesian-axis-tick_text]:fill-fg-tertiary [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none", className), ...props, children: [_jsx(ChartStyle, { id: chartId, config: config }), _jsx(RechartsPrimitive.ResponsiveContainer, { children: children })] }) }));
|
|
34
|
+
});
|
|
35
|
+
ChartContainer.displayName = "ChartContainer";
|
|
36
|
+
// ── CSS-injection hardening ────────────────────────────────────────
|
|
37
|
+
// ChartStyle injects per-chart CSS custom properties via a <style> tag
|
|
38
|
+
// (dangerouslySetInnerHTML). Both the config key and the color value flow
|
|
39
|
+
// into that raw CSS, so each is validated against a strict allowlist before
|
|
40
|
+
// being emitted. Anything that does not match is dropped (the line is not
|
|
41
|
+
// emitted) so a malicious value like `red;} body{display:none` cannot break
|
|
42
|
+
// out of the declaration.
|
|
43
|
+
// Keys become part of `--color-<key>`. Restrict to identifier-safe chars.
|
|
44
|
+
const CHART_KEY_RE = /^[a-zA-Z0-9_-]+$/;
|
|
45
|
+
// Allowed color value forms:
|
|
46
|
+
// - hex: #rgb / #rgba / #rrggbb / #rrggbbaa
|
|
47
|
+
// - functional: rgb()/rgba()/hsl()/hsla()/oklch()/oklab() with numeric args
|
|
48
|
+
// (digits, %, ., -, /, spaces and commas only — no nested fns, no ; or {})
|
|
49
|
+
// - var(--token) reference (optionally chained: var(--a, var(--b)))
|
|
50
|
+
// - a bare named token reference: letters/digits/_/- (e.g. a CSS var name or
|
|
51
|
+
// a keyword like `transparent` / `currentColor`)
|
|
52
|
+
const HEX_RE = /^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
|
|
53
|
+
const FUNC_RE = /^(?:rgb|rgba|hsl|hsla|oklch|oklab)\(\s*[0-9.\-%/,\s]+\)$/;
|
|
54
|
+
const VAR_RE = /^var\(\s*--[a-zA-Z0-9_-]+\s*(?:,\s*[a-zA-Z0-9_\-#%.,()/\s]+)?\)$/;
|
|
55
|
+
const NAMED_RE = /^[a-zA-Z][a-zA-Z0-9_-]*$/;
|
|
56
|
+
function isSafeChartColor(value) {
|
|
57
|
+
const v = value.trim();
|
|
58
|
+
if (!v || v.length > 128) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return HEX_RE.test(v) || FUNC_RE.test(v) || VAR_RE.test(v) || NAMED_RE.test(v);
|
|
62
|
+
}
|
|
63
|
+
const ChartStyle = ({ id, config }) => {
|
|
64
|
+
const colorConfig = Object.entries(config).filter(([, conf]) => conf.theme || conf.color);
|
|
65
|
+
if (!colorConfig.length) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
// `id` is interpolated into the CSS selector; restrict it to identifier-safe
|
|
69
|
+
// chars so it cannot terminate the selector and inject arbitrary rules.
|
|
70
|
+
const safeId = CHART_KEY_RE.test(id) ? id : null;
|
|
71
|
+
if (!safeId) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const css = Object.entries(THEMES)
|
|
75
|
+
.map(([theme, prefix]) => {
|
|
76
|
+
const decls = colorConfig
|
|
77
|
+
.map(([key, itemConfig]) => {
|
|
78
|
+
const color = itemConfig.theme?.[theme] || itemConfig.color;
|
|
79
|
+
// Skip entries with an unsafe key or an unsafe/absent color value.
|
|
80
|
+
if (!color || typeof color !== "string" || !CHART_KEY_RE.test(key)) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
if (!isSafeChartColor(color)) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
return ` --color-${key}: ${color.trim()};`;
|
|
87
|
+
})
|
|
88
|
+
.filter(Boolean)
|
|
89
|
+
.join("\n");
|
|
90
|
+
if (!decls) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
return `${prefix} [data-chart=${safeId}] {\n${decls}\n}`;
|
|
94
|
+
})
|
|
95
|
+
.filter(Boolean)
|
|
96
|
+
.join("\n");
|
|
97
|
+
if (!css) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
return (_jsx("style", {
|
|
101
|
+
// biome-ignore lint/security/noDangerouslySetInnerHtml: injecting per-chart CSS vars is the canonical recharts pattern; key + color are validated against a strict allowlist above
|
|
102
|
+
dangerouslySetInnerHTML: { __html: css } }));
|
|
103
|
+
};
|
|
104
|
+
const ChartTooltip = RechartsPrimitive.Tooltip;
|
|
105
|
+
const ChartTooltipContent = forwardRef(({ active, payload, className, indicator = "dot", hideLabel = false, hideIndicator = false, label, labelKey, nameKey, formatValue, }, ref) => {
|
|
106
|
+
const { config } = useChart();
|
|
107
|
+
const tooltipLabel = useMemo(() => {
|
|
108
|
+
if (hideLabel || !payload?.length) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
const [item] = payload;
|
|
112
|
+
let value = typeof label === "string" || typeof label === "number" ? label : null;
|
|
113
|
+
if (labelKey) {
|
|
114
|
+
const datum = item?.payload;
|
|
115
|
+
const fromDatum = datum?.[labelKey];
|
|
116
|
+
if (typeof fromDatum === "string" || typeof fromDatum === "number") {
|
|
117
|
+
value = fromDatum;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, labelKey);
|
|
121
|
+
value = itemConfig?.label ?? value;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else if (typeof label === "string" && config[label]?.label) {
|
|
125
|
+
value = config[label].label;
|
|
126
|
+
}
|
|
127
|
+
if (!value) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
return _jsx("div", { className: "text-[11px] text-fg-tertiary", children: value });
|
|
131
|
+
}, [label, labelKey, payload, hideLabel, config]);
|
|
132
|
+
if (!active || !payload?.length) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
const nestLabel = payload.length === 1 && indicator !== "dot";
|
|
136
|
+
return (_jsxs("div", { ref: ref, className: cn("grid min-w-[10.5rem] items-start gap-2 rounded-xl border border-border bg-surface-floating px-3 py-2.5 text-xs text-fg shadow-lg transition-[opacity,transform] duration-200 ease-[cubic-bezier(.22,1,.36,1)] starting:translate-y-1 starting:opacity-0 motion-reduce:transition-none motion-reduce:starting:translate-y-0 motion-reduce:starting:opacity-100", className), children: [!nestLabel ? tooltipLabel : null, _jsx("div", { className: "grid gap-1.5", children: payload.map((item, index) => {
|
|
137
|
+
const key = `${nameKey || item.name || item.dataKey || "value"}`;
|
|
138
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
139
|
+
const indicatorColor = item.color;
|
|
140
|
+
return (_jsxs("div", { className: "flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5 [&>svg]:text-fg-tertiary", children: [itemConfig?.icon ? (_jsx(itemConfig.icon, {})) : (!hideIndicator && (_jsx("div", { className: cn("shrink-0 rounded-full", {
|
|
141
|
+
"size-2": indicator === "dot",
|
|
142
|
+
"mt-0.5 h-3 w-0.5 rounded-sm": indicator === "line",
|
|
143
|
+
"w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
|
|
144
|
+
}), style: { backgroundColor: indicatorColor } }))), _jsxs("div", { className: cn("flex flex-1 justify-between leading-none", nestLabel ? "items-end" : "items-center"), children: [_jsxs("div", { className: "grid gap-1.5", children: [nestLabel ? tooltipLabel : null, _jsx("span", { className: "text-fg-secondary", children: itemConfig?.label || item.name })] }), item.value != null && (_jsx("span", { className: "font-mono font-medium tabular-nums text-fg", children: typeof item.value === "number"
|
|
145
|
+
? (formatValue?.(item.value, key) ?? TOOLTIP_NUMBER.format(item.value))
|
|
146
|
+
: item.value }))] })] }, item.dataKey ?? index));
|
|
147
|
+
}) })] }));
|
|
148
|
+
});
|
|
149
|
+
ChartTooltipContent.displayName = "ChartTooltipContent";
|
|
150
|
+
function readCursorLabel(payload, labelKey) {
|
|
151
|
+
const datum = payload?.[0]?.payload;
|
|
152
|
+
if (!datum)
|
|
153
|
+
return "";
|
|
154
|
+
const keys = labelKey ? [labelKey] : ["date", "day", "month", "label", "name"];
|
|
155
|
+
for (const key of keys) {
|
|
156
|
+
const value = datum[key];
|
|
157
|
+
if (typeof value === "string" && value.length > 0)
|
|
158
|
+
return value;
|
|
159
|
+
if (typeof value === "number")
|
|
160
|
+
return String(value);
|
|
161
|
+
}
|
|
162
|
+
return "";
|
|
163
|
+
}
|
|
164
|
+
function ChartCursor({ x, points, height = 0, top = 0, payload, labelKey, showAxisLabel = true, }) {
|
|
165
|
+
const lineX = x ?? points?.[0]?.x;
|
|
166
|
+
if (lineX == null || !Number.isFinite(lineX))
|
|
167
|
+
return null;
|
|
168
|
+
const tick = readCursorLabel(payload, labelKey);
|
|
169
|
+
const pillWidth = Math.max(48, Math.min(96, tick.length * 7 + 16));
|
|
170
|
+
return (_jsxs("g", { "data-slot": "chart-cursor", pointerEvents: "none", children: [_jsx("line", { x1: lineX, x2: lineX, y1: top, y2: top + height, className: "stroke-fg-muted", strokeWidth: 1 }), tick && showAxisLabel ? (_jsxs("g", { transform: `translate(${lineX}, ${top + height + 14})`, children: [_jsx("rect", { x: -pillWidth / 2, y: -10, width: pillWidth, height: 20, rx: 10, className: "fill-fg" }), _jsx("text", { textAnchor: "middle", dominantBaseline: "middle", y: 1, className: "fill-fg-inverse text-[11px] font-medium", children: tick })] })) : null] }));
|
|
171
|
+
}
|
|
172
|
+
ChartCursor.displayName = "ChartCursor";
|
|
173
|
+
const ChartLegend = RechartsPrimitive.Legend;
|
|
174
|
+
const ChartLegendContent = forwardRef(({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey }, ref) => {
|
|
175
|
+
const { config } = useChart();
|
|
176
|
+
if (!payload?.length) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
return (_jsx("div", { ref: ref, className: cn("flex items-center justify-center gap-4", verticalAlign === "top" ? "pb-3" : "pt-3", className), children: payload.map((item, index) => {
|
|
180
|
+
const key = `${nameKey || item.dataKey || "value"}`;
|
|
181
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
182
|
+
return (_jsxs("div", { className: "flex items-center gap-1.5 text-fg-tertiary [&>svg]:size-3 [&>svg]:text-fg-tertiary", children: [itemConfig?.icon && !hideIcon ? (_jsx(itemConfig.icon, {})) : (_jsx("div", { className: "size-2 shrink-0 rounded-[2px]", style: { backgroundColor: item.color } })), itemConfig?.label] }, item.value ?? index));
|
|
183
|
+
}) }));
|
|
184
|
+
});
|
|
185
|
+
ChartLegendContent.displayName = "ChartLegendContent";
|
|
186
|
+
// Resolve the config entry for a payload item, checking the item and its nested
|
|
187
|
+
// payload datum for a usable config key. Payload shapes are untyped (recharts).
|
|
188
|
+
function getPayloadConfigFromPayload(config,
|
|
189
|
+
// biome-ignore lint/suspicious/noExplicitAny: recharts payload item is untyped
|
|
190
|
+
payload, key) {
|
|
191
|
+
if (typeof payload !== "object" || payload === null) {
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null
|
|
195
|
+
? payload.payload
|
|
196
|
+
: undefined;
|
|
197
|
+
let configLabelKey = key;
|
|
198
|
+
if (key in payload && typeof payload[key] === "string") {
|
|
199
|
+
configLabelKey = payload[key];
|
|
200
|
+
}
|
|
201
|
+
else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
|
|
202
|
+
configLabelKey = payloadPayload[key];
|
|
203
|
+
}
|
|
204
|
+
return configLabelKey in config ? config[configLabelKey] : config[key];
|
|
205
|
+
}
|
|
206
|
+
export { ChartContainer, ChartCursor, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent,
|
|
207
|
+
// Exported for unit testing of the CSS-injection allowlist. Not re-exported
|
|
208
|
+
// from the package barrel, so the public API is unchanged.
|
|
209
|
+
isSafeChartColor, };
|
|
210
|
+
//# sourceMappingURL=chart.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
2
|
+
export declare const Checkbox: import("react").ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
|
|
3
|
+
//# sourceMappingURL=checkbox.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
4
|
+
import { Check } from "lucide-react";
|
|
5
|
+
import { forwardRef } from "react";
|
|
6
|
+
import { cn } from "../lib/cn.js";
|
|
7
|
+
export const Checkbox = forwardRef(({ className, ...props }, ref) => {
|
|
8
|
+
return (_jsx(CheckboxPrimitive.Root, { ref: ref, "data-slot": "checkbox", className: cn("peer size-4 shrink-0 rounded-sm border border-border bg-surface-inset shadow-xs transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base disabled:opacity-50 disabled:pointer-events-none data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground aria-invalid:border-error aria-invalid:ring-2 aria-invalid:ring-error/30", className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { className: "flex items-center justify-center text-current", children: _jsx(Check, { className: "size-3.5" }) }) }));
|
|
9
|
+
});
|
|
10
|
+
Checkbox.displayName = "Checkbox";
|
|
11
|
+
//# sourceMappingURL=checkbox.js.map
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
import { type HTMLAttributes, type ReactNode } from "react";
|
|
3
|
+
declare const chipVariants: (props?: ({
|
|
4
|
+
variant?: "outline" | "solid" | "soft" | null | undefined;
|
|
5
|
+
color?: "info" | "success" | "warning" | "primary" | "error" | "neutral" | null | undefined;
|
|
6
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
7
|
+
interactive?: boolean | null | undefined;
|
|
8
|
+
selected?: boolean | null | undefined;
|
|
9
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
10
|
+
/** Localizable strings rendered by {@link Chip}. Defaults are English. */
|
|
11
|
+
export interface ChipLabels {
|
|
12
|
+
/**
|
|
13
|
+
* Screen-reader string for the remove affordance: the accessible name of the
|
|
14
|
+
* remove button on a non-interactive chip, and the Delete/Backspace removal
|
|
15
|
+
* hint (exposed as the chip's accessible description) on an interactive one.
|
|
16
|
+
* @default "Remove"
|
|
17
|
+
*/
|
|
18
|
+
remove: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ChipProps extends Omit<HTMLAttributes<HTMLElement>, "color">, Omit<VariantProps<typeof chipVariants>, "interactive" | "selected"> {
|
|
21
|
+
/**
|
|
22
|
+
* Visual treatment: `solid` fill, `soft` 15% tint, or `outline`.
|
|
23
|
+
* @default "soft"
|
|
24
|
+
*/
|
|
25
|
+
variant?: "solid" | "soft" | "outline";
|
|
26
|
+
/**
|
|
27
|
+
* Semantic hue applied by the variant recipe.
|
|
28
|
+
* @default "neutral"
|
|
29
|
+
*/
|
|
30
|
+
color?: "neutral" | "primary" | "success" | "warning" | "error" | "info";
|
|
31
|
+
/**
|
|
32
|
+
* Pill height / typography preset.
|
|
33
|
+
* @default "md"
|
|
34
|
+
*/
|
|
35
|
+
size?: "sm" | "md" | "lg";
|
|
36
|
+
/**
|
|
37
|
+
* Toggle state for filter-style chips. Any non-`undefined` value renders the
|
|
38
|
+
* chip as a `<button>` with `aria-pressed`; while `true` it also gains a
|
|
39
|
+
* leading check mark and emphasized styling.
|
|
40
|
+
* @default undefined
|
|
41
|
+
*/
|
|
42
|
+
selected?: boolean;
|
|
43
|
+
/** Leading icon slot rendered before the label (e.g. a lucide icon). */
|
|
44
|
+
icon?: ReactNode;
|
|
45
|
+
/** Leading avatar slot (an `img`, `Avatar`, …) clipped to a circle and sized by `size`. */
|
|
46
|
+
avatar?: ReactNode;
|
|
47
|
+
/**
|
|
48
|
+
* Makes the chip dismissible. On a static chip this renders a real,
|
|
49
|
+
* focusable remove button (Enter/Space activate it); on an interactive chip
|
|
50
|
+
* the affordance is decorative and Delete or Backspace on the focused chip
|
|
51
|
+
* removes it instead. Removal never triggers `onClick`, and removal clicks
|
|
52
|
+
* never propagate to ancestor click handlers.
|
|
53
|
+
*/
|
|
54
|
+
onRemove?: () => void;
|
|
55
|
+
/**
|
|
56
|
+
* Disables the chip and its remove affordance.
|
|
57
|
+
* @default false
|
|
58
|
+
*/
|
|
59
|
+
disabled?: boolean;
|
|
60
|
+
/** Override any subset of the built-in screen-reader strings. See {@link ChipLabels}. */
|
|
61
|
+
labels?: Partial<ChipLabels>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Interactive filter / selection chip. Where {@link Badge} is a static status
|
|
65
|
+
* label, Chip is a control: give it `onClick` and/or `selected` and it renders
|
|
66
|
+
* as a real `<button>` (Enter/Space activate natively, `aria-pressed` carries
|
|
67
|
+
* the toggle state); leave both off and it stays a server-safe `<span>`. A
|
|
68
|
+
* `selected`-only chip attaches no event handlers, so it can also render from
|
|
69
|
+
* a Server Component as a display-only pressed button.
|
|
70
|
+
* `onRemove` adds a dismiss affordance plus Delete/Backspace removal.
|
|
71
|
+
*/
|
|
72
|
+
export declare const Chip: import("react").ForwardRefExoticComponent<ChipProps & import("react").RefAttributes<HTMLElement>>;
|
|
73
|
+
export interface ChipGroupProps extends HTMLAttributes<HTMLDivElement> {
|
|
74
|
+
/** Accessible name announcing what the chip collection represents. */
|
|
75
|
+
"aria-label"?: string;
|
|
76
|
+
}
|
|
77
|
+
/** Flex-wrap layout for a set of related chips, exposed as a labelled `role="group"`. */
|
|
78
|
+
export declare const ChipGroup: import("react").ForwardRefExoticComponent<ChipGroupProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
79
|
+
export { chipVariants };
|
|
80
|
+
//# sourceMappingURL=chip.d.ts.map
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { cva } from "class-variance-authority";
|
|
3
|
+
import { Check, X } from "lucide-react";
|
|
4
|
+
import { forwardRef, useId, } from "react";
|
|
5
|
+
import { cn } from "../lib/cn.js";
|
|
6
|
+
const chipVariants = cva("inline-flex items-center whitespace-nowrap rounded-full border font-medium transition-[background,border-color,box-shadow,transform,opacity] duration-150 ease-[var(--ease-out-quart)] outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base disabled:opacity-50 disabled:pointer-events-none data-[disabled]:opacity-50 data-[disabled]:pointer-events-none [&_svg]:shrink-0 [&_svg]:pointer-events-none", {
|
|
7
|
+
variants: {
|
|
8
|
+
variant: {
|
|
9
|
+
solid: "border-transparent shadow-xs",
|
|
10
|
+
soft: "border-transparent",
|
|
11
|
+
outline: "bg-transparent",
|
|
12
|
+
},
|
|
13
|
+
// Colour recipes depend on the variant, so they live in compoundVariants.
|
|
14
|
+
color: {
|
|
15
|
+
neutral: "",
|
|
16
|
+
primary: "",
|
|
17
|
+
success: "",
|
|
18
|
+
warning: "",
|
|
19
|
+
error: "",
|
|
20
|
+
info: "",
|
|
21
|
+
},
|
|
22
|
+
size: {
|
|
23
|
+
sm: "h-6 gap-1 px-2 text-xs [&_svg]:size-3 [&_[data-slot=chip-avatar]]:size-4",
|
|
24
|
+
md: "h-7 gap-1.5 px-2.5 text-sm [&_svg]:size-3.5 [&_[data-slot=chip-avatar]]:size-5",
|
|
25
|
+
lg: "h-8 gap-2 px-3 text-sm [&_svg]:size-4 [&_[data-slot=chip-avatar]]:size-6",
|
|
26
|
+
},
|
|
27
|
+
// Derived from `onClick`/`selected` inside the component — not public props.
|
|
28
|
+
interactive: {
|
|
29
|
+
true: "cursor-pointer select-none active:scale-[0.97]",
|
|
30
|
+
false: "",
|
|
31
|
+
},
|
|
32
|
+
selected: {
|
|
33
|
+
true: "font-semibold",
|
|
34
|
+
false: "",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
compoundVariants: [
|
|
38
|
+
// ── solid ── filled pills. `neutral` is the inverse fill (`fg-inverse`
|
|
39
|
+
// is the AA-paired text token for an `fg` surface) and `primary` rides
|
|
40
|
+
// its paired foreground token. The semantic hues have no paired
|
|
41
|
+
// foreground, so they reuse the Button technique: darken the fill 30%
|
|
42
|
+
// toward black in OKLCH so white text clears >=4.5:1 on every theme/mode
|
|
43
|
+
// (see button.tsx `destructive` — the raw fills are too light for white).
|
|
44
|
+
{ variant: "solid", color: "neutral", class: "bg-fg text-fg-inverse" },
|
|
45
|
+
{ variant: "solid", color: "primary", class: "bg-primary text-primary-foreground" },
|
|
46
|
+
{
|
|
47
|
+
variant: "solid",
|
|
48
|
+
color: "success",
|
|
49
|
+
class: "bg-[color-mix(in_oklch,var(--cronus-success),black_30%)] text-white",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
variant: "solid",
|
|
53
|
+
color: "warning",
|
|
54
|
+
class: "bg-[color-mix(in_oklch,var(--cronus-warning),black_30%)] text-white",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
variant: "solid",
|
|
58
|
+
color: "error",
|
|
59
|
+
class: "bg-[color-mix(in_oklch,var(--cronus-error),black_30%)] text-white",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
variant: "solid",
|
|
63
|
+
color: "info",
|
|
64
|
+
class: "bg-[color-mix(in_oklch,var(--cronus-info),black_30%)] text-white",
|
|
65
|
+
},
|
|
66
|
+
// ── soft ── 15% tints. Same-hue text on a tint can read <4.5:1, so the
|
|
67
|
+
// label uses the AA-tuned `*-strong` text variants (tokens contract).
|
|
68
|
+
{ variant: "soft", color: "neutral", class: "bg-surface-overlay text-fg" },
|
|
69
|
+
{ variant: "soft", color: "primary", class: "bg-primary/15 text-primary-strong" },
|
|
70
|
+
{ variant: "soft", color: "success", class: "bg-success/15 text-success-strong" },
|
|
71
|
+
{ variant: "soft", color: "warning", class: "bg-warning/15 text-warning-strong" },
|
|
72
|
+
{ variant: "soft", color: "error", class: "bg-error/15 text-error-strong" },
|
|
73
|
+
{ variant: "soft", color: "info", class: "bg-info/15 text-info-strong" },
|
|
74
|
+
// ── outline ── bordered, transparent fill; text again on `*-strong`.
|
|
75
|
+
{ variant: "outline", color: "neutral", class: "border-border text-fg" },
|
|
76
|
+
{ variant: "outline", color: "primary", class: "border-primary/50 text-primary-strong" },
|
|
77
|
+
{ variant: "outline", color: "success", class: "border-success/50 text-success-strong" },
|
|
78
|
+
{ variant: "outline", color: "warning", class: "border-warning/50 text-warning-strong" },
|
|
79
|
+
{ variant: "outline", color: "error", class: "border-error/50 text-error-strong" },
|
|
80
|
+
{ variant: "outline", color: "info", class: "border-info/50 text-info-strong" },
|
|
81
|
+
// Hover affordances only when the chip is a real control. `currentColor`
|
|
82
|
+
// keeps them hue-correct for every color without another 18 entries.
|
|
83
|
+
{ interactive: true, variant: "solid", class: "hover:opacity-90" },
|
|
84
|
+
{ interactive: true, variant: "soft", class: "hover:border-current/40" },
|
|
85
|
+
{ interactive: true, variant: "outline", class: "hover:bg-current/10" },
|
|
86
|
+
// Selection emphasis (the leading check mark is rendered by the
|
|
87
|
+
// component). Listed last so tailwind-merge resolves border/background
|
|
88
|
+
// conflicts in its favor.
|
|
89
|
+
{
|
|
90
|
+
selected: true,
|
|
91
|
+
variant: "soft",
|
|
92
|
+
class: "border-current/50 hover:border-current/50",
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
selected: true,
|
|
96
|
+
variant: "outline",
|
|
97
|
+
class: "border-current bg-current/10 hover:border-current",
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
defaultVariants: {
|
|
101
|
+
variant: "soft",
|
|
102
|
+
color: "neutral",
|
|
103
|
+
size: "md",
|
|
104
|
+
interactive: false,
|
|
105
|
+
selected: false,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
const DEFAULT_LABELS = { remove: "Remove" };
|
|
109
|
+
const REMOVE_AFFORDANCE_CLASSES = "ms-0.5 -me-1 inline-flex shrink-0 cursor-pointer items-center justify-center rounded-full p-0.5 opacity-70 transition-opacity duration-150 hover:opacity-100";
|
|
110
|
+
/**
|
|
111
|
+
* Interactive filter / selection chip. Where {@link Badge} is a static status
|
|
112
|
+
* label, Chip is a control: give it `onClick` and/or `selected` and it renders
|
|
113
|
+
* as a real `<button>` (Enter/Space activate natively, `aria-pressed` carries
|
|
114
|
+
* the toggle state); leave both off and it stays a server-safe `<span>`. A
|
|
115
|
+
* `selected`-only chip attaches no event handlers, so it can also render from
|
|
116
|
+
* a Server Component as a display-only pressed button.
|
|
117
|
+
* `onRemove` adds a dismiss affordance plus Delete/Backspace removal.
|
|
118
|
+
*/
|
|
119
|
+
export const Chip = forwardRef(({ className, variant, color, size, selected, icon, avatar, onRemove, labels, disabled = false, onClick, onKeyDown, children, ...props }, ref) => {
|
|
120
|
+
const isInteractive = onClick !== undefined || selected !== undefined;
|
|
121
|
+
const dismissible = onRemove !== undefined;
|
|
122
|
+
const removeLabel = labels?.remove ?? DEFAULT_LABELS.remove;
|
|
123
|
+
// `selected` is a serializable boolean, so a display-only selected chip is
|
|
124
|
+
// legitimately reachable from a Server Component — where function props on
|
|
125
|
+
// host elements throw. Handlers are therefore only attached when they can
|
|
126
|
+
// do something (`onClick` routing or removal); a selected-only chip renders
|
|
127
|
+
// a handler-free `<button aria-pressed>`.
|
|
128
|
+
const attachesClickHandler = isInteractive && (onClick !== undefined || dismissible);
|
|
129
|
+
const describesRemoval = isInteractive && dismissible;
|
|
130
|
+
const removeHintId = useId();
|
|
131
|
+
// Delete/Backspace removes the focused chip (interactive chips only — the
|
|
132
|
+
// static variant exposes a real, focusable remove button instead).
|
|
133
|
+
const handleKeyDown = (event) => {
|
|
134
|
+
onKeyDown?.(event);
|
|
135
|
+
if (event.defaultPrevented || disabled)
|
|
136
|
+
return;
|
|
137
|
+
if (event.key === "Delete" || event.key === "Backspace") {
|
|
138
|
+
event.preventDefault();
|
|
139
|
+
onRemove?.();
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
// A real <button> may not nest inside the chip button (invalid HTML + axe
|
|
143
|
+
// `nested-interactive`), so the interactive chip renders its remove
|
|
144
|
+
// affordance as a decorative span and routes clicks on it here — removal
|
|
145
|
+
// must never activate the chip's own onClick.
|
|
146
|
+
const handleInteractiveClick = (event) => {
|
|
147
|
+
const target = event.target;
|
|
148
|
+
if (dismissible && target.closest("[data-slot=chip-remove]") !== null) {
|
|
149
|
+
// Same contract as the static path's remove button: removal clicks
|
|
150
|
+
// stay inside the chip and never reach ancestor click handlers.
|
|
151
|
+
event.stopPropagation();
|
|
152
|
+
onRemove?.();
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
onClick?.(event);
|
|
156
|
+
};
|
|
157
|
+
const handleRemoveClick = (event) => {
|
|
158
|
+
// Keep the removal click from reaching any ancestor click handlers.
|
|
159
|
+
event.stopPropagation();
|
|
160
|
+
onRemove?.();
|
|
161
|
+
};
|
|
162
|
+
// Single render path for both elements; the cast is safe because every
|
|
163
|
+
// button-only attribute below is gated on `isInteractive`.
|
|
164
|
+
const Comp = (isInteractive ? "button" : "span");
|
|
165
|
+
return (_jsxs(Comp
|
|
166
|
+
// The root is a <button> or a <span>; the forwarded ref is typed as
|
|
167
|
+
// their shared supertype and narrowed here.
|
|
168
|
+
, {
|
|
169
|
+
// The root is a <button> or a <span>; the forwarded ref is typed as
|
|
170
|
+
// their shared supertype and narrowed here.
|
|
171
|
+
ref: ref, "data-slot": "chip", type: isInteractive ? "button" : undefined, disabled: isInteractive ? disabled : undefined, "data-disabled": disabled ? "" : undefined, "data-selected": selected ? "" : undefined, "aria-pressed": selected === undefined ? undefined : selected, "aria-keyshortcuts": describesRemoval ? "Delete Backspace" : undefined, "aria-describedby": describesRemoval ? removeHintId : undefined, className: cn(chipVariants({
|
|
172
|
+
variant,
|
|
173
|
+
color,
|
|
174
|
+
size,
|
|
175
|
+
interactive: isInteractive,
|
|
176
|
+
selected: selected === true,
|
|
177
|
+
}), className), onClick: attachesClickHandler ? handleInteractiveClick : onClick, onKeyDown: isInteractive && dismissible ? handleKeyDown : onKeyDown, ...props, children: [selected ? _jsx(Check, { "aria-hidden": "true", "data-slot": "chip-check" }) : null, avatar ? (_jsx("span", { "data-slot": "chip-avatar", "aria-hidden": "true", className: "-ms-1 inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full [&>img]:size-full [&>img]:object-cover", children: avatar })) : null, icon ? (_jsx("span", { "data-slot": "chip-icon", "aria-hidden": "true", className: "inline-flex shrink-0 items-center justify-center", children: icon })) : null, children, dismissible ? (isInteractive ? (_jsxs(_Fragment, { children: [_jsx("span", { "data-slot": "chip-remove", "aria-hidden": "true", className: REMOVE_AFFORDANCE_CLASSES, children: _jsx(X, {}) }), _jsxs("span", { id: removeHintId, hidden: true, children: [removeLabel, ": Delete"] })] })) : (_jsxs("button", { type: "button", "data-slot": "chip-remove", disabled: disabled, className: cn(REMOVE_AFFORDANCE_CLASSES, "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset"), onClick: handleRemoveClick, children: [_jsx(X, { "aria-hidden": "true" }), _jsx("span", { className: "sr-only", children: removeLabel })] }))) : null] }));
|
|
178
|
+
});
|
|
179
|
+
Chip.displayName = "Chip";
|
|
180
|
+
/** Flex-wrap layout for a set of related chips, exposed as a labelled `role="group"`. */
|
|
181
|
+
export const ChipGroup = forwardRef(({ className, ...props }, ref) => {
|
|
182
|
+
return (_jsx("div", { ref: ref, "data-slot": "chip-group", role: "group", className: cn("flex flex-wrap items-center gap-2", className), ...props }));
|
|
183
|
+
});
|
|
184
|
+
ChipGroup.displayName = "ChipGroup";
|
|
185
|
+
export { chipVariants };
|
|
186
|
+
//# sourceMappingURL=chip.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HTMLAttributes } from "react";
|
|
2
|
+
export interface ChoroplethRegion {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
value: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const CHOROPLETH_DEMO: ChoroplethRegion[];
|
|
8
|
+
export interface ChoroplethChartProps extends HTMLAttributes<HTMLDivElement> {
|
|
9
|
+
data?: ChoroplethRegion[];
|
|
10
|
+
}
|
|
11
|
+
export declare function ChoroplethChart({ data, className, ...props }: ChoroplethChartProps): import("react").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=choropleth-chart.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
export const CHOROPLETH_DEMO = [
|
|
4
|
+
{ id: "nw", name: "Northwest", value: 42 },
|
|
5
|
+
{ id: "ne", name: "Northeast", value: 78 },
|
|
6
|
+
{ id: "w", name: "West", value: 31 },
|
|
7
|
+
{ id: "c", name: "Central", value: 95 },
|
|
8
|
+
{ id: "e", name: "East", value: 58 },
|
|
9
|
+
{ id: "sw", name: "Southwest", value: 22 },
|
|
10
|
+
{ id: "se", name: "Southeast", value: 67 },
|
|
11
|
+
];
|
|
12
|
+
const CELLS = {
|
|
13
|
+
nw: "M10 10 h 80 v 50 h -80 z",
|
|
14
|
+
ne: "M100 10 h 80 v 50 h -80 z",
|
|
15
|
+
w: "M10 70 h 50 v 50 h -50 z",
|
|
16
|
+
c: "M70 70 h 50 v 50 h -50 z",
|
|
17
|
+
e: "M130 70 h 50 v 50 h -50 z",
|
|
18
|
+
sw: "M10 130 h 80 v 50 h -80 z",
|
|
19
|
+
se: "M100 130 h 80 v 50 h -80 z",
|
|
20
|
+
};
|
|
21
|
+
export function ChoroplethChart({ data = CHOROPLETH_DEMO, className, ...props }) {
|
|
22
|
+
const max = data.reduce((acc, item) => Math.max(acc, item.value), 1);
|
|
23
|
+
return (_jsx("div", { "data-slot": "choropleth-chart", className: cn("h-64 w-full", className), ...props, children: _jsx("svg", { viewBox: "0 0 200 190", className: "h-full w-full", "aria-hidden": "true", children: data.map((region) => {
|
|
24
|
+
const d = CELLS[region.id];
|
|
25
|
+
if (!d)
|
|
26
|
+
return null;
|
|
27
|
+
const opacity = 0.15 + (region.value / max) * 0.85;
|
|
28
|
+
return (_jsx("path", { d: d, className: "fill-primary stroke-border", style: { fillOpacity: opacity }, children: _jsx("title", { children: `${region.name}: ${region.value}` }) }, region.id));
|
|
29
|
+
}) }) }));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=choropleth-chart.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type HTMLAttributes, type Ref } from "react";
|
|
2
|
+
export interface ClickSparkProps extends HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
ref?: Ref<HTMLDivElement>;
|
|
4
|
+
/**
|
|
5
|
+
* Number of sparks emitted per click.
|
|
6
|
+
* @default 8
|
|
7
|
+
*/
|
|
8
|
+
sparkCount?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Emits a burst of sparks from the pointer on click. Sparks are decorative
|
|
12
|
+
* (`aria-hidden`) and skipped entirely when the visitor prefers reduced
|
|
13
|
+
* motion. Children stay fully interactive.
|
|
14
|
+
*/
|
|
15
|
+
export declare function ClickSpark({ ref, className, children, sparkCount, onPointerDown, ...props }: ClickSparkProps): import("react").JSX.Element;
|
|
16
|
+
export declare namespace ClickSpark {
|
|
17
|
+
var displayName: string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=click-spark.d.ts.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useRef, useState, } from "react";
|
|
4
|
+
import { cn } from "../lib/cn.js";
|
|
5
|
+
const SPARK_KEYFRAMES = "@keyframes cronus-click-spark{from{transform:translate(0,0) scale(1);opacity:1}to{transform:translate(var(--dx),var(--dy)) scale(0);opacity:0}}";
|
|
6
|
+
function finiteOr(value, fallback) {
|
|
7
|
+
return Number.isFinite(value) ? value : fallback;
|
|
8
|
+
}
|
|
9
|
+
function prefersReducedMotion() {
|
|
10
|
+
return (typeof window !== "undefined" &&
|
|
11
|
+
typeof window.matchMedia === "function" &&
|
|
12
|
+
window.matchMedia("(prefers-reduced-motion: reduce)").matches);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Emits a burst of sparks from the pointer on click. Sparks are decorative
|
|
16
|
+
* (`aria-hidden`) and skipped entirely when the visitor prefers reduced
|
|
17
|
+
* motion. Children stay fully interactive.
|
|
18
|
+
*/
|
|
19
|
+
export function ClickSpark({ ref, className, children, sparkCount = 8, onPointerDown, ...props }) {
|
|
20
|
+
const [sparks, setSparks] = useState([]);
|
|
21
|
+
const nextId = useRef(0);
|
|
22
|
+
const count = Math.min(24, Math.max(3, Math.round(finiteOr(sparkCount, 8))));
|
|
23
|
+
const handlePointerDown = useCallback((event) => {
|
|
24
|
+
onPointerDown?.(event);
|
|
25
|
+
if (prefersReducedMotion())
|
|
26
|
+
return;
|
|
27
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
28
|
+
const spark = {
|
|
29
|
+
id: nextId.current++,
|
|
30
|
+
x: event.clientX - rect.left,
|
|
31
|
+
y: event.clientY - rect.top,
|
|
32
|
+
};
|
|
33
|
+
setSparks((current) => [...current.slice(-8), spark]);
|
|
34
|
+
window.setTimeout(() => {
|
|
35
|
+
setSparks((current) => current.filter((item) => item.id !== spark.id));
|
|
36
|
+
}, 520);
|
|
37
|
+
}, [onPointerDown]);
|
|
38
|
+
return (_jsxs("div", { ref: ref, "data-slot": "click-spark", className: cn("relative", className), onPointerDown: handlePointerDown, ...props, children: [_jsx("style", { children: SPARK_KEYFRAMES }), _jsx("div", { className: "relative", children: children }), _jsx("div", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 overflow-hidden", children: sparks.map((spark) => Array.from({ length: count }, (_, index) => {
|
|
39
|
+
const angle = (index / count) * Math.PI * 2;
|
|
40
|
+
const distance = 18 + (index % 3) * 6;
|
|
41
|
+
return (_jsx("span", { className: "absolute size-1 rounded-full bg-primary [animation-duration:500ms] [animation-fill-mode:forwards] [animation-name:cronus-click-spark] [animation-timing-function:cubic-bezier(.22,1,.36,1)]", style: {
|
|
42
|
+
left: spark.x,
|
|
43
|
+
top: spark.y,
|
|
44
|
+
// contract-ok: spark origin is a physical pointer coordinate
|
|
45
|
+
["--dx"]: `${Math.cos(angle) * distance}px`,
|
|
46
|
+
["--dy"]: `${Math.sin(angle) * distance}px`,
|
|
47
|
+
} }, `${spark.id}-${index}`));
|
|
48
|
+
})) })] }));
|
|
49
|
+
}
|
|
50
|
+
ClickSpark.displayName = "ClickSpark";
|
|
51
|
+
//# sourceMappingURL=click-spark.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type HTMLAttributes } from "react";
|
|
2
|
+
export interface CodeBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
|
|
3
|
+
/** Raw source to render and copy. */
|
|
4
|
+
code: string;
|
|
5
|
+
/** Language label rendered as a Badge in the header. */
|
|
6
|
+
language?: string;
|
|
7
|
+
/** File name rendered in the header. */
|
|
8
|
+
filename?: string;
|
|
9
|
+
/** Render a gutter with 1-based line numbers. Defaults to false. */
|
|
10
|
+
showLineNumbers?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare const CodeBlock: import("react").ForwardRefExoticComponent<CodeBlockProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
13
|
+
//# sourceMappingURL=code-block.d.ts.map
|