@plenustech/design-system 0.2.2 → 0.2.4
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/dist/components/actions/ButtonTile/ButtonTile.cjs +2 -0
- package/dist/components/actions/ButtonTile/ButtonTile.cjs.map +1 -0
- package/dist/components/actions/ButtonTile/ButtonTile.js +23 -0
- package/dist/components/actions/ButtonTile/ButtonTile.js.map +1 -0
- package/dist/components/actions/ButtonTile/ButtonTile.module.css.cjs +2 -0
- package/dist/components/actions/ButtonTile/ButtonTile.module.css.cjs.map +1 -0
- package/dist/components/actions/ButtonTile/ButtonTile.module.css.js +16 -0
- package/dist/components/actions/ButtonTile/ButtonTile.module.css.js.map +1 -0
- package/dist/components/actions/Toolbar/Toolbar.cjs +2 -0
- package/dist/components/actions/Toolbar/Toolbar.cjs.map +1 -0
- package/dist/components/actions/Toolbar/Toolbar.js +118 -0
- package/dist/components/actions/Toolbar/Toolbar.js.map +1 -0
- package/dist/components/actions/Toolbar/Toolbar.module.css.cjs +2 -0
- package/dist/components/actions/Toolbar/Toolbar.module.css.cjs.map +1 -0
- package/dist/components/actions/Toolbar/Toolbar.module.css.js +20 -0
- package/dist/components/actions/Toolbar/Toolbar.module.css.js.map +1 -0
- package/dist/components/charts/ChartArea/ChartArea.cjs +1 -1
- package/dist/components/charts/ChartArea/ChartArea.cjs.map +1 -1
- package/dist/components/charts/ChartArea/ChartArea.js +196 -148
- package/dist/components/charts/ChartArea/ChartArea.js.map +1 -1
- package/dist/components/charts/ChartArea/ChartArea.module.css.cjs +1 -1
- package/dist/components/charts/ChartArea/ChartArea.module.css.js +12 -10
- package/dist/components/charts/ChartArea/ChartArea.module.css.js.map +1 -1
- package/dist/components/charts/ChartBar/ChartBar.cjs +1 -1
- package/dist/components/charts/ChartBar/ChartBar.cjs.map +1 -1
- package/dist/components/charts/ChartBar/ChartBar.js +168 -145
- package/dist/components/charts/ChartBar/ChartBar.js.map +1 -1
- package/dist/components/charts/ChartBar/ChartBar.module.css.cjs +1 -1
- package/dist/components/charts/ChartBar/ChartBar.module.css.js +12 -10
- package/dist/components/charts/ChartBar/ChartBar.module.css.js.map +1 -1
- package/dist/components/charts/ChartCombo/ChartCombo.cjs +1 -1
- package/dist/components/charts/ChartCombo/ChartCombo.cjs.map +1 -1
- package/dist/components/charts/ChartCombo/ChartCombo.js +179 -154
- package/dist/components/charts/ChartCombo/ChartCombo.js.map +1 -1
- package/dist/components/charts/ChartCombo/ChartCombo.module.css.cjs +1 -1
- package/dist/components/charts/ChartCombo/ChartCombo.module.css.js +16 -14
- package/dist/components/charts/ChartCombo/ChartCombo.module.css.js.map +1 -1
- package/dist/components/charts/ChartDonut/ChartDonut.cjs +1 -1
- package/dist/components/charts/ChartDonut/ChartDonut.cjs.map +1 -1
- package/dist/components/charts/ChartDonut/ChartDonut.js +72 -61
- package/dist/components/charts/ChartDonut/ChartDonut.js.map +1 -1
- package/dist/components/charts/ChartGauge/ChartGauge.cjs +2 -0
- package/dist/components/charts/ChartGauge/ChartGauge.cjs.map +1 -0
- package/dist/components/charts/ChartGauge/ChartGauge.js +307 -0
- package/dist/components/charts/ChartGauge/ChartGauge.js.map +1 -0
- package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs +2 -0
- package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs.map +1 -0
- package/dist/components/charts/ChartGauge/ChartGauge.module.css.js +76 -0
- package/dist/components/charts/ChartGauge/ChartGauge.module.css.js.map +1 -0
- package/dist/components/charts/ChartGauge/gaugeLayout.cjs +2 -0
- package/dist/components/charts/ChartGauge/gaugeLayout.cjs.map +1 -0
- package/dist/components/charts/ChartGauge/gaugeLayout.js +107 -0
- package/dist/components/charts/ChartGauge/gaugeLayout.js.map +1 -0
- package/dist/components/charts/ChartGauge/gaugeReading.cjs +2 -0
- package/dist/components/charts/ChartGauge/gaugeReading.cjs.map +1 -0
- package/dist/components/charts/ChartGauge/gaugeReading.js +112 -0
- package/dist/components/charts/ChartGauge/gaugeReading.js.map +1 -0
- package/dist/components/charts/ChartGauge/gaugeScale.cjs +2 -0
- package/dist/components/charts/ChartGauge/gaugeScale.cjs.map +1 -0
- package/dist/components/charts/ChartGauge/gaugeScale.js +57 -0
- package/dist/components/charts/ChartGauge/gaugeScale.js.map +1 -0
- package/dist/components/charts/ChartLine/ChartLine.cjs +1 -1
- package/dist/components/charts/ChartLine/ChartLine.cjs.map +1 -1
- package/dist/components/charts/ChartLine/ChartLine.js +196 -143
- package/dist/components/charts/ChartLine/ChartLine.js.map +1 -1
- package/dist/components/charts/ChartLine/ChartLine.module.css.cjs +1 -1
- package/dist/components/charts/ChartLine/ChartLine.module.css.js +16 -14
- package/dist/components/charts/ChartLine/ChartLine.module.css.js.map +1 -1
- package/dist/components/charts/ChartMap/ChartMap.cjs +2 -0
- package/dist/components/charts/ChartMap/ChartMap.cjs.map +1 -0
- package/dist/components/charts/ChartMap/ChartMap.js +523 -0
- package/dist/components/charts/ChartMap/ChartMap.js.map +1 -0
- package/dist/components/charts/ChartMap/ChartMap.module.css.cjs +2 -0
- package/dist/components/charts/ChartMap/ChartMap.module.css.cjs.map +1 -0
- package/dist/components/charts/ChartMap/ChartMap.module.css.js +124 -0
- package/dist/components/charts/ChartMap/ChartMap.module.css.js.map +1 -0
- package/dist/components/charts/ChartMap/ChartMapLegend.cjs +2 -0
- package/dist/components/charts/ChartMap/ChartMapLegend.cjs.map +1 -0
- package/dist/components/charts/ChartMap/ChartMapLegend.js +102 -0
- package/dist/components/charts/ChartMap/ChartMapLegend.js.map +1 -0
- package/dist/components/charts/ChartMap/ChartMapTable.cjs +2 -0
- package/dist/components/charts/ChartMap/ChartMapTable.cjs.map +1 -0
- package/dist/components/charts/ChartMap/ChartMapTable.js +118 -0
- package/dist/components/charts/ChartMap/ChartMapTable.js.map +1 -0
- package/dist/components/charts/ChartMap/mapGeometry.cjs +2 -0
- package/dist/components/charts/ChartMap/mapGeometry.cjs.map +1 -0
- package/dist/components/charts/ChartMap/mapGeometry.js +113 -0
- package/dist/components/charts/ChartMap/mapGeometry.js.map +1 -0
- package/dist/components/charts/ChartMap/mapLabels.cjs +2 -0
- package/dist/components/charts/ChartMap/mapLabels.cjs.map +1 -0
- package/dist/components/charts/ChartMap/mapLabels.js +80 -0
- package/dist/components/charts/ChartMap/mapLabels.js.map +1 -0
- package/dist/components/charts/ChartMap/mapScales.cjs +2 -0
- package/dist/components/charts/ChartMap/mapScales.cjs.map +1 -0
- package/dist/components/charts/ChartMap/mapScales.js +131 -0
- package/dist/components/charts/ChartMap/mapScales.js.map +1 -0
- package/dist/components/charts/ChartMap/polylabel.cjs +2 -0
- package/dist/components/charts/ChartMap/polylabel.cjs.map +1 -0
- package/dist/components/charts/ChartMap/polylabel.js +50 -0
- package/dist/components/charts/ChartMap/polylabel.js.map +1 -0
- package/dist/components/charts/ChartPie/ChartPie.cjs +1 -1
- package/dist/components/charts/ChartPie/ChartPie.cjs.map +1 -1
- package/dist/components/charts/ChartPie/ChartPie.js +71 -60
- package/dist/components/charts/ChartPie/ChartPie.js.map +1 -1
- package/dist/components/charts/ChartRadial/ChartRadial.cjs +1 -1
- package/dist/components/charts/ChartRadial/ChartRadial.cjs.map +1 -1
- package/dist/components/charts/ChartRadial/ChartRadial.js +101 -84
- package/dist/components/charts/ChartRadial/ChartRadial.js.map +1 -1
- package/dist/components/charts/ChartSankey/ChartSankey.cjs +1 -1
- package/dist/components/charts/ChartSankey/ChartSankey.cjs.map +1 -1
- package/dist/components/charts/ChartSankey/ChartSankey.js +148 -125
- package/dist/components/charts/ChartSankey/ChartSankey.js.map +1 -1
- package/dist/components/charts/ChartScatter/ChartScatter.cjs +1 -1
- package/dist/components/charts/ChartScatter/ChartScatter.cjs.map +1 -1
- package/dist/components/charts/ChartScatter/ChartScatter.js +138 -106
- package/dist/components/charts/ChartScatter/ChartScatter.js.map +1 -1
- package/dist/components/charts/ChartScatter/ChartScatter.module.css.cjs +1 -1
- package/dist/components/charts/ChartScatter/ChartScatter.module.css.js +3 -3
- package/dist/components/charts/ChartSunburst/ChartSunburst.cjs +1 -1
- package/dist/components/charts/ChartSunburst/ChartSunburst.cjs.map +1 -1
- package/dist/components/charts/ChartSunburst/ChartSunburst.js +115 -100
- package/dist/components/charts/ChartSunburst/ChartSunburst.js.map +1 -1
- package/dist/components/charts/ChartTimeline/ChartTimeline.cjs +2 -0
- package/dist/components/charts/ChartTimeline/ChartTimeline.cjs.map +1 -0
- package/dist/components/charts/ChartTimeline/ChartTimeline.js +703 -0
- package/dist/components/charts/ChartTimeline/ChartTimeline.js.map +1 -0
- package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs +2 -0
- package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs.map +1 -0
- package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js +124 -0
- package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js.map +1 -0
- package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs +2 -0
- package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs.map +1 -0
- package/dist/components/charts/ChartTimeline/ChartTimelineTable.js +42 -0
- package/dist/components/charts/ChartTimeline/ChartTimelineTable.js.map +1 -0
- package/dist/components/charts/ChartTimeline/timelineLayout.cjs +2 -0
- package/dist/components/charts/ChartTimeline/timelineLayout.cjs.map +1 -0
- package/dist/components/charts/ChartTimeline/timelineLayout.js +109 -0
- package/dist/components/charts/ChartTimeline/timelineLayout.js.map +1 -0
- package/dist/components/charts/ChartTimeline/timelineTime.cjs +2 -0
- package/dist/components/charts/ChartTimeline/timelineTime.cjs.map +1 -0
- package/dist/components/charts/ChartTimeline/timelineTime.js +91 -0
- package/dist/components/charts/ChartTimeline/timelineTime.js.map +1 -0
- package/dist/components/charts/ChartTimeline/timelineTooltip.cjs +2 -0
- package/dist/components/charts/ChartTimeline/timelineTooltip.cjs.map +1 -0
- package/dist/components/charts/ChartTimeline/timelineTooltip.js +77 -0
- package/dist/components/charts/ChartTimeline/timelineTooltip.js.map +1 -0
- package/dist/components/charts/ChartTooltip/ChartTooltip.cjs +1 -1
- package/dist/components/charts/ChartTooltip/ChartTooltip.cjs.map +1 -1
- package/dist/components/charts/ChartTooltip/ChartTooltip.js +1 -1
- package/dist/components/charts/ChartTooltip/ChartTooltip.js.map +1 -1
- package/dist/components/charts/ChartTreemap/ChartTreemap.cjs +1 -1
- package/dist/components/charts/ChartTreemap/ChartTreemap.cjs.map +1 -1
- package/dist/components/charts/ChartTreemap/ChartTreemap.js +100 -89
- package/dist/components/charts/ChartTreemap/ChartTreemap.js.map +1 -1
- package/dist/components/charts/ChartWaterfall/ChartWaterfall.cjs +1 -1
- package/dist/components/charts/ChartWaterfall/ChartWaterfall.cjs.map +1 -1
- package/dist/components/charts/ChartWaterfall/ChartWaterfall.js +125 -105
- package/dist/components/charts/ChartWaterfall/ChartWaterfall.js.map +1 -1
- package/dist/components/charts/ChartWaterfall/ChartWaterfall.module.css.cjs +1 -1
- package/dist/components/charts/ChartWaterfall/ChartWaterfall.module.css.js +8 -6
- package/dist/components/charts/ChartWaterfall/ChartWaterfall.module.css.js.map +1 -1
- package/dist/components/charts/core/CartesianFrame.cjs +1 -1
- package/dist/components/charts/core/CartesianFrame.cjs.map +1 -1
- package/dist/components/charts/core/CartesianFrame.js +61 -96
- package/dist/components/charts/core/CartesianFrame.js.map +1 -1
- package/dist/components/charts/core/Chart.module.css.cjs +1 -1
- package/dist/components/charts/core/Chart.module.css.js +52 -54
- package/dist/components/charts/core/Chart.module.css.js.map +1 -1
- package/dist/components/charts/core/ChartFrame.cjs +1 -1
- package/dist/components/charts/core/ChartFrame.cjs.map +1 -1
- package/dist/components/charts/core/ChartFrame.js +53 -47
- package/dist/components/charts/core/ChartFrame.js.map +1 -1
- package/dist/components/charts/core/ChartLegend.cjs +1 -1
- package/dist/components/charts/core/ChartLegend.cjs.map +1 -1
- package/dist/components/charts/core/ChartLegend.js +37 -25
- package/dist/components/charts/core/ChartLegend.js.map +1 -1
- package/dist/components/charts/core/PointBands.cjs +2 -0
- package/dist/components/charts/core/PointBands.cjs.map +1 -0
- package/dist/components/charts/core/PointBands.js +41 -0
- package/dist/components/charts/core/PointBands.js.map +1 -0
- package/dist/components/charts/core/cartesianLayout.cjs +1 -1
- package/dist/components/charts/core/cartesianLayout.cjs.map +1 -1
- package/dist/components/charts/core/cartesianLayout.js +49 -41
- package/dist/components/charts/core/cartesianLayout.js.map +1 -1
- package/dist/components/charts/core/hoverPath.cjs +2 -0
- package/dist/components/charts/core/hoverPath.cjs.map +1 -0
- package/dist/components/charts/core/hoverPath.js +7 -0
- package/dist/components/charts/core/hoverPath.js.map +1 -0
- package/dist/components/charts/core/pointLabels.cjs +2 -0
- package/dist/components/charts/core/pointLabels.cjs.map +1 -0
- package/dist/components/charts/core/pointLabels.js +12 -0
- package/dist/components/charts/core/pointLabels.js.map +1 -0
- package/dist/components/charts/core/tooltips.cjs +2 -0
- package/dist/components/charts/core/tooltips.cjs.map +1 -0
- package/dist/components/charts/core/tooltips.js +48 -0
- package/dist/components/charts/core/tooltips.js.map +1 -0
- package/dist/components/charts/core/useCartesianLayout.cjs +2 -0
- package/dist/components/charts/core/useCartesianLayout.cjs.map +1 -0
- package/dist/components/charts/core/useCartesianLayout.js +38 -0
- package/dist/components/charts/core/useCartesianLayout.js.map +1 -0
- package/dist/components/charts/core/useChartMetrics.cjs +1 -1
- package/dist/components/charts/core/useChartMetrics.cjs.map +1 -1
- package/dist/components/charts/core/useChartMetrics.js +20 -25
- package/dist/components/charts/core/useChartMetrics.js.map +1 -1
- package/dist/components/charts/core/useSeriesToggle.cjs +1 -1
- package/dist/components/charts/core/useSeriesToggle.cjs.map +1 -1
- package/dist/components/charts/core/useSeriesToggle.js +19 -12
- package/dist/components/charts/core/useSeriesToggle.js.map +1 -1
- package/dist/components/data-display/Accordion/Accordion.cjs +1 -1
- package/dist/components/data-display/Accordion/Accordion.cjs.map +1 -1
- package/dist/components/data-display/Accordion/Accordion.js +56 -46
- package/dist/components/data-display/Accordion/Accordion.js.map +1 -1
- package/dist/components/data-display/Accordion/Accordion.module.css.cjs +1 -1
- package/dist/components/data-display/Accordion/Accordion.module.css.js +16 -16
- package/dist/components/data-display/List/List.cjs.map +1 -1
- package/dist/components/data-display/List/List.js.map +1 -1
- package/dist/components/data-display/List/List.module.css.cjs +1 -1
- package/dist/components/data-display/List/List.module.css.js +34 -24
- package/dist/components/data-display/List/List.module.css.js.map +1 -1
- package/dist/components/data-display/List/ListingOptions.cjs +1 -1
- package/dist/components/data-display/List/ListingOptions.cjs.map +1 -1
- package/dist/components/data-display/List/ListingOptions.js +98 -74
- package/dist/components/data-display/List/ListingOptions.js.map +1 -1
- package/dist/components/data-display/List/useListing.cjs.map +1 -1
- package/dist/components/data-display/List/useListing.js.map +1 -1
- package/dist/components/data-display/SortableList/SortableList.cjs +2 -0
- package/dist/components/data-display/SortableList/SortableList.cjs.map +1 -0
- package/dist/components/data-display/SortableList/SortableList.js +168 -0
- package/dist/components/data-display/SortableList/SortableList.js.map +1 -0
- package/dist/components/data-display/SortableList/SortableList.module.css.cjs +2 -0
- package/dist/components/data-display/SortableList/SortableList.module.css.cjs.map +1 -0
- package/dist/components/data-display/SortableList/SortableList.module.css.js +34 -0
- package/dist/components/data-display/SortableList/SortableList.module.css.js.map +1 -0
- package/dist/components/data-display/Table/Table.cjs +1 -1
- package/dist/components/data-display/Table/Table.cjs.map +1 -1
- package/dist/components/data-display/Table/Table.js +86 -85
- package/dist/components/data-display/Table/Table.js.map +1 -1
- package/dist/components/data-display/Table/Table.module.css.cjs +1 -1
- package/dist/components/data-display/Table/Table.module.css.js +50 -51
- package/dist/components/data-display/Table/Table.module.css.js.map +1 -1
- package/dist/components/data-display/Tag/Tag.cjs +2 -0
- package/dist/components/data-display/Tag/Tag.cjs.map +1 -0
- package/dist/components/data-display/Tag/Tag.js +50 -0
- package/dist/components/data-display/Tag/Tag.js.map +1 -0
- package/dist/components/data-display/Tag/Tag.module.css.cjs +2 -0
- package/dist/components/data-display/Tag/Tag.module.css.cjs.map +1 -0
- package/dist/components/data-display/Tag/Tag.module.css.js +22 -0
- package/dist/components/data-display/Tag/Tag.module.css.js.map +1 -0
- package/dist/components/data-display/Timeline/Timeline.cjs +2 -0
- package/dist/components/data-display/Timeline/Timeline.cjs.map +1 -0
- package/dist/components/data-display/Timeline/Timeline.js +31 -0
- package/dist/components/data-display/Timeline/Timeline.js.map +1 -0
- package/dist/components/data-display/Timeline/Timeline.module.css.cjs +2 -0
- package/dist/components/data-display/Timeline/Timeline.module.css.cjs.map +1 -0
- package/dist/components/data-display/Timeline/Timeline.module.css.js +30 -0
- package/dist/components/data-display/Timeline/Timeline.module.css.js.map +1 -0
- package/dist/components/feedback/Skeleton/Skeleton.cjs +2 -0
- package/dist/components/feedback/Skeleton/Skeleton.cjs.map +1 -0
- package/dist/components/feedback/Skeleton/Skeleton.js +17 -0
- package/dist/components/feedback/Skeleton/Skeleton.js.map +1 -0
- package/dist/components/feedback/Skeleton/Skeleton.module.css.cjs +2 -0
- package/dist/components/feedback/Skeleton/Skeleton.module.css.cjs.map +1 -0
- package/dist/components/feedback/Skeleton/Skeleton.module.css.js +15 -0
- package/dist/components/feedback/Skeleton/Skeleton.module.css.js.map +1 -0
- package/dist/components/feedback/Toast/Toast.module.css.cjs +2 -0
- package/dist/components/feedback/Toast/Toast.module.css.cjs.map +1 -0
- package/dist/components/feedback/Toast/Toast.module.css.js +31 -0
- package/dist/components/feedback/Toast/Toast.module.css.js.map +1 -0
- package/dist/components/feedback/Toast/ToastRegion.cjs +2 -0
- package/dist/components/feedback/Toast/ToastRegion.cjs.map +1 -0
- package/dist/components/feedback/Toast/ToastRegion.js +62 -0
- package/dist/components/feedback/Toast/ToastRegion.js.map +1 -0
- package/dist/components/feedback/Toast/toastStore.cjs +2 -0
- package/dist/components/feedback/Toast/toastStore.cjs.map +1 -0
- package/dist/components/feedback/Toast/toastStore.js +33 -0
- package/dist/components/feedback/Toast/toastStore.js.map +1 -0
- package/dist/components/forms/Checkbox/Checkbox.cjs +1 -1
- package/dist/components/forms/Checkbox/Checkbox.cjs.map +1 -1
- package/dist/components/forms/Checkbox/Checkbox.js +43 -31
- package/dist/components/forms/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/forms/Checkbox/Checkbox.module.css.cjs +1 -1
- package/dist/components/forms/Checkbox/Checkbox.module.css.js +1 -1
- package/dist/components/forms/CheckboxGroup/CheckboxGroup.cjs +2 -0
- package/dist/components/forms/CheckboxGroup/CheckboxGroup.cjs.map +1 -0
- package/dist/components/forms/CheckboxGroup/CheckboxGroup.js +54 -0
- package/dist/components/forms/CheckboxGroup/CheckboxGroup.js.map +1 -0
- package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.cjs +2 -0
- package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.cjs.map +1 -0
- package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.js +22 -0
- package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.js.map +1 -0
- package/dist/components/forms/ColorPicker/ColorPicker.cjs +2 -0
- package/dist/components/forms/ColorPicker/ColorPicker.cjs.map +1 -0
- package/dist/components/forms/ColorPicker/ColorPicker.js +57 -0
- package/dist/components/forms/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/components/forms/ColorPicker/ColorPicker.module.css.cjs +2 -0
- package/dist/components/forms/ColorPicker/ColorPicker.module.css.cjs.map +1 -0
- package/dist/components/forms/ColorPicker/ColorPicker.module.css.js +22 -0
- package/dist/components/forms/ColorPicker/ColorPicker.module.css.js.map +1 -0
- package/dist/components/forms/ComboBox/ComboBox.cjs.map +1 -1
- package/dist/components/forms/ComboBox/ComboBox.js.map +1 -1
- package/dist/components/forms/ComboBox/ComboBox.module.css.cjs +1 -1
- package/dist/components/forms/ComboBox/ComboBox.module.css.js +20 -20
- package/dist/components/forms/Field/Field.cjs +1 -1
- package/dist/components/forms/Field/Field.cjs.map +1 -1
- package/dist/components/forms/Field/Field.js +21 -20
- package/dist/components/forms/Field/Field.js.map +1 -1
- package/dist/components/forms/Field/Field.module.css.cjs +1 -1
- package/dist/components/forms/Field/Field.module.css.js +18 -12
- package/dist/components/forms/Field/Field.module.css.js.map +1 -1
- package/dist/components/forms/FileUpload/FileUpload.cjs +2 -0
- package/dist/components/forms/FileUpload/FileUpload.cjs.map +1 -0
- package/dist/components/forms/FileUpload/FileUpload.js +142 -0
- package/dist/components/forms/FileUpload/FileUpload.js.map +1 -0
- package/dist/components/forms/FileUpload/FileUpload.module.css.cjs +2 -0
- package/dist/components/forms/FileUpload/FileUpload.module.css.cjs.map +1 -0
- package/dist/components/forms/FileUpload/FileUpload.module.css.js +46 -0
- package/dist/components/forms/FileUpload/FileUpload.module.css.js.map +1 -0
- package/dist/components/forms/InputPassword/InputPassword.module.css.cjs +1 -1
- package/dist/components/forms/InputPassword/InputPassword.module.css.js +12 -12
- package/dist/components/forms/InputText/InputText.cjs +1 -1
- package/dist/components/forms/InputText/InputText.cjs.map +1 -1
- package/dist/components/forms/InputText/InputText.js +55 -47
- package/dist/components/forms/InputText/InputText.js.map +1 -1
- package/dist/components/forms/InputText/InputText.module.css.cjs +1 -1
- package/dist/components/forms/InputText/InputText.module.css.js +10 -10
- package/dist/components/forms/RadioGroup/RadioGroup.module.css.cjs +1 -1
- package/dist/components/forms/RadioGroup/RadioGroup.module.css.js +4 -4
- package/dist/components/forms/SegmentedControl/SegmentedControl.cjs +2 -0
- package/dist/components/forms/SegmentedControl/SegmentedControl.cjs.map +1 -0
- package/dist/components/forms/SegmentedControl/SegmentedControl.js +52 -0
- package/dist/components/forms/SegmentedControl/SegmentedControl.js.map +1 -0
- package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.cjs +2 -0
- package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.cjs.map +1 -0
- package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.js +22 -0
- package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.js.map +1 -0
- package/dist/components/forms/Select/Select.module.css.cjs +1 -1
- package/dist/components/forms/Select/Select.module.css.js +13 -13
- package/dist/components/forms/Switch/Switch.module.css.cjs +1 -1
- package/dist/components/forms/Switch/Switch.module.css.js +2 -2
- package/dist/components/icons/icons.cjs +1 -1
- package/dist/components/icons/icons.cjs.map +1 -1
- package/dist/components/icons/icons.js +198 -40
- package/dist/components/icons/icons.js.map +1 -1
- package/dist/components/navigation/SkipLink/SkipLink.cjs +2 -0
- package/dist/components/navigation/SkipLink/SkipLink.cjs.map +1 -0
- package/dist/components/navigation/SkipLink/SkipLink.js +9 -0
- package/dist/components/navigation/SkipLink/SkipLink.js.map +1 -0
- package/dist/components/navigation/SkipLink/SkipLink.module.css.cjs +2 -0
- package/dist/components/navigation/SkipLink/SkipLink.module.css.cjs.map +1 -0
- package/dist/components/navigation/SkipLink/SkipLink.module.css.js +8 -0
- package/dist/components/navigation/SkipLink/SkipLink.module.css.js.map +1 -0
- package/dist/components/navigation/Steps/Steps.cjs +2 -0
- package/dist/components/navigation/Steps/Steps.cjs.map +1 -0
- package/dist/components/navigation/Steps/Steps.js +30 -0
- package/dist/components/navigation/Steps/Steps.js.map +1 -0
- package/dist/components/navigation/Steps/Steps.module.css.cjs +2 -0
- package/dist/components/navigation/Steps/Steps.module.css.cjs.map +1 -0
- package/dist/components/navigation/Steps/Steps.module.css.js +26 -0
- package/dist/components/navigation/Steps/Steps.module.css.js.map +1 -0
- package/dist/components/navigation/Tabs/Tabs.cjs +1 -1
- package/dist/components/navigation/Tabs/Tabs.cjs.map +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +88 -79
- package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
- package/dist/components/navigation/Tabs/Tabs.module.css.cjs +1 -1
- package/dist/components/navigation/Tabs/Tabs.module.css.js +18 -14
- package/dist/components/navigation/Tabs/Tabs.module.css.js.map +1 -1
- package/dist/components/navigation/TabsNav/TabsNav.cjs +2 -0
- package/dist/components/navigation/TabsNav/TabsNav.cjs.map +1 -0
- package/dist/components/navigation/TabsNav/TabsNav.js +21 -0
- package/dist/components/navigation/TabsNav/TabsNav.js.map +1 -0
- package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs +2 -0
- package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs.map +1 -0
- package/dist/components/navigation/TabsNav/TabsNav.module.css.js +18 -0
- package/dist/components/navigation/TabsNav/TabsNav.module.css.js.map +1 -0
- package/dist/components/overlays/Dialog/Dialog.cjs +1 -1
- package/dist/components/overlays/Dialog/Dialog.cjs.map +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +11 -58
- package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogFrame.cjs +2 -0
- package/dist/components/overlays/Dialog/DialogFrame.cjs.map +1 -0
- package/dist/components/overlays/Dialog/DialogFrame.js +65 -0
- package/dist/components/overlays/Dialog/DialogFrame.js.map +1 -0
- package/dist/components/overlays/Drawer/Drawer.cjs +2 -0
- package/dist/components/overlays/Drawer/Drawer.cjs.map +1 -0
- package/dist/components/overlays/Drawer/Drawer.js +17 -0
- package/dist/components/overlays/Drawer/Drawer.js.map +1 -0
- package/dist/components/overlays/Drawer/Drawer.module.css.cjs +2 -0
- package/dist/components/overlays/Drawer/Drawer.module.css.cjs.map +1 -0
- package/dist/components/overlays/Drawer/Drawer.module.css.js +23 -0
- package/dist/components/overlays/Drawer/Drawer.module.css.js.map +1 -0
- package/dist/components/overlays/Menu/Menu.cjs +1 -1
- package/dist/components/overlays/Menu/Menu.cjs.map +1 -1
- package/dist/components/overlays/Menu/Menu.js +105 -86
- package/dist/components/overlays/Menu/Menu.js.map +1 -1
- package/dist/components/overlays/Menu/Menu.module.css.cjs +1 -1
- package/dist/components/overlays/Menu/Menu.module.css.js +24 -6
- package/dist/components/overlays/Menu/Menu.module.css.js.map +1 -1
- package/dist/design-system.css +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +190 -118
- package/dist/index.js.map +1 -1
- package/dist/types/components/actions/ButtonTile/ButtonTile.d.ts +14 -0
- package/dist/types/components/actions/ButtonTile/index.d.ts +2 -0
- package/dist/types/components/actions/Toolbar/Toolbar.d.ts +27 -0
- package/dist/types/components/actions/Toolbar/index.d.ts +2 -0
- package/dist/types/components/charts/ChartArea/ChartArea.d.ts +15 -4
- package/dist/types/components/charts/ChartBar/ChartBar.d.ts +11 -4
- package/dist/types/components/charts/ChartCombo/ChartCombo.d.ts +16 -4
- package/dist/types/components/charts/ChartDonut/ChartDonut.d.ts +5 -1
- package/dist/types/components/charts/ChartGauge/ChartGauge.d.ts +83 -0
- package/dist/types/components/charts/ChartGauge/gaugeLayout.d.ts +64 -0
- package/dist/types/components/charts/ChartGauge/gaugeReading.d.ts +97 -0
- package/dist/types/components/charts/ChartGauge/gaugeScale.d.ts +38 -0
- package/dist/types/components/charts/ChartGauge/index.d.ts +2 -0
- package/dist/types/components/charts/ChartLine/ChartLine.d.ts +15 -4
- package/dist/types/components/charts/ChartMap/ChartMap.d.ts +104 -0
- package/dist/types/components/charts/ChartMap/ChartMapLegend.d.ts +44 -0
- package/dist/types/components/charts/ChartMap/ChartMapTable.d.ts +38 -0
- package/dist/types/components/charts/ChartMap/index.d.ts +4 -0
- package/dist/types/components/charts/ChartMap/mapGeometry.d.ts +56 -0
- package/dist/types/components/charts/ChartMap/mapLabels.d.ts +51 -0
- package/dist/types/components/charts/ChartMap/mapScales.d.ts +76 -0
- package/dist/types/components/charts/ChartMap/polylabel.d.ts +9 -0
- package/dist/types/components/charts/ChartPie/ChartPie.d.ts +5 -1
- package/dist/types/components/charts/ChartRadial/ChartRadial.d.ts +5 -1
- package/dist/types/components/charts/ChartSankey/ChartSankey.d.ts +5 -1
- package/dist/types/components/charts/ChartScatter/ChartScatter.d.ts +7 -1
- package/dist/types/components/charts/ChartSunburst/ChartSunburst.d.ts +11 -2
- package/dist/types/components/charts/ChartTimeline/ChartTimeline.d.ts +137 -0
- package/dist/types/components/charts/ChartTimeline/ChartTimelineTable.d.ts +25 -0
- package/dist/types/components/charts/ChartTimeline/index.d.ts +2 -0
- package/dist/types/components/charts/ChartTimeline/timelineLayout.d.ts +70 -0
- package/dist/types/components/charts/ChartTimeline/timelineTime.d.ts +16 -0
- package/dist/types/components/charts/ChartTimeline/timelineTooltip.d.ts +45 -0
- package/dist/types/components/charts/ChartTooltip/ChartTooltip.d.ts +2 -0
- package/dist/types/components/charts/ChartTreemap/ChartTreemap.d.ts +11 -2
- package/dist/types/components/charts/ChartWaterfall/ChartWaterfall.d.ts +8 -3
- package/dist/types/components/charts/core/CartesianFrame.d.ts +6 -1
- package/dist/types/components/charts/core/ChartFrame.d.ts +7 -1
- package/dist/types/components/charts/core/ChartLegend.d.ts +3 -1
- package/dist/types/components/charts/core/PointBands.d.ts +22 -0
- package/dist/types/components/charts/core/cartesianLayout.d.ts +10 -4
- package/dist/types/components/charts/core/hoverPath.d.ts +10 -0
- package/dist/types/components/charts/core/index.d.ts +13 -3
- package/dist/types/components/charts/core/pointLabels.d.ts +13 -0
- package/dist/types/components/charts/core/tooltips.d.ts +49 -0
- package/dist/types/components/charts/core/useCartesianLayout.d.ts +20 -0
- package/dist/types/components/charts/core/useSeriesToggle.d.ts +15 -1
- package/dist/types/components/data-display/Accordion/Accordion.d.ts +6 -1
- package/dist/types/components/data-display/Accordion/index.d.ts +1 -1
- package/dist/types/components/data-display/List/List.d.ts +1 -1
- package/dist/types/components/data-display/List/useListing.d.ts +7 -1
- package/dist/types/components/data-display/SortableList/SortableList.d.ts +22 -0
- package/dist/types/components/data-display/SortableList/index.d.ts +2 -0
- package/dist/types/components/data-display/Tag/Tag.d.ts +13 -0
- package/dist/types/components/data-display/Tag/index.d.ts +2 -0
- package/dist/types/components/data-display/Timeline/Timeline.d.ts +15 -0
- package/dist/types/components/data-display/Timeline/index.d.ts +2 -0
- package/dist/types/components/feedback/Skeleton/Skeleton.d.ts +13 -0
- package/dist/types/components/feedback/Skeleton/index.d.ts +2 -0
- package/dist/types/components/feedback/Toast/ToastRegion.d.ts +2 -0
- package/dist/types/components/feedback/Toast/index.d.ts +3 -0
- package/dist/types/components/feedback/Toast/toastStore.d.ts +24 -0
- package/dist/types/components/forms/CheckboxGroup/CheckboxGroup.d.ts +28 -0
- package/dist/types/components/forms/CheckboxGroup/index.d.ts +2 -0
- package/dist/types/components/forms/ColorPicker/ColorPicker.d.ts +26 -0
- package/dist/types/components/forms/ColorPicker/index.d.ts +2 -0
- package/dist/types/components/forms/ComboBox/ComboBox.d.ts +7 -1
- package/dist/types/components/forms/Field/Field.d.ts +6 -2
- package/dist/types/components/forms/Field/index.d.ts +1 -1
- package/dist/types/components/forms/FileUpload/FileUpload.d.ts +37 -0
- package/dist/types/components/forms/FileUpload/index.d.ts +2 -0
- package/dist/types/components/forms/InputText/InputText.d.ts +4 -2
- package/dist/types/components/forms/SegmentedControl/SegmentedControl.d.ts +23 -0
- package/dist/types/components/forms/SegmentedControl/index.d.ts +2 -0
- package/dist/types/components/icons/icons.d.ts +29 -0
- package/dist/types/components/icons/index.d.ts +1 -1
- package/dist/types/components/navigation/SkipLink/SkipLink.d.ts +7 -0
- package/dist/types/components/navigation/SkipLink/index.d.ts +2 -0
- package/dist/types/components/navigation/Steps/Steps.d.ts +16 -0
- package/dist/types/components/navigation/Steps/index.d.ts +2 -0
- package/dist/types/components/navigation/Tabs/Tabs.d.ts +5 -1
- package/dist/types/components/navigation/TabsNav/TabsNav.d.ts +20 -0
- package/dist/types/components/navigation/TabsNav/index.d.ts +2 -0
- package/dist/types/components/overlays/Dialog/Dialog.d.ts +21 -9
- package/dist/types/components/overlays/Dialog/DialogFrame.d.ts +13 -0
- package/dist/types/components/overlays/Drawer/Drawer.d.ts +9 -0
- package/dist/types/components/overlays/Drawer/index.d.ts +2 -0
- package/dist/types/components/overlays/Menu/Menu.d.ts +16 -2
- package/dist/types/components/overlays/Menu/index.d.ts +1 -1
- package/dist/types/index.d.ts +43 -7
- package/dist/types/utils/formatters/formatarDuracao.d.ts +5 -0
- package/dist/types/utils/formatters/formatarNumero.d.ts +6 -1
- package/dist/types/utils/formatters/formatarTamanhoDeArquivo.d.ts +7 -0
- package/dist/types/utils/formatters/index.d.ts +4 -1
- package/dist/utils/formatters/formatarDuracao.cjs +2 -0
- package/dist/utils/formatters/formatarDuracao.cjs.map +1 -0
- package/dist/utils/formatters/formatarDuracao.js +10 -0
- package/dist/utils/formatters/formatarDuracao.js.map +1 -0
- package/dist/utils/formatters/formatarNumero.cjs +1 -1
- package/dist/utils/formatters/formatarNumero.cjs.map +1 -1
- package/dist/utils/formatters/formatarNumero.js +42 -17
- package/dist/utils/formatters/formatarNumero.js.map +1 -1
- package/dist/utils/formatters/formatarTamanhoDeArquivo.cjs +2 -0
- package/dist/utils/formatters/formatarTamanhoDeArquivo.cjs.map +1 -0
- package/dist/utils/formatters/formatarTamanhoDeArquivo.js +17 -0
- package/dist/utils/formatters/formatarTamanhoDeArquivo.js.map +1 -0
- package/package.json +3 -1
|
@@ -1,121 +1,138 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useMemo as
|
|
3
|
-
import
|
|
4
|
-
import { useChartMetrics as
|
|
5
|
-
import { useSeriesToggle as
|
|
6
|
-
import { resolveSeriesColors as
|
|
7
|
-
import { useTweenedNumbers as
|
|
8
|
-
import { formatarNumero as
|
|
9
|
-
import { centerTextRadius as
|
|
10
|
-
import { ChartFrame as
|
|
11
|
-
import { arcPath as
|
|
12
|
-
import { ringDiameter as
|
|
13
|
-
import { chartHeight as
|
|
14
|
-
const
|
|
15
|
-
function
|
|
16
|
-
return
|
|
1
|
+
import { jsxs as b, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo as ce, useState as de } from "react";
|
|
3
|
+
import m from "./ChartRadial.module.css.js";
|
|
4
|
+
import { useChartMetrics as ue } from "../core/useChartMetrics.js";
|
|
5
|
+
import { useSeriesToggle as he } from "../core/useSeriesToggle.js";
|
|
6
|
+
import { resolveSeriesColors as fe } from "../palette/seriesColor.js";
|
|
7
|
+
import { useTweenedNumbers as ge } from "../core/useTweenedNumbers.js";
|
|
8
|
+
import { formatarNumero as ve, formatarPercentual as pe } from "../../../utils/formatters/formatarNumero.js";
|
|
9
|
+
import { centerTextRadius as xe, fitCenterText as be } from "../core/centerText.js";
|
|
10
|
+
import { ChartFrame as Me } from "../core/ChartFrame.js";
|
|
11
|
+
import { arcPath as w, VOLTA as Re } from "../core/arcs.js";
|
|
12
|
+
import { ringDiameter as Se } from "../core/spacing.js";
|
|
13
|
+
import { chartHeight as Ae } from "../core/cartesianLayout.js";
|
|
14
|
+
const z = 6, L = 8;
|
|
15
|
+
function j(c) {
|
|
16
|
+
return c * Math.PI / 180;
|
|
17
17
|
}
|
|
18
|
-
function
|
|
19
|
-
accent:
|
|
20
|
-
centerLabel:
|
|
21
|
-
defaultHiddenTracks:
|
|
22
|
-
emptyMessage:
|
|
23
|
-
endAngle:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
18
|
+
function ze({
|
|
19
|
+
accent: c,
|
|
20
|
+
centerLabel: $,
|
|
21
|
+
defaultHiddenTracks: q,
|
|
22
|
+
emptyMessage: B = "Sem dados no período",
|
|
23
|
+
endAngle: V = 360,
|
|
24
|
+
formatTooltipValue: G,
|
|
25
|
+
formatValue: d = ve,
|
|
26
|
+
height: J = 260,
|
|
27
|
+
hiddenTracks: K,
|
|
28
|
+
legend: Q = "bottom",
|
|
29
|
+
legendAlign: U,
|
|
30
|
+
onHiddenTracksChange: W,
|
|
31
|
+
showCenter: X = !0,
|
|
32
|
+
showTooltip: M = !0,
|
|
33
|
+
startAngle: Y = 0,
|
|
34
|
+
thickness: R = 16,
|
|
35
|
+
trackRadius: Z,
|
|
36
|
+
title: k,
|
|
35
37
|
tracks: t
|
|
36
38
|
}) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
39
|
+
var F;
|
|
40
|
+
const { font: S, height: ee, radius: oe, ref: te, width: A } = ue(), { fillHeight: ne, value: C } = Ae(J, ee), { isHidden: g, toggle: ae } = he({
|
|
41
|
+
defaultHiddenSeries: q,
|
|
42
|
+
hiddenSeries: K,
|
|
43
|
+
onHiddenSeriesChange: W
|
|
44
|
+
}), v = ce(() => fe(t, { accent: c }), [c, t]), l = (e) => Number.isFinite(e.value), N = t.reduce((e, o) => l(o) ? Math.max(e, o.value) : e, 0), D = t.map((e) => {
|
|
45
|
+
const o = e.max ?? N;
|
|
46
|
+
return g(e.label) || !l(e) || !(o > 0) ? 0 : Math.min(Math.max(e.value, 0) / o, 1);
|
|
47
|
+
}), re = ge(D, { from: D.map(() => 0) }), [a, y] = de(null);
|
|
48
|
+
function le() {
|
|
49
|
+
const e = a === null ? void 0 : t[a];
|
|
50
|
+
if (!e || !l(e) || a === null)
|
|
51
|
+
return [];
|
|
52
|
+
const o = e.max ?? N, r = [{ color: v[a], label: "Valor", values: [e.value] }, { label: "Meta", values: [o] }];
|
|
53
|
+
return o > 0 ? [...r, { format: (f) => pe(f), label: "Atingido", values: [e.value / o] }] : r;
|
|
54
|
+
}
|
|
55
|
+
const i = j(Y), E = Math.min(j(V) - i, Re), p = Se(A, C) / 2, u = t.find((e) => !g(e.label)), h = X && u ? d(u.value) : void 0, H = h === void 0 ? L : Math.max(L, Math.min(xe(h, S), p / 2)), O = Math.min(1, Math.max(p - H, 0) / (Math.max(t.length, 1) * (R + z))), x = Math.max(R * O, 1), ie = z * O, P = (e) => p - e * (x + ie), se = Math.max(P(Math.max(t.length - 1, 0)) - x, H), T = Z ?? oe, n = u && h !== void 0 ? be(h, $ ?? u.label, S, se * 2) : void 0;
|
|
56
|
+
return /* @__PURE__ */ b(
|
|
57
|
+
Me,
|
|
47
58
|
{
|
|
48
59
|
centerOrigin: !0,
|
|
49
|
-
containerRef:
|
|
60
|
+
containerRef: te,
|
|
50
61
|
empty: t.length === 0,
|
|
51
|
-
emptyMessage:
|
|
52
|
-
fillHeight:
|
|
53
|
-
height:
|
|
62
|
+
emptyMessage: B,
|
|
63
|
+
fillHeight: ne,
|
|
64
|
+
height: C,
|
|
54
65
|
legend: t.map((e, o) => ({
|
|
55
|
-
color:
|
|
56
|
-
hidden:
|
|
66
|
+
color: v[o],
|
|
67
|
+
hidden: g(e.label),
|
|
57
68
|
label: e.label,
|
|
58
|
-
value: l(e) ?
|
|
69
|
+
value: l(e) ? d(e.value) : void 0
|
|
59
70
|
})),
|
|
60
|
-
legendAlign:
|
|
61
|
-
legendPosition: t.length > 1 ?
|
|
62
|
-
onToggleSeries:
|
|
71
|
+
legendAlign: U,
|
|
72
|
+
legendPosition: t.length > 1 ? Q : "none",
|
|
73
|
+
onToggleSeries: ae,
|
|
63
74
|
swatch: "dot",
|
|
64
|
-
title:
|
|
65
|
-
|
|
75
|
+
title: k,
|
|
76
|
+
tooltip: M ? {
|
|
77
|
+
columns: [{ format: G ?? d }],
|
|
78
|
+
computed: "none",
|
|
79
|
+
rows: le(),
|
|
80
|
+
title: a === null || (F = t[a]) == null ? void 0 : F.label
|
|
81
|
+
} : void 0,
|
|
82
|
+
width: A,
|
|
66
83
|
children: [
|
|
67
84
|
t.map((e, o) => {
|
|
68
|
-
const
|
|
69
|
-
return /* @__PURE__ */
|
|
70
|
-
/* @__PURE__ */
|
|
85
|
+
const r = P(o), f = r - x, I = re[o] ?? 0, me = i + E * I, _ = l(e) ? `${e.label}: ${d(e.value)}` : e.label;
|
|
86
|
+
return /* @__PURE__ */ b("g", { onMouseEnter: () => y(o), onMouseLeave: () => y(null), children: [
|
|
87
|
+
/* @__PURE__ */ s(
|
|
71
88
|
"path",
|
|
72
89
|
{
|
|
73
|
-
"aria-label":
|
|
74
|
-
className:
|
|
75
|
-
d:
|
|
76
|
-
cornerRadius:
|
|
77
|
-
endAngle:
|
|
78
|
-
innerRadius:
|
|
79
|
-
outerRadius:
|
|
80
|
-
startAngle:
|
|
90
|
+
"aria-label": _,
|
|
91
|
+
className: m.track,
|
|
92
|
+
d: w({
|
|
93
|
+
cornerRadius: T,
|
|
94
|
+
endAngle: i + E,
|
|
95
|
+
innerRadius: f,
|
|
96
|
+
outerRadius: r,
|
|
97
|
+
startAngle: i
|
|
81
98
|
}),
|
|
82
|
-
children: /* @__PURE__ */
|
|
99
|
+
children: !M && /* @__PURE__ */ s("title", { children: _ })
|
|
83
100
|
}
|
|
84
101
|
),
|
|
85
|
-
|
|
102
|
+
I > 0 && /* @__PURE__ */ s(
|
|
86
103
|
"path",
|
|
87
104
|
{
|
|
88
|
-
className:
|
|
89
|
-
d:
|
|
90
|
-
cornerRadius:
|
|
91
|
-
endAngle:
|
|
92
|
-
innerRadius:
|
|
93
|
-
outerRadius:
|
|
94
|
-
startAngle:
|
|
105
|
+
className: m.fill,
|
|
106
|
+
d: w({
|
|
107
|
+
cornerRadius: T,
|
|
108
|
+
endAngle: me,
|
|
109
|
+
innerRadius: f,
|
|
110
|
+
outerRadius: r,
|
|
111
|
+
startAngle: i
|
|
95
112
|
}),
|
|
96
|
-
fill:
|
|
113
|
+
fill: v[o]
|
|
97
114
|
}
|
|
98
115
|
)
|
|
99
116
|
] }, o);
|
|
100
117
|
}),
|
|
101
|
-
|
|
102
|
-
/* @__PURE__ */
|
|
118
|
+
n && /* @__PURE__ */ b("g", { className: m.center, children: [
|
|
119
|
+
/* @__PURE__ */ s(
|
|
103
120
|
"text",
|
|
104
121
|
{
|
|
105
|
-
className:
|
|
106
|
-
dy:
|
|
107
|
-
style: { fontFamily:
|
|
122
|
+
className: m.centerValue,
|
|
123
|
+
dy: n.size * 0.1,
|
|
124
|
+
style: { fontFamily: n.family, fontSize: n.size },
|
|
108
125
|
textAnchor: "middle",
|
|
109
|
-
children:
|
|
126
|
+
children: n.value
|
|
110
127
|
}
|
|
111
128
|
),
|
|
112
|
-
/* @__PURE__ */
|
|
129
|
+
/* @__PURE__ */ s("text", { className: m.centerLabel, dy: n.lineHeight * 0.62, textAnchor: "middle", children: n.label })
|
|
113
130
|
] })
|
|
114
131
|
]
|
|
115
132
|
}
|
|
116
133
|
);
|
|
117
134
|
}
|
|
118
135
|
export {
|
|
119
|
-
|
|
136
|
+
ze as ChartRadial
|
|
120
137
|
};
|
|
121
138
|
//# sourceMappingURL=ChartRadial.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRadial.js","sources":["../../../../src/components/charts/ChartRadial/ChartRadial.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n ChartFrame,\n VOLTA,\n arcPath,\n chartHeight,\n centerTextRadius,\n fitCenterText,\n ringDiameter,\n useChartMetrics,\n useSeriesToggle,\n useTweenedNumbers,\n type ChartHeight,\n type ChartLegendAlign,\n type ChartLegendPosition,\n} from '../core';\nimport { resolveSeriesColors, type SeriesAppearance } from '../palette';\nimport { formatarNumero } from '../../../utils/formatters';\nimport styles from './ChartRadial.module.css';\n\nexport interface ChartRadialTrack extends SeriesAppearance {\n label: string;\n /** Meta da medida. Sem ela, a meta e o maior valor entre os aneis. */\n max?: number;\n value: number;\n}\n\nexport interface ChartRadialProps {\n accent?: string;\n /** Texto sob o valor do centro. Sem ele, o rotulo do primeiro anel. */\n centerLabel?: string;\n defaultHiddenTracks?: readonly string[];\n emptyMessage?: string;\n /** Angulo final da volta, em graus a partir do topo. Meia-lua usa 180. */\n endAngle?: number;\n formatValue?: (value: number) => string;\n height?: ChartHeight;\n hiddenTracks?: readonly string[];\n legend?: ChartLegendPosition;\n legendAlign?: ChartLegendAlign;\n onHiddenTracksChange?: (hidden: readonly string[]) => void;\n /** Valor no centro. Ele reserva o proprio espaco, ate metade do raio: com muitos aneis, quem cede e a espessura deles. */\n showCenter?: boolean;\n startAngle?: number;\n /** Raio das pontas do arco. Sem valor, o token de raio pequeno. */\n trackRadius?: number;\n /** Espessura de cada anel, em pixels. */\n thickness?: number;\n title: string;\n tracks: readonly ChartRadialTrack[];\n}\n\n/** Folga entre dois aneis vizinhos. */\nconst ESPACO_ENTRE_ANEIS = 6;\n\n/** Raio minimo do vazio central, com ou sem texto nele. */\nconst PISO_DO_RAIO = 8;\n\nfunction emRadianos(graus: number) {\n return (graus * Math.PI) / 180;\n}\n\nexport function ChartRadial({\n accent,\n centerLabel,\n defaultHiddenTracks,\n emptyMessage = 'Sem dados no período',\n endAngle = 360,\n formatValue = formatarNumero,\n height = 260,\n hiddenTracks,\n legend = 'bottom',\n legendAlign,\n onHiddenTracksChange,\n showCenter = true,\n startAngle = 0,\n thickness = 16,\n trackRadius,\n title,\n tracks,\n}: ChartRadialProps) {\n const { font, height: alturaMedida, radius: raioDoCanto, ref, width } = useChartMetrics();\n const { fillHeight, value: alturaDoDesenho } = chartHeight(height, alturaMedida);\n const { isHidden, toggle } = useSeriesToggle({\n defaultHiddenSeries: defaultHiddenTracks,\n hiddenSeries: hiddenTracks,\n onHiddenSeriesChange: onHiddenTracksChange,\n });\n\n // A cor sai da lista inteira, e nao das visiveis: desligar um anel nao pode\n // repintar os demais.\n const cores = useMemo(() => resolveSeriesColors(tracks, { accent }), [accent, tracks]);\n\n // Valor invalido tem o destino do ausente: nao entra no maximo nem preenche o anel.\n const valido = (anel: ChartRadialTrack) => Number.isFinite(anel.value);\n const maiorValor = tracks.reduce((maior, anel) => (valido(anel) ? Math.max(maior, anel.value) : maior), 0);\n const fracoes = tracks.map((anel) => {\n const meta = anel.max ?? maiorValor;\n\n return isHidden(anel.label) || !valido(anel) || !(meta > 0) ? 0 : Math.min(Math.max(anel.value, 0) / meta, 1);\n });\n\n // As fracoes caminham ate o alvo, entao o arco cresce ao aparecer e recolhe\n // quando o anel e desligado.\n const animadas = useTweenedNumbers(fracoes, { from: fracoes.map(() => 0) });\n\n const comeco = emRadianos(startAngle);\n const volta = Math.min(emRadianos(endAngle) - comeco, VOLTA);\n\n const raioExterno = ringDiameter(width, alturaDoDesenho) / 2;\n const destaque = tracks.find((anel) => !isHidden(anel.label));\n const valorDoCentro = showCenter && destaque ? formatValue(destaque.value) : undefined;\n // O centro reserva o que o valor pede no menor degrau da escala, ate metade do raio; quem cede e a espessura dos aneis.\n const piso =\n valorDoCentro === undefined\n ? PISO_DO_RAIO\n : Math.max(PISO_DO_RAIO, Math.min(centerTextRadius(valorDoCentro, font), raioExterno / 2));\n // Com muitos aneis, espessura e folga cedem na mesma proporcao ate caber; so a espessura cedia, e os ultimos\n // aneis passavam do centro.\n const cabe = Math.min(1, Math.max(raioExterno - piso, 0) / (Math.max(tracks.length, 1) * (thickness + ESPACO_ENTRE_ANEIS)));\n const espessuraCabivel = Math.max(thickness * cabe, 1);\n const folga = ESPACO_ENTRE_ANEIS * cabe;\n const raioDe = (indice: number) => raioExterno - indice * (espessuraCabivel + folga);\n const raioInterno = Math.max(raioDe(Math.max(tracks.length - 1, 0)) - espessuraCabivel, piso);\n\n const canto = trackRadius ?? raioDoCanto;\n const centro =\n destaque && valorDoCentro !== undefined\n ? fitCenterText(valorDoCentro, centerLabel ?? destaque.label, font, raioInterno * 2)\n : undefined;\n\n return (\n <ChartFrame\n centerOrigin\n containerRef={ref}\n empty={tracks.length === 0}\n emptyMessage={emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legend={tracks.map((anel, indice) => ({\n color: cores[indice],\n hidden: isHidden(anel.label),\n label: anel.label,\n value: valido(anel) ? formatValue(anel.value) : undefined,\n }))}\n legendAlign={legendAlign}\n legendPosition={tracks.length > 1 ? legend : 'none'}\n onToggleSeries={toggle}\n swatch=\"dot\"\n title={title}\n width={width}\n >\n {tracks.map((anel, indice) => {\n const externo = raioDe(indice);\n const interno = externo - espessuraCabivel;\n const fracao = animadas[indice] ?? 0;\n const preenchido = comeco + volta * fracao;\n const descricao = valido(anel) ? `${anel.label}: ${formatValue(anel.value)}` : anel.label;\n\n return (\n <g key={indice}>\n <path\n aria-label={descricao}\n className={styles.track}\n d={arcPath({\n cornerRadius: canto,\n endAngle: comeco + volta,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n >\n <title>{descricao}</title>\n </path>\n {fracao > 0 && (\n <path\n className={styles.fill}\n d={arcPath({\n cornerRadius: canto,\n endAngle: preenchido,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n fill={cores[indice]}\n />\n )}\n </g>\n );\n })}\n\n {centro && (\n <g className={styles.center}>\n <text\n className={styles.centerValue}\n dy={centro.size * 0.1}\n style={{ fontFamily: centro.family, fontSize: centro.size }}\n textAnchor=\"middle\"\n >\n {centro.value}\n </text>\n <text className={styles.centerLabel} dy={centro.lineHeight * 0.62} textAnchor=\"middle\">\n {centro.label}\n </text>\n </g>\n )}\n </ChartFrame>\n );\n}\n"],"names":["ESPACO_ENTRE_ANEIS","PISO_DO_RAIO","emRadianos","graus","ChartRadial","accent","centerLabel","defaultHiddenTracks","emptyMessage","endAngle","formatValue","formatarNumero","height","hiddenTracks","legend","legendAlign","onHiddenTracksChange","showCenter","startAngle","thickness","trackRadius","title","tracks","font","alturaMedida","raioDoCanto","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","isHidden","toggle","useSeriesToggle","cores","useMemo","resolveSeriesColors","valido","anel","maiorValor","maior","fracoes","meta","animadas","useTweenedNumbers","comeco","volta","VOLTA","raioExterno","ringDiameter","destaque","valorDoCentro","piso","centerTextRadius","cabe","espessuraCabivel","folga","raioDe","indice","raioInterno","canto","centro","fitCenterText","jsxs","ChartFrame","externo","interno","fracao","preenchido","descricao","jsx","styles","arcPath"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartRadial.js","sources":["../../../../src/components/charts/ChartRadial/ChartRadial.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n ChartFrame,\n VOLTA,\n arcPath,\n chartHeight,\n centerTextRadius,\n fitCenterText,\n ringDiameter,\n useChartMetrics,\n useSeriesToggle,\n useTweenedNumbers,\n type ChartHeight,\n type ChartLegendAlign,\n type ChartLegendPosition,\n} from '../core';\nimport { resolveSeriesColors, type SeriesAppearance } from '../palette';\nimport { formatarNumero, formatarPercentual } from '../../../utils/formatters';\nimport styles from './ChartRadial.module.css';\n\nexport interface ChartRadialTrack extends SeriesAppearance {\n label: string;\n /** Meta da medida. Sem ela, a meta e o maior valor entre os aneis. */\n max?: number;\n value: number;\n}\n\nexport interface ChartRadialProps {\n accent?: string;\n /** Texto sob o valor do centro. Sem ele, o rotulo do primeiro anel. */\n centerLabel?: string;\n defaultHiddenTracks?: readonly string[];\n emptyMessage?: string;\n /** Angulo final da volta, em graus a partir do topo. Meia-lua usa 180. */\n endAngle?: number;\n /** Formato dos valores no balao. Sem ele, vale o `formatValue`. */\n formatTooltipValue?: (value: number) => string;\n formatValue?: (value: number) => string;\n height?: ChartHeight;\n hiddenTracks?: readonly string[];\n legend?: ChartLegendPosition;\n legendAlign?: ChartLegendAlign;\n onHiddenTracksChange?: (hidden: readonly string[]) => void;\n /** Valor no centro. Ele reserva o proprio espaco, ate metade do raio: com muitos aneis, quem cede e a espessura deles. */\n showCenter?: boolean;\n /** Balao com o detalhe do que esta sob o ponteiro. Desligue para nao mostrar nada alem do `<title>` nativo. */\n showTooltip?: boolean;\n startAngle?: number;\n /** Raio das pontas do arco. Sem valor, o token de raio pequeno. */\n trackRadius?: number;\n /** Espessura de cada anel, em pixels. */\n thickness?: number;\n title: string;\n tracks: readonly ChartRadialTrack[];\n}\n\n/** Folga entre dois aneis vizinhos. */\nconst ESPACO_ENTRE_ANEIS = 6;\n\n/** Raio minimo do vazio central, com ou sem texto nele. */\nconst PISO_DO_RAIO = 8;\n\nfunction emRadianos(graus: number) {\n return (graus * Math.PI) / 180;\n}\n\nexport function ChartRadial({\n accent,\n centerLabel,\n defaultHiddenTracks,\n emptyMessage = 'Sem dados no período',\n endAngle = 360,\n formatTooltipValue,\n formatValue = formatarNumero,\n height = 260,\n hiddenTracks,\n legend = 'bottom',\n legendAlign,\n onHiddenTracksChange,\n showCenter = true,\n showTooltip = true,\n startAngle = 0,\n thickness = 16,\n trackRadius,\n title,\n tracks,\n}: ChartRadialProps) {\n const { font, height: alturaMedida, radius: raioDoCanto, ref, width } = useChartMetrics();\n const { fillHeight, value: alturaDoDesenho } = chartHeight(height, alturaMedida);\n const { isHidden, toggle } = useSeriesToggle({\n defaultHiddenSeries: defaultHiddenTracks,\n hiddenSeries: hiddenTracks,\n onHiddenSeriesChange: onHiddenTracksChange,\n });\n\n // A cor sai da lista inteira, e nao das visiveis: desligar um anel nao pode\n // repintar os demais.\n const cores = useMemo(() => resolveSeriesColors(tracks, { accent }), [accent, tracks]);\n\n // Valor invalido tem o destino do ausente: nao entra no maximo nem preenche o anel.\n const valido = (anel: ChartRadialTrack) => Number.isFinite(anel.value);\n const maiorValor = tracks.reduce((maior, anel) => (valido(anel) ? Math.max(maior, anel.value) : maior), 0);\n const fracoes = tracks.map((anel) => {\n const meta = anel.max ?? maiorValor;\n\n return isHidden(anel.label) || !valido(anel) || !(meta > 0) ? 0 : Math.min(Math.max(anel.value, 0) / meta, 1);\n });\n\n // As fracoes caminham ate o alvo, entao o arco cresce ao aparecer e recolhe\n // quando o anel e desligado.\n const animadas = useTweenedNumbers(fracoes, { from: fracoes.map(() => 0) });\n\n const [emFoco, setEmFoco] = useState<number | null>(null);\n\n function linhasDoBalao() {\n const anel = emFoco === null ? undefined : tracks[emFoco];\n\n if (!anel || !valido(anel) || emFoco === null) {\n return [];\n }\n\n const meta = anel.max ?? maiorValor;\n const linhas = [{ color: cores[emFoco], label: 'Valor', values: [anel.value] }, { label: 'Meta', values: [meta] }];\n\n return meta > 0\n ? [...linhas, { format: (fracao: number) => formatarPercentual(fracao), label: 'Atingido', values: [anel.value / meta] }]\n : linhas;\n }\n\n const comeco = emRadianos(startAngle);\n const volta = Math.min(emRadianos(endAngle) - comeco, VOLTA);\n\n const raioExterno = ringDiameter(width, alturaDoDesenho) / 2;\n const destaque = tracks.find((anel) => !isHidden(anel.label));\n const valorDoCentro = showCenter && destaque ? formatValue(destaque.value) : undefined;\n // O centro reserva o que o valor pede no menor degrau da escala, ate metade do raio; quem cede e a espessura dos aneis.\n const piso =\n valorDoCentro === undefined\n ? PISO_DO_RAIO\n : Math.max(PISO_DO_RAIO, Math.min(centerTextRadius(valorDoCentro, font), raioExterno / 2));\n // Com muitos aneis, espessura e folga cedem na mesma proporcao ate caber; so a espessura cedia, e os ultimos\n // aneis passavam do centro.\n const cabe = Math.min(1, Math.max(raioExterno - piso, 0) / (Math.max(tracks.length, 1) * (thickness + ESPACO_ENTRE_ANEIS)));\n const espessuraCabivel = Math.max(thickness * cabe, 1);\n const folga = ESPACO_ENTRE_ANEIS * cabe;\n const raioDe = (indice: number) => raioExterno - indice * (espessuraCabivel + folga);\n const raioInterno = Math.max(raioDe(Math.max(tracks.length - 1, 0)) - espessuraCabivel, piso);\n\n const canto = trackRadius ?? raioDoCanto;\n const centro =\n destaque && valorDoCentro !== undefined\n ? fitCenterText(valorDoCentro, centerLabel ?? destaque.label, font, raioInterno * 2)\n : undefined;\n\n return (\n <ChartFrame\n centerOrigin\n containerRef={ref}\n empty={tracks.length === 0}\n emptyMessage={emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legend={tracks.map((anel, indice) => ({\n color: cores[indice],\n hidden: isHidden(anel.label),\n label: anel.label,\n value: valido(anel) ? formatValue(anel.value) : undefined,\n }))}\n legendAlign={legendAlign}\n legendPosition={tracks.length > 1 ? legend : 'none'}\n onToggleSeries={toggle}\n swatch=\"dot\"\n title={title}\n tooltip={\n showTooltip\n ? {\n columns: [{ format: formatTooltipValue ?? formatValue }],\n computed: 'none',\n rows: linhasDoBalao(),\n title: emFoco === null ? undefined : tracks[emFoco]?.label,\n }\n : undefined\n }\n width={width}\n >\n {tracks.map((anel, indice) => {\n const externo = raioDe(indice);\n const interno = externo - espessuraCabivel;\n const fracao = animadas[indice] ?? 0;\n const preenchido = comeco + volta * fracao;\n const descricao = valido(anel) ? `${anel.label}: ${formatValue(anel.value)}` : anel.label;\n\n return (\n <g key={indice} onMouseEnter={() => setEmFoco(indice)} onMouseLeave={() => setEmFoco(null)}>\n <path\n aria-label={descricao}\n className={styles.track}\n d={arcPath({\n cornerRadius: canto,\n endAngle: comeco + volta,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n >\n {!showTooltip && <title>{descricao}</title>}\n </path>\n {fracao > 0 && (\n <path\n className={styles.fill}\n d={arcPath({\n cornerRadius: canto,\n endAngle: preenchido,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n fill={cores[indice]}\n />\n )}\n </g>\n );\n })}\n\n {centro && (\n <g className={styles.center}>\n <text\n className={styles.centerValue}\n dy={centro.size * 0.1}\n style={{ fontFamily: centro.family, fontSize: centro.size }}\n textAnchor=\"middle\"\n >\n {centro.value}\n </text>\n <text className={styles.centerLabel} dy={centro.lineHeight * 0.62} textAnchor=\"middle\">\n {centro.label}\n </text>\n </g>\n )}\n </ChartFrame>\n );\n}\n"],"names":["ESPACO_ENTRE_ANEIS","PISO_DO_RAIO","emRadianos","graus","ChartRadial","accent","centerLabel","defaultHiddenTracks","emptyMessage","endAngle","formatTooltipValue","formatValue","formatarNumero","height","hiddenTracks","legend","legendAlign","onHiddenTracksChange","showCenter","showTooltip","startAngle","thickness","trackRadius","title","tracks","font","alturaMedida","raioDoCanto","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","isHidden","toggle","useSeriesToggle","cores","useMemo","resolveSeriesColors","valido","anel","maiorValor","maior","fracoes","meta","animadas","useTweenedNumbers","emFoco","setEmFoco","useState","linhasDoBalao","linhas","fracao","formatarPercentual","comeco","volta","VOLTA","raioExterno","ringDiameter","destaque","valorDoCentro","piso","centerTextRadius","cabe","espessuraCabivel","folga","raioDe","indice","raioInterno","canto","centro","fitCenterText","jsxs","ChartFrame","_a","externo","interno","preenchido","descricao","jsx","styles","arcPath"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react/jsx-runtime"),y=require("react"),L=require("d3-sankey"),i=require("./ChartSankey.module.css.cjs"),ie=require("../core/useChartMetrics.cjs"),ue=require("../palette/seriesColor.cjs"),F=require("../core/measureText.cjs"),m=require("../core/spacing.cjs"),ce=require("../core/ChartFrame.cjs"),G=require("../../../utils/formatters/formatarNumero.cjs"),de=require("../core/cartesianLayout.cjs");function me(s,o){return s.x0<o.x1&&o.x0<s.x1&&s.y0<o.y1&&o.y0<s.y1}const he={center:L.sankeyCenter,justify:L.sankeyJustify,left:L.sankeyLeft,right:L.sankeyRight};function xe(s){const o=s.source.x1,h=s.target.x0,u=(o+h)/2;return`M${o},${s.y0}C${u},${s.y0} ${u},${s.y1} ${h},${s.y1}`}function ye(s){const o=new Map;for(const n of s)o.set(n.source,[...o.get(n.source)??[],n.target]);const h=new Set,u=new Set;function p(n){if(u.has(n))return!0;if(h.has(n))return!1;u.add(n);const g=(o.get(n)??[]).some(p);return u.delete(n),h.add(n),g}return[...o.keys()].some(p)}function fe({accent:s,cyclicMessage:o="O fluxo volta sobre si mesmo e não pode ser desenhado",emptyMessage:h="Sem dados no período",flowColor:u="source",flowValuePosition:p="end",flows:n,formatTooltipValue:g,formatValue:C=G.formatarNumero,height:K=320,nodeAlign:N="justify",nodes:v,nodePadding:H=12,nodeWidth:$=12,showFlowValues:Q=!1,showLabels:B=!0,showTooltip:j=!0,title:U}){var z,J;const{font:c,height:X,ref:Y,width:k}=ie.useChartMetrics(),{fillHeight:Z,value:M}=de.chartHeight(K,X),[x,q]=y.useState(null),f=y.useMemo(()=>{const e=(v??[]).map(t=>t.label);return n.forEach(({source:t,target:r})=>{[t,r].forEach(a=>{e.includes(a)||e.push(a)})}),e.map(t=>(v==null?void 0:v.find(r=>r.label===t))??{label:t})},[n,v]),V=y.useMemo(()=>ue.resolveSeriesColors(f,{accent:s}),[s,f]),E=y.useMemo(()=>{const e=new Set(n.map(t=>t.source));return f.map(t=>t.label).filter(t=>!e.has(t))},[f,n]),S=B?Math.min(F.widestLabel(E,c),k*m.CHART_LABEL_BAND)+m.CHART_LABEL_OFFSET:0,A=y.useMemo(()=>ye(n),[n]),D=y.useMemo(()=>n.reduce((e,t)=>e+(Number.isFinite(t.value)?Math.max(t.value,0):0),0),[n]),l=y.useMemo(()=>{const e=k-S;return e<=0||M<=0||n.length===0||A||D<=0?{links:[],nodes:[]}:L.sankey().nodeId(a=>a.label).nodeAlign(he[N]).nodeWidth($).nodePadding(H).extent([[0,2],[e,M-2]])({links:n.map(a=>({...a,value:Number.isFinite(a.value)?Math.max(a.value,0):0})),nodes:f.map(a=>({label:a.label}))})},[M,S,A,f,n,N,H,$,D,k]),R=e=>V[e]??"var(--pl-chart-neutral)";function O(e){return u==="neutral"?"var(--pl-chart-neutral)":R(u==="target"?e.target.index:e.source.index)}function I(e){return`${e.source.label} → ${e.target.label}: ${C(e.value)}`}function w(){const e=x===null?void 0:l.links[x];if(!e)return[];const t=l.links.filter(r=>r.source.index===e.source.index).reduce((r,a)=>r+a.value,0);return[{color:O(e),label:"Fluxo",values:[e.value]},{format:r=>G.formatarPercentual(r),label:`Da saída de ${e.source.label}`,values:[t>0?e.value/t:0]}]}function ee(e){return x===null?i.default.link:`${i.default.link} ${x===e?i.default.linkOn:i.default.linkDim}`}const te=(()=>{const e=[...new Set(l.nodes.map(r=>r.x0))].sort((r,a)=>r-a);if(e.length<2)return k*m.CHART_LABEL_BAND;const t=Math.min(...e.slice(1).map((r,a)=>r-e[a]));return Math.max(t-$-m.CHART_LABEL_OFFSET,0)})();function re(e){const t=E.includes(e.label),r=F.truncateToWidth(e.label,c,(t?S:te)-m.CHART_LABEL_OFFSET),a=e.x1+m.CHART_LABEL_OFFSET,b=(e.y0+e.y1)/2;return{caixa:{x0:a,x1:a+F.measureLabel(r,c),y0:b-c.lineHeight/2,y1:b+c.lineHeight/2},texto:r,x:a,y:b}}const P=B?l.nodes.map(re):[];function ne(e){const t=C(e.value),r=F.measureLabel(t,c),a=e.source.x1,b=e.target.x0,T=(e.y0+e.y1)/2,ae={end:{anchor:"end",x:b-m.CHART_LABEL_OFFSET},middle:{anchor:"middle",x:(a+b)/2},start:{anchor:"start",x:a+m.CHART_LABEL_OFFSET}},{anchor:se,x:_}=ae[p],W={end:r,middle:r/2,start:0}[p],oe={x0:_-W,x1:_-W+r,y0:T-c.lineHeight/2,y1:T+c.lineHeight/2};if(!P.some(le=>me(oe,le.caixa)))return{anchor:se,texto:t,x:_,y:T}}return d.jsxs(ce.ChartFrame,{containerRef:Y,empty:n.length===0||A||D<=0,emptyMessage:A?o:h,fillHeight:Z,height:M,legendPosition:"none",title:U,tooltip:j?{columns:[{format:g??C}],computed:"none",rows:w(),title:x===null?void 0:`${(z=l.links[x])==null?void 0:z.source.label} → ${(J=l.links[x])==null?void 0:J.target.label}`}:void 0,width:k,children:[d.jsx("g",{className:i.default.links,children:l.links.map((e,t)=>d.jsx("path",{"aria-label":I(e),className:ee(t),d:xe(e),onMouseEnter:()=>q(t),onMouseLeave:()=>q(null),stroke:O(e),strokeWidth:Math.max(e.width,1),children:!j&&d.jsx("title",{children:I(e)})},t))}),l.nodes.map(e=>d.jsx("rect",{"aria-label":e.label,className:i.default.node,fill:R(e.index),height:Math.max(e.y1-e.y0,1),width:e.x1-e.x0,x:e.x0,y:e.y0,children:d.jsx("title",{children:e.label})},e.label)),Q&&l.links.map((e,t)=>{const r=ne(e);return r?d.jsx("text",{className:`${i.default.flowValue} ${i.default.sobreFluxo}`,dominantBaseline:"middle",textAnchor:r.anchor,x:r.x,y:r.y,children:r.texto},t):null}),P.map((e,t)=>d.jsx("text",{className:`${i.default.label} ${E.includes(l.nodes[t].label)?"":i.default.sobreFluxo}`,dominantBaseline:"middle",textAnchor:"start",x:e.x,y:e.y,children:e.texto},`rotulo-${l.nodes[t].label}`))]})}exports.ChartSankey=fe;
|
|
2
2
|
//# sourceMappingURL=ChartSankey.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartSankey.cjs","sources":["../../../../src/components/charts/ChartSankey/ChartSankey.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { sankey, sankeyCenter, sankeyJustify, sankeyLeft, sankeyRight } from 'd3-sankey';\nimport {\n CHART_LABEL_BAND,\n CHART_LABEL_OFFSET,\n ChartFrame,\n chartHeight,\n measureLabel,\n truncateToWidth,\n useChartMetrics,\n widestLabel,\n type ChartHeight,\n} from '../core';\nimport { resolveSeriesColors, type SeriesAppearance } from '../palette';\nimport { formatarNumero } from '../../../utils/formatters';\nimport styles from './ChartSankey.module.css';\n\nexport interface ChartSankeyNode extends SeriesAppearance {\n label: string;\n}\n\nexport interface ChartSankeyFlow {\n source: string;\n target: string;\n value: number;\n}\n\n/** Onde os nos sem saida se encostam, conforme a referencia. */\nexport type ChartSankeyAlign = 'left' | 'right' | 'center' | 'justify';\n\n/** De onde a ligacao tira a cor: do no de origem, do de destino, ou de nenhum. */\nexport type ChartSankeyFlowColor = 'source' | 'target' | 'neutral';\n\n/**\n * Onde o valor da ligacao e escrito. O rotulo do no ocupa a faixa logo a\n * direita dele, entao `end` e o unico que nunca disputa espaco com o rotulo da\n * propria origem.\n */\nexport type ChartSankeyFlowValuePosition = 'start' | 'middle' | 'end';\n\nexport interface ChartSankeyProps {\n accent?: string;\n /** Mensagem quando o fluxo tem ciclo, que um diagrama de fluxo nao representa. */\n cyclicMessage?: string;\n emptyMessage?: string;\n flowColor?: ChartSankeyFlowColor;\n flowValuePosition?: ChartSankeyFlowValuePosition;\n flows: readonly ChartSankeyFlow[];\n formatValue?: (value: number) => string;\n height?: ChartHeight;\n nodeAlign?: ChartSankeyAlign;\n /** Ordem e aparencia dos nos. Sem ela, os nos saem das proprias ligacoes. */\n nodes?: readonly ChartSankeyNode[];\n /** Folga vertical entre dois nos da mesma coluna. */\n nodePadding?: number;\n nodeWidth?: number;\n showFlowValues?: boolean;\n showLabels?: boolean;\n title: string;\n}\n\ninterface NoPosicionado {\n index: number;\n label: string;\n x0: number;\n x1: number;\n y0: number;\n y1: number;\n}\n\ninterface Caixa {\n x0: number;\n x1: number;\n y0: number;\n y1: number;\n}\n\nfunction seCruzam(uma: Caixa, outra: Caixa) {\n return uma.x0 < outra.x1 && outra.x0 < uma.x1 && uma.y0 < outra.y1 && outra.y0 < uma.y1;\n}\n\ninterface LigacaoPosicionada {\n index: number;\n source: NoPosicionado;\n target: NoPosicionado;\n value: number;\n width: number;\n y0: number;\n y1: number;\n}\n\nconst ALINHAMENTO = {\n center: sankeyCenter,\n justify: sankeyJustify,\n left: sankeyLeft,\n right: sankeyRight,\n};\n\n/**\n * Bezier cubica entre a borda de saida e a borda de entrada, com os pontos de\n * controle no meio do vao. E o que da a ligacao a curva que sai e chega na\n * horizontal, sem torcer perto dos nos.\n */\nfunction caminhoDa(ligacao: LigacaoPosicionada) {\n const saida = ligacao.source.x1;\n const chegada = ligacao.target.x0;\n const meio = (saida + chegada) / 2;\n\n return `M${saida},${ligacao.y0}C${meio},${ligacao.y0} ${meio},${ligacao.y1} ${chegada},${ligacao.y1}`;\n}\n\n/**\n * Busca em profundidade atras de aresta de retorno. Um autolaco tambem conta:\n * o no seria origem e destino do mesmo caminho.\n */\nfunction temCiclo(flows: readonly ChartSankeyFlow[]) {\n const saidas = new Map<string, string[]>();\n\n for (const fluxo of flows) {\n saidas.set(fluxo.source, [...(saidas.get(fluxo.source) ?? []), fluxo.target]);\n }\n\n const encerrados = new Set<string>();\n const noCaminho = new Set<string>();\n\n function alcanca(no: string): boolean {\n if (noCaminho.has(no)) {\n return true;\n }\n\n if (encerrados.has(no)) {\n return false;\n }\n\n noCaminho.add(no);\n const achou = (saidas.get(no) ?? []).some(alcanca);\n noCaminho.delete(no);\n encerrados.add(no);\n\n return achou;\n }\n\n return [...saidas.keys()].some(alcanca);\n}\n\nexport function ChartSankey({\n accent,\n cyclicMessage = 'O fluxo volta sobre si mesmo e não pode ser desenhado',\n emptyMessage = 'Sem dados no período',\n flowColor = 'source',\n flowValuePosition = 'end',\n flows,\n formatValue = formatarNumero,\n height = 320,\n nodeAlign = 'justify',\n nodes,\n nodePadding = 12,\n nodeWidth = 12,\n showFlowValues = false,\n showLabels = true,\n title,\n}: ChartSankeyProps) {\n const { font, height: alturaMedida, ref, width } = useChartMetrics();\n const { fillHeight, value: alturaDoDesenho } = chartHeight(height, alturaMedida);\n const [emFoco, setEmFoco] = useState<number | null>(null);\n\n /** Os nos saem da ordem declarada, e o que faltar sai das proprias ligacoes. */\n const declarados = useMemo(() => {\n const rotulos = (nodes ?? []).map((no) => no.label);\n\n flows.forEach(({ source, target }) => {\n [source, target].forEach((rotulo) => {\n if (!rotulos.includes(rotulo)) {\n rotulos.push(rotulo);\n }\n });\n });\n\n return rotulos.map(\n (rotulo) => nodes?.find((no) => no.label === rotulo) ?? ({ label: rotulo } as ChartSankeyNode),\n );\n }, [flows, nodes]);\n\n // A cor sai da lista inteira e na ordem dos nos, para uma ligacao herdar\n // sempre a cor do no de que ela depende.\n const cores = useMemo(() => resolveSeriesColors(declarados, { accent }), [accent, declarados]);\n\n /**\n * O rotulo fica sempre a direita do no, como na referencia. So o de saida\n * precisa de espaco reservado: ele nao tem fluxo a direita para escrever por\n * cima, e sem a reserva o nome sairia pela borda.\n */\n const saidas = useMemo(() => {\n const origens = new Set(flows.map((fluxo) => fluxo.source));\n\n return declarados.map((no) => no.label).filter((rotulo) => !origens.has(rotulo));\n }, [declarados, flows]);\n\n const bandaDireita = showLabels\n ? Math.min(widestLabel(saidas, font), width * CHART_LABEL_BAND) + CHART_LABEL_OFFSET\n : 0;\n\n // Um diagrama de fluxo e aciclico por definicao, e o `d3-sankey` lanca ao\n // encontrar um ciclo. Detectar antes troca a queda da arvore inteira por uma\n // mensagem, sem descartar ligacao nenhuma pelas costas.\n const ciclico = useMemo(() => temCiclo(flows), [flows]);\n const totalDoFluxo = useMemo(\n () => flows.reduce((soma, fluxo) => soma + (Number.isFinite(fluxo.value) ? Math.max(fluxo.value, 0) : 0), 0),\n [flows],\n );\n\n const grafo = useMemo(() => {\n const util = width - bandaDireita;\n\n if (util <= 0 || alturaDoDesenho <= 0 || flows.length === 0 || ciclico || totalDoFluxo <= 0) {\n return { links: [] as LigacaoPosicionada[], nodes: [] as NoPosicionado[] };\n }\n\n const posicionar = sankey<{ label: string }, { value: number }>()\n .nodeId((no) => no.label)\n .nodeAlign(ALINHAMENTO[nodeAlign])\n .nodeWidth(nodeWidth)\n .nodePadding(nodePadding)\n .extent([\n [0, 2],\n [util, alturaDoDesenho - 2],\n ]);\n\n const resultado = posicionar({\n links: flows.map((fluxo) => ({\n ...fluxo,\n value: Number.isFinite(fluxo.value) ? Math.max(fluxo.value, 0) : 0,\n })),\n nodes: declarados.map((no) => ({ label: no.label })),\n });\n\n return resultado as unknown as { links: LigacaoPosicionada[]; nodes: NoPosicionado[] };\n }, [alturaDoDesenho, bandaDireita, ciclico, declarados, flows, nodeAlign, nodePadding, nodeWidth, totalDoFluxo, width]);\n\n const corDoNo = (indice: number) => cores[indice] ?? 'var(--pl-chart-neutral)';\n\n function corDa(ligacao: LigacaoPosicionada) {\n if (flowColor === 'neutral') {\n return 'var(--pl-chart-neutral)';\n }\n\n return corDoNo(flowColor === 'target' ? ligacao.target.index : ligacao.source.index);\n }\n\n function descreverLigacao(ligacao: LigacaoPosicionada) {\n return `${ligacao.source.label} → ${ligacao.target.label}: ${formatValue(ligacao.value)}`;\n }\n\n function classeDa(indice: number) {\n if (emFoco === null) {\n return styles.link;\n }\n\n return `${styles.link} ${emFoco === indice ? styles.linkOn : styles.linkDim}`;\n }\n\n /** Vao entre duas colunas, descontados o no e o recuo: e o que o rotulo tem. */\n const larguraDaEtapa = (() => {\n const colunas = [...new Set(grafo.nodes.map((no) => no.x0))].sort((a, b) => a - b);\n\n if (colunas.length < 2) {\n return width * CHART_LABEL_BAND;\n }\n\n const passo = Math.min(...colunas.slice(1).map((x, indice) => x - colunas[indice]));\n\n return Math.max(passo - nodeWidth - CHART_LABEL_OFFSET, 0);\n })();\n\n function rotuloDoNo(no: NoPosicionado) {\n const saida = saidas.includes(no.label);\n const texto = truncateToWidth(\n no.label,\n font,\n (saida ? bandaDireita : larguraDaEtapa) - CHART_LABEL_OFFSET,\n );\n const x = no.x1 + CHART_LABEL_OFFSET;\n const meio = (no.y0 + no.y1) / 2;\n\n return {\n caixa: {\n x0: x,\n x1: x + measureLabel(texto, font),\n y0: meio - font.lineHeight / 2,\n y1: meio + font.lineHeight / 2,\n } satisfies Caixa,\n texto,\n x,\n y: meio,\n };\n }\n\n const rotulosDosNos = showLabels ? grafo.nodes.map(rotuloDoNo) : [];\n\n /**\n * Valor de uma ligacao, ja posicionado. Ele e omitido quando cruza o rotulo\n * de algum no: dois textos sobrepostos nao informam nada, e o valor continua\n * no `title` da propria ligacao.\n */\n function valorDa(ligacao: LigacaoPosicionada) {\n const texto = formatValue(ligacao.value);\n const largura = measureLabel(texto, font);\n const saida = ligacao.source.x1;\n const chegada = ligacao.target.x0;\n const meio = (ligacao.y0 + ligacao.y1) / 2;\n\n const posicoes = {\n end: { anchor: 'end' as const, x: chegada - CHART_LABEL_OFFSET },\n middle: { anchor: 'middle' as const, x: (saida + chegada) / 2 },\n start: { anchor: 'start' as const, x: saida + CHART_LABEL_OFFSET },\n };\n\n const { anchor, x } = posicoes[flowValuePosition];\n const recuo = { end: largura, middle: largura / 2, start: 0 }[flowValuePosition];\n\n const caixa: Caixa = {\n x0: x - recuo,\n x1: x - recuo + largura,\n y0: meio - font.lineHeight / 2,\n y1: meio + font.lineHeight / 2,\n };\n\n if (rotulosDosNos.some((rotulo) => seCruzam(caixa, rotulo.caixa))) {\n return undefined;\n }\n\n return { anchor, texto, x, y: meio };\n }\n\n return (\n <ChartFrame\n containerRef={ref}\n empty={flows.length === 0 || ciclico || totalDoFluxo <= 0}\n emptyMessage={ciclico ? cyclicMessage : emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legendPosition=\"none\"\n title={title}\n width={width}\n >\n <g className={styles.links}>\n {grafo.links.map((ligacao, indice) => (\n <path\n aria-label={descreverLigacao(ligacao)}\n className={classeDa(indice)}\n d={caminhoDa(ligacao)}\n key={indice}\n onMouseEnter={() => setEmFoco(indice)}\n onMouseLeave={() => setEmFoco(null)}\n stroke={corDa(ligacao)}\n strokeWidth={Math.max(ligacao.width, 1)}\n >\n <title>{descreverLigacao(ligacao)}</title>\n </path>\n ))}\n </g>\n\n {grafo.nodes.map((no) => (\n <rect\n aria-label={no.label}\n className={styles.node}\n fill={corDoNo(no.index)}\n height={Math.max(no.y1 - no.y0, 1)}\n key={no.label}\n width={no.x1 - no.x0}\n x={no.x0}\n y={no.y0}\n >\n <title>{no.label}</title>\n </rect>\n ))}\n\n {showFlowValues &&\n grafo.links.map((ligacao, indice) => {\n const valor = valorDa(ligacao);\n\n if (!valor) {\n return null;\n }\n\n return (\n <text\n className={`${styles.flowValue} ${styles.sobreFluxo}`}\n dominantBaseline=\"middle\"\n key={indice}\n textAnchor={valor.anchor}\n x={valor.x}\n y={valor.y}\n >\n {valor.texto}\n </text>\n );\n })}\n\n {/* O rotulo fica sempre a direita do no. No no de saida ele cai na banda\n reservada; nos demais, sobre o proprio fluxo, e um halo da cor da\n superficie o separa do que passa por baixo. */}\n {rotulosDosNos.map((rotulo, indice) => (\n <text\n className={`${styles.label} ${saidas.includes(grafo.nodes[indice].label) ? '' : styles.sobreFluxo}`}\n dominantBaseline=\"middle\"\n key={`rotulo-${grafo.nodes[indice].label}`}\n textAnchor=\"start\"\n x={rotulo.x}\n y={rotulo.y}\n >\n {rotulo.texto}\n </text>\n ))}\n </ChartFrame>\n );\n}\n"],"names":["seCruzam","uma","outra","ALINHAMENTO","sankeyCenter","sankeyJustify","sankeyLeft","sankeyRight","caminhoDa","ligacao","saida","chegada","meio","temCiclo","flows","saidas","fluxo","encerrados","noCaminho","alcanca","no","achou","ChartSankey","accent","cyclicMessage","emptyMessage","flowColor","flowValuePosition","formatValue","formatarNumero","height","nodeAlign","nodes","nodePadding","nodeWidth","showFlowValues","showLabels","title","font","alturaMedida","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","emFoco","setEmFoco","useState","declarados","useMemo","rotulos","source","target","rotulo","cores","resolveSeriesColors","origens","bandaDireita","widestLabel","CHART_LABEL_BAND","CHART_LABEL_OFFSET","ciclico","totalDoFluxo","soma","grafo","util","sankey","corDoNo","indice","corDa","descreverLigacao","classeDa","styles","larguraDaEtapa","colunas","a","b","passo","x","rotuloDoNo","texto","truncateToWidth","measureLabel","rotulosDosNos","valorDa","largura","posicoes","anchor","recuo","caixa","jsxs","ChartFrame","jsx","valor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartSankey.cjs","sources":["../../../../src/components/charts/ChartSankey/ChartSankey.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { sankey, sankeyCenter, sankeyJustify, sankeyLeft, sankeyRight } from 'd3-sankey';\nimport {\n CHART_LABEL_BAND,\n CHART_LABEL_OFFSET,\n ChartFrame,\n chartHeight,\n measureLabel,\n truncateToWidth,\n useChartMetrics,\n widestLabel,\n type ChartHeight,\n} from '../core';\nimport { resolveSeriesColors, type SeriesAppearance } from '../palette';\nimport { formatarNumero, formatarPercentual } from '../../../utils/formatters';\nimport styles from './ChartSankey.module.css';\n\nexport interface ChartSankeyNode extends SeriesAppearance {\n label: string;\n}\n\nexport interface ChartSankeyFlow {\n source: string;\n target: string;\n value: number;\n}\n\n/** Onde os nos sem saida se encostam, conforme a referencia. */\nexport type ChartSankeyAlign = 'left' | 'right' | 'center' | 'justify';\n\n/** De onde a ligacao tira a cor: do no de origem, do de destino, ou de nenhum. */\nexport type ChartSankeyFlowColor = 'source' | 'target' | 'neutral';\n\n/**\n * Onde o valor da ligacao e escrito. O rotulo do no ocupa a faixa logo a\n * direita dele, entao `end` e o unico que nunca disputa espaco com o rotulo da\n * propria origem.\n */\nexport type ChartSankeyFlowValuePosition = 'start' | 'middle' | 'end';\n\nexport interface ChartSankeyProps {\n accent?: string;\n /** Mensagem quando o fluxo tem ciclo, que um diagrama de fluxo nao representa. */\n cyclicMessage?: string;\n emptyMessage?: string;\n flowColor?: ChartSankeyFlowColor;\n flowValuePosition?: ChartSankeyFlowValuePosition;\n flows: readonly ChartSankeyFlow[];\n /** Formato dos valores no balao. Sem ele, vale o `formatValue`. */\n formatTooltipValue?: (value: number) => string;\n formatValue?: (value: number) => string;\n height?: ChartHeight;\n nodeAlign?: ChartSankeyAlign;\n /** Ordem e aparencia dos nos. Sem ela, os nos saem das proprias ligacoes. */\n nodes?: readonly ChartSankeyNode[];\n /** Folga vertical entre dois nos da mesma coluna. */\n nodePadding?: number;\n nodeWidth?: number;\n showFlowValues?: boolean;\n showLabels?: boolean;\n /** Balao com o detalhe do que esta sob o ponteiro. Desligue para nao mostrar nada alem do `<title>` nativo. */\n showTooltip?: boolean;\n title: string;\n}\n\ninterface NoPosicionado {\n index: number;\n label: string;\n x0: number;\n x1: number;\n y0: number;\n y1: number;\n}\n\ninterface Caixa {\n x0: number;\n x1: number;\n y0: number;\n y1: number;\n}\n\nfunction seCruzam(uma: Caixa, outra: Caixa) {\n return uma.x0 < outra.x1 && outra.x0 < uma.x1 && uma.y0 < outra.y1 && outra.y0 < uma.y1;\n}\n\ninterface LigacaoPosicionada {\n index: number;\n source: NoPosicionado;\n target: NoPosicionado;\n value: number;\n width: number;\n y0: number;\n y1: number;\n}\n\nconst ALINHAMENTO = {\n center: sankeyCenter,\n justify: sankeyJustify,\n left: sankeyLeft,\n right: sankeyRight,\n};\n\n/**\n * Bezier cubica entre a borda de saida e a borda de entrada, com os pontos de\n * controle no meio do vao. E o que da a ligacao a curva que sai e chega na\n * horizontal, sem torcer perto dos nos.\n */\nfunction caminhoDa(ligacao: LigacaoPosicionada) {\n const saida = ligacao.source.x1;\n const chegada = ligacao.target.x0;\n const meio = (saida + chegada) / 2;\n\n return `M${saida},${ligacao.y0}C${meio},${ligacao.y0} ${meio},${ligacao.y1} ${chegada},${ligacao.y1}`;\n}\n\n/**\n * Busca em profundidade atras de aresta de retorno. Um autolaco tambem conta:\n * o no seria origem e destino do mesmo caminho.\n */\nfunction temCiclo(flows: readonly ChartSankeyFlow[]) {\n const saidas = new Map<string, string[]>();\n\n for (const fluxo of flows) {\n saidas.set(fluxo.source, [...(saidas.get(fluxo.source) ?? []), fluxo.target]);\n }\n\n const encerrados = new Set<string>();\n const noCaminho = new Set<string>();\n\n function alcanca(no: string): boolean {\n if (noCaminho.has(no)) {\n return true;\n }\n\n if (encerrados.has(no)) {\n return false;\n }\n\n noCaminho.add(no);\n const achou = (saidas.get(no) ?? []).some(alcanca);\n noCaminho.delete(no);\n encerrados.add(no);\n\n return achou;\n }\n\n return [...saidas.keys()].some(alcanca);\n}\n\nexport function ChartSankey({\n accent,\n cyclicMessage = 'O fluxo volta sobre si mesmo e não pode ser desenhado',\n emptyMessage = 'Sem dados no período',\n flowColor = 'source',\n flowValuePosition = 'end',\n flows,\n formatTooltipValue,\n formatValue = formatarNumero,\n height = 320,\n nodeAlign = 'justify',\n nodes,\n nodePadding = 12,\n nodeWidth = 12,\n showFlowValues = false,\n showLabels = true,\n showTooltip = true,\n title,\n}: ChartSankeyProps) {\n const { font, height: alturaMedida, ref, width } = useChartMetrics();\n const { fillHeight, value: alturaDoDesenho } = chartHeight(height, alturaMedida);\n const [emFoco, setEmFoco] = useState<number | null>(null);\n\n /** Os nos saem da ordem declarada, e o que faltar sai das proprias ligacoes. */\n const declarados = useMemo(() => {\n const rotulos = (nodes ?? []).map((no) => no.label);\n\n flows.forEach(({ source, target }) => {\n [source, target].forEach((rotulo) => {\n if (!rotulos.includes(rotulo)) {\n rotulos.push(rotulo);\n }\n });\n });\n\n return rotulos.map(\n (rotulo) => nodes?.find((no) => no.label === rotulo) ?? ({ label: rotulo } as ChartSankeyNode),\n );\n }, [flows, nodes]);\n\n // A cor sai da lista inteira e na ordem dos nos, para uma ligacao herdar\n // sempre a cor do no de que ela depende.\n const cores = useMemo(() => resolveSeriesColors(declarados, { accent }), [accent, declarados]);\n\n /**\n * O rotulo fica sempre a direita do no, como na referencia. So o de saida\n * precisa de espaco reservado: ele nao tem fluxo a direita para escrever por\n * cima, e sem a reserva o nome sairia pela borda.\n */\n const saidas = useMemo(() => {\n const origens = new Set(flows.map((fluxo) => fluxo.source));\n\n return declarados.map((no) => no.label).filter((rotulo) => !origens.has(rotulo));\n }, [declarados, flows]);\n\n const bandaDireita = showLabels\n ? Math.min(widestLabel(saidas, font), width * CHART_LABEL_BAND) + CHART_LABEL_OFFSET\n : 0;\n\n // Um diagrama de fluxo e aciclico por definicao, e o `d3-sankey` lanca ao\n // encontrar um ciclo. Detectar antes troca a queda da arvore inteira por uma\n // mensagem, sem descartar ligacao nenhuma pelas costas.\n const ciclico = useMemo(() => temCiclo(flows), [flows]);\n const totalDoFluxo = useMemo(\n () => flows.reduce((soma, fluxo) => soma + (Number.isFinite(fluxo.value) ? Math.max(fluxo.value, 0) : 0), 0),\n [flows],\n );\n\n const grafo = useMemo(() => {\n const util = width - bandaDireita;\n\n if (util <= 0 || alturaDoDesenho <= 0 || flows.length === 0 || ciclico || totalDoFluxo <= 0) {\n return { links: [] as LigacaoPosicionada[], nodes: [] as NoPosicionado[] };\n }\n\n const posicionar = sankey<{ label: string }, { value: number }>()\n .nodeId((no) => no.label)\n .nodeAlign(ALINHAMENTO[nodeAlign])\n .nodeWidth(nodeWidth)\n .nodePadding(nodePadding)\n .extent([\n [0, 2],\n [util, alturaDoDesenho - 2],\n ]);\n\n const resultado = posicionar({\n links: flows.map((fluxo) => ({\n ...fluxo,\n value: Number.isFinite(fluxo.value) ? Math.max(fluxo.value, 0) : 0,\n })),\n nodes: declarados.map((no) => ({ label: no.label })),\n });\n\n return resultado as unknown as { links: LigacaoPosicionada[]; nodes: NoPosicionado[] };\n }, [alturaDoDesenho, bandaDireita, ciclico, declarados, flows, nodeAlign, nodePadding, nodeWidth, totalDoFluxo, width]);\n\n const corDoNo = (indice: number) => cores[indice] ?? 'var(--pl-chart-neutral)';\n\n function corDa(ligacao: LigacaoPosicionada) {\n if (flowColor === 'neutral') {\n return 'var(--pl-chart-neutral)';\n }\n\n return corDoNo(flowColor === 'target' ? ligacao.target.index : ligacao.source.index);\n }\n\n function descreverLigacao(ligacao: LigacaoPosicionada) {\n return `${ligacao.source.label} → ${ligacao.target.label}: ${formatValue(ligacao.value)}`;\n }\n\n /** O fluxo e a parte dele na saida da origem, que e o que a largura da faixa compara. */\n function linhasDoBalao() {\n const ligacao = emFoco === null ? undefined : grafo.links[emFoco];\n\n if (!ligacao) {\n return [];\n }\n\n const saida = grafo.links\n .filter((outra) => outra.source.index === ligacao.source.index)\n .reduce((soma, outra) => soma + outra.value, 0);\n\n return [\n { color: corDa(ligacao), label: 'Fluxo', values: [ligacao.value] },\n {\n format: (fracao: number) => formatarPercentual(fracao),\n label: `Da saída de ${ligacao.source.label}`,\n values: [saida > 0 ? ligacao.value / saida : 0],\n },\n ];\n }\n\n function classeDa(indice: number) {\n if (emFoco === null) {\n return styles.link;\n }\n\n return `${styles.link} ${emFoco === indice ? styles.linkOn : styles.linkDim}`;\n }\n\n /** Vao entre duas colunas, descontados o no e o recuo: e o que o rotulo tem. */\n const larguraDaEtapa = (() => {\n const colunas = [...new Set(grafo.nodes.map((no) => no.x0))].sort((a, b) => a - b);\n\n if (colunas.length < 2) {\n return width * CHART_LABEL_BAND;\n }\n\n const passo = Math.min(...colunas.slice(1).map((x, indice) => x - colunas[indice]));\n\n return Math.max(passo - nodeWidth - CHART_LABEL_OFFSET, 0);\n })();\n\n function rotuloDoNo(no: NoPosicionado) {\n const saida = saidas.includes(no.label);\n const texto = truncateToWidth(\n no.label,\n font,\n (saida ? bandaDireita : larguraDaEtapa) - CHART_LABEL_OFFSET,\n );\n const x = no.x1 + CHART_LABEL_OFFSET;\n const meio = (no.y0 + no.y1) / 2;\n\n return {\n caixa: {\n x0: x,\n x1: x + measureLabel(texto, font),\n y0: meio - font.lineHeight / 2,\n y1: meio + font.lineHeight / 2,\n } satisfies Caixa,\n texto,\n x,\n y: meio,\n };\n }\n\n const rotulosDosNos = showLabels ? grafo.nodes.map(rotuloDoNo) : [];\n\n /**\n * Valor de uma ligacao, ja posicionado. Ele e omitido quando cruza o rotulo\n * de algum no: dois textos sobrepostos nao informam nada, e o valor continua\n * no `title` da propria ligacao.\n */\n function valorDa(ligacao: LigacaoPosicionada) {\n const texto = formatValue(ligacao.value);\n const largura = measureLabel(texto, font);\n const saida = ligacao.source.x1;\n const chegada = ligacao.target.x0;\n const meio = (ligacao.y0 + ligacao.y1) / 2;\n\n const posicoes = {\n end: { anchor: 'end' as const, x: chegada - CHART_LABEL_OFFSET },\n middle: { anchor: 'middle' as const, x: (saida + chegada) / 2 },\n start: { anchor: 'start' as const, x: saida + CHART_LABEL_OFFSET },\n };\n\n const { anchor, x } = posicoes[flowValuePosition];\n const recuo = { end: largura, middle: largura / 2, start: 0 }[flowValuePosition];\n\n const caixa: Caixa = {\n x0: x - recuo,\n x1: x - recuo + largura,\n y0: meio - font.lineHeight / 2,\n y1: meio + font.lineHeight / 2,\n };\n\n if (rotulosDosNos.some((rotulo) => seCruzam(caixa, rotulo.caixa))) {\n return undefined;\n }\n\n return { anchor, texto, x, y: meio };\n }\n\n return (\n <ChartFrame\n containerRef={ref}\n empty={flows.length === 0 || ciclico || totalDoFluxo <= 0}\n emptyMessage={ciclico ? cyclicMessage : emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legendPosition=\"none\"\n title={title}\n tooltip={\n showTooltip\n ? {\n columns: [{ format: formatTooltipValue ?? formatValue }],\n computed: 'none',\n rows: linhasDoBalao(),\n title: emFoco === null ? undefined : `${grafo.links[emFoco]?.source.label} → ${grafo.links[emFoco]?.target.label}`,\n }\n : undefined\n }\n width={width}\n >\n <g className={styles.links}>\n {grafo.links.map((ligacao, indice) => (\n <path\n aria-label={descreverLigacao(ligacao)}\n className={classeDa(indice)}\n d={caminhoDa(ligacao)}\n key={indice}\n onMouseEnter={() => setEmFoco(indice)}\n onMouseLeave={() => setEmFoco(null)}\n stroke={corDa(ligacao)}\n strokeWidth={Math.max(ligacao.width, 1)}\n >\n {!showTooltip && <title>{descreverLigacao(ligacao)}</title>}\n </path>\n ))}\n </g>\n\n {grafo.nodes.map((no) => (\n <rect\n aria-label={no.label}\n className={styles.node}\n fill={corDoNo(no.index)}\n height={Math.max(no.y1 - no.y0, 1)}\n key={no.label}\n width={no.x1 - no.x0}\n x={no.x0}\n y={no.y0}\n >\n <title>{no.label}</title>\n </rect>\n ))}\n\n {showFlowValues &&\n grafo.links.map((ligacao, indice) => {\n const valor = valorDa(ligacao);\n\n if (!valor) {\n return null;\n }\n\n return (\n <text\n className={`${styles.flowValue} ${styles.sobreFluxo}`}\n dominantBaseline=\"middle\"\n key={indice}\n textAnchor={valor.anchor}\n x={valor.x}\n y={valor.y}\n >\n {valor.texto}\n </text>\n );\n })}\n\n {/* O rotulo fica sempre a direita do no. No no de saida ele cai na banda\n reservada; nos demais, sobre o proprio fluxo, e um halo da cor da\n superficie o separa do que passa por baixo. */}\n {rotulosDosNos.map((rotulo, indice) => (\n <text\n className={`${styles.label} ${saidas.includes(grafo.nodes[indice].label) ? '' : styles.sobreFluxo}`}\n dominantBaseline=\"middle\"\n key={`rotulo-${grafo.nodes[indice].label}`}\n textAnchor=\"start\"\n x={rotulo.x}\n y={rotulo.y}\n >\n {rotulo.texto}\n </text>\n ))}\n </ChartFrame>\n );\n}\n"],"names":["seCruzam","uma","outra","ALINHAMENTO","sankeyCenter","sankeyJustify","sankeyLeft","sankeyRight","caminhoDa","ligacao","saida","chegada","meio","temCiclo","flows","saidas","fluxo","encerrados","noCaminho","alcanca","no","achou","ChartSankey","accent","cyclicMessage","emptyMessage","flowColor","flowValuePosition","formatTooltipValue","formatValue","formatarNumero","height","nodeAlign","nodes","nodePadding","nodeWidth","showFlowValues","showLabels","showTooltip","title","font","alturaMedida","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","emFoco","setEmFoco","useState","declarados","useMemo","rotulos","source","target","rotulo","cores","resolveSeriesColors","origens","bandaDireita","widestLabel","CHART_LABEL_BAND","CHART_LABEL_OFFSET","ciclico","totalDoFluxo","soma","grafo","util","sankey","corDoNo","indice","corDa","descreverLigacao","linhasDoBalao","fracao","formatarPercentual","classeDa","styles","larguraDaEtapa","colunas","a","b","passo","x","rotuloDoNo","texto","truncateToWidth","measureLabel","rotulosDosNos","valorDa","largura","posicoes","anchor","recuo","caixa","jsxs","ChartFrame","_a","_b","jsx","valor"],"mappings":"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"}
|