@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,144 +1,159 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { hierarchy as
|
|
4
|
-
import
|
|
5
|
-
import { useChartMetrics as
|
|
6
|
-
import { useSeriesToggle as
|
|
7
|
-
import { resolveSeriesColors as
|
|
8
|
-
import { widestLabel as
|
|
9
|
-
import { CHART_LABEL_BAND as
|
|
10
|
-
import { VOLTA as
|
|
11
|
-
import { ChartFrame as
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { jsxs as k, jsx as x } from "react/jsx-runtime";
|
|
2
|
+
import { useState as at, useMemo as M } from "react";
|
|
3
|
+
import { hierarchy as st, partition as ct } from "d3-hierarchy";
|
|
4
|
+
import d from "./ChartSunburst.module.css.js";
|
|
5
|
+
import { useChartMetrics as ut } from "../core/useChartMetrics.js";
|
|
6
|
+
import { useSeriesToggle as mt } from "../core/useSeriesToggle.js";
|
|
7
|
+
import { resolveSeriesColors as dt } from "../palette/seriesColor.js";
|
|
8
|
+
import { widestLabel as ht, truncateToWidth as ft } from "../core/measureText.js";
|
|
9
|
+
import { CHART_LABEL_BAND as pt, CHART_LABEL_OFFSET as E, ringDiameter as gt } from "../core/spacing.js";
|
|
10
|
+
import { VOLTA as xt, arcPath as Mt, arcAnchor as H } from "../core/arcs.js";
|
|
11
|
+
import { ChartFrame as vt } from "../core/ChartFrame.js";
|
|
12
|
+
import { pathTooltip as bt } from "../core/tooltips.js";
|
|
13
|
+
import { hoverPath as U } from "../core/hoverPath.js";
|
|
14
|
+
import { formatarNumero as At } from "../../../utils/formatters/formatarNumero.js";
|
|
15
|
+
import { chartHeight as $t } from "../core/cartesianLayout.js";
|
|
16
|
+
const Ct = 0.18, v = 14;
|
|
17
|
+
function w(i, n = 1, o = /* @__PURE__ */ new Map()) {
|
|
18
|
+
return i.forEach((a) => {
|
|
19
|
+
var h;
|
|
20
|
+
o.set(n, [...o.get(n) ?? [], a.label]), (h = a.children) != null && h.length && w(a.children, n + 1, o);
|
|
19
21
|
}), o;
|
|
20
22
|
}
|
|
21
|
-
function
|
|
23
|
+
function Ot(i, n) {
|
|
22
24
|
if (n <= 1)
|
|
23
25
|
return i;
|
|
24
26
|
const o = Math.min((n - 1) * 22, 66);
|
|
25
27
|
return `color-mix(in oklab, ${i} ${100 - o}%, var(--pl-color-surface))`;
|
|
26
28
|
}
|
|
27
|
-
function
|
|
29
|
+
function Ut({
|
|
28
30
|
accent: i,
|
|
29
31
|
defaultHiddenGroups: n,
|
|
30
32
|
emptyMessage: o = "Sem dados no período",
|
|
31
|
-
formatPercent:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
33
|
+
formatPercent: a = (p) => `${Math.round(p * 100)}%`,
|
|
34
|
+
formatTooltipValue: h,
|
|
35
|
+
formatValue: _ = At,
|
|
36
|
+
height: G = 320,
|
|
37
|
+
hiddenGroups: W,
|
|
38
|
+
legend: Z = "bottom",
|
|
39
|
+
legendAlign: q,
|
|
40
|
+
nodes: l,
|
|
41
|
+
onHiddenGroupsChange: J,
|
|
42
|
+
onHoverNode: f,
|
|
43
|
+
ringGap: K = 2,
|
|
44
|
+
showLabels: b = !0,
|
|
45
|
+
showTooltip: N = !0,
|
|
46
|
+
sliceRadius: Q,
|
|
47
|
+
title: V
|
|
43
48
|
}) {
|
|
44
|
-
const { font:
|
|
49
|
+
const { font: p, height: X, radius: Y, ref: z, width: A } = ut(), { fillHeight: tt, value: L } = $t(G, X), { isHidden: $, toggle: et } = mt({
|
|
45
50
|
defaultHiddenSeries: n,
|
|
46
|
-
hiddenSeries:
|
|
47
|
-
onHiddenSeriesChange:
|
|
48
|
-
}), [
|
|
49
|
-
() =>
|
|
50
|
-
[
|
|
51
|
-
),
|
|
52
|
-
const
|
|
53
|
-
return
|
|
54
|
-
}, [
|
|
55
|
-
if (
|
|
51
|
+
hiddenSeries: W,
|
|
52
|
+
onHiddenSeriesChange: J
|
|
53
|
+
}), [C, rt] = at(null), R = M(() => dt(l, { accent: i }), [i, l]), g = M(
|
|
54
|
+
() => l.filter((t) => !$(t.label)),
|
|
55
|
+
[$, l]
|
|
56
|
+
), nt = M(() => {
|
|
57
|
+
const t = w(g), e = Math.max(0, ...t.keys());
|
|
58
|
+
return t.get(e) ?? [];
|
|
59
|
+
}, [g]), B = b ? Math.min(ht(nt, p), A * pt) : 0, ot = b ? v * 2 + E + B : 0, O = gt(Math.max(A - ot * 2, 0), L) / 2, u = M(() => {
|
|
60
|
+
if (O <= 0)
|
|
56
61
|
return [];
|
|
57
|
-
const
|
|
58
|
-
return
|
|
59
|
-
}, [
|
|
60
|
-
function
|
|
61
|
-
return
|
|
62
|
+
const t = st({ children: g, label: "" }).sum((r) => Math.max(r.value ?? 0, 0)).sort((r, c) => (c.value ?? 0) - (r.value ?? 0));
|
|
63
|
+
return ct().size([xt, O])(t).descendants().filter((r) => r.depth > 0);
|
|
64
|
+
}, [O, g]), it = u.reduce((t, e) => Math.max(t, e.depth), 0), y = u.filter((t) => t.depth === 1).reduce((t, e) => t + (e.value ?? 0), 0), s = C && u.includes(C) ? C : null;
|
|
65
|
+
function lt(t) {
|
|
66
|
+
return s === null || s.ancestors().includes(t);
|
|
62
67
|
}
|
|
63
|
-
function
|
|
64
|
-
|
|
65
|
-
const t = (l = e.ancestors().find((d) => d.depth === 1)) == null ? void 0 : l.data, r = (t == null ? void 0 : t.color) ?? T[a.findIndex((d) => d.label === (t == null ? void 0 : t.label))];
|
|
66
|
-
return ve(r ?? "var(--pl-chart-neutral)", e.depth);
|
|
68
|
+
function F(t) {
|
|
69
|
+
rt(t), f == null || f(t && U(t));
|
|
67
70
|
}
|
|
68
|
-
function
|
|
69
|
-
|
|
70
|
-
|
|
71
|
+
function I(t) {
|
|
72
|
+
var c;
|
|
73
|
+
const e = (c = t.ancestors().find((m) => m.depth === 1)) == null ? void 0 : c.data, r = (e == null ? void 0 : e.color) ?? R[l.findIndex((m) => m.label === (e == null ? void 0 : e.label))];
|
|
74
|
+
return Ot(r ?? "var(--pl-chart-neutral)", t.depth);
|
|
71
75
|
}
|
|
72
|
-
|
|
73
|
-
|
|
76
|
+
function P(t) {
|
|
77
|
+
const e = y > 0 ? (t.value ?? 0) / y : 0;
|
|
78
|
+
return `${t.data.label}: ${_(t.value ?? 0)} (${a(e)})`;
|
|
79
|
+
}
|
|
80
|
+
return /* @__PURE__ */ k(
|
|
81
|
+
vt,
|
|
74
82
|
{
|
|
75
83
|
centerOrigin: !0,
|
|
76
|
-
containerRef:
|
|
77
|
-
empty:
|
|
84
|
+
containerRef: z,
|
|
85
|
+
empty: l.length === 0,
|
|
78
86
|
emptyMessage: o,
|
|
79
|
-
fillHeight:
|
|
80
|
-
height:
|
|
81
|
-
legend:
|
|
82
|
-
color:
|
|
83
|
-
hidden:
|
|
84
|
-
label:
|
|
87
|
+
fillHeight: tt,
|
|
88
|
+
height: L,
|
|
89
|
+
legend: l.map((t, e) => ({
|
|
90
|
+
color: R[e],
|
|
91
|
+
hidden: $(t.label),
|
|
92
|
+
label: t.label
|
|
85
93
|
})),
|
|
86
|
-
legendAlign:
|
|
87
|
-
legendPosition:
|
|
88
|
-
onToggleSeries:
|
|
94
|
+
legendAlign: q,
|
|
95
|
+
legendPosition: Z,
|
|
96
|
+
onToggleSeries: et,
|
|
89
97
|
swatch: "dot",
|
|
90
|
-
title:
|
|
91
|
-
|
|
98
|
+
title: V,
|
|
99
|
+
tooltip: N ? bt({
|
|
100
|
+
color: s ? I(s) : void 0,
|
|
101
|
+
format: h ?? _,
|
|
102
|
+
formatPercent: a,
|
|
103
|
+
path: s && U(s),
|
|
104
|
+
total: y
|
|
105
|
+
}) : void 0,
|
|
106
|
+
width: A,
|
|
92
107
|
children: [
|
|
93
|
-
|
|
108
|
+
u.map((t, e) => /* @__PURE__ */ x(
|
|
94
109
|
"path",
|
|
95
110
|
{
|
|
96
|
-
"aria-label":
|
|
97
|
-
className: `${
|
|
98
|
-
d:
|
|
99
|
-
cornerRadius:
|
|
100
|
-
endAngle:
|
|
101
|
-
innerRadius:
|
|
102
|
-
outerRadius:
|
|
103
|
-
startAngle:
|
|
111
|
+
"aria-label": P(t),
|
|
112
|
+
className: `${d.arc} ${lt(t) ? "" : d.arcDim}`,
|
|
113
|
+
d: Mt({
|
|
114
|
+
cornerRadius: Q ?? Y,
|
|
115
|
+
endAngle: t.x1,
|
|
116
|
+
innerRadius: t.y0 + (t.depth > 1 ? K : 0),
|
|
117
|
+
outerRadius: t.y1,
|
|
118
|
+
startAngle: t.x0
|
|
104
119
|
}),
|
|
105
|
-
fill:
|
|
106
|
-
onMouseEnter: () =>
|
|
107
|
-
onMouseLeave: () =>
|
|
108
|
-
children: /* @__PURE__ */
|
|
120
|
+
fill: I(t),
|
|
121
|
+
onMouseEnter: () => F(t),
|
|
122
|
+
onMouseLeave: () => F(null),
|
|
123
|
+
children: !N && !f && /* @__PURE__ */ x("title", { children: P(t) })
|
|
109
124
|
},
|
|
110
|
-
|
|
125
|
+
e
|
|
111
126
|
)),
|
|
112
|
-
|
|
113
|
-
(
|
|
114
|
-
).map((
|
|
115
|
-
const r = { endAngle:
|
|
116
|
-
return /* @__PURE__ */
|
|
117
|
-
/* @__PURE__ */
|
|
127
|
+
b && u.filter(
|
|
128
|
+
(t) => t.depth === it && t.x1 - t.x0 >= Ct
|
|
129
|
+
).map((t, e) => {
|
|
130
|
+
const r = { endAngle: t.x1, startAngle: t.x0 }, [c, m] = H(r, t.y1), [D, S] = H(r, t.y1 + v), T = D >= 0, j = D + (T ? v : -v);
|
|
131
|
+
return /* @__PURE__ */ k("g", { className: d.leader, children: [
|
|
132
|
+
/* @__PURE__ */ x(
|
|
118
133
|
"polyline",
|
|
119
134
|
{
|
|
120
|
-
className:
|
|
121
|
-
points: `${
|
|
135
|
+
className: d.connector,
|
|
136
|
+
points: `${c},${m} ${D},${S} ${j},${S}`
|
|
122
137
|
}
|
|
123
138
|
),
|
|
124
|
-
/* @__PURE__ */
|
|
139
|
+
/* @__PURE__ */ x(
|
|
125
140
|
"text",
|
|
126
141
|
{
|
|
127
|
-
className:
|
|
142
|
+
className: d.label,
|
|
128
143
|
dominantBaseline: "middle",
|
|
129
|
-
textAnchor:
|
|
130
|
-
x:
|
|
131
|
-
y:
|
|
132
|
-
children:
|
|
144
|
+
textAnchor: T ? "start" : "end",
|
|
145
|
+
x: j + (T ? E : -E),
|
|
146
|
+
y: S,
|
|
147
|
+
children: ft(t.data.label, p, B)
|
|
133
148
|
}
|
|
134
149
|
)
|
|
135
|
-
] },
|
|
150
|
+
] }, e);
|
|
136
151
|
})
|
|
137
152
|
]
|
|
138
153
|
}
|
|
139
154
|
);
|
|
140
155
|
}
|
|
141
156
|
export {
|
|
142
|
-
|
|
157
|
+
Ut as ChartSunburst
|
|
143
158
|
};
|
|
144
159
|
//# sourceMappingURL=ChartSunburst.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartSunburst.js","sources":["../../../../src/components/charts/ChartSunburst/ChartSunburst.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { hierarchy, partition, type HierarchyRectangularNode } from 'd3-hierarchy';\nimport {\n CHART_LABEL_BAND,\n CHART_LABEL_OFFSET,\n ChartFrame,\n VOLTA,\n arcAnchor,\n arcPath,\n chartHeight,\n ringDiameter,\n truncateToWidth,\n useChartMetrics,\n useSeriesToggle,\n widestLabel,\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 './ChartSunburst.module.css';\n\nexport interface ChartSunburstNode extends SeriesAppearance {\n children?: readonly ChartSunburstNode[];\n label: string;\n value?: number;\n}\n\nexport interface ChartSunburstProps {\n accent?: string;\n defaultHiddenGroups?: readonly string[];\n emptyMessage?: string;\n formatPercent?: (ratio: number) => string;\n formatValue?: (value: number) => string;\n height?: ChartHeight;\n hiddenGroups?: readonly string[];\n legend?: ChartLegendPosition;\n legendAlign?: ChartLegendAlign;\n nodes: readonly ChartSunburstNode[];\n onHiddenGroupsChange?: (hidden: readonly string[]) => void;\n /** Folga entre dois aneis vizinhos. */\n ringGap?: number;\n /** Raio das pontas de cada arco. Sem valor, o token de raio pequeno. */\n sliceRadius?: number;\n showLabels?: boolean;\n title: string;\n}\n\ntype Arco = HierarchyRectangularNode<ChartSunburstNode>;\n\n/** Arco menor que isso nao comporta rotulo nem conector legivel. */\nconst ANGULO_MINIMO_DO_ROTULO = 0.18;\nconst COMPRIMENTO_DO_CONECTOR = 14;\n/**\n * Rotulos de cada nivel da arvore declarada. Medir a banda antes de montar o\n * anel exige saber os rotulos antes, e o nivel mais profundo declarado e o\n * mesmo que o anel externo tera.\n */\nfunction rotulosPorNivel(\n nodes: readonly ChartSunburstNode[],\n nivel = 1,\n por = new Map<number, string[]>(),\n) {\n nodes.forEach((no) => {\n por.set(nivel, [...(por.get(nivel) ?? []), no.label]);\n\n if (no.children?.length) {\n rotulosPorNivel(no.children, nivel + 1, por);\n }\n });\n\n return por;\n}\n\n/**\n * Cada anel clareia sobre o anterior, e o filho nasce da cor do pai. Sem isso a\n * hierarquia sumiria: os aneis externos repetiriam a cor do nivel zero e nada\n * distinguiria um filho do outro.\n */\nfunction tomDoNivel(cor: string, profundidade: number) {\n if (profundidade <= 1) {\n return cor;\n }\n\n const clareamento = Math.min((profundidade - 1) * 22, 66);\n\n return `color-mix(in oklab, ${cor} ${100 - clareamento}%, var(--pl-color-surface))`;\n}\n\nexport function ChartSunburst({\n accent,\n defaultHiddenGroups,\n emptyMessage = 'Sem dados no período',\n formatPercent = (fracao) => `${Math.round(fracao * 100)}%`,\n formatValue = formatarNumero,\n height = 320,\n hiddenGroups,\n legend = 'bottom',\n legendAlign,\n nodes,\n onHiddenGroupsChange,\n ringGap = 2,\n showLabels = true,\n sliceRadius,\n title,\n}: ChartSunburstProps) {\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: defaultHiddenGroups,\n hiddenSeries: hiddenGroups,\n onHiddenSeriesChange: onHiddenGroupsChange,\n });\n const [emFoco, setEmFoco] = useState<Arco | null>(null);\n\n // A cor sai da lista inteira, e nao das visiveis: desligar um grupo nao pode\n // repintar os demais.\n const coresDeNivelZero = useMemo(() => resolveSeriesColors(nodes, { accent }), [accent, nodes]);\n\n const visiveis = useMemo(\n () => nodes.filter((grupo) => !isHidden(grupo.label)),\n [isHidden, nodes],\n );\n\n // A banda dos rotulos e reservada antes do anel, medida pelo rotulo mais\n // largo do anel externo. Sem reservar, o rotulo era desenhado no que sobrasse\n // — quase nada nas laterais — e acabava cortado ate sumir.\n const rotulosExternos = useMemo(() => {\n const niveis = rotulosPorNivel(visiveis);\n const externo = Math.max(0, ...niveis.keys());\n\n return niveis.get(externo) ?? [];\n }, [visiveis]);\n\n const larguraDoRotulo = showLabels\n ? Math.min(widestLabel(rotulosExternos, font), width * CHART_LABEL_BAND)\n : 0;\n const banda = showLabels ? COMPRIMENTO_DO_CONECTOR * 2 + CHART_LABEL_OFFSET + larguraDoRotulo : 0;\n\n const diametro = ringDiameter(Math.max(width - banda * 2, 0), alturaDoDesenho);\n const raio = diametro / 2;\n\n const arcos = useMemo(() => {\n if (raio <= 0) {\n return [];\n }\n\n const arvore = hierarchy<ChartSunburstNode>({ children: visiveis, label: '' })\n .sum((no) => Math.max(no.value ?? 0, 0))\n .sort((a, b) => (b.value ?? 0) - (a.value ?? 0));\n\n const repartir = partition<ChartSunburstNode>().size([VOLTA, raio]);\n\n return repartir(arvore)\n .descendants()\n .filter((no) => no.depth > 0);\n }, [raio, visiveis]);\n\n const profundidadeMaxima = arcos.reduce((maior, arco) => Math.max(maior, arco.depth), 0);\n const total = arcos\n .filter((arco) => arco.depth === 1)\n .reduce((soma, arco) => soma + (arco.value ?? 0), 0);\n\n // O arco guardado deixa de existir quando a arvore e remontada, num\n // redimensionamento por exemplo. Sem conferir, o foco perdido apagaria tudo.\n const foco = emFoco && arcos.includes(emFoco) ? emFoco : null;\n\n /**\n * Acende o arco sob o ponteiro e os que o originaram. O caminho ate a raiz e\n * o que explica de onde aquela fatia veio; os filhos dela nao explicam nada\n * sobre ela, entao ficam apagados junto com o resto.\n */\n function aceso(arco: Arco) {\n return foco === null || foco.ancestors().includes(arco);\n }\n\n function corDe(arco: Arco) {\n const raizDoRamo = arco.ancestors().find((ancestral) => ancestral.depth === 1)?.data;\n const base =\n raizDoRamo?.color ?? coresDeNivelZero[nodes.findIndex((no) => no.label === raizDoRamo?.label)];\n\n return tomDoNivel(base ?? 'var(--pl-chart-neutral)', arco.depth);\n }\n\n function descreverArco(arco: Arco) {\n const fracao = total > 0 ? (arco.value ?? 0) / total : 0;\n\n return `${arco.data.label}: ${formatValue(arco.value ?? 0)} (${formatPercent(fracao)})`;\n }\n\n return (\n <ChartFrame\n centerOrigin\n containerRef={ref}\n empty={nodes.length === 0}\n emptyMessage={emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legend={nodes.map((grupo, indice) => ({\n color: coresDeNivelZero[indice],\n hidden: isHidden(grupo.label),\n label: grupo.label,\n }))}\n legendAlign={legendAlign}\n legendPosition={legend}\n onToggleSeries={toggle}\n swatch=\"dot\"\n title={title}\n width={width}\n >\n {arcos.map((arco, indice) => (\n <path\n aria-label={descreverArco(arco)}\n className={`${styles.arc} ${aceso(arco) ? '' : styles.arcDim}`}\n d={arcPath({\n cornerRadius: sliceRadius ?? raioDoCanto,\n endAngle: arco.x1,\n innerRadius: arco.y0 + (arco.depth > 1 ? ringGap : 0),\n outerRadius: arco.y1,\n startAngle: arco.x0,\n })}\n fill={corDe(arco)}\n key={indice}\n onMouseEnter={() => setEmFoco(arco)}\n onMouseLeave={() => setEmFoco(null)}\n >\n <title>{descreverArco(arco)}</title>\n </path>\n ))}\n\n {showLabels &&\n arcos\n .filter(\n (arco) => arco.depth === profundidadeMaxima && arco.x1 - arco.x0 >= ANGULO_MINIMO_DO_ROTULO,\n )\n .map((arco, indice) => {\n const angulos = { endAngle: arco.x1, startAngle: arco.x0 };\n const [xBorda, yBorda] = arcAnchor(angulos, arco.y1);\n const [xCotovelo, yCotovelo] = arcAnchor(angulos, arco.y1 + COMPRIMENTO_DO_CONECTOR);\n const paraDireita = xCotovelo >= 0;\n const xFim = xCotovelo + (paraDireita ? COMPRIMENTO_DO_CONECTOR : -COMPRIMENTO_DO_CONECTOR);\n\n return (\n <g className={styles.leader} key={indice}>\n <polyline\n className={styles.connector}\n points={`${xBorda},${yBorda} ${xCotovelo},${yCotovelo} ${xFim},${yCotovelo}`}\n />\n <text\n className={styles.label}\n dominantBaseline=\"middle\"\n textAnchor={paraDireita ? 'start' : 'end'}\n x={xFim + (paraDireita ? CHART_LABEL_OFFSET : -CHART_LABEL_OFFSET)}\n y={yCotovelo}\n >\n {truncateToWidth(arco.data.label, font, larguraDoRotulo)}\n </text>\n </g>\n );\n })}\n </ChartFrame>\n );\n}\n"],"names":["ANGULO_MINIMO_DO_ROTULO","COMPRIMENTO_DO_CONECTOR","rotulosPorNivel","nodes","nivel","por","no","_a","tomDoNivel","cor","profundidade","clareamento","ChartSunburst","accent","defaultHiddenGroups","emptyMessage","formatPercent","fracao","formatValue","formatarNumero","height","hiddenGroups","legend","legendAlign","onHiddenGroupsChange","ringGap","showLabels","sliceRadius","title","font","alturaMedida","raioDoCanto","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","isHidden","toggle","useSeriesToggle","emFoco","setEmFoco","useState","coresDeNivelZero","useMemo","resolveSeriesColors","visiveis","grupo","rotulosExternos","niveis","externo","larguraDoRotulo","widestLabel","CHART_LABEL_BAND","banda","CHART_LABEL_OFFSET","raio","ringDiameter","arcos","arvore","hierarchy","a","b","partition","VOLTA","profundidadeMaxima","maior","arco","total","soma","foco","aceso","corDe","raizDoRamo","ancestral","base","descreverArco","jsxs","ChartFrame","indice","jsx","styles","arcPath","angulos","xBorda","yBorda","arcAnchor","xCotovelo","yCotovelo","paraDireita","xFim","truncateToWidth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartSunburst.js","sources":["../../../../src/components/charts/ChartSunburst/ChartSunburst.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { hierarchy, partition, type HierarchyRectangularNode } from 'd3-hierarchy';\nimport {\n CHART_LABEL_BAND,\n CHART_LABEL_OFFSET,\n ChartFrame,\n VOLTA,\n arcAnchor,\n arcPath,\n hoverPath,\n pathTooltip,\n chartHeight,\n ringDiameter,\n truncateToWidth,\n useChartMetrics,\n useSeriesToggle,\n widestLabel,\n type ChartHeight,\n type ChartHoveredNode,\n type ChartLegendAlign,\n type ChartLegendPosition,\n} from '../core';\nimport { resolveSeriesColors, type SeriesAppearance } from '../palette';\nimport { formatarNumero } from '../../../utils/formatters';\nimport styles from './ChartSunburst.module.css';\n\nexport interface ChartSunburstNode extends SeriesAppearance {\n children?: readonly ChartSunburstNode[];\n label: string;\n value?: number;\n}\n\nexport interface ChartSunburstProps {\n accent?: string;\n defaultHiddenGroups?: readonly string[];\n emptyMessage?: string;\n formatPercent?: (ratio: number) => string;\n /** Formato dos valores no balao. Sem ele, vale o `formatValue`: o eixo pode sair compacto e o balao, exato. */\n formatTooltipValue?: (value: number) => string;\n formatValue?: (value: number) => string;\n height?: ChartHeight;\n hiddenGroups?: readonly string[];\n legend?: ChartLegendPosition;\n legendAlign?: ChartLegendAlign;\n nodes: readonly ChartSunburstNode[];\n onHiddenGroupsChange?: (hidden: readonly string[]) => void;\n /** Caminho ate o no sob o ponteiro, do grupo ao no, cada nivel com o valor somado, ou `null` ao sair. */\n onHoverNode?: (path: readonly ChartHoveredNode[] | null) => void;\n /** Folga entre dois aneis vizinhos. */\n ringGap?: number;\n /** Raio das pontas de cada arco. Sem valor, o token de raio pequeno. */\n sliceRadius?: number;\n showLabels?: boolean;\n /**\n * Balao com o caminho ate o no sob o ponteiro. Desligue para montar o proprio `ChartTooltip`\n * pela costura; sem balao nem costura, o no volta a ter o `<title>`.\n */\n showTooltip?: boolean;\n title: string;\n}\n\ntype Arco = HierarchyRectangularNode<ChartSunburstNode>;\n\n/** Arco menor que isso nao comporta rotulo nem conector legivel. */\nconst ANGULO_MINIMO_DO_ROTULO = 0.18;\nconst COMPRIMENTO_DO_CONECTOR = 14;\n/**\n * Rotulos de cada nivel da arvore declarada. Medir a banda antes de montar o\n * anel exige saber os rotulos antes, e o nivel mais profundo declarado e o\n * mesmo que o anel externo tera.\n */\nfunction rotulosPorNivel(\n nodes: readonly ChartSunburstNode[],\n nivel = 1,\n por = new Map<number, string[]>(),\n) {\n nodes.forEach((no) => {\n por.set(nivel, [...(por.get(nivel) ?? []), no.label]);\n\n if (no.children?.length) {\n rotulosPorNivel(no.children, nivel + 1, por);\n }\n });\n\n return por;\n}\n\n/**\n * Cada anel clareia sobre o anterior, e o filho nasce da cor do pai. Sem isso a\n * hierarquia sumiria: os aneis externos repetiriam a cor do nivel zero e nada\n * distinguiria um filho do outro.\n */\nfunction tomDoNivel(cor: string, profundidade: number) {\n if (profundidade <= 1) {\n return cor;\n }\n\n const clareamento = Math.min((profundidade - 1) * 22, 66);\n\n return `color-mix(in oklab, ${cor} ${100 - clareamento}%, var(--pl-color-surface))`;\n}\n\nexport function ChartSunburst({\n accent,\n defaultHiddenGroups,\n emptyMessage = 'Sem dados no período',\n formatPercent = (fracao) => `${Math.round(fracao * 100)}%`,\n formatTooltipValue,\n formatValue = formatarNumero,\n height = 320,\n hiddenGroups,\n legend = 'bottom',\n legendAlign,\n nodes,\n onHiddenGroupsChange,\n onHoverNode,\n ringGap = 2,\n showLabels = true,\n showTooltip = true,\n sliceRadius,\n title,\n}: ChartSunburstProps) {\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: defaultHiddenGroups,\n hiddenSeries: hiddenGroups,\n onHiddenSeriesChange: onHiddenGroupsChange,\n });\n const [emFoco, setEmFoco] = useState<Arco | null>(null);\n\n // A cor sai da lista inteira, e nao das visiveis: desligar um grupo nao pode\n // repintar os demais.\n const coresDeNivelZero = useMemo(() => resolveSeriesColors(nodes, { accent }), [accent, nodes]);\n\n const visiveis = useMemo(\n () => nodes.filter((grupo) => !isHidden(grupo.label)),\n [isHidden, nodes],\n );\n\n // A banda dos rotulos e reservada antes do anel, medida pelo rotulo mais\n // largo do anel externo. Sem reservar, o rotulo era desenhado no que sobrasse\n // — quase nada nas laterais — e acabava cortado ate sumir.\n const rotulosExternos = useMemo(() => {\n const niveis = rotulosPorNivel(visiveis);\n const externo = Math.max(0, ...niveis.keys());\n\n return niveis.get(externo) ?? [];\n }, [visiveis]);\n\n const larguraDoRotulo = showLabels\n ? Math.min(widestLabel(rotulosExternos, font), width * CHART_LABEL_BAND)\n : 0;\n const banda = showLabels ? COMPRIMENTO_DO_CONECTOR * 2 + CHART_LABEL_OFFSET + larguraDoRotulo : 0;\n\n const diametro = ringDiameter(Math.max(width - banda * 2, 0), alturaDoDesenho);\n const raio = diametro / 2;\n\n const arcos = useMemo(() => {\n if (raio <= 0) {\n return [];\n }\n\n const arvore = hierarchy<ChartSunburstNode>({ children: visiveis, label: '' })\n .sum((no) => Math.max(no.value ?? 0, 0))\n .sort((a, b) => (b.value ?? 0) - (a.value ?? 0));\n\n const repartir = partition<ChartSunburstNode>().size([VOLTA, raio]);\n\n return repartir(arvore)\n .descendants()\n .filter((no) => no.depth > 0);\n }, [raio, visiveis]);\n\n const profundidadeMaxima = arcos.reduce((maior, arco) => Math.max(maior, arco.depth), 0);\n const total = arcos\n .filter((arco) => arco.depth === 1)\n .reduce((soma, arco) => soma + (arco.value ?? 0), 0);\n\n // O arco guardado deixa de existir quando a arvore e remontada, num\n // redimensionamento por exemplo. Sem conferir, o foco perdido apagaria tudo.\n const foco = emFoco && arcos.includes(emFoco) ? emFoco : null;\n\n /**\n * Acende o arco sob o ponteiro e os que o originaram. O caminho ate a raiz e\n * o que explica de onde aquela fatia veio; os filhos dela nao explicam nada\n * sobre ela, entao ficam apagados junto com o resto.\n */\n function aceso(arco: Arco) {\n return foco === null || foco.ancestors().includes(arco);\n }\n\n function focar(arco: Arco | null) {\n setEmFoco(arco);\n onHoverNode?.(arco && hoverPath(arco));\n }\n\n function corDe(arco: Arco) {\n const raizDoRamo = arco.ancestors().find((ancestral) => ancestral.depth === 1)?.data;\n const base =\n raizDoRamo?.color ?? coresDeNivelZero[nodes.findIndex((no) => no.label === raizDoRamo?.label)];\n\n return tomDoNivel(base ?? 'var(--pl-chart-neutral)', arco.depth);\n }\n\n function descreverArco(arco: Arco) {\n const fracao = total > 0 ? (arco.value ?? 0) / total : 0;\n\n return `${arco.data.label}: ${formatValue(arco.value ?? 0)} (${formatPercent(fracao)})`;\n }\n\n return (\n <ChartFrame\n centerOrigin\n containerRef={ref}\n empty={nodes.length === 0}\n emptyMessage={emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legend={nodes.map((grupo, indice) => ({\n color: coresDeNivelZero[indice],\n hidden: isHidden(grupo.label),\n label: grupo.label,\n }))}\n legendAlign={legendAlign}\n legendPosition={legend}\n onToggleSeries={toggle}\n swatch=\"dot\"\n title={title}\n tooltip={\n showTooltip\n ? pathTooltip({\n color: foco ? corDe(foco) : undefined,\n format: formatTooltipValue ?? formatValue,\n formatPercent,\n path: foco && hoverPath(foco),\n total,\n })\n : undefined\n }\n width={width}\n >\n {arcos.map((arco, indice) => (\n <path\n aria-label={descreverArco(arco)}\n className={`${styles.arc} ${aceso(arco) ? '' : styles.arcDim}`}\n d={arcPath({\n cornerRadius: sliceRadius ?? raioDoCanto,\n endAngle: arco.x1,\n innerRadius: arco.y0 + (arco.depth > 1 ? ringGap : 0),\n outerRadius: arco.y1,\n startAngle: arco.x0,\n })}\n fill={corDe(arco)}\n key={indice}\n onMouseEnter={() => focar(arco)}\n onMouseLeave={() => focar(null)}\n >\n {!showTooltip && !onHoverNode && <title>{descreverArco(arco)}</title>}\n </path>\n ))}\n\n {showLabels &&\n arcos\n .filter(\n (arco) => arco.depth === profundidadeMaxima && arco.x1 - arco.x0 >= ANGULO_MINIMO_DO_ROTULO,\n )\n .map((arco, indice) => {\n const angulos = { endAngle: arco.x1, startAngle: arco.x0 };\n const [xBorda, yBorda] = arcAnchor(angulos, arco.y1);\n const [xCotovelo, yCotovelo] = arcAnchor(angulos, arco.y1 + COMPRIMENTO_DO_CONECTOR);\n const paraDireita = xCotovelo >= 0;\n const xFim = xCotovelo + (paraDireita ? COMPRIMENTO_DO_CONECTOR : -COMPRIMENTO_DO_CONECTOR);\n\n return (\n <g className={styles.leader} key={indice}>\n <polyline\n className={styles.connector}\n points={`${xBorda},${yBorda} ${xCotovelo},${yCotovelo} ${xFim},${yCotovelo}`}\n />\n <text\n className={styles.label}\n dominantBaseline=\"middle\"\n textAnchor={paraDireita ? 'start' : 'end'}\n x={xFim + (paraDireita ? CHART_LABEL_OFFSET : -CHART_LABEL_OFFSET)}\n y={yCotovelo}\n >\n {truncateToWidth(arco.data.label, font, larguraDoRotulo)}\n </text>\n </g>\n );\n })}\n </ChartFrame>\n );\n}\n"],"names":["ANGULO_MINIMO_DO_ROTULO","COMPRIMENTO_DO_CONECTOR","rotulosPorNivel","nodes","nivel","por","no","_a","tomDoNivel","cor","profundidade","clareamento","ChartSunburst","accent","defaultHiddenGroups","emptyMessage","formatPercent","fracao","formatTooltipValue","formatValue","formatarNumero","height","hiddenGroups","legend","legendAlign","onHiddenGroupsChange","onHoverNode","ringGap","showLabels","showTooltip","sliceRadius","title","font","alturaMedida","raioDoCanto","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","isHidden","toggle","useSeriesToggle","emFoco","setEmFoco","useState","coresDeNivelZero","useMemo","resolveSeriesColors","visiveis","grupo","rotulosExternos","niveis","externo","larguraDoRotulo","widestLabel","CHART_LABEL_BAND","banda","CHART_LABEL_OFFSET","raio","ringDiameter","arcos","arvore","hierarchy","a","b","partition","VOLTA","profundidadeMaxima","maior","arco","total","soma","foco","aceso","focar","hoverPath","corDe","raizDoRamo","ancestral","base","descreverArco","jsxs","ChartFrame","indice","pathTooltip","jsx","styles","arcPath","angulos","xBorda","yBorda","arcAnchor","xCotovelo","yCotovelo","paraDireita","xFim","truncateToWidth"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),G=require("d3-array"),T=require("react"),ss=require("../../../utils/formatters/formatarDuracao.cjs"),ns=require("./ChartTimelineTable.cjs"),E=require("./timelineLayout.cjs"),_=require("./timelineTime.cjs"),rs=require("./timelineTooltip.cjs"),r=require("./ChartTimeline.module.css.cjs"),xt=require("../core/useChartMetrics.cjs"),pt=require("../core/useSeriesToggle.cjs"),Ie=require("../palette/seriesColor.cjs"),os=require("../scales/scales.cjs"),Q=require("../core/measureText.cjs"),as=require("../core/Grid.cjs"),mt=require("../core/spacing.cjs"),ls=require("../ChartTooltip/ChartTooltip.cjs"),is=require("../core/ChartLegend.cjs"),cs=require("../../actions/Button/Button.cjs"),ds=require("../../feedback/EmptyState/EmptyState.cjs"),Nt=require("../../icons/icons.cjs"),wt=require("../core/shapes.cjs"),yt=require("../../../utils/formatters/formatarNumero.cjs"),us={sm:{bar:14,row:26},md:{bar:20,row:36}},hs=40,fs=32,gs=3,xs=28,Z=6,ps=24,ms=6,ws=20,J=6,ue=4,ys=10,bs=14,vs=200,bt=10,js=22,Ns=12;function vt(h,g,m,y=!0){const x=h?0:m,p=g||!y?0:m;return[x,p,p,x]}function jt({clippedEnd:h,clippedStart:g}){return g&&h?"começa antes e continua depois do eixo":g?"começa antes do eixo":h?"continua depois do eixo":void 0}function Ts({height:h,width:g,x:m,y},x){const p=x==="end"?m+g-3:m+3,u=x==="end"?p-4:p+4;return`M${u},${y+3}L${p},${y+h/2}L${u},${y+h-3}`}function Ms(h,g,m,y){if(y!=="hidden"){if(Q.measureLabel(h,m)+bt<=g)return h;if(!(y==="auto"||g<js))return Q.truncateToWidth(h,m,g-bt)||void 0}}function $s(h){return`repeating-linear-gradient(45deg, ${h} 0 1.5px, var(--pl-color-surface-muted) 1.5px 4px)`}function ks({accent:h,axisPosition:g="top",bands:m,collapsedGroups:y,collapsibleGroups:x=!0,compactSummary:p="below",defaultCollapsedGroups:u,defaultHiddenSeries:B,density:ee="md",domain:te,emptyMessage:Tt="Sem dados no período",emptyRowLabel:he="Sem registro",formatTick:Mt,formatTime:Ee,formatTooltipValue:$t,formatValue:se=ss.formatarDuracao,groups:_e=[],hiddenSeries:kt,highlightOnHover:Lt=!1,legend:ne="top",legendAlign:St="left",markers:Ae,mergeConsecutive:Ce=!0,minPlotWidth:De=360,onCollapsedGroupsChange:Ot,onHiddenSeriesChange:Rt,onSegmentClick:A,overlap:qe="stack",referenceLines:He=[],rowBands:Pe,rowGap:Fe=4,rowLabelWidth:fe="auto",rowSummary:ge,rows:xe,segmentLabel:Bt="duration",segmentLabelAlign:pe="center",segments:Ue,series:C,showGrid:It=!0,showProgress:K=!0,showSegmentLabels:Et="auto",showTooltip:_t=!0,states:D,statesEnd:re,timeScale:b="calendar",title:me,xAxis:we="visible"}){var gt;const Ge=T.useId(),Ke=T.useId(),We=T.useId().replace(/[^\w-]/g,""),q=xt.useChartMetrics(),oe=xt.useChartMetrics(),ye=pt.useSeriesToggle({defaultHiddenSeries:B,hiddenSeries:kt,onHiddenSeriesChange:Rt}),Ye=pt.useSeriesToggle({defaultHiddenSeries:u,hiddenSeries:y,onHiddenSeriesChange:Ot}),[W,L]=T.useState(null),[At,ze]=T.useState(null),[Xe,be]=T.useState(null),[Ve,Ct]=T.useState(!1),ve=T.useRef(new Map),v=A!==void 0,je=T.useMemo(()=>Ie.resolveSeriesColors(C,{accent:h}),[h,C]),ae=new Map;C.forEach((e,s)=>{ae.has(e.label)||ae.set(e.label,je[s])});const I=e=>ae.get(e),le=e=>ae.has(e)&&!ye.isHidden(e),Dt=T.useMemo(()=>{const e=l=>_.toPosition(l,b),s=(Pe??[]).flatMap(l=>{const N=E.toRange(l.start,l.end,b);return N?[{...N,row:l.row,series:l.series}]:[]}),t=(Ae??[]).flatMap(l=>{const N=e(l.time);return Number.isFinite(N)?[{...l,position:N}]:[]}),o=D?[]:E.toTimelineSegments(Ue??[],b),i=D?[...D.map(l=>e(l.time)),...re===void 0?[]:[e(re)]]:o.flatMap(l=>[l.start,l.end]),a=te==null?void 0:te.map(e),c=a&&a[0]<a[1]?[a[0],a[1]]:_.autoDomain([...i,...s.flatMap(l=>[l.start,l.end]),...t.map(l=>l.position)],b),d=D?E.toTimelineSegments(E.statesToSegments(D,re??c[1],Ce,b),b):o;return{allMarkers:t,allRowBands:s,allSegments:d,range:c}},[te,Ae,Ce,Pe,Ue,D,re,b]),{allMarkers:Ne,allRowBands:Ze,allSegments:Je,range:M}=Dt,H=e=>_.durationMs(e.start,e.end,b),P=e=>{const s=b==="dayHours"&&e>24?e-24:e;return Ee?Ee(_.toDate(s,b)):_.formatPosition(s,b)},Te=Je.filter(e=>le(e.series)),Me=Ze.filter(e=>le(e.series)),Qe=Ne.filter(e=>le(e.series)),$e=(m??[]).flatMap(e=>{const s=E.toRange(e.start,e.end,b);return s&&le(e.series)?[{...e,...s}]:[]}),et=G.group(Te,e=>e.row),tt=new Set(Je.map(e=>e.row)),st=new Set([...tt,...Ze.map(e=>e.row),...Ne.map(e=>e.row)]),nt=xe.length===0||st.size===0,rt=q.width>0&&q.width<De+vs,ie=ge?rt?p:"right":"none",$=us[ee],F=ie==="below"?Math.max($.row,hs):$.row,ke=$.bar+gs,{height:qt,items:U}=E.layoutTimeline({groupHeight:xs,groups:_e,isCollapsed:x?Ye.isHidden:()=>!1,laneStep:ke,overlap:qe,rowGap:Fe,rowHeight:F,rows:xe,segments:Te}),ot=e=>[...et.get(e.key)??[]].sort((s,t)=>s.start-t.start||s.end-t.end),at=E.rowsInDisplayOrder(xe,_e),Le=new Map(ge?at.map(e=>[e.key,ge(e,ot(e).map(s=>s.source))]):[]),Se=we==="hidden"?0:ps,Y=g==="top",z=Y?Se:0,Ht=He.length>0||$e.some(e=>e.label),k=z+(Ht?ws:ms),X=k+qt,lt=X+J+(Y?0:Se),S=Math.max(oe.width,De),w=os.linearScale({domain:{max:M[1],min:M[0]},nice:!1,range:[ys,S-bs]}),j=w(M[0]),O=w(M[1]),it=_.timeTicks(M,b,O-j,Mt),ce=q.font,Oe=q.radius;function Pt(e,s,t){const o=w(e.start),i=w(e.end),a=Math.max(o,j),c=Math.min(i,O);if(c<=a)return;const d=c-a>4?1:0;return{clippedEnd:i>O+.5,clippedStart:o<j-.5,height:$.bar,row:s,segment:e,width:Math.max(c-a-d*2,2),x:a+d,y:t+(F-$.bar)/2+e.lane*ke}}const ct=new Map(U.flatMap(e=>e.kind==="row"?[[e.row.key,e.segments.flatMap(s=>Pt(s,e.row,k+e.y)??[])]]:[])),V=[...ct.values()].filter(e=>e.length>0),Re=V.flat(),Ft=Re.some(e=>e.segment.id===Xe)?Xe:(gt=Re[0])==null?void 0:gt.segment.id,R=Re.find(e=>e.segment.id===At),dt=Lt?(W==null?void 0:W.kind)==="segment"?W.segment.series:R==null?void 0:R.segment.series:void 0;function Ut(e){var s;e&&(be(e.segment.id),(s=ve.current.get(e.segment.id))==null||s.focus())}function Gt(e,s){const t=V.findIndex(d=>d.includes(s)),o=V[t],i=o.indexOf(s);if(e.key==="Enter"||e.key===" "){e.preventDefault(),A==null||A(s.segment.source,s.row);return}const a=d=>d&&G.least(d,l=>Math.abs(l.segment.start-s.segment.start)),c={ArrowDown:a(V[t+1]),ArrowLeft:o[i-1],ArrowRight:o[i+1],ArrowUp:a(V[t-1]),End:o.at(-1),Home:o[0]};e.key in c&&(e.preventDefault(),Ut(c[e.key]))}const Kt=e=>{const{row:s,segment:t}=e;return[s.label,t.series,t.label!==t.series?t.label:void 0,`${P(t.start)} a ${P(t.end)}`,se(H(t)),K&&t.progress!==void 0?`${yt.formatarPercentual(t.progress)} concluído`:void 0,jt(e)].filter(Boolean).join(", ")};function Wt(e){const{segment:s}=e,t=s.id,o=I(s.series)??"currentColor",i=Ie.textColorOn(o),a=K?s.progress:void 0,c=Ms(Bt==="label"?s.label??s.series:se(H(s)),e.width,ce,Et),d={center:"middle",end:"end",start:"start"},l=pe==="start"?e.x+5:pe==="end"?e.x+e.width-5:e.x+e.width/2,N=a===void 0||(l-e.x)/e.width<=a;return n.jsxs("g",{"aria-label":Kt(e),className:`${r.default.segment} ${v?r.default.clickable:""} ${dt!==void 0&&dt!==s.series?r.default.dimmed:""}`,onBlur:v?()=>ze(null):void 0,onClick:A?()=>{be(t),A(s.source,e.row)}:void 0,onFocus:v?()=>{ze(t),be(t)}:void 0,onKeyDown:v?f=>Gt(f,e):void 0,onMouseEnter:()=>L({clip:jt(e),kind:"segment",row:e.row,segment:s}),onMouseLeave:()=>L(null),ref:v?f=>{f?ve.current.set(t,f):ve.current.delete(t)}:void 0,role:v?"button":void 0,tabIndex:v?t===Ft?0:-1:void 0,children:[n.jsx("path",{className:qe==="overlay"?r.default.barOverlay:void 0,d:wt.roundedBarPath(e.x,e.y,e.width,e.height,vt(e.clippedStart,e.clippedEnd,Oe)),fill:o,fillOpacity:a===void 0?void 0:.3}),a!==void 0&&a>0&&n.jsx("path",{d:wt.roundedBarPath(e.x,e.y,Math.max(e.width*a,2),e.height,vt(e.clippedStart,e.clippedEnd,Oe,a>=1)),fill:o}),e.width>=Ns&&["start","end"].filter(f=>f==="start"?e.clippedStart:e.clippedEnd).map(f=>n.jsx("path",{className:r.default.clipMark,d:Ts(e,f),stroke:i},f)),c!==void 0&&n.jsx("text",{className:r.default.segmentLabel,dominantBaseline:"central",fill:N?i:"var(--pl-color-text)",textAnchor:d[pe],x:l,y:e.y+e.height/2,children:c})]},t)}function Yt(e){const s=k+e.y,{row:t}=e,o=s+(F-$.bar)/2-ue,i=$.bar+(e.laneCount-1)*ke+ue*2;return n.jsxs("g",{"aria-hidden":"true",children:[n.jsx("rect",{className:r.default.track,height:i,rx:ue,width:O-j,x:j,y:o}),Me.filter(a=>a.row===t.key).map((a,c)=>{const d=Math.max(w(a.start),j),l=Math.min(w(a.end),O);return l>d?n.jsx("rect",{fill:I(a.series),height:i,rx:ue,width:l-d,x:d,y:o},c):null}),!st.has(t.key)&&n.jsx("text",{className:r.default.emptyRowText,dominantBaseline:"central",x:j+8,y:s+F/2,children:he}),n.jsx("rect",{className:r.default.hoverArea,height:e.height,onMouseEnter:()=>L({empty:!tt.has(t.key),kind:"row",row:t,rowBands:Me.filter(a=>a.row===t.key),segments:et.get(t.key)??[]}),onMouseLeave:()=>L(null),width:S,x:0,y:s})]},t.key)}function zt(e,{height:s,row:t,y:o}){if(e.position<M[0]||e.position>M[1])return null;const i=I(e.series),a=k+o,c=w(e.position),d=a+F/2,l=e.shape??"line";return n.jsxs("g",{children:[l==="line"&&n.jsx("rect",{className:r.default.marker,fill:i,height:$.bar+6,rx:1,width:2,x:c-1,y:d-$.bar/2-3}),l==="dot"&&n.jsx("circle",{className:r.default.marker,cx:c,cy:d,fill:i,r:4}),l==="diamond"&&n.jsx("path",{className:r.default.marker,d:`M${c},${d-6}L${c+6},${d}L${c},${d+6}L${c-6},${d}Z`,fill:i}),n.jsx("rect",{className:r.default.hoverArea,height:s,onMouseEnter:()=>L({kind:"marker",marker:e,row:t}),onMouseLeave:()=>L(null),width:10,x:c-5,y:a})]},`${t.key}-${Ne.indexOf(e)}`)}function Xt(e){const s=k+e.y,t=s+e.height/2-Z/2,o=e.segments.length>0,i=o?Math.max(w(G.min(e.segments,f=>f.start)??0),j):0,a=o?Math.min(w(G.max(e.segments,f=>f.end)??0),O):0,c=e.segments.filter(f=>f.progress!==void 0),d=G.sum(c,H),l=G.sum(c,f=>H(f)*(f.progress??0)),N=Math.max(a-i,2);return n.jsxs("g",{"aria-hidden":"true",children:[o&&a>i&&n.jsxs("g",{className:r.default.passThrough,children:[n.jsx("rect",{className:r.default.groupBar,height:Z,rx:Z/2,width:N,x:i,y:t}),K&&l>0&&d>0&&n.jsx("rect",{className:r.default.groupProgress,height:Z,rx:Z/2,width:Math.max(N*l/d,2),x:i,y:t})]}),n.jsx("rect",{className:r.default.hoverArea,height:e.height,onMouseEnter:()=>L({collapsed:e.collapsed,group:e.group,kind:"group",rowCount:e.rows.length,segments:e.segments}),onMouseLeave:()=>L(null),width:S,x:0,y:s})]},`group-${e.group.key}`)}const Vt=(e,s)=>{const t=Q.measureLabel(s,ce)/2;return e-t<0?"start":e+t>S?"end":"middle"},de=Y?Se-.5:X+J+.5,ut=n.jsxs("svg",{"aria-describedby":v?Ke:void 0,"aria-labelledby":Ge,className:r.default.canvas,height:lt,role:v?"group":"img",viewBox:`0 0 ${S} ${lt}`,width:S,children:[n.jsx("defs",{children:$e.map((e,s)=>n.jsx("pattern",{height:6,id:`${We}-${s}`,patternTransform:"rotate(45)",patternUnits:"userSpaceOnUse",width:6,children:n.jsx("line",{className:r.default.hatchLine,stroke:I(e.series),x1:0,x2:0,y1:0,y2:6})},s))}),U.map(e=>e.kind==="row"?Yt(e):null),n.jsx("g",{"aria-hidden":"true",className:r.default.passThrough,children:$e.map((e,s)=>{const t=Math.max(w(e.start),j),o=Math.min(w(e.end),O);return o<=t?null:n.jsxs("g",{children:[n.jsx("rect",{fill:`url(#${We}-${s})`,height:X+J-z,width:o-t,x:t,y:z}),e.label&&Q.measureLabel(e.label,ce)+8<=o-t&&n.jsx("text",{className:r.default.bandLabel,x:t+4,y:k-7,children:e.label})]},s)})}),It&&n.jsx("g",{className:r.default.passThrough,transform:`translate(0 ${z})`,children:n.jsx(as.Grid,{length:X+J-z,lines:it.map(e=>Math.round(w(e.position))+.5),orientation:"vertical"})}),U.map(e=>e.kind==="group"?Xt(e):null),n.jsx("g",{children:[...ct.values()].flat().map(Wt)}),n.jsx("g",{"aria-hidden":"true",children:U.flatMap(e=>e.kind==="row"?Qe.filter(s=>s.row===e.row.key).map(s=>zt(s,e)):[])}),n.jsx("g",{"aria-hidden":"true",className:r.default.passThrough,children:He.map((e,s)=>{const t=_.toPosition(e.time,b);if(!(t>=M[0]&&t<=M[1]))return null;const o=Math.round(w(t))+.5,i=o+4+Q.measureLabel(e.label,ce)<=S-2,a=e.intent?Ie.INTENT_TOKENS[e.intent]:"var(--pl-color-text-secondary)";return n.jsxs("g",{children:[n.jsx("line",{className:r.default.referenceLine,stroke:a,x1:o,x2:o,y1:k-16,y2:X+J}),n.jsx("text",{className:r.default.referenceLabel,textAnchor:i?"start":"end",x:i?o+4:o-4,y:k-7,children:e.label})]},s)})}),we!=="hidden"&&n.jsxs("g",{"aria-hidden":"true",className:`${r.default.passThrough} ${we==="onHover"?r.default.axisOnHover:""}`,children:[n.jsx("line",{className:r.default.axisLine,x1:j,x2:O,y1:de,y2:de}),it.map(e=>n.jsx("text",{className:r.default.axisLabel,dominantBaseline:Y?"auto":"hanging",textAnchor:Vt(w(e.position),e.label),x:w(e.position),y:Y?de-mt.CHART_LABEL_OFFSET:de+mt.CHART_LABEL_OFFSET,children:e.label},e.position))]}),R&&n.jsx("rect",{"aria-hidden":"true",className:r.default.focusRing,height:R.height+6,rx:Oe,width:R.width+6,x:R.x-3,y:R.y-3})]}),Zt=rs.timelineTooltip(W,{colorOf:I,duration:H,emptyRowLabel:he,formatDuration:$t??se,formatInstant:P,seriesOrder:C.map(e=>e.label),showProgress:K}),Be=S>oe.width+1,Jt=fe!=="auto"?r.default.labelsFixed:rt?ie==="below"?r.default.labelsCompactWithSummary:r.default.labelsCompact:"",ht={gap:Fe,paddingTop:k},Qt=n.jsxs("div",{className:r.default.body,children:[n.jsx(Ls,{className:Jt,collapsibleGroups:x,items:U,onToggleGroup:Ye.toggle,style:{...ht,width:fe==="auto"?void 0:fe},summaries:ie==="below"?Le:void 0}),n.jsx("div",{"aria-label":Be&&!v?`${me}, área rolável de lado`:void 0,className:r.default.scroll,ref:oe.ref,role:Be&&!v?"region":void 0,tabIndex:Be&&!v?0:void 0,children:oe.width>0&&(_t?n.jsx(ls.ChartTooltip,{...Zt,children:ut}):ut)}),ie==="right"&&n.jsx(Ss,{inline:F<fs,items:U,style:ht,summaries:Le})]});function es(){const e=(s,t,o,i)=>({color:I(s)??"transparent",duration:se(H(o)),end:P(o.end),name:t,progress:i===void 0?void 0:yt.formatarPercentual(i),start:P(o.start)});return at.map(s=>({description:s.description,entries:[...Me.filter(t=>t.row===s.key).map(t=>e(t.series,`${t.series} (referência)`,t)),...ot(s).map(t=>e(t.series,t.label&&t.label!==t.series?`${t.series}: ${t.label}`:t.series,t,t.progress)),...Qe.filter(t=>t.row===s.key).map(t=>({color:I(t.series)??"transparent",duration:"instante",end:"—",name:t.label?`${t.series}: ${t.label}`:t.series,start:P(t.position)}))],key:s.key,label:s.label,summary:Le.get(s.key)}))}const ts=new Set((m??[]).map(e=>e.series)),ft=ne!=="none"&&C.length>=2&&n.jsx(is.ChartLegend,{align:St,entries:C.map((e,s)=>({color:ts.has(e.label)?$s(je[s]):je[s],hidden:ye.isHidden(e.label),label:e.label})),onToggle:ye.toggle,position:ne});return n.jsxs("figure",{className:r.default.figure,children:[n.jsxs("figcaption",{className:r.default.header,children:[n.jsx("span",{className:r.default.title,id:Ge,children:me}),!nt&&n.jsx(cs.Button,{"aria-pressed":Ve,onClick:()=>Ct(e=>!e),size:"sm",variant:"secondary",children:"Ver como tabela"})]}),v&&n.jsx("span",{className:r.default.visuallyHidden,id:Ke,children:"Use as setas para percorrer os intervalos."}),ne==="top"&&ft,n.jsx("div",{className:r.default.plot,ref:q.ref,children:nt?n.jsx("div",{className:r.default.empty,children:n.jsx(ds.EmptyState,{icon:n.jsx(Nt.IconChartBar,{}),size:"sm",title:Tt})}):q.width===0?null:Ve?n.jsx(ns.ChartTimelineTable,{emptyRowLabel:he,rows:es(),showProgress:K&&Te.some(e=>e.progress!==void 0),title:me}):Qt}),ne==="bottom"&&ft]})}function Ls({className:h,collapsibleGroups:g,items:m,onToggleGroup:y,style:x,summaries:p}){return n.jsx("div",{className:`${r.default.labels} ${h}`,style:x,children:m.map(u=>{if(u.kind==="group"){const ee=n.jsxs(n.Fragment,{children:[g&&n.jsx(Nt.IconChevronDown,{className:`${r.default.chevron} ${u.collapsed?r.default.chevronCollapsed:""}`}),n.jsx("span",{className:r.default.groupName,children:u.group.label}),n.jsxs("span",{className:r.default.groupCount,children:["(",u.rows.length,")"]})]});return n.jsx("div",{className:r.default.groupLabel,style:{height:u.height},children:g?n.jsx("button",{"aria-expanded":!u.collapsed,className:r.default.groupButton,onClick:()=>y(u.group.key),type:"button",children:ee}):n.jsx("span",{className:r.default.groupText,children:ee})},`group-${u.group.key}`)}const B=p==null?void 0:p.get(u.row.key);return n.jsxs("div",{className:`${r.default.rowLabel} ${u.child?r.default.childLabel:""}`,style:{height:u.height},children:[n.jsxs("span",{className:r.default.labelLine,children:[n.jsx("span",{className:r.default.labelText,title:u.row.label,children:u.row.label})," ",u.row.description&&n.jsx("span",{className:r.default.labelDescription,children:u.row.description})]}),B&&n.jsx("span",{className:r.default.labelSummary,children:B.subtitle?`${B.title} · ${B.subtitle}`:B.title})]},u.row.key)})})}function Ss({inline:h,items:g,style:m,summaries:y}){return n.jsx("div",{className:r.default.summary,style:m,children:g.map(x=>{const p=x.kind==="row"?y.get(x.row.key):void 0;return n.jsx("div",{className:`${r.default.summaryItem} ${h?r.default.summaryInline:""}`,style:{height:x.height},children:p&&n.jsxs(n.Fragment,{children:[n.jsx("span",{className:r.default.summaryTitle,children:p.title}),p.subtitle&&n.jsx("span",{className:r.default.summarySubtitle,children:p.subtitle})]})},x.kind==="row"?x.row.key:`group-${x.group.key}`)})})}exports.ChartTimeline=ks;
|
|
2
|
+
//# sourceMappingURL=ChartTimeline.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartTimeline.cjs","sources":["../../../../src/components/charts/ChartTimeline/ChartTimeline.tsx"],"sourcesContent":["import { group as groupBy, least, max, min, sum } from 'd3-array';\nimport { useId, useMemo, useRef, useState, type CSSProperties, type KeyboardEvent } from 'react';\nimport { Button } from '../../actions/Button';\nimport { EmptyState } from '../../feedback/EmptyState';\nimport { IconChartBar, IconChevronDown } from '../../icons';\nimport { ChartTooltip } from '../ChartTooltip';\nimport {\n CHART_LABEL_OFFSET,\n ChartLegend,\n Grid,\n measureLabel,\n roundedBarPath,\n truncateToWidth,\n useChartMetrics,\n useSeriesToggle,\n type AxisVisibility,\n type ChartLegendAlign,\n type CornerRadii,\n type LabelFont,\n} from '../core';\nimport { INTENT_TOKENS, resolveSeriesColors, textColorOn, type SeriesAppearance, type SeriesIntent } from '../palette';\nimport { linearScale } from '../scales';\nimport { formatarPercentual } from '../../../utils/formatters';\nimport { formatarDuracao } from '../../../utils/formatters/formatarDuracao';\nimport { ChartTimelineTable, type TimelineTableEntry, type TimelineTableRow } from './ChartTimelineTable';\nimport {\n layoutTimeline,\n rowsInDisplayOrder,\n statesToSegments,\n toRange,\n toTimelineSegments,\n type PlacedSegment,\n type TimelineItem,\n type TimelineRange,\n} from './timelineLayout';\nimport { autoDomain, durationMs, formatPosition, timeTicks, toDate, toPosition } from './timelineTime';\nimport { timelineTooltip, type TimelineMarker, type TimelineRowBand, type TimelineTarget } from './timelineTooltip';\nimport styles from './ChartTimeline.module.css';\n\n/** Em `calendar`, `Date` ou milissegundos desde a epoca; em `dayHours`, `Date` pela hora do dia ou a hora decimal. */\nexport type ChartTimelineTime = Date | number;\nexport type ChartTimelineScale = 'calendar' | 'dayHours';\nexport type ChartTimelineOverlap = 'stack' | 'overlay';\nexport type ChartTimelineDensity = 'sm' | 'md';\nexport type ChartTimelineSegmentLabels = 'auto' | 'visible' | 'hidden';\nexport type ChartTimelineSegmentLabelContent = 'duration' | 'label';\nexport type ChartTimelineLabelAlign = 'start' | 'center' | 'end';\nexport type ChartTimelineMarkerShape = 'line' | 'dot' | 'diamond';\n\nexport interface ChartTimelineRow {\n description?: string;\n /** Chave do grupo a que a linha pertence. */\n group?: string;\n /** Identifica a linha; o `label` pode repetir. */\n key: string;\n label: string;\n}\n\nexport interface ChartTimelineGroup {\n key: string;\n label: string;\n}\n\nexport interface ChartTimelineSeries extends SeriesAppearance {\n label: string;\n}\n\nexport interface ChartTimelineSegment {\n end: ChartTimelineTime;\n /** Nome do intervalo, como a reuniao ou o responsavel. */\n label?: string;\n /** De 0 a 1. */\n progress?: number;\n /** `key` da linha. */\n row: string;\n /** `label` da serie. */\n series: string;\n start: ChartTimelineTime;\n}\n\nexport interface ChartTimelineState {\n row: string;\n /** `label` da serie. */\n state: string;\n time: ChartTimelineTime;\n}\n\nexport interface ChartTimelineRowBand {\n end: ChartTimelineTime;\n row: string;\n series: string;\n start: ChartTimelineTime;\n}\n\nexport interface ChartTimelineBand {\n end: ChartTimelineTime;\n label?: string;\n series: string;\n start: ChartTimelineTime;\n}\n\nexport interface ChartTimelineMarker {\n label?: string;\n row: string;\n series: string;\n shape?: ChartTimelineMarkerShape;\n time: ChartTimelineTime;\n}\n\nexport interface ChartTimelineReferenceLine {\n intent?: SeriesIntent;\n label: string;\n time: ChartTimelineTime;\n}\n\nexport interface ChartTimelineSummary {\n subtitle?: string;\n title: string;\n}\n\nexport interface ChartTimelineProps {\n /** Cor de tema que abre a paleta das séries sem cor nem intenção, como nos demais gráficos. */\n accent?: string;\n axisPosition?: 'top' | 'bottom';\n /** Faixas globais, hachuradas em todas as linhas, como o adicional noturno ou o fim de semana. */\n bands?: readonly ChartTimelineBand[];\n collapsedGroups?: readonly string[];\n collapsibleGroups?: boolean;\n /** Em largura estreita, o resumo vai para baixo do rotulo ou sai. */\n compactSummary?: 'below' | 'hidden';\n defaultCollapsedGroups?: readonly string[];\n defaultHiddenSeries?: readonly string[];\n density?: ChartTimelineDensity;\n /** Faixa fixa do eixo. Sem ela, do primeiro ao ultimo instante, arredondada a hora ou ao dia. */\n domain?: readonly [ChartTimelineTime, ChartTimelineTime];\n emptyMessage?: string;\n emptyRowLabel?: string;\n formatTick?: (time: Date) => string;\n formatTime?: (time: Date) => string;\n formatTooltipValue?: (durationMs: number) => string;\n /** Formato das duracoes no rotulo da barra, na descricao e na tabela. */\n formatValue?: (durationMs: number) => string;\n groups?: readonly ChartTimelineGroup[];\n hiddenSeries?: readonly string[];\n highlightOnHover?: boolean;\n legend?: 'top' | 'bottom' | 'none';\n legendAlign?: ChartLegendAlign;\n markers?: readonly ChartTimelineMarker[];\n mergeConsecutive?: boolean;\n /** Abaixo dessa largura, o desenho rola de lado dentro do conteiner, com rotulos e resumo fixos. */\n minPlotWidth?: number;\n onCollapsedGroupsChange?: (collapsed: readonly string[]) => void;\n onHiddenSeriesChange?: (hidden: readonly string[]) => void;\n /** Com ele, os intervalos viram botoes e entram no teclado. */\n onSegmentClick?: (segment: ChartTimelineSegment, row: ChartTimelineRow) => void;\n overlap?: ChartTimelineOverlap;\n referenceLines?: readonly ChartTimelineReferenceLine[];\n rowBands?: readonly ChartTimelineRowBand[];\n rowGap?: number;\n rowLabelWidth?: number | 'auto';\n /** Coluna de resumo, calculada sobre os intervalos visiveis da linha: a legenda filtra a leitura inteira. */\n rowSummary?: (row: ChartTimelineRow, segments: readonly ChartTimelineSegment[]) => ChartTimelineSummary | undefined;\n rows: readonly ChartTimelineRow[];\n segmentLabel?: ChartTimelineSegmentLabelContent;\n segmentLabelAlign?: ChartTimelineLabelAlign;\n segments?: readonly ChartTimelineSegment[];\n series: readonly ChartTimelineSeries[];\n showGrid?: boolean;\n showProgress?: boolean;\n showSegmentLabels?: ChartTimelineSegmentLabels;\n showTooltip?: boolean;\n /** Alternativa a `segments`: cada mudanca de estado vale ate a seguinte. */\n states?: readonly ChartTimelineState[];\n /** Fim do ultimo estado de cada linha, como o instante atual. Sem ele, o fim do eixo. */\n statesEnd?: ChartTimelineTime;\n timeScale?: ChartTimelineScale;\n title: string;\n xAxis?: AxisVisibility;\n}\n\nconst DENSITY: Record<ChartTimelineDensity, { bar: number; row: number }> = {\n sm: { bar: 14, row: 26 },\n md: { bar: 20, row: 36 },\n};\n\nconst ROW_WITH_SUMMARY_BELOW = 40;\n/** Abaixo dessa altura de linha, titulo e subtitulo do resumo dividem a mesma linha. */\nconst STACKED_SUMMARY_ROW = 32;\nconst LANE_GAP = 3;\nconst GROUP_HEIGHT = 28;\nconst GROUP_BAR = 6;\nconst AXIS_HEIGHT = 24;\nconst TOP_ROOM = 6;\nconst LABELED_TOP_ROOM = 20;\nconst BOTTOM_ROOM = 6;\nconst TRACK_PADDING = 4;\nconst PLOT_START = 10;\nconst PLOT_END = 14;\n/** O que rotulos e resumo ao lado pedem alem da largura minima do desenho; abaixo disso, o resumo muda de lugar. */\nconst SIDE_COLUMNS_ROOM = 200;\nconst LABEL_PADDING = 10;\nconst MIN_LABELED_BAR = 22;\nconst MIN_CLIP_MARK_BAR = 12;\n\ninterface SegmentShape {\n clippedEnd: boolean;\n clippedStart: boolean;\n height: number;\n row: ChartTimelineRow;\n segment: PlacedSegment;\n width: number;\n x: number;\n y: number;\n}\n\n/** O canto da ponta cortada fica reto: arredondado, o intervalo pareceria terminar ali. */\nfunction cornersOf(clippedStart: boolean, clippedEnd: boolean, radius: number, closedEnd = true): CornerRadii {\n const start = clippedStart ? 0 : radius;\n const end = clippedEnd || !closedEnd ? 0 : radius;\n\n return [start, end, end, start];\n}\n\nfunction clipNote({ clippedEnd, clippedStart }: SegmentShape) {\n if (clippedStart && clippedEnd) {\n return 'começa antes e continua depois do eixo';\n }\n\n if (clippedStart) {\n return 'começa antes do eixo';\n }\n\n return clippedEnd ? 'continua depois do eixo' : undefined;\n}\n\n/** Seta para fora na ponta cortada. */\nfunction clipMarkPath({ height, width, x, y }: SegmentShape, side: 'start' | 'end') {\n const tip = side === 'end' ? x + width - 3 : x + 3;\n const back = side === 'end' ? tip - 4 : tip + 4;\n\n return `M${back},${y + 3}L${tip},${y + height / 2}L${back},${y + height - 3}`;\n}\n\n/** Rotulo dentro da barra: `auto` so quando cabe inteiro; `visible` corta com reticencias o que nao cabe. */\nfunction fitLabel(text: string, width: number, font: LabelFont, mode: ChartTimelineSegmentLabels) {\n if (mode === 'hidden') {\n return undefined;\n }\n\n if (measureLabel(text, font) + LABEL_PADDING <= width) {\n return text;\n }\n\n if (mode === 'auto' || width < MIN_LABELED_BAR) {\n return undefined;\n }\n\n return truncateToWidth(text, font, width - LABEL_PADDING) || undefined;\n}\n\nfunction hatch(color: string) {\n return `repeating-linear-gradient(45deg, ${color} 0 1.5px, var(--pl-color-surface-muted) 1.5px 4px)`;\n}\n\n/**\n * Barras de intervalo em linhas sobre um eixo de tempo continuo: quem fez o que, de quando ate quando. O desenho e\n * imagem nomeada pelo titulo; com `onSegmentClick`, um grupo cujos intervalos sao botoes de tabulacao movel. A leitura\n * medida a medida esta na visao em tabela.\n */\nexport function ChartTimeline({\n accent,\n axisPosition = 'top',\n bands,\n collapsedGroups,\n collapsibleGroups = true,\n compactSummary = 'below',\n defaultCollapsedGroups,\n defaultHiddenSeries,\n density = 'md',\n domain,\n emptyMessage = 'Sem dados no período',\n emptyRowLabel = 'Sem registro',\n formatTick,\n formatTime,\n formatTooltipValue,\n formatValue = formatarDuracao,\n groups = [],\n hiddenSeries,\n highlightOnHover = false,\n legend = 'top',\n legendAlign = 'left',\n markers,\n mergeConsecutive = true,\n minPlotWidth = 360,\n onCollapsedGroupsChange,\n onHiddenSeriesChange,\n onSegmentClick,\n overlap = 'stack',\n referenceLines = [],\n rowBands,\n rowGap = 4,\n rowLabelWidth = 'auto',\n rowSummary,\n rows,\n segmentLabel = 'duration',\n segmentLabelAlign = 'center',\n segments,\n series,\n showGrid = true,\n showProgress = true,\n showSegmentLabels = 'auto',\n showTooltip = true,\n states,\n statesEnd,\n timeScale = 'calendar',\n title,\n xAxis = 'visible',\n}: ChartTimelineProps) {\n const titleId = useId();\n const hintId = useId();\n const patternPrefix = useId().replace(/[^\\w-]/g, '');\n const outer = useChartMetrics();\n const plot = useChartMetrics();\n const seriesToggle = useSeriesToggle({ defaultHiddenSeries, hiddenSeries, onHiddenSeriesChange });\n // Recolher grupo e o mesmo controle da legenda: estado proprio ou do produto, pela chave.\n const groupToggle = useSeriesToggle({\n defaultHiddenSeries: defaultCollapsedGroups,\n hiddenSeries: collapsedGroups,\n onHiddenSeriesChange: onCollapsedGroupsChange,\n });\n const [target, setTarget] = useState<TimelineTarget | null>(null);\n const [focusedId, setFocusedId] = useState<number | null>(null);\n const [tabStopId, setTabStopId] = useState<number | null>(null);\n const [tableView, setTableView] = useState(false);\n const segmentNodes = useRef(new Map<number, SVGGElement>());\n const interactive = onSegmentClick !== undefined;\n\n const colors = useMemo(() => resolveSeriesColors(series, { accent }), [accent, series]);\n const colorByLabel = new Map<string, string>();\n series.forEach((entry, index) => {\n // Rotulo repetido e a mesma serie, como na legenda dos demais graficos: vale a primeira cor.\n if (!colorByLabel.has(entry.label)) {\n colorByLabel.set(entry.label, colors[index]);\n }\n });\n const colorOf = (label: string) => colorByLabel.get(label);\n const isVisible = (label: string) => colorByLabel.has(label) && !seriesToggle.isHidden(label);\n\n const data = useMemo(() => {\n const position = (time: ChartTimelineTime) => toPosition(time, timeScale);\n const allRowBands = (rowBands ?? []).flatMap((band): TimelineRowBand[] => {\n const range = toRange(band.start, band.end, timeScale);\n return range ? [{ ...range, row: band.row, series: band.series }] : [];\n });\n const allMarkers = (markers ?? []).flatMap((marker): TimelineMarker[] => {\n const markerPosition = position(marker.time);\n return Number.isFinite(markerPosition) ? [{ ...marker, position: markerPosition }] : [];\n });\n const given = states ? [] : toTimelineSegments(segments ?? [], timeScale);\n const instants = states\n ? [...states.map((state) => position(state.time)), ...(statesEnd === undefined ? [] : [position(statesEnd)])]\n : given.flatMap((segment) => [segment.start, segment.end]);\n const fixed = domain?.map(position);\n const range: [number, number] =\n fixed && fixed[0] < fixed[1]\n ? [fixed[0], fixed[1]]\n : autoDomain(\n [\n ...instants,\n ...allRowBands.flatMap((band) => [band.start, band.end]),\n ...allMarkers.map((marker) => marker.position),\n ],\n timeScale,\n );\n const allSegments = states\n ? toTimelineSegments(statesToSegments(states, statesEnd ?? range[1], mergeConsecutive, timeScale), timeScale)\n : given;\n\n return { allMarkers, allRowBands, allSegments, range };\n }, [domain, markers, mergeConsecutive, rowBands, segments, states, statesEnd, timeScale]);\n\n const { allMarkers, allRowBands, allSegments, range: timeRange } = data;\n const duration = (range: TimelineRange) => durationMs(range.start, range.end, timeScale);\n const formatInstant = (position: number) => {\n // O fim de um intervalo que cruzou a meia-noite e lido no dia seguinte.\n const time = timeScale === 'dayHours' && position > 24 ? position - 24 : position;\n return formatTime ? formatTime(toDate(time, timeScale)) : formatPosition(time, timeScale);\n };\n\n const visibleSegments = allSegments.filter((segment) => isVisible(segment.series));\n const visibleRowBands = allRowBands.filter((band) => isVisible(band.series));\n const visibleMarkers = allMarkers.filter((marker) => isVisible(marker.series));\n const visibleBands = (bands ?? []).flatMap((band) => {\n const range = toRange(band.start, band.end, timeScale);\n return range && isVisible(band.series) ? [{ ...band, ...range }] : [];\n });\n const segmentsByRow = groupBy(visibleSegments, (segment) => segment.row);\n const rowsWithSegments = new Set(allSegments.map((segment) => segment.row));\n const rowsWithData = new Set([\n ...rowsWithSegments,\n ...allRowBands.map((band) => band.row),\n ...allMarkers.map((marker) => marker.row),\n ]);\n const empty = rows.length === 0 || rowsWithData.size === 0;\n\n const compact = outer.width > 0 && outer.width < minPlotWidth + SIDE_COLUMNS_ROOM;\n const summaryMode = !rowSummary ? 'none' : compact ? compactSummary : 'right';\n const size = DENSITY[density];\n const rowHeight = summaryMode === 'below' ? Math.max(size.row, ROW_WITH_SUMMARY_BELOW) : size.row;\n const laneStep = size.bar + LANE_GAP;\n const { height: rowsHeight, items } = layoutTimeline({\n groupHeight: GROUP_HEIGHT,\n groups,\n isCollapsed: collapsibleGroups ? groupToggle.isHidden : () => false,\n laneStep,\n overlap,\n rowGap,\n rowHeight,\n rows,\n segments: visibleSegments,\n });\n\n const rowSegments = (row: ChartTimelineRow) =>\n [...(segmentsByRow.get(row.key) ?? [])].sort((a, b) => a.start - b.start || a.end - b.end);\n const orderedRows = rowsInDisplayOrder(rows, groups);\n const summaries = new Map(\n rowSummary\n ? orderedRows.map((row) => [row.key, rowSummary(row, rowSegments(row).map((segment) => segment.source))])\n : [],\n );\n\n const axisHeight = xAxis === 'hidden' ? 0 : AXIS_HEIGHT;\n const axisOnTop = axisPosition === 'top';\n const plotTop = axisOnTop ? axisHeight : 0;\n const labeledTop = referenceLines.length > 0 || visibleBands.some((band) => band.label);\n const rowsTop = plotTop + (labeledTop ? LABELED_TOP_ROOM : TOP_ROOM);\n const rowsBottom = rowsTop + rowsHeight;\n const svgHeight = rowsBottom + BOTTOM_ROOM + (axisOnTop ? 0 : axisHeight);\n const svgWidth = Math.max(plot.width, minPlotWidth);\n const x = linearScale({\n domain: { max: timeRange[1], min: timeRange[0] },\n nice: false,\n range: [PLOT_START, svgWidth - PLOT_END],\n });\n const xStart = x(timeRange[0]);\n const xEnd = x(timeRange[1]);\n const ticks = timeTicks(timeRange, timeScale, xEnd - xStart, formatTick);\n const font = outer.font;\n const radius = outer.radius;\n\n function shapeOf(segment: PlacedSegment, row: ChartTimelineRow, top: number): SegmentShape | undefined {\n const rawStart = x(segment.start);\n const rawEnd = x(segment.end);\n const start = Math.max(rawStart, xStart);\n const end = Math.min(rawEnd, xEnd);\n\n if (end <= start) {\n return undefined;\n }\n\n // Um pixel de folga de cada lado separa intervalos encostados.\n const gap = end - start > 4 ? 1 : 0;\n\n return {\n clippedEnd: rawEnd > xEnd + 0.5,\n clippedStart: rawStart < xStart - 0.5,\n height: size.bar,\n row,\n segment,\n width: Math.max(end - start - gap * 2, 2),\n x: start + gap,\n y: top + (rowHeight - size.bar) / 2 + segment.lane * laneStep,\n };\n }\n\n const shapesByRow = new Map(\n items.flatMap((item) =>\n item.kind === 'row'\n ? [\n [\n item.row.key,\n item.segments.flatMap((segment) => shapeOf(segment, item.row, rowsTop + item.y) ?? []),\n ] as const,\n ]\n : [],\n ),\n );\n const navigableRows = [...shapesByRow.values()].filter((shapes) => shapes.length > 0);\n const focusable = navigableRows.flat();\n const tabStop = focusable.some((shape) => shape.segment.id === tabStopId) ? tabStopId : focusable[0]?.segment.id;\n const focusedShape = focusable.find((shape) => shape.segment.id === focusedId);\n const emphasizedSeries = !highlightOnHover\n ? undefined\n : target?.kind === 'segment'\n ? target.segment.series\n : focusedShape?.segment.series;\n\n function focusSegment(shape: SegmentShape | undefined) {\n if (shape) {\n setTabStopId(shape.segment.id);\n segmentNodes.current.get(shape.segment.id)?.focus();\n }\n }\n\n function handleSegmentKeyDown(event: KeyboardEvent<SVGGElement>, shape: SegmentShape) {\n const rowIndex = navigableRows.findIndex((shapes) => shapes.includes(shape));\n const inRow = navigableRows[rowIndex];\n const index = inRow.indexOf(shape);\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onSegmentClick?.(shape.segment.source, shape.row);\n return;\n }\n\n const nearestIn = (shapes: readonly SegmentShape[] | undefined) =>\n shapes && least(shapes, (candidate) => Math.abs(candidate.segment.start - shape.segment.start));\n const destinations: Record<string, SegmentShape | undefined> = {\n ArrowDown: nearestIn(navigableRows[rowIndex + 1]),\n ArrowLeft: inRow[index - 1],\n ArrowRight: inRow[index + 1],\n ArrowUp: nearestIn(navigableRows[rowIndex - 1]),\n End: inRow.at(-1),\n Home: inRow[0],\n };\n\n if (event.key in destinations) {\n event.preventDefault();\n focusSegment(destinations[event.key]);\n }\n }\n\n const describe = (shape: SegmentShape) => {\n const { row, segment } = shape;\n\n return [\n row.label,\n segment.series,\n segment.label !== segment.series ? segment.label : undefined,\n `${formatInstant(segment.start)} a ${formatInstant(segment.end)}`,\n formatValue(duration(segment)),\n showProgress && segment.progress !== undefined ? `${formatarPercentual(segment.progress)} concluído` : undefined,\n clipNote(shape),\n ]\n .filter(Boolean)\n .join(', ');\n };\n\n function renderSegment(shape: SegmentShape) {\n const { segment } = shape;\n const id = segment.id;\n const color = colorOf(segment.series) ?? 'currentColor';\n const onColor = textColorOn(color);\n const progress = showProgress ? segment.progress : undefined;\n const text = fitLabel(\n segmentLabel === 'label' ? (segment.label ?? segment.series) : formatValue(duration(segment)),\n shape.width,\n font,\n showSegmentLabels,\n );\n const anchor = { center: 'middle', end: 'end', start: 'start' } as const;\n const textX =\n segmentLabelAlign === 'start'\n ? shape.x + 5\n : segmentLabelAlign === 'end'\n ? shape.x + shape.width - 5\n : shape.x + shape.width / 2;\n const overFill = progress === undefined || (textX - shape.x) / shape.width <= progress;\n\n return (\n <g\n aria-label={describe(shape)}\n className={`${styles.segment} ${interactive ? styles.clickable : ''} ${\n emphasizedSeries !== undefined && emphasizedSeries !== segment.series ? styles.dimmed : ''\n }`}\n key={id}\n onBlur={interactive ? () => setFocusedId(null) : undefined}\n onClick={\n onSegmentClick\n ? () => {\n setTabStopId(id);\n onSegmentClick(segment.source, shape.row);\n }\n : undefined\n }\n onFocus={\n interactive\n ? () => {\n setFocusedId(id);\n setTabStopId(id);\n }\n : undefined\n }\n onKeyDown={interactive ? (event) => handleSegmentKeyDown(event, shape) : undefined}\n onMouseEnter={() => setTarget({ clip: clipNote(shape), kind: 'segment', row: shape.row, segment })}\n onMouseLeave={() => setTarget(null)}\n ref={\n interactive\n ? (node) => {\n if (node) {\n segmentNodes.current.set(id, node);\n } else {\n segmentNodes.current.delete(id);\n }\n }\n : undefined\n }\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? (id === tabStop ? 0 : -1) : undefined}\n >\n <path\n className={overlap === 'overlay' ? styles.barOverlay : undefined}\n d={roundedBarPath(\n shape.x,\n shape.y,\n shape.width,\n shape.height,\n cornersOf(shape.clippedStart, shape.clippedEnd, radius),\n )}\n fill={color}\n fillOpacity={progress === undefined ? undefined : 0.3}\n />\n {progress !== undefined && progress > 0 && (\n <path\n d={roundedBarPath(\n shape.x,\n shape.y,\n Math.max(shape.width * progress, 2),\n shape.height,\n cornersOf(shape.clippedStart, shape.clippedEnd, radius, progress >= 1),\n )}\n fill={color}\n />\n )}\n {shape.width >= MIN_CLIP_MARK_BAR &&\n (['start', 'end'] as const)\n .filter((side) => (side === 'start' ? shape.clippedStart : shape.clippedEnd))\n .map((side) => (\n <path className={styles.clipMark} d={clipMarkPath(shape, side)} key={side} stroke={onColor} />\n ))}\n {text !== undefined && (\n <text\n className={styles.segmentLabel}\n dominantBaseline=\"central\"\n fill={overFill ? onColor : 'var(--pl-color-text)'}\n textAnchor={anchor[segmentLabelAlign]}\n x={textX}\n y={shape.y + shape.height / 2}\n >\n {text}\n </text>\n )}\n </g>\n );\n }\n\n function renderRow(item: Extract<TimelineItem, { kind: 'row' }>) {\n const top = rowsTop + item.y;\n const { row } = item;\n const trackY = top + (rowHeight - size.bar) / 2 - TRACK_PADDING;\n const trackHeight = size.bar + (item.laneCount - 1) * laneStep + TRACK_PADDING * 2;\n\n return (\n <g aria-hidden=\"true\" key={row.key}>\n <rect\n className={styles.track}\n height={trackHeight}\n rx={TRACK_PADDING}\n width={xEnd - xStart}\n x={xStart}\n y={trackY}\n />\n {visibleRowBands\n .filter((band) => band.row === row.key)\n .map((band, index) => {\n const start = Math.max(x(band.start), xStart);\n const end = Math.min(x(band.end), xEnd);\n\n return end > start ? (\n <rect\n fill={colorOf(band.series)}\n height={trackHeight}\n key={index}\n rx={TRACK_PADDING}\n width={end - start}\n x={start}\n y={trackY}\n />\n ) : null;\n })}\n {!rowsWithData.has(row.key) && (\n <text className={styles.emptyRowText} dominantBaseline=\"central\" x={xStart + 8} y={top + rowHeight / 2}>\n {emptyRowLabel}\n </text>\n )}\n <rect\n className={styles.hoverArea}\n height={item.height}\n onMouseEnter={() =>\n setTarget({\n empty: !rowsWithSegments.has(row.key),\n kind: 'row',\n row,\n rowBands: visibleRowBands.filter((band) => band.row === row.key),\n segments: segmentsByRow.get(row.key) ?? [],\n })\n }\n onMouseLeave={() => setTarget(null)}\n width={svgWidth}\n x={0}\n y={top}\n />\n </g>\n );\n }\n\n function renderMarker(marker: TimelineMarker, { height, row, y }: Extract<TimelineItem, { kind: 'row' }>) {\n if (marker.position < timeRange[0] || marker.position > timeRange[1]) {\n return null;\n }\n\n const color = colorOf(marker.series);\n const top = rowsTop + y;\n const cx = x(marker.position);\n const cy = top + rowHeight / 2;\n const shape = marker.shape ?? 'line';\n\n return (\n <g key={`${row.key}-${allMarkers.indexOf(marker)}`}>\n {shape === 'line' && (\n <rect\n className={styles.marker}\n fill={color}\n height={size.bar + 6}\n rx={1}\n width={2}\n x={cx - 1}\n y={cy - size.bar / 2 - 3}\n />\n )}\n {shape === 'dot' && <circle className={styles.marker} cx={cx} cy={cy} fill={color} r={4} />}\n {shape === 'diamond' && (\n <path\n className={styles.marker}\n d={`M${cx},${cy - 6}L${cx + 6},${cy}L${cx},${cy + 6}L${cx - 6},${cy}Z`}\n fill={color}\n />\n )}\n <rect\n className={styles.hoverArea}\n height={height}\n onMouseEnter={() => setTarget({ kind: 'marker', marker, row })}\n onMouseLeave={() => setTarget(null)}\n width={10}\n x={cx - 5}\n y={top}\n />\n </g>\n );\n }\n\n function renderGroupBar(item: Extract<TimelineItem, { kind: 'group' }>) {\n const top = rowsTop + item.y;\n const barY = top + item.height / 2 - GROUP_BAR / 2;\n const drawn = item.segments.length > 0;\n const start = drawn ? Math.max(x(min(item.segments, (segment) => segment.start) ?? 0), xStart) : 0;\n const end = drawn ? Math.min(x(max(item.segments, (segment) => segment.end) ?? 0), xEnd) : 0;\n const withProgress = item.segments.filter((segment) => segment.progress !== undefined);\n const total = sum(withProgress, duration);\n const done = sum(withProgress, (segment) => duration(segment) * (segment.progress ?? 0));\n const width = Math.max(end - start, 2);\n\n return (\n <g aria-hidden=\"true\" key={`group-${item.group.key}`}>\n {drawn && end > start && (\n <g className={styles.passThrough}>\n <rect className={styles.groupBar} height={GROUP_BAR} rx={GROUP_BAR / 2} width={width} x={start} y={barY} />\n {showProgress && done > 0 && total > 0 && (\n <rect\n className={styles.groupProgress}\n height={GROUP_BAR}\n rx={GROUP_BAR / 2}\n width={Math.max((width * done) / total, 2)}\n x={start}\n y={barY}\n />\n )}\n </g>\n )}\n <rect\n className={styles.hoverArea}\n height={item.height}\n onMouseEnter={() =>\n setTarget({\n collapsed: item.collapsed,\n group: item.group,\n kind: 'group',\n rowCount: item.rows.length,\n segments: item.segments,\n })\n }\n onMouseLeave={() => setTarget(null)}\n width={svgWidth}\n x={0}\n y={top}\n />\n </g>\n );\n }\n\n const tickAnchor = (position: number, label: string) => {\n const half = measureLabel(label, font) / 2;\n return position - half < 0 ? 'start' : position + half > svgWidth ? 'end' : 'middle';\n };\n const axisLineY = axisOnTop ? axisHeight - 0.5 : rowsBottom + BOTTOM_ROOM + 0.5;\n\n const svg = (\n <svg\n aria-describedby={interactive ? hintId : undefined}\n aria-labelledby={titleId}\n className={styles.canvas}\n height={svgHeight}\n role={interactive ? 'group' : 'img'}\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n width={svgWidth}\n >\n <defs>\n {visibleBands.map((band, index) => (\n <pattern\n height={6}\n id={`${patternPrefix}-${index}`}\n key={index}\n patternTransform=\"rotate(45)\"\n patternUnits=\"userSpaceOnUse\"\n width={6}\n >\n <line className={styles.hatchLine} stroke={colorOf(band.series)} x1={0} x2={0} y1={0} y2={6} />\n </pattern>\n ))}\n </defs>\n\n {items.map((item) => (item.kind === 'row' ? renderRow(item) : null))}\n\n <g aria-hidden=\"true\" className={styles.passThrough}>\n {visibleBands.map((band, index) => {\n const start = Math.max(x(band.start), xStart);\n const end = Math.min(x(band.end), xEnd);\n\n if (end <= start) {\n return null;\n }\n\n return (\n <g key={index}>\n <rect\n fill={`url(#${patternPrefix}-${index})`}\n height={rowsBottom + BOTTOM_ROOM - plotTop}\n width={end - start}\n x={start}\n y={plotTop}\n />\n {band.label && measureLabel(band.label, font) + 8 <= end - start && (\n <text className={styles.bandLabel} x={start + 4} y={rowsTop - 7}>\n {band.label}\n </text>\n )}\n </g>\n );\n })}\n </g>\n\n {showGrid && (\n <g className={styles.passThrough} transform={`translate(0 ${plotTop})`}>\n <Grid\n length={rowsBottom + BOTTOM_ROOM - plotTop}\n lines={ticks.map((tick) => Math.round(x(tick.position)) + 0.5)}\n orientation=\"vertical\"\n />\n </g>\n )}\n\n {items.map((item) => (item.kind === 'group' ? renderGroupBar(item) : null))}\n\n <g>{[...shapesByRow.values()].flat().map(renderSegment)}</g>\n\n <g aria-hidden=\"true\">\n {items.flatMap((item) =>\n item.kind === 'row'\n ? visibleMarkers.filter((marker) => marker.row === item.row.key).map((marker) => renderMarker(marker, item))\n : [],\n )}\n </g>\n\n <g aria-hidden=\"true\" className={styles.passThrough}>\n {referenceLines.map((line, index) => {\n const position = toPosition(line.time, timeScale);\n\n if (!(position >= timeRange[0] && position <= timeRange[1])) {\n return null;\n }\n\n const lineX = Math.round(x(position)) + 0.5;\n const toTheRight = lineX + 4 + measureLabel(line.label, font) <= svgWidth - 2;\n const color = line.intent ? INTENT_TOKENS[line.intent] : 'var(--pl-color-text-secondary)';\n\n return (\n <g key={index}>\n <line\n className={styles.referenceLine}\n stroke={color}\n x1={lineX}\n x2={lineX}\n y1={rowsTop - 16}\n y2={rowsBottom + BOTTOM_ROOM}\n />\n <text\n className={styles.referenceLabel}\n textAnchor={toTheRight ? 'start' : 'end'}\n x={toTheRight ? lineX + 4 : lineX - 4}\n y={rowsTop - 7}\n >\n {line.label}\n </text>\n </g>\n );\n })}\n </g>\n\n {xAxis !== 'hidden' && (\n <g aria-hidden=\"true\" className={`${styles.passThrough} ${xAxis === 'onHover' ? styles.axisOnHover : ''}`}>\n <line className={styles.axisLine} x1={xStart} x2={xEnd} y1={axisLineY} y2={axisLineY} />\n {ticks.map((tick) => (\n <text\n className={styles.axisLabel}\n dominantBaseline={axisOnTop ? 'auto' : 'hanging'}\n key={tick.position}\n textAnchor={tickAnchor(x(tick.position), tick.label)}\n x={x(tick.position)}\n y={axisOnTop ? axisLineY - CHART_LABEL_OFFSET : axisLineY + CHART_LABEL_OFFSET}\n >\n {tick.label}\n </text>\n ))}\n </g>\n )}\n\n {focusedShape && (\n <rect\n aria-hidden=\"true\"\n className={styles.focusRing}\n height={focusedShape.height + 6}\n rx={radius}\n width={focusedShape.width + 6}\n x={focusedShape.x - 3}\n y={focusedShape.y - 3}\n />\n )}\n </svg>\n );\n\n const tooltip = timelineTooltip(target, {\n colorOf,\n duration,\n emptyRowLabel,\n formatDuration: formatTooltipValue ?? formatValue,\n formatInstant,\n seriesOrder: series.map((entry) => entry.label),\n showProgress,\n });\n\n const scrolls = svgWidth > plot.width + 1;\n const labelsClass =\n rowLabelWidth !== 'auto'\n ? styles.labelsFixed\n : compact\n ? summaryMode === 'below'\n ? styles.labelsCompactWithSummary\n : styles.labelsCompact\n : '';\n const columnStyle = { gap: rowGap, paddingTop: rowsTop };\n\n const body = (\n <div className={styles.body}>\n <TimelineLabels\n className={labelsClass}\n collapsibleGroups={collapsibleGroups}\n items={items}\n onToggleGroup={groupToggle.toggle}\n style={{ ...columnStyle, width: rowLabelWidth === 'auto' ? undefined : rowLabelWidth }}\n summaries={summaryMode === 'below' ? summaries : undefined}\n />\n\n <div\n aria-label={scrolls && !interactive ? `${title}, área rolável de lado` : undefined}\n className={styles.scroll}\n ref={plot.ref}\n role={scrolls && !interactive ? 'region' : undefined}\n tabIndex={scrolls && !interactive ? 0 : undefined}\n >\n {plot.width > 0 && (showTooltip ? <ChartTooltip {...tooltip}>{svg}</ChartTooltip> : svg)}\n </div>\n\n {summaryMode === 'right' && (\n <TimelineSummaries\n inline={rowHeight < STACKED_SUMMARY_ROW}\n items={items}\n style={columnStyle}\n summaries={summaries}\n />\n )}\n </div>\n );\n\n function tableRows(): TimelineTableRow[] {\n const entry = (seriesLabel: string, name: string, range: TimelineRange, progress?: number): TimelineTableEntry => ({\n color: colorOf(seriesLabel) ?? 'transparent',\n duration: formatValue(duration(range)),\n end: formatInstant(range.end),\n name,\n progress: progress === undefined ? undefined : formatarPercentual(progress),\n start: formatInstant(range.start),\n });\n\n return orderedRows.map((row) => ({\n description: row.description,\n entries: [\n ...visibleRowBands\n .filter((band) => band.row === row.key)\n .map((band) => entry(band.series, `${band.series} (referência)`, band)),\n ...rowSegments(row).map((segment) =>\n entry(\n segment.series,\n segment.label && segment.label !== segment.series ? `${segment.series}: ${segment.label}` : segment.series,\n segment,\n segment.progress,\n ),\n ),\n ...visibleMarkers\n .filter((marker) => marker.row === row.key)\n .map((marker) => ({\n color: colorOf(marker.series) ?? 'transparent',\n duration: 'instante',\n end: '—',\n name: marker.label ? `${marker.series}: ${marker.label}` : marker.series,\n start: formatInstant(marker.position),\n })),\n ],\n key: row.key,\n label: row.label,\n summary: summaries.get(row.key),\n }));\n }\n\n const hatchedSeries = new Set((bands ?? []).map((band) => band.series));\n const legendView = legend !== 'none' && series.length >= 2 && (\n <ChartLegend\n align={legendAlign}\n entries={series.map((entry, index) => ({\n // A faixa global e hachurada no desenho, e a amostra repete a hachura.\n color: hatchedSeries.has(entry.label) ? hatch(colors[index]) : colors[index],\n hidden: seriesToggle.isHidden(entry.label),\n label: entry.label,\n }))}\n onToggle={seriesToggle.toggle}\n position={legend}\n />\n );\n\n return (\n <figure className={styles.figure}>\n <figcaption className={styles.header}>\n <span className={styles.title} id={titleId}>\n {title}\n </span>\n {!empty && (\n <Button\n aria-pressed={tableView}\n onClick={() => setTableView((current) => !current)}\n size=\"sm\"\n variant=\"secondary\"\n >\n Ver como tabela\n </Button>\n )}\n </figcaption>\n\n {interactive && (\n <span className={styles.visuallyHidden} id={hintId}>\n Use as setas para percorrer os intervalos.\n </span>\n )}\n\n {legend === 'top' && legendView}\n\n <div className={styles.plot} ref={outer.ref}>\n {empty ? (\n <div className={styles.empty}>\n <EmptyState icon={<IconChartBar />} size=\"sm\" title={emptyMessage} />\n </div>\n ) : outer.width === 0 ? null : tableView ? (\n <ChartTimelineTable\n emptyRowLabel={emptyRowLabel}\n rows={tableRows()}\n showProgress={showProgress && visibleSegments.some((segment) => segment.progress !== undefined)}\n title={title}\n />\n ) : (\n body\n )}\n </div>\n\n {legend === 'bottom' && legendView}\n </figure>\n );\n}\n\ninterface TimelineLabelsProps {\n className: string;\n collapsibleGroups: boolean;\n items: readonly TimelineItem[];\n onToggleGroup: (groupKey: string) => void;\n style: CSSProperties;\n /** Resumo abaixo do rotulo, na largura estreita. */\n summaries?: ReadonlyMap<string, ChartTimelineSummary | undefined>;\n}\n\n/** Coluna dos rotulos, em texto, cada item na altura da sua linha no desenho. O cabecalho do grupo recolhe o grupo. */\nfunction TimelineLabels({ className, collapsibleGroups, items, onToggleGroup, style, summaries }: TimelineLabelsProps) {\n return (\n <div className={`${styles.labels} ${className}`} style={style}>\n {items.map((item) => {\n if (item.kind === 'group') {\n const content = (\n <>\n {collapsibleGroups && (\n <IconChevronDown className={`${styles.chevron} ${item.collapsed ? styles.chevronCollapsed : ''}`} />\n )}\n <span className={styles.groupName}>{item.group.label}</span>\n <span className={styles.groupCount}>({item.rows.length})</span>\n </>\n );\n\n return (\n <div className={styles.groupLabel} key={`group-${item.group.key}`} style={{ height: item.height }}>\n {collapsibleGroups ? (\n <button\n aria-expanded={!item.collapsed}\n className={styles.groupButton}\n onClick={() => onToggleGroup(item.group.key)}\n type=\"button\"\n >\n {content}\n </button>\n ) : (\n <span className={styles.groupText}>{content}</span>\n )}\n </div>\n );\n }\n\n const summary = summaries?.get(item.row.key);\n\n return (\n <div\n className={`${styles.rowLabel} ${item.child ? styles.childLabel : ''}`}\n key={item.row.key}\n style={{ height: item.height }}\n >\n <span className={styles.labelLine}>\n <span className={styles.labelText} title={item.row.label}>\n {item.row.label}\n </span>{' '}\n {item.row.description && <span className={styles.labelDescription}>{item.row.description}</span>}\n </span>\n {summary && (\n <span className={styles.labelSummary}>\n {summary.subtitle ? `${summary.title} · ${summary.subtitle}` : summary.title}\n </span>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\ninterface TimelineSummariesProps {\n /** Titulo e subtitulo na mesma linha, quando ela e baixa demais para empilhar os dois. */\n inline: boolean;\n items: readonly TimelineItem[];\n style: CSSProperties;\n summaries: ReadonlyMap<string, ChartTimelineSummary | undefined>;\n}\n\nfunction TimelineSummaries({ inline, items, style, summaries }: TimelineSummariesProps) {\n return (\n <div className={styles.summary} style={style}>\n {items.map((item) => {\n const summary = item.kind === 'row' ? summaries.get(item.row.key) : undefined;\n\n return (\n <div\n className={`${styles.summaryItem} ${inline ? styles.summaryInline : ''}`}\n key={item.kind === 'row' ? item.row.key : `group-${item.group.key}`}\n style={{ height: item.height }}\n >\n {summary && (\n <>\n <span className={styles.summaryTitle}>{summary.title}</span>\n {summary.subtitle && <span className={styles.summarySubtitle}>{summary.subtitle}</span>}\n </>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["DENSITY","ROW_WITH_SUMMARY_BELOW","STACKED_SUMMARY_ROW","LANE_GAP","GROUP_HEIGHT","GROUP_BAR","AXIS_HEIGHT","TOP_ROOM","LABELED_TOP_ROOM","BOTTOM_ROOM","TRACK_PADDING","PLOT_START","PLOT_END","SIDE_COLUMNS_ROOM","LABEL_PADDING","MIN_LABELED_BAR","MIN_CLIP_MARK_BAR","cornersOf","clippedStart","clippedEnd","radius","closedEnd","start","end","clipNote","clipMarkPath","height","width","x","side","tip","back","fitLabel","text","font","mode","measureLabel","truncateToWidth","hatch","color","ChartTimeline","accent","axisPosition","bands","collapsedGroups","collapsibleGroups","compactSummary","defaultCollapsedGroups","defaultHiddenSeries","density","domain","emptyMessage","emptyRowLabel","formatTick","formatTime","formatTooltipValue","formatValue","formatarDuracao","groups","hiddenSeries","highlightOnHover","legend","legendAlign","markers","mergeConsecutive","minPlotWidth","onCollapsedGroupsChange","onHiddenSeriesChange","onSegmentClick","overlap","referenceLines","rowBands","rowGap","rowLabelWidth","rowSummary","rows","segmentLabel","segmentLabelAlign","segments","series","showGrid","showProgress","showSegmentLabels","showTooltip","states","statesEnd","timeScale","title","xAxis","titleId","useId","hintId","patternPrefix","outer","useChartMetrics","plot","seriesToggle","useSeriesToggle","groupToggle","target","setTarget","useState","focusedId","setFocusedId","tabStopId","setTabStopId","tableView","setTableView","segmentNodes","useRef","interactive","colors","useMemo","resolveSeriesColors","colorByLabel","entry","index","colorOf","label","isVisible","data","position","time","toPosition","allRowBands","band","range","toRange","allMarkers","marker","markerPosition","given","toTimelineSegments","instants","state","segment","fixed","autoDomain","allSegments","statesToSegments","timeRange","duration","durationMs","formatInstant","toDate","formatPosition","visibleSegments","visibleRowBands","visibleMarkers","visibleBands","segmentsByRow","groupBy","rowsWithSegments","rowsWithData","empty","compact","summaryMode","size","rowHeight","laneStep","rowsHeight","items","layoutTimeline","rowSegments","row","a","b","orderedRows","rowsInDisplayOrder","summaries","axisHeight","axisOnTop","plotTop","labeledTop","rowsTop","rowsBottom","svgHeight","svgWidth","linearScale","xStart","xEnd","ticks","timeTicks","shapeOf","top","rawStart","rawEnd","gap","shapesByRow","item","navigableRows","shapes","focusable","tabStop","shape","_a","focusedShape","emphasizedSeries","focusSegment","handleSegmentKeyDown","event","rowIndex","inRow","nearestIn","least","candidate","destinations","describe","formatarPercentual","renderSegment","id","onColor","textColorOn","progress","anchor","textX","overFill","jsxs","styles","node","jsx","roundedBarPath","renderRow","trackY","trackHeight","renderMarker","y","cx","cy","renderGroupBar","barY","drawn","min","max","withProgress","total","sum","done","tickAnchor","half","axisLineY","svg","Grid","tick","line","lineX","toTheRight","INTENT_TOKENS","CHART_LABEL_OFFSET","tooltip","timelineTooltip","scrolls","labelsClass","columnStyle","body","TimelineLabels","ChartTooltip","TimelineSummaries","tableRows","seriesLabel","name","hatchedSeries","legendView","ChartLegend","Button","current","EmptyState","IconChartBar","ChartTimelineTable","className","onToggleGroup","style","content","Fragment","IconChevronDown","summary","inline"],"mappings":"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"}
|