@chipmobilesdk/rn-chart 0.3.0 → 0.5.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/CHANGELOG.md +129 -0
- package/README.md +45 -3
- package/lib/commonjs/a11y/summary.js +190 -0
- package/lib/commonjs/a11y/summary.js.map +1 -0
- package/lib/commonjs/contract/datasource.js +64 -0
- package/lib/commonjs/contract/datasource.js.map +1 -0
- package/lib/commonjs/contract/distribution.js +45 -0
- package/lib/commonjs/contract/distribution.js.map +1 -0
- package/lib/commonjs/contract/errors.js +88 -0
- package/lib/commonjs/contract/errors.js.map +1 -0
- package/lib/commonjs/contract/format.js +133 -0
- package/lib/commonjs/contract/format.js.map +1 -0
- package/lib/commonjs/contract/interaction.js +24 -0
- package/lib/commonjs/contract/interaction.js.map +1 -0
- package/lib/commonjs/contract/marker.js +55 -0
- package/lib/commonjs/contract/marker.js.map +1 -0
- package/lib/commonjs/contract/props.js +6 -0
- package/lib/commonjs/contract/props.js.map +1 -0
- package/lib/commonjs/contract/state.js +68 -0
- package/lib/commonjs/contract/state.js.map +1 -0
- package/lib/commonjs/contract/strings.js +54 -0
- package/lib/commonjs/contract/strings.js.map +1 -0
- package/lib/commonjs/contract/theme.js +116 -0
- package/lib/commonjs/contract/theme.js.map +1 -0
- package/lib/commonjs/contract/value.js +112 -0
- package/lib/commonjs/contract/value.js.map +1 -0
- package/lib/commonjs/geometry/bar.js +257 -0
- package/lib/commonjs/geometry/bar.js.map +1 -0
- package/lib/commonjs/geometry/distribution.js +197 -0
- package/lib/commonjs/geometry/distribution.js.map +1 -0
- package/lib/commonjs/geometry/heatmap.js +186 -0
- package/lib/commonjs/geometry/heatmap.js.map +1 -0
- package/lib/commonjs/geometry/hitTest.js +117 -0
- package/lib/commonjs/geometry/hitTest.js.map +1 -0
- package/lib/commonjs/geometry/layout.js +134 -0
- package/lib/commonjs/geometry/layout.js.map +1 -0
- package/lib/commonjs/geometry/markers.js +59 -0
- package/lib/commonjs/geometry/markers.js.map +1 -0
- package/lib/commonjs/geometry/path.js +166 -0
- package/lib/commonjs/geometry/path.js.map +1 -0
- package/lib/commonjs/geometry/progress.js +203 -0
- package/lib/commonjs/geometry/progress.js.map +1 -0
- package/lib/commonjs/geometry/scale.js +127 -0
- package/lib/commonjs/geometry/scale.js.map +1 -0
- package/lib/commonjs/geometry/ticks.js +120 -0
- package/lib/commonjs/geometry/ticks.js.map +1 -0
- package/lib/commonjs/geometry/timeSeries.js +157 -0
- package/lib/commonjs/geometry/timeSeries.js.map +1 -0
- package/lib/commonjs/geometry/types.js +43 -0
- package/lib/commonjs/geometry/types.js.map +1 -0
- package/lib/commonjs/index.js +284 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/react/ChartBoundary.js +82 -0
- package/lib/commonjs/react/ChartBoundary.js.map +1 -0
- package/lib/commonjs/react/ChartFrame.js +270 -0
- package/lib/commonjs/react/ChartFrame.js.map +1 -0
- package/lib/commonjs/react/ChartLegend.js +242 -0
- package/lib/commonjs/react/ChartLegend.js.map +1 -0
- package/lib/commonjs/react/ChartPlot.js +62 -0
- package/lib/commonjs/react/ChartPlot.js.map +1 -0
- package/lib/commonjs/react/ChartStateOverlay.js +89 -0
- package/lib/commonjs/react/ChartStateOverlay.js.map +1 -0
- package/lib/commonjs/react/ChartThemeProvider.js +51 -0
- package/lib/commonjs/react/ChartThemeProvider.js.map +1 -0
- package/lib/commonjs/react/charts.js +108 -0
- package/lib/commonjs/react/charts.js.map +1 -0
- package/lib/commonjs/react/pointEvent.js +35 -0
- package/lib/commonjs/react/pointEvent.js.map +1 -0
- package/lib/commonjs/react/useChartA11y.js +97 -0
- package/lib/commonjs/react/useChartA11y.js.map +1 -0
- package/lib/commonjs/react/useChartFormatters.js +66 -0
- package/lib/commonjs/react/useChartFormatters.js.map +1 -0
- package/lib/commonjs/react/useChartLayout.js +100 -0
- package/lib/commonjs/react/useChartLayout.js.map +1 -0
- package/lib/commonjs/react/useChartSelection.js +131 -0
- package/lib/commonjs/react/useChartSelection.js.map +1 -0
- package/lib/commonjs/react/useChartStatus.js +74 -0
- package/lib/commonjs/react/useChartStatus.js.map +1 -0
- package/lib/commonjs/render/Axis.js +88 -0
- package/lib/commonjs/render/Axis.js.map +1 -0
- package/lib/commonjs/render/Marks.js +184 -0
- package/lib/commonjs/render/Marks.js.map +1 -0
- package/lib/commonjs/validation/budgets.js +106 -0
- package/lib/commonjs/validation/budgets.js.map +1 -0
- package/lib/commonjs/validation/validateDatasource.js +189 -0
- package/lib/commonjs/validation/validateDatasource.js.map +1 -0
- package/lib/module/a11y/summary.js +184 -0
- package/lib/module/a11y/summary.js.map +1 -0
- package/lib/module/contract/datasource.js +57 -0
- package/lib/module/contract/datasource.js.map +1 -0
- package/lib/module/contract/distribution.js +40 -0
- package/lib/module/contract/distribution.js.map +1 -0
- package/lib/module/contract/errors.js +80 -0
- package/lib/module/contract/errors.js.map +1 -0
- package/lib/module/contract/format.js +123 -0
- package/lib/module/contract/format.js.map +1 -0
- package/lib/module/contract/interaction.js +20 -0
- package/lib/module/contract/interaction.js.map +1 -0
- package/lib/module/contract/marker.js +49 -0
- package/lib/module/contract/marker.js.map +1 -0
- package/lib/module/contract/props.js +4 -0
- package/lib/module/contract/props.js.map +1 -0
- package/lib/module/contract/state.js +61 -0
- package/lib/module/contract/state.js.map +1 -0
- package/lib/module/contract/strings.js +49 -0
- package/lib/module/contract/strings.js.map +1 -0
- package/lib/module/contract/theme.js +109 -0
- package/lib/module/contract/theme.js.map +1 -0
- package/lib/module/contract/value.js +101 -0
- package/lib/module/contract/value.js.map +1 -0
- package/lib/module/geometry/bar.js +253 -0
- package/lib/module/geometry/bar.js.map +1 -0
- package/lib/module/geometry/distribution.js +193 -0
- package/lib/module/geometry/distribution.js.map +1 -0
- package/lib/module/geometry/heatmap.js +182 -0
- package/lib/module/geometry/heatmap.js.map +1 -0
- package/lib/module/geometry/hitTest.js +110 -0
- package/lib/module/geometry/hitTest.js.map +1 -0
- package/lib/module/geometry/layout.js +122 -0
- package/lib/module/geometry/layout.js.map +1 -0
- package/lib/module/geometry/markers.js +53 -0
- package/lib/module/geometry/markers.js.map +1 -0
- package/lib/module/geometry/path.js +157 -0
- package/lib/module/geometry/path.js.map +1 -0
- package/lib/module/geometry/progress.js +199 -0
- package/lib/module/geometry/progress.js.map +1 -0
- package/lib/module/geometry/scale.js +119 -0
- package/lib/module/geometry/scale.js.map +1 -0
- package/lib/module/geometry/ticks.js +112 -0
- package/lib/module/geometry/ticks.js.map +1 -0
- package/lib/module/geometry/timeSeries.js +153 -0
- package/lib/module/geometry/timeSeries.js.map +1 -0
- package/lib/module/geometry/types.js +39 -0
- package/lib/module/geometry/types.js.map +1 -0
- package/lib/module/index.js +85 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/react/ChartBoundary.js +75 -0
- package/lib/module/react/ChartBoundary.js.map +1 -0
- package/lib/module/react/ChartFrame.js +263 -0
- package/lib/module/react/ChartFrame.js.map +1 -0
- package/lib/module/react/ChartLegend.js +234 -0
- package/lib/module/react/ChartLegend.js.map +1 -0
- package/lib/module/react/ChartPlot.js +56 -0
- package/lib/module/react/ChartPlot.js.map +1 -0
- package/lib/module/react/ChartStateOverlay.js +82 -0
- package/lib/module/react/ChartStateOverlay.js.map +1 -0
- package/lib/module/react/ChartThemeProvider.js +44 -0
- package/lib/module/react/ChartThemeProvider.js.map +1 -0
- package/lib/module/react/charts.js +102 -0
- package/lib/module/react/charts.js.map +1 -0
- package/lib/module/react/pointEvent.js +30 -0
- package/lib/module/react/pointEvent.js.map +1 -0
- package/lib/module/react/useChartA11y.js +92 -0
- package/lib/module/react/useChartA11y.js.map +1 -0
- package/lib/module/react/useChartFormatters.js +61 -0
- package/lib/module/react/useChartFormatters.js.map +1 -0
- package/lib/module/react/useChartLayout.js +95 -0
- package/lib/module/react/useChartLayout.js.map +1 -0
- package/lib/module/react/useChartSelection.js +125 -0
- package/lib/module/react/useChartSelection.js.map +1 -0
- package/lib/module/react/useChartStatus.js +69 -0
- package/lib/module/react/useChartStatus.js.map +1 -0
- package/lib/module/render/Axis.js +80 -0
- package/lib/module/render/Axis.js.map +1 -0
- package/lib/module/render/Marks.js +173 -0
- package/lib/module/render/Marks.js.map +1 -0
- package/lib/module/validation/budgets.js +97 -0
- package/lib/module/validation/budgets.js.map +1 -0
- package/lib/module/validation/validateDatasource.js +184 -0
- package/lib/module/validation/validateDatasource.js.map +1 -0
- package/lib/typescript/commonjs/a11y/summary.d.ts +38 -0
- package/lib/typescript/commonjs/a11y/summary.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/datasource.d.ts +94 -0
- package/lib/typescript/commonjs/contract/datasource.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/distribution.d.ts +17 -0
- package/lib/typescript/commonjs/contract/distribution.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/errors.d.ts +53 -0
- package/lib/typescript/commonjs/contract/errors.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/format.d.ts +63 -0
- package/lib/typescript/commonjs/contract/format.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/interaction.d.ts +53 -0
- package/lib/typescript/commonjs/contract/interaction.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/marker.d.ts +39 -0
- package/lib/typescript/commonjs/contract/marker.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/props.d.ts +58 -0
- package/lib/typescript/commonjs/contract/props.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/state.d.ts +45 -0
- package/lib/typescript/commonjs/contract/state.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/strings.d.ts +39 -0
- package/lib/typescript/commonjs/contract/strings.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/theme.d.ts +85 -0
- package/lib/typescript/commonjs/contract/theme.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/value.d.ts +69 -0
- package/lib/typescript/commonjs/contract/value.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/bar.d.ts +18 -0
- package/lib/typescript/commonjs/geometry/bar.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/distribution.d.ts +23 -0
- package/lib/typescript/commonjs/geometry/distribution.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/heatmap.d.ts +24 -0
- package/lib/typescript/commonjs/geometry/heatmap.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/hitTest.d.ts +68 -0
- package/lib/typescript/commonjs/geometry/hitTest.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/layout.d.ts +67 -0
- package/lib/typescript/commonjs/geometry/layout.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/markers.d.ts +29 -0
- package/lib/typescript/commonjs/geometry/markers.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/path.d.ts +66 -0
- package/lib/typescript/commonjs/geometry/path.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/progress.d.ts +17 -0
- package/lib/typescript/commonjs/geometry/progress.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/scale.d.ts +55 -0
- package/lib/typescript/commonjs/geometry/scale.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/ticks.d.ts +48 -0
- package/lib/typescript/commonjs/geometry/ticks.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/timeSeries.d.ts +20 -0
- package/lib/typescript/commonjs/geometry/timeSeries.d.ts.map +1 -0
- package/lib/typescript/commonjs/geometry/types.d.ts +91 -0
- package/lib/typescript/commonjs/geometry/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +47 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/react/ChartBoundary.d.ts +47 -0
- package/lib/typescript/commonjs/react/ChartBoundary.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/ChartFrame.d.ts +31 -0
- package/lib/typescript/commonjs/react/ChartFrame.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/ChartLegend.d.ts +31 -0
- package/lib/typescript/commonjs/react/ChartLegend.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/ChartPlot.d.ts +19 -0
- package/lib/typescript/commonjs/react/ChartPlot.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/ChartStateOverlay.d.ts +25 -0
- package/lib/typescript/commonjs/react/ChartStateOverlay.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/ChartThemeProvider.d.ts +21 -0
- package/lib/typescript/commonjs/react/ChartThemeProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/charts.d.ts +51 -0
- package/lib/typescript/commonjs/react/charts.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/pointEvent.d.ts +13 -0
- package/lib/typescript/commonjs/react/pointEvent.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/useChartA11y.d.ts +37 -0
- package/lib/typescript/commonjs/react/useChartA11y.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/useChartFormatters.d.ts +21 -0
- package/lib/typescript/commonjs/react/useChartFormatters.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/useChartLayout.d.ts +27 -0
- package/lib/typescript/commonjs/react/useChartLayout.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/useChartSelection.d.ts +52 -0
- package/lib/typescript/commonjs/react/useChartSelection.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/useChartStatus.d.ts +22 -0
- package/lib/typescript/commonjs/react/useChartStatus.d.ts.map +1 -0
- package/lib/typescript/commonjs/render/Axis.d.ts +31 -0
- package/lib/typescript/commonjs/render/Axis.d.ts.map +1 -0
- package/lib/typescript/commonjs/render/Marks.d.ts +44 -0
- package/lib/typescript/commonjs/render/Marks.d.ts.map +1 -0
- package/lib/typescript/commonjs/validation/budgets.d.ts +24 -0
- package/lib/typescript/commonjs/validation/budgets.d.ts.map +1 -0
- package/lib/typescript/commonjs/validation/validateDatasource.d.ts +26 -0
- package/lib/typescript/commonjs/validation/validateDatasource.d.ts.map +1 -0
- package/lib/typescript/module/a11y/summary.d.ts +38 -0
- package/lib/typescript/module/a11y/summary.d.ts.map +1 -0
- package/lib/typescript/module/contract/datasource.d.ts +94 -0
- package/lib/typescript/module/contract/datasource.d.ts.map +1 -0
- package/lib/typescript/module/contract/distribution.d.ts +17 -0
- package/lib/typescript/module/contract/distribution.d.ts.map +1 -0
- package/lib/typescript/module/contract/errors.d.ts +53 -0
- package/lib/typescript/module/contract/errors.d.ts.map +1 -0
- package/lib/typescript/module/contract/format.d.ts +63 -0
- package/lib/typescript/module/contract/format.d.ts.map +1 -0
- package/lib/typescript/module/contract/interaction.d.ts +53 -0
- package/lib/typescript/module/contract/interaction.d.ts.map +1 -0
- package/lib/typescript/module/contract/marker.d.ts +39 -0
- package/lib/typescript/module/contract/marker.d.ts.map +1 -0
- package/lib/typescript/module/contract/props.d.ts +58 -0
- package/lib/typescript/module/contract/props.d.ts.map +1 -0
- package/lib/typescript/module/contract/state.d.ts +45 -0
- package/lib/typescript/module/contract/state.d.ts.map +1 -0
- package/lib/typescript/module/contract/strings.d.ts +39 -0
- package/lib/typescript/module/contract/strings.d.ts.map +1 -0
- package/lib/typescript/module/contract/theme.d.ts +85 -0
- package/lib/typescript/module/contract/theme.d.ts.map +1 -0
- package/lib/typescript/module/contract/value.d.ts +69 -0
- package/lib/typescript/module/contract/value.d.ts.map +1 -0
- package/lib/typescript/module/geometry/bar.d.ts +18 -0
- package/lib/typescript/module/geometry/bar.d.ts.map +1 -0
- package/lib/typescript/module/geometry/distribution.d.ts +23 -0
- package/lib/typescript/module/geometry/distribution.d.ts.map +1 -0
- package/lib/typescript/module/geometry/heatmap.d.ts +24 -0
- package/lib/typescript/module/geometry/heatmap.d.ts.map +1 -0
- package/lib/typescript/module/geometry/hitTest.d.ts +68 -0
- package/lib/typescript/module/geometry/hitTest.d.ts.map +1 -0
- package/lib/typescript/module/geometry/layout.d.ts +67 -0
- package/lib/typescript/module/geometry/layout.d.ts.map +1 -0
- package/lib/typescript/module/geometry/markers.d.ts +29 -0
- package/lib/typescript/module/geometry/markers.d.ts.map +1 -0
- package/lib/typescript/module/geometry/path.d.ts +66 -0
- package/lib/typescript/module/geometry/path.d.ts.map +1 -0
- package/lib/typescript/module/geometry/progress.d.ts +17 -0
- package/lib/typescript/module/geometry/progress.d.ts.map +1 -0
- package/lib/typescript/module/geometry/scale.d.ts +55 -0
- package/lib/typescript/module/geometry/scale.d.ts.map +1 -0
- package/lib/typescript/module/geometry/ticks.d.ts +48 -0
- package/lib/typescript/module/geometry/ticks.d.ts.map +1 -0
- package/lib/typescript/module/geometry/timeSeries.d.ts +20 -0
- package/lib/typescript/module/geometry/timeSeries.d.ts.map +1 -0
- package/lib/typescript/module/geometry/types.d.ts +91 -0
- package/lib/typescript/module/geometry/types.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +47 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/react/ChartBoundary.d.ts +47 -0
- package/lib/typescript/module/react/ChartBoundary.d.ts.map +1 -0
- package/lib/typescript/module/react/ChartFrame.d.ts +31 -0
- package/lib/typescript/module/react/ChartFrame.d.ts.map +1 -0
- package/lib/typescript/module/react/ChartLegend.d.ts +31 -0
- package/lib/typescript/module/react/ChartLegend.d.ts.map +1 -0
- package/lib/typescript/module/react/ChartPlot.d.ts +19 -0
- package/lib/typescript/module/react/ChartPlot.d.ts.map +1 -0
- package/lib/typescript/module/react/ChartStateOverlay.d.ts +25 -0
- package/lib/typescript/module/react/ChartStateOverlay.d.ts.map +1 -0
- package/lib/typescript/module/react/ChartThemeProvider.d.ts +21 -0
- package/lib/typescript/module/react/ChartThemeProvider.d.ts.map +1 -0
- package/lib/typescript/module/react/charts.d.ts +51 -0
- package/lib/typescript/module/react/charts.d.ts.map +1 -0
- package/lib/typescript/module/react/pointEvent.d.ts +13 -0
- package/lib/typescript/module/react/pointEvent.d.ts.map +1 -0
- package/lib/typescript/module/react/useChartA11y.d.ts +37 -0
- package/lib/typescript/module/react/useChartA11y.d.ts.map +1 -0
- package/lib/typescript/module/react/useChartFormatters.d.ts +21 -0
- package/lib/typescript/module/react/useChartFormatters.d.ts.map +1 -0
- package/lib/typescript/module/react/useChartLayout.d.ts +27 -0
- package/lib/typescript/module/react/useChartLayout.d.ts.map +1 -0
- package/lib/typescript/module/react/useChartSelection.d.ts +52 -0
- package/lib/typescript/module/react/useChartSelection.d.ts.map +1 -0
- package/lib/typescript/module/react/useChartStatus.d.ts +22 -0
- package/lib/typescript/module/react/useChartStatus.d.ts.map +1 -0
- package/lib/typescript/module/render/Axis.d.ts +31 -0
- package/lib/typescript/module/render/Axis.d.ts.map +1 -0
- package/lib/typescript/module/render/Marks.d.ts +44 -0
- package/lib/typescript/module/render/Marks.d.ts.map +1 -0
- package/lib/typescript/module/validation/budgets.d.ts +24 -0
- package/lib/typescript/module/validation/budgets.d.ts.map +1 -0
- package/lib/typescript/module/validation/validateDatasource.d.ts +26 -0
- package/lib/typescript/module/validation/validateDatasource.d.ts.map +1 -0
- package/package.json +40 -15
- package/skills/sdk-rn-chart/SKILL.md +49 -14
- package/src/a11y/summary.ts +34 -15
- package/src/contract/distribution.ts +44 -0
- package/src/contract/errors.ts +6 -0
- package/src/contract/interaction.ts +2 -2
- package/src/contract/strings.ts +2 -0
- package/src/geometry/bar.ts +27 -16
- package/src/geometry/distribution.ts +11 -6
- package/src/geometry/heatmap.ts +34 -17
- package/src/geometry/hitTest.ts +35 -0
- package/src/geometry/progress.ts +0 -1
- package/src/geometry/ticks.ts +0 -13
- package/src/geometry/timeSeries.ts +7 -2
- package/src/geometry/types.ts +11 -0
- package/src/index.ts +4 -1
- package/src/react/ChartFrame.tsx +126 -373
- package/src/react/ChartLegend.tsx +60 -3
- package/src/react/ChartPlot.tsx +57 -0
- package/src/react/ChartStateOverlay.tsx +94 -0
- package/src/react/charts.tsx +27 -12
- package/src/react/pointEvent.ts +40 -0
- package/src/react/useChartA11y.ts +113 -0
- package/src/react/useChartFormatters.ts +105 -0
- package/src/react/useChartLayout.ts +5 -2
- package/src/react/useChartSelection.ts +77 -40
- package/src/react/useChartStatus.ts +85 -0
- package/src/render/Axis.tsx +26 -22
- package/src/render/Marks.tsx +2 -9
- package/src/validation/budgets.ts +6 -4
- package/src/validation/validateDatasource.ts +38 -14
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Position } from '../contract/datasource';
|
|
2
|
+
import { type ChartFormatters, type FormatHint, type SeriesRef } from '../contract/format';
|
|
3
|
+
import type { ValueState } from '../contract/value';
|
|
4
|
+
export interface GeometryFormatters {
|
|
5
|
+
readonly formatValue: (value: number) => string;
|
|
6
|
+
readonly formatCategory: (raw: string) => string;
|
|
7
|
+
readonly formatInstant: (at: number) => string;
|
|
8
|
+
}
|
|
9
|
+
export interface ResolvedFormatters {
|
|
10
|
+
/** A value as the chart draws it. */
|
|
11
|
+
readonly formatValue: (value: ValueState) => string;
|
|
12
|
+
/** A value as the chart speaks it; the app's `summary` formatter when given. */
|
|
13
|
+
readonly formatSummaryValue: (value: ValueState) => string;
|
|
14
|
+
/** A position as the chart speaks it; the app's `axisLabel` formatter when given. */
|
|
15
|
+
readonly formatPosition: (position: Position) => string;
|
|
16
|
+
/** Present only when the app supplies `legendLabel`. */
|
|
17
|
+
readonly legendLabel?: (series: SeriesRef) => string;
|
|
18
|
+
readonly geometry: GeometryFormatters;
|
|
19
|
+
}
|
|
20
|
+
export declare function useChartFormatters(formatters: ChartFormatters | undefined, hint: FormatHint | undefined, instanceKey: string): ResolvedFormatters;
|
|
21
|
+
//# sourceMappingURL=useChartFormatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChartFormatters.d.ts","sourceRoot":"","sources":["../../../../src/react/useChartFormatters.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAIN,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IAClC,qCAAqC;IACrC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,CAAC;IACpD,gFAAgF;IAChF,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,CAAC;IAC3D,qFAAqF;IACrF,QAAQ,CAAC,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC;IACxD,wDAAwD;IACxD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;CACtC;AAED,wBAAgB,kBAAkB,CACjC,UAAU,EAAE,eAAe,GAAG,SAAS,EACvC,IAAI,EAAE,UAAU,GAAG,SAAS,EAC5B,WAAW,EAAE,MAAM,GACjB,kBAAkB,CA2DpB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type LayoutChangeEvent } from 'react-native';
|
|
2
|
+
import type { ChartDatasource, ChartFamily } from '../contract/datasource';
|
|
3
|
+
import { type ChartTheme } from '../contract/theme';
|
|
4
|
+
import { type ContainerSize, type PlotRect } from '../geometry/layout';
|
|
5
|
+
import type { GeometryInput } from '../geometry/types';
|
|
6
|
+
export interface ChartLayout {
|
|
7
|
+
readonly onLayout: (event: LayoutChangeEvent) => void;
|
|
8
|
+
readonly size: ContainerSize;
|
|
9
|
+
readonly measured: boolean;
|
|
10
|
+
readonly plot: PlotRect;
|
|
11
|
+
readonly fontSize: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function useChartLayout(theme: ChartTheme, options?: {
|
|
14
|
+
readonly height?: number;
|
|
15
|
+
readonly xLabels?: readonly string[];
|
|
16
|
+
readonly yLabels?: readonly string[];
|
|
17
|
+
}): ChartLayout;
|
|
18
|
+
/**
|
|
19
|
+
* Builds the geometry input, resolving per-series colours once so geometry
|
|
20
|
+
* modules never reach into the theme themselves.
|
|
21
|
+
*/
|
|
22
|
+
export declare function useGeometryInput<M>(datasource: ChartDatasource<M>, theme: ChartTheme, layout: ChartLayout, formatters: {
|
|
23
|
+
readonly formatValue: (value: number) => string;
|
|
24
|
+
readonly formatCategory: (raw: string) => string;
|
|
25
|
+
readonly formatInstant: (at: number) => string;
|
|
26
|
+
}, family?: ChartFamily): GeometryInput;
|
|
27
|
+
//# sourceMappingURL=useChartLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChartLayout.d.ts","sourceRoot":"","sources":["../../../../src/react/useChartLayout.ts"],"names":[],"mappings":"AAaA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE3E,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAA4C,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAIN,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAC7B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE;IACR,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,GACJ,WAAW,CA6Cb;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EACjC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE;IACX,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/C,EACD,MAAM,CAAC,EAAE,WAAW,GAClB,aAAa,CAuBf"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { PointInteractionEvent, SelectionRef, SeriesInteractionEvent } from '../contract/interaction';
|
|
2
|
+
import { type HitRegion } from '../geometry/hitTest';
|
|
3
|
+
export interface UseChartSelectionArgs<M> {
|
|
4
|
+
/** Present (including `null`) means the app owns the selection. */
|
|
5
|
+
readonly controlled?: SelectionRef | null;
|
|
6
|
+
readonly onSelectionChange?: (next: SelectionRef | null, event: PointInteractionEvent<M> | null) => void;
|
|
7
|
+
readonly onSelectionUnresolvable?: (ref: SelectionRef) => void;
|
|
8
|
+
readonly hitRegions: readonly HitRegion[];
|
|
9
|
+
/** Non-ready statuses suppress selection entirely (FR-053). */
|
|
10
|
+
readonly interactionSuppressed: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* False until the container has been measured and geometry exists.
|
|
13
|
+
*
|
|
14
|
+
* Without this, a chart that has not laid out yet has no hit regions, and a
|
|
15
|
+
* perfectly valid app-controlled selection would be reported as
|
|
16
|
+
* unresolvable on first paint — telling the app its state is wrong when it
|
|
17
|
+
* is not.
|
|
18
|
+
*/
|
|
19
|
+
readonly geometryReady: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface SelectOptions {
|
|
22
|
+
/**
|
|
23
|
+
* Selecting what is already selected clears it — the touch gesture. False
|
|
24
|
+
* for screen-reader stepping, where landing on the same point again (a chart
|
|
25
|
+
* with one point) must not switch the selection off and on (CHT-06).
|
|
26
|
+
*/
|
|
27
|
+
readonly toggle?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface ChartSelectionApi<M> {
|
|
30
|
+
/** What to draw. Never a reference the datasource cannot resolve. */
|
|
31
|
+
readonly resolved: HitRegion | undefined;
|
|
32
|
+
readonly selection: SelectionRef | null;
|
|
33
|
+
readonly select: (ref: SelectionRef | null, event: PointInteractionEvent<M> | null, options?: SelectOptions) => void;
|
|
34
|
+
}
|
|
35
|
+
export declare function useChartSelection<M>(args: UseChartSelectionArgs<M>): ChartSelectionApi<M>;
|
|
36
|
+
export interface UseSeriesVisibilityArgs<M> {
|
|
37
|
+
/** Present means the app owns visibility. */
|
|
38
|
+
readonly controlled?: readonly string[];
|
|
39
|
+
readonly onVisibilityChange?: (event: SeriesInteractionEvent<M>) => void;
|
|
40
|
+
/** Toggling stays off unless the app opts in (FR-049). */
|
|
41
|
+
readonly enabled: boolean;
|
|
42
|
+
/** Series marked hidden in the datasource itself. */
|
|
43
|
+
readonly initiallyHidden: readonly string[];
|
|
44
|
+
}
|
|
45
|
+
export interface SeriesVisibilityApi {
|
|
46
|
+
/** The same Set until the hidden ids change, so memos may depend on it. */
|
|
47
|
+
readonly hidden: ReadonlySet<string>;
|
|
48
|
+
readonly toggle: (seriesId: string, metadata?: unknown) => void;
|
|
49
|
+
readonly enabled: boolean;
|
|
50
|
+
}
|
|
51
|
+
export declare function useSeriesVisibility<M>(args: UseSeriesVisibilityArgs<M>): SeriesVisibilityApi;
|
|
52
|
+
//# sourceMappingURL=useChartSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChartSelection.d.ts","sourceRoot":"","sources":["../../../../src/react/useChartSelection.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACX,qBAAqB,EACrB,YAAY,EACZ,sBAAsB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEjE,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACvC,mEAAmE;IACnE,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAC5B,IAAI,EAAE,YAAY,GAAG,IAAI,EACzB,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI,KAClC,IAAI,CAAC;IACV,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,+DAA+D;IAC/D,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC;;;;;;;OAOG;IACH,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IACnC,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,CAChB,GAAG,EAAE,YAAY,GAAG,IAAI,EACxB,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI,EACtC,OAAO,CAAC,EAAE,aAAa,KACnB,IAAI,CAAC;CACV;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CA+DzF;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACzC,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACzE,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IACnC,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAoC5F"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ChartDatasource, ChartFamily } from '../contract/datasource';
|
|
2
|
+
import type { DistributionValues } from '../contract/distribution';
|
|
3
|
+
import { type ChartError, type ChartFailureHandler } from '../contract/errors';
|
|
4
|
+
import { type ChartStatus, type DeclarableChartStatus } from '../contract/state';
|
|
5
|
+
import { type ValidationResult } from '../validation/validateDatasource';
|
|
6
|
+
export interface UseChartStatusArgs<M> {
|
|
7
|
+
readonly datasource: ChartDatasource<M>;
|
|
8
|
+
readonly family: ChartFamily;
|
|
9
|
+
readonly chartId?: string;
|
|
10
|
+
/** `chartId`, or a generated id: what a once-per-chart warning is keyed on. */
|
|
11
|
+
readonly instanceKey: string;
|
|
12
|
+
readonly declared?: DeclarableChartStatus;
|
|
13
|
+
readonly onFailure?: ChartFailureHandler;
|
|
14
|
+
readonly distributionValues?: DistributionValues;
|
|
15
|
+
}
|
|
16
|
+
export interface ChartStatusResult {
|
|
17
|
+
readonly validation: ValidationResult;
|
|
18
|
+
readonly error: ChartError | undefined;
|
|
19
|
+
readonly status: ChartStatus;
|
|
20
|
+
}
|
|
21
|
+
export declare function useChartStatus<M>(args: UseChartStatusArgs<M>): ChartStatusResult;
|
|
22
|
+
//# sourceMappingURL=useChartStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChartStatus.d.ts","sourceRoot":"","sources":["../../../../src/react/useChartStatus.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAc,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAEhG,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAE7F,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACjD;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC7B;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAsDhF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Axis and grid rendering. Private SVG adapter.
|
|
3
|
+
*
|
|
4
|
+
* Ticks arrive already thinned by `geometry/ticks.ts`, so nothing here decides
|
|
5
|
+
* what fits — this module only draws what the geometry chose.
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import type { ChartTheme } from '../contract/theme';
|
|
9
|
+
import type { PlotRect } from '../geometry/layout';
|
|
10
|
+
import type { Tick } from '../geometry/ticks';
|
|
11
|
+
export declare function Grid({ plot, yTicks, theme, }: {
|
|
12
|
+
readonly plot: PlotRect;
|
|
13
|
+
readonly yTicks: readonly Tick[];
|
|
14
|
+
readonly theme: ChartTheme;
|
|
15
|
+
}): React.JSX.Element;
|
|
16
|
+
export declare function XAxis({ plot, ticks, theme, fontSize, line, }: {
|
|
17
|
+
readonly plot: PlotRect;
|
|
18
|
+
readonly ticks: readonly Tick[];
|
|
19
|
+
readonly theme: ChartTheme;
|
|
20
|
+
readonly fontSize: number;
|
|
21
|
+
/** False for a heatmap: its columns are named, but there is no axis to draw. */
|
|
22
|
+
readonly line?: boolean;
|
|
23
|
+
}): React.JSX.Element;
|
|
24
|
+
export declare function YAxis({ plot, ticks, theme, fontSize, line, }: {
|
|
25
|
+
readonly plot: PlotRect;
|
|
26
|
+
readonly ticks: readonly Tick[];
|
|
27
|
+
readonly theme: ChartTheme;
|
|
28
|
+
readonly fontSize: number;
|
|
29
|
+
readonly line?: boolean;
|
|
30
|
+
}): React.JSX.Element;
|
|
31
|
+
//# sourceMappingURL=Axis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Axis.d.ts","sourceRoot":"","sources":["../../../../src/render/Axis.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,wBAAgB,IAAI,CAAC,EACpB,IAAI,EACJ,MAAM,EACN,KAAK,GACL,EAAE;IACF,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC3B,qBAgBA;AAED,wBAAgB,KAAK,CAAC,EACrB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,IAAW,GACX,EAAE;IACF,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACxB,qBA6BA;AAED,wBAAgB,KAAK,CAAC,EACrB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,IAAW,GACX,EAAE;IACF,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACxB,qBA2BA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Private SVG adapter for resolved geometry.
|
|
3
|
+
*
|
|
4
|
+
* Everything here consumes plain data produced by `geometry/`. Swapping the
|
|
5
|
+
* drawing substrate means rewriting this directory and nothing else.
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import type { SeriesPattern } from '../contract/datasource';
|
|
9
|
+
import type { ChartTheme } from '../contract/theme';
|
|
10
|
+
import type { GeometryLabel, MarkPath, MarkerLine } from '../geometry/types';
|
|
11
|
+
/**
|
|
12
|
+
* Dash patterns give series a second, non-colour identity (FR-064). `undefined`
|
|
13
|
+
* means a solid stroke.
|
|
14
|
+
*/
|
|
15
|
+
export declare function dashArrayFor(pattern: SeriesPattern): string | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Texture definitions for the three non-value classes.
|
|
18
|
+
*
|
|
19
|
+
* Deliberately shape-based rather than colour-based: a reader in greyscale, or
|
|
20
|
+
* with reduced colour perception, must still tell a gap from a hatch from a
|
|
21
|
+
* locked cell (FR-064, SC-012).
|
|
22
|
+
*/
|
|
23
|
+
export declare function NonValueTextures({ theme }: {
|
|
24
|
+
readonly theme: ChartTheme;
|
|
25
|
+
}): React.JSX.Element;
|
|
26
|
+
export declare function Marks({ paths }: {
|
|
27
|
+
readonly paths: readonly MarkPath[];
|
|
28
|
+
}): React.JSX.Element;
|
|
29
|
+
export declare function MarkerLines({ markers, theme, }: {
|
|
30
|
+
readonly markers: readonly MarkerLine[];
|
|
31
|
+
readonly theme: ChartTheme;
|
|
32
|
+
}): React.JSX.Element;
|
|
33
|
+
export declare function GeometryLabels({ labels, theme, fontSize, }: {
|
|
34
|
+
readonly labels: readonly GeometryLabel[];
|
|
35
|
+
readonly theme: ChartTheme;
|
|
36
|
+
readonly fontSize: number;
|
|
37
|
+
}): React.JSX.Element;
|
|
38
|
+
/** Marks the currently selected point, when it still resolves. */
|
|
39
|
+
export declare function SelectionHighlight({ x, y, color, }: {
|
|
40
|
+
readonly x: number;
|
|
41
|
+
readonly y: number;
|
|
42
|
+
readonly color: string;
|
|
43
|
+
}): React.JSX.Element;
|
|
44
|
+
//# sourceMappingURL=Marks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Marks.d.ts","sourceRoot":"","sources":["../../../../src/render/Marks.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE7E;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAWvE;AAQD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,qBAsBzE;AASD,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;CAAE,qBAoBvE;AAED,wBAAgB,WAAW,CAAC,EAC3B,OAAO,EACP,KAAK,GACL,EAAE;IACF,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC3B,qBAeA;AAED,wBAAgB,cAAc,CAAC,EAC9B,MAAM,EACN,KAAK,EACL,QAAQ,GACR,EAAE;IACF,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B,qBAoBA;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,EAClC,CAAC,EACD,CAAC,EACD,KAAK,GACL,EAAE;IACF,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB,qBAOA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ChartDatasource, ChartFamily } from '../contract/datasource';
|
|
2
|
+
export interface DatasetBudget {
|
|
3
|
+
readonly maxSeries: number;
|
|
4
|
+
readonly maxPointsPerSeries?: number;
|
|
5
|
+
readonly maxCells?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const DATASET_BUDGETS: Readonly<Record<ChartFamily, DatasetBudget>>;
|
|
8
|
+
export interface BudgetCheck {
|
|
9
|
+
readonly withinBudget: boolean;
|
|
10
|
+
readonly seriesCount: number;
|
|
11
|
+
readonly maxPointsInAnySeries: number;
|
|
12
|
+
readonly totalPoints: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function checkBudget<M>(datasource: ChartDatasource<M>, family: ChartFamily): BudgetCheck;
|
|
15
|
+
/**
|
|
16
|
+
* Warns once per chart instance per mount. De-duplicating matters: a scrolling
|
|
17
|
+
* dashboard would otherwise flood the console on every frame.
|
|
18
|
+
*/
|
|
19
|
+
export declare function warnIfOverBudget<M>(datasource: ChartDatasource<M>, family: ChartFamily, instanceKey: string): void;
|
|
20
|
+
/** Called on unmount so a remounted chart can warn again. */
|
|
21
|
+
export declare function releaseBudgetWarning(instanceKey: string): void;
|
|
22
|
+
/** Test-only reset. */
|
|
23
|
+
export declare function __resetBudgetWarnings(): void;
|
|
24
|
+
//# sourceMappingURL=budgets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgets.d.ts","sourceRoot":"","sources":["../../../../src/validation/budgets.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE3E,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAMxE,CAAC;AAEF,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,WAAW,CAsB/F;AAOD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EACjC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GACjB,IAAI,CA0BN;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAE9D;AAED,uBAAuB;AACvB,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Datasource validation (FR-015, FR-017, FR-007a).
|
|
3
|
+
*
|
|
4
|
+
* Rules V1-V8 from specs/007-rn-chart-package/data-model.md §6. Every failure
|
|
5
|
+
* returns a `ChartError` built from the fixed message catalogue, so validation
|
|
6
|
+
* output can never carry a data value or a series label.
|
|
7
|
+
*
|
|
8
|
+
* Note V8: an empty datasource is **not** an error. It resolves to the empty
|
|
9
|
+
* state, which is a first-class outcome rather than a failure.
|
|
10
|
+
*/
|
|
11
|
+
import { type ChartDatasource, type ChartFamily } from '../contract/datasource';
|
|
12
|
+
import { type DistributionValues } from '../contract/distribution';
|
|
13
|
+
import { type ChartError } from '../contract/errors';
|
|
14
|
+
export interface ValidationResult {
|
|
15
|
+
readonly error?: ChartError;
|
|
16
|
+
/** No points at all across every series (V8). */
|
|
17
|
+
readonly isEmpty: boolean;
|
|
18
|
+
/** Some points are known and others are not (FR-032). */
|
|
19
|
+
readonly isPartial: boolean;
|
|
20
|
+
/** Distribution segments that do not sum to the whole (V6, FR-024). */
|
|
21
|
+
readonly totalIncomplete: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function validateDatasource<M>(datasource: ChartDatasource<M>, family: ChartFamily, chartId?: string,
|
|
24
|
+
/** What a distribution's values mean, when the app says; inferred otherwise. */
|
|
25
|
+
distributionValues?: DistributionValues): ValidationResult;
|
|
26
|
+
//# sourceMappingURL=validateDatasource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateDatasource.d.ts","sourceRoot":"","sources":["../../../../src/validation/validateDatasource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAEN,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAGN,KAAK,kBAAkB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGtE,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CAClC;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EACnC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9B,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,MAAM;AAChB,gFAAgF;AAChF,kBAAkB,CAAC,EAAE,kBAAkB,GACrC,gBAAgB,CAuIlB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composed accessible summaries (FR-067, FR-068, FR-069, FR-072).
|
|
3
|
+
*
|
|
4
|
+
* Exposing 2,500 individual points to a screen reader would be unusable even
|
|
5
|
+
* if it were cheap. A composed summary covers the same need: what the chart is,
|
|
6
|
+
* what it shows, where the extremes are, and what any target says.
|
|
7
|
+
*
|
|
8
|
+
* Withheld values never enter a summary — that would leak exactly what the
|
|
9
|
+
* withheld class exists to protect (FR-033).
|
|
10
|
+
*/
|
|
11
|
+
import type { ChartDatasource, ChartFamily, Position } from '../contract/datasource.js';
|
|
12
|
+
import type { ChartStatus } from '../contract/state.js';
|
|
13
|
+
import { type ChartStrings } from '../contract/strings.js';
|
|
14
|
+
import { type ValueState } from '../contract/value.js';
|
|
15
|
+
export interface SummaryInput<M = unknown> {
|
|
16
|
+
readonly datasource: ChartDatasource<M>;
|
|
17
|
+
readonly family: ChartFamily;
|
|
18
|
+
readonly status: ChartStatus;
|
|
19
|
+
readonly title?: string;
|
|
20
|
+
readonly formatValue: (value: ValueState) => string;
|
|
21
|
+
/** How a position is spoken; the app's axis formatter when it has one. */
|
|
22
|
+
readonly formatPosition?: (position: Position) => string;
|
|
23
|
+
readonly incomplete?: boolean;
|
|
24
|
+
/** The texts to speak; the English defaults when omitted. */
|
|
25
|
+
readonly strings?: ChartStrings;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Builds the label read aloud for the chart as a whole.
|
|
29
|
+
*
|
|
30
|
+
* Non-ready statuses replace the data description rather than appending to it,
|
|
31
|
+
* so a loading chart never announces figures it is not showing.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildChartSummary<M>(input: SummaryInput<M>): string;
|
|
34
|
+
/** Announced for the currently selected point on an adjustable chart. */
|
|
35
|
+
export declare function buildPointAnnouncement(seriesLabel: string, positionLabel: string, value: ValueState, formatValue: (v: ValueState) => string, strings?: ChartStrings): string;
|
|
36
|
+
/** Total plus an explicit note when it is not the whole picture (FR-013). */
|
|
37
|
+
export declare function buildTotalAnnouncement<M>(datasource: ChartDatasource<M>, formatValue: (v: ValueState) => string, strings?: ChartStrings): string;
|
|
38
|
+
//# sourceMappingURL=summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../../src/a11y/summary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAAwB,CAAC;AAGrF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAmB,CAAC;AAGrD,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,wBAAqB,CAAC;AACtE,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,sBAAmB,CAAC;AAwBvE,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACxC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,CAAC;IACpD,0EAA0E;IAC1E,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC;IACzD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;CAChC;AAkFD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAoCnE;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CACrC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,EACtC,OAAO,GAAE,YAAoC,GAC3C,MAAM,CASR;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,CAAC,EACvC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9B,WAAW,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,EACtC,OAAO,GAAE,YAAoC,GAC3C,MAAM,CAOR"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shared datasource contract (FR-007, FR-007a).
|
|
3
|
+
*
|
|
4
|
+
* One contract spans every chart family: each point carries the same envelope —
|
|
5
|
+
* identity, value state, optional unit and format hint, opaque metadata — and
|
|
6
|
+
* only its **position** varies by kind. Families that accept the same position
|
|
7
|
+
* kind consume one another's datasources unchanged; anything else is a
|
|
8
|
+
* validation error rather than a rendering guess.
|
|
9
|
+
*
|
|
10
|
+
* See specs/007-rn-chart-package/data-model.md §2–§6.
|
|
11
|
+
*/
|
|
12
|
+
import type { FormatHint } from './format.js';
|
|
13
|
+
import type { ReferenceMarker } from './marker.js';
|
|
14
|
+
import type { ValueState } from './value.js';
|
|
15
|
+
export type ChartFamily = 'progress' | 'distribution' | 'timeSeries' | 'bar' | 'heatmap';
|
|
16
|
+
/** A named bucket: a category axis, a distribution segment, a progress metric. */
|
|
17
|
+
export interface CategoryPosition {
|
|
18
|
+
readonly kind: 'category';
|
|
19
|
+
readonly category: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* An absolute instant as epoch milliseconds, UTC.
|
|
23
|
+
*
|
|
24
|
+
* A number rather than a `Date` or an ISO string: cheap to compare and
|
|
25
|
+
* memoize, no per-render parsing across hundreds of points, no identity churn
|
|
26
|
+
* that would defeat the re-render guarantee, and no ambiguous offset. All
|
|
27
|
+
* date wording comes from app formatters (FR-016).
|
|
28
|
+
*/
|
|
29
|
+
export interface InstantPosition {
|
|
30
|
+
readonly kind: 'instant';
|
|
31
|
+
readonly at: number;
|
|
32
|
+
}
|
|
33
|
+
/** A cell in a row-by-column matrix, for heatmaps. */
|
|
34
|
+
export interface MatrixPosition {
|
|
35
|
+
readonly kind: 'matrix';
|
|
36
|
+
readonly row: string;
|
|
37
|
+
readonly column: string;
|
|
38
|
+
}
|
|
39
|
+
export type Position = CategoryPosition | InstantPosition | MatrixPosition;
|
|
40
|
+
export type PositionKind = Position['kind'];
|
|
41
|
+
/** Non-colour encoding for a series, so meaning never rides on hue alone (FR-064). */
|
|
42
|
+
export type SeriesPattern = 'solid' | 'dashed' | 'dotted' | 'dashDot';
|
|
43
|
+
export interface DataPoint<M = unknown> {
|
|
44
|
+
/** Stable and unique within its series. Duplicates are a validation error. */
|
|
45
|
+
readonly id: string;
|
|
46
|
+
readonly position: Position;
|
|
47
|
+
readonly value: ValueState;
|
|
48
|
+
/** Overrides the series unit. */
|
|
49
|
+
readonly unit?: string;
|
|
50
|
+
/** Overrides the series format hint. */
|
|
51
|
+
readonly format?: FormatHint;
|
|
52
|
+
/** Colour of this point's segment in a distribution chart. Ignored elsewhere. */
|
|
53
|
+
readonly color?: string;
|
|
54
|
+
/** Opaque to the package: never read, never logged, returned unchanged. */
|
|
55
|
+
readonly metadata?: M;
|
|
56
|
+
}
|
|
57
|
+
export interface Series<M = unknown> {
|
|
58
|
+
/** Stable and unique within the datasource. */
|
|
59
|
+
readonly id: string;
|
|
60
|
+
readonly label: string;
|
|
61
|
+
readonly points: readonly DataPoint<M>[];
|
|
62
|
+
readonly unit?: string;
|
|
63
|
+
readonly format?: FormatHint;
|
|
64
|
+
/** Explicit colour override; otherwise the theme palette assigns one. */
|
|
65
|
+
readonly color?: string;
|
|
66
|
+
readonly pattern?: SeriesPattern;
|
|
67
|
+
/** Initial visibility. Runtime toggling is controlled separately. */
|
|
68
|
+
readonly hidden?: boolean;
|
|
69
|
+
readonly metadata?: M;
|
|
70
|
+
}
|
|
71
|
+
export interface ChartDatasource<M = unknown> {
|
|
72
|
+
/** Declared once, then validated against every point and the receiving family. */
|
|
73
|
+
readonly positionKind: PositionKind;
|
|
74
|
+
readonly series: readonly Series<M>[];
|
|
75
|
+
readonly markers?: readonly ReferenceMarker[];
|
|
76
|
+
readonly unit?: string;
|
|
77
|
+
readonly format?: FormatHint;
|
|
78
|
+
readonly metadata?: M;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Which position kinds each family accepts.
|
|
82
|
+
*
|
|
83
|
+
* Bar accepting both `category` and `instant` is what makes swapping a
|
|
84
|
+
* time-series chart for a bar chart free — the datasource does not change.
|
|
85
|
+
*/
|
|
86
|
+
export declare const FAMILY_POSITION_KINDS: Readonly<Record<ChartFamily, readonly PositionKind[]>>;
|
|
87
|
+
export declare function familyAcceptsPositionKind(family: ChartFamily, kind: PositionKind): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Resolves unit and format through the documented precedence:
|
|
90
|
+
* point -> series -> datasource -> undefined (caller falls back to its default).
|
|
91
|
+
*/
|
|
92
|
+
export declare function resolveFormat<M>(point: DataPoint<M> | undefined, series: Series<M> | undefined, datasource: ChartDatasource<M>): FormatHint | undefined;
|
|
93
|
+
export declare function resolveUnit<M>(point: DataPoint<M> | undefined, series: Series<M> | undefined, datasource: ChartDatasource<M>): string | undefined;
|
|
94
|
+
//# sourceMappingURL=datasource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../../../src/contract/datasource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAU,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAS,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,YAAY,GAAG,KAAK,GAAG,SAAS,CAAC;AAEzF,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACpB;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,QAAQ,GAAG,gBAAgB,GAAG,eAAe,GAAG,cAAc,CAAC;AAC3E,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAE5C,sFAAsF;AACtF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtE,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IACrC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,iCAAiC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,OAAO;IAClC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;IACjC,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC3C,kFAAkF;IAClF,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,YAAY,EAAE,CAAC,CAMxF,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAE1F;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC9B,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAC/B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,EAC7B,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,GAC5B,UAAU,GAAG,SAAS,CAExB;AAED,wBAAgB,WAAW,CAAC,CAAC,EAC5B,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAC/B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,EAC7B,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,GAC5B,MAAM,GAAG,SAAS,CAEpB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the numbers of a distribution mean (CHT-10).
|
|
3
|
+
*
|
|
4
|
+
* `proportions`: each value is already a share of the whole, in 0..1. A sum
|
|
5
|
+
* short of 1 is drawn short and reported incomplete. `absolute`: counts or
|
|
6
|
+
* amounts, normalised by their own total.
|
|
7
|
+
*
|
|
8
|
+
* Until 0.4.0 this was guessed from the values alone: anything in 0..1 was a
|
|
9
|
+
* proportion, so two segments counting 1 each drew two full circles on top of
|
|
10
|
+
* one another. The guess now also requires the shares to fit in one whole, and
|
|
11
|
+
* an app that knows can say so.
|
|
12
|
+
*/
|
|
13
|
+
import type { ChartDatasource } from './datasource.js';
|
|
14
|
+
export type DistributionValues = 'proportions' | 'absolute';
|
|
15
|
+
export declare const DISTRIBUTION_SUM_TOLERANCE = 0.001;
|
|
16
|
+
export declare function resolveDistributionValues<M>(datasource: ChartDatasource<M>, declared?: DistributionValues): DistributionValues;
|
|
17
|
+
//# sourceMappingURL=distribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distribution.d.ts","sourceRoot":"","sources":["../../../../src/contract/distribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAc,CAAC;AAGpD,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,UAAU,CAAC;AAE5D,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAEhD,wBAAgB,yBAAyB,CAAC,CAAC,EAC1C,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9B,QAAQ,CAAC,EAAE,kBAAkB,GAC3B,kBAAkB,CAqBpB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed error taxonomy and failure reporting (FR-038, FR-038a, FR-038b).
|
|
3
|
+
*
|
|
4
|
+
* Messages come from a **fixed catalogue with no interpolated data**. That is
|
|
5
|
+
* what makes the redaction guarantee structural rather than a rule someone has
|
|
6
|
+
* to remember: because the package never builds a message out of a value or a
|
|
7
|
+
* label, a failure report cannot carry patient data or account balances into a
|
|
8
|
+
* consuming app's crash reporting.
|
|
9
|
+
*/
|
|
10
|
+
import type { ChartFamily, PositionKind } from './datasource.js';
|
|
11
|
+
export type ChartErrorCategory = 'validation' | 'declared' | 'render';
|
|
12
|
+
export type ChartErrorCode = 'duplicateSeriesId' | 'duplicatePointId' | 'positionKindMismatch' | 'familyPositionKindUnsupported' | 'inconsistentMatrix' | 'distributionNotWhole' | 'nonFiniteValue' | 'negativeDistributionValue' | 'declaredByApp' | 'renderException';
|
|
13
|
+
export interface ChartError {
|
|
14
|
+
readonly category: ChartErrorCategory;
|
|
15
|
+
readonly code: ChartErrorCode;
|
|
16
|
+
readonly message: string;
|
|
17
|
+
readonly chartId?: string;
|
|
18
|
+
readonly family?: ChartFamily;
|
|
19
|
+
/**
|
|
20
|
+
* Structural detail that is safe to expose: counts and kinds only, never a
|
|
21
|
+
* value or a label.
|
|
22
|
+
*/
|
|
23
|
+
readonly detail?: {
|
|
24
|
+
readonly expectedKind?: PositionKind;
|
|
25
|
+
readonly actualKind?: PositionKind;
|
|
26
|
+
readonly occurrences?: number;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface ChartFailureReport {
|
|
30
|
+
readonly chartId?: string;
|
|
31
|
+
readonly family: ChartFamily;
|
|
32
|
+
readonly error: ChartError;
|
|
33
|
+
readonly componentStack?: string;
|
|
34
|
+
}
|
|
35
|
+
export type ChartFailureHandler = (report: ChartFailureReport) => void;
|
|
36
|
+
export declare function chartError(category: ChartErrorCategory, code: ChartErrorCode, extra?: Omit<ChartError, 'category' | 'code' | 'message'>): ChartError;
|
|
37
|
+
export declare function validationError(code: ChartErrorCode, extra?: Omit<ChartError, 'category' | 'code' | 'message'>): ChartError;
|
|
38
|
+
export declare function isChartError(e: unknown): e is ChartError;
|
|
39
|
+
/**
|
|
40
|
+
* Builds the report handed to the app after a contained render exception.
|
|
41
|
+
*
|
|
42
|
+
* A `ChartError` thrown by the package keeps its catalogue message. Anything
|
|
43
|
+
* else — a defect in the rendering library, say — is reported under the generic
|
|
44
|
+
* `renderException` message. We do **not** copy a third-party exception's own
|
|
45
|
+
* message into the report, because we cannot promise it is free of data.
|
|
46
|
+
*/
|
|
47
|
+
export declare function toFailureReport(family: ChartFamily, thrown: unknown, chartId?: string, componentStack?: string): ChartFailureReport;
|
|
48
|
+
/**
|
|
49
|
+
* Stable identity for a failure, used to de-duplicate reports so an unrelated
|
|
50
|
+
* parent re-render does not re-report the same problem.
|
|
51
|
+
*/
|
|
52
|
+
export declare function failureSignature(report: ChartFailureReport): string;
|
|
53
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/contract/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAc,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEtE,MAAM,MAAM,cAAc,GACvB,mBAAmB,GACnB,kBAAkB,GAClB,sBAAsB,GACtB,+BAA+B,GAC/B,oBAAoB,GACpB,sBAAsB,GACtB,gBAAgB,GAChB,2BAA2B,GAC3B,eAAe,GACf,iBAAiB,CAAC;AAwBrB,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE;QACjB,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;QACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC;QACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACF;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAEvE,wBAAgB,UAAU,CACzB,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,EAAE,cAAc,EACpB,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC,GACvD,UAAU,CAOZ;AAED,wBAAgB,eAAe,CAC9B,IAAI,EAAE,cAAc,EACpB,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC,GACvD,UAAU,CAEZ;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAYxD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,GACrB,kBAAkB,CAMpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Position, Series } from './datasource.js';
|
|
2
|
+
import { type ValueState } from './value.js';
|
|
3
|
+
export type FormatHint = {
|
|
4
|
+
readonly kind: 'number';
|
|
5
|
+
readonly decimals?: number;
|
|
6
|
+
} | {
|
|
7
|
+
readonly kind: 'percent';
|
|
8
|
+
readonly decimals?: number;
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: 'currency';
|
|
11
|
+
readonly currency: string;
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: 'duration';
|
|
14
|
+
readonly unit: 'ms' | 's' | 'min' | 'h';
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: 'count';
|
|
17
|
+
} | {
|
|
18
|
+
readonly kind: 'custom';
|
|
19
|
+
readonly unit: string;
|
|
20
|
+
};
|
|
21
|
+
export interface FormatContext {
|
|
22
|
+
readonly hint?: FormatHint;
|
|
23
|
+
readonly unit?: string;
|
|
24
|
+
/** Where the text will appear, so a formatter can adapt its verbosity. */
|
|
25
|
+
readonly slot: 'axis' | 'value' | 'legend' | 'summary';
|
|
26
|
+
}
|
|
27
|
+
export interface SeriesRef {
|
|
28
|
+
readonly id: string;
|
|
29
|
+
readonly label: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ChartFormatters {
|
|
32
|
+
readonly axisLabel?: (v: ValueState | Position, ctx: FormatContext) => string;
|
|
33
|
+
readonly value?: (v: ValueState, ctx: FormatContext) => string;
|
|
34
|
+
readonly legendLabel?: (series: SeriesRef, ctx: FormatContext) => string;
|
|
35
|
+
readonly summary?: (v: ValueState, ctx: FormatContext) => string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Placeholders for the three non-value classes. Deliberately not "0" and not
|
|
39
|
+
* an empty string, so a reader can tell a gap from a zero at a glance.
|
|
40
|
+
*/
|
|
41
|
+
export declare const NON_VALUE_TEXT: Readonly<Record<string, string>>;
|
|
42
|
+
/**
|
|
43
|
+
* Locale-neutral default formatting (FR-057).
|
|
44
|
+
*
|
|
45
|
+
* Deliberately plain: no thousands separators, no currency symbol lookup, no
|
|
46
|
+
* month names. Anything locale-dependent belongs to the consuming app, which
|
|
47
|
+
* owns an i18n system the package does not.
|
|
48
|
+
*/
|
|
49
|
+
export declare function formatValueDefault(v: ValueState, ctx?: FormatContext): string;
|
|
50
|
+
export declare function formatPositionDefault(p: Position): string;
|
|
51
|
+
export declare function formatLegendDefault(series: SeriesRef): string;
|
|
52
|
+
/**
|
|
53
|
+
* Runs an app formatter, falling back to the package default for that single
|
|
54
|
+
* label if it throws (FR-059). One bad formatter must not take down a screen.
|
|
55
|
+
*
|
|
56
|
+
* The dev-only warning is intentionally value-free: it names the slot, never
|
|
57
|
+
* the data.
|
|
58
|
+
*/
|
|
59
|
+
export declare function safeFormat(run: () => string, fallback: () => string, slot: FormatContext['slot'], onceKey?: string): string;
|
|
60
|
+
/** Test-only reset so warning-once behaviour can be asserted repeatedly. */
|
|
61
|
+
export declare function __resetFormatterWarnings(): void;
|
|
62
|
+
export declare function seriesRef<M>(series: Series<M>): SeriesRef;
|
|
63
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/contract/format.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAc,CAAC;AACrD,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,YAAS,CAAC;AAKnD,MAAM,MAAM,UAAU,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACxD;IACA,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;CACvC,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;CACvD;AAED,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,GAAG,QAAQ,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IAC9E,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IAC/D,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IACzE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;CACjE;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI3D,CAAC;AAMF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,GAAE,aAAiC,GAAG,MAAM,CA8BhG;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAYzD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAE7D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACzB,GAAG,EAAE,MAAM,MAAM,EACjB,QAAQ,EAAE,MAAM,MAAM,EACtB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,OAAO,CAAC,EAAE,MAAM,GACd,MAAM,CASR;AAuBD,4EAA4E;AAC5E,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAEzD"}
|