@plenustech/design-system 0.2.2 → 0.2.3
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/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/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/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/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/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/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.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/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 +184 -122
- 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/ChartLine/ChartLine.d.ts +15 -4
- 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/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/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/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/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/overlays/Dialog/Dialog.d.ts +2 -2
- package/dist/types/components/overlays/Dialog/DialogFrame.d.ts +7 -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 +35 -7
- 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 +3 -1
- 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 +1 -1
|
@@ -1,90 +1,101 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import
|
|
3
|
-
import { useChartMetrics as
|
|
4
|
-
import { useSliceRing as
|
|
5
|
-
import { ChartFrame as
|
|
6
|
-
import { arcPath as
|
|
7
|
-
import { formatarNumero as
|
|
8
|
-
import { measureLabel as
|
|
9
|
-
import { textColorOn as
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
|
|
1
|
+
import { jsxs as P, jsx as d } from "react/jsx-runtime";
|
|
2
|
+
import f from "./ChartPie.module.css.js";
|
|
3
|
+
import { useChartMetrics as k } from "../core/useChartMetrics.js";
|
|
4
|
+
import { useSliceRing as q } from "../core/useSliceRing.js";
|
|
5
|
+
import { ChartFrame as z } from "../core/ChartFrame.js";
|
|
6
|
+
import { arcPath as G, arcCentroid as J } from "../core/arcs.js";
|
|
7
|
+
import { formatarNumero as K } from "../../../utils/formatters/formatarNumero.js";
|
|
8
|
+
import { measureLabel as Q } from "../core/measureText.js";
|
|
9
|
+
import { textColorOn as U } from "../palette/seriesColor.js";
|
|
10
|
+
import { sliceTooltip as V } from "../core/tooltips.js";
|
|
11
|
+
import { chartHeight as W } from "../core/cartesianLayout.js";
|
|
12
|
+
import { ringDiameter as X } from "../core/spacing.js";
|
|
13
|
+
function mo({
|
|
13
14
|
accent: h,
|
|
14
|
-
defaultHiddenSlices:
|
|
15
|
+
defaultHiddenSlices: p,
|
|
15
16
|
emptyMessage: g = "Sem dados no período",
|
|
16
|
-
formatPercent:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
17
|
+
formatPercent: t = (s) => `${Math.round(s * 100)}%`,
|
|
18
|
+
formatTooltipValue: b,
|
|
19
|
+
formatValue: a = K,
|
|
20
|
+
height: v = 260,
|
|
21
|
+
hiddenSlices: x,
|
|
22
|
+
legend: M = "bottom",
|
|
23
|
+
legendAlign: R,
|
|
24
|
+
onHiddenSlicesChange: C,
|
|
25
|
+
onHoverSlice: O,
|
|
26
|
+
otherLabel: y = "Outros",
|
|
27
|
+
showDataLabels: D = !1,
|
|
28
|
+
showLegendValues: H = !1,
|
|
29
|
+
showTooltip: $ = !0,
|
|
30
|
+
sliceRadius: A,
|
|
31
|
+
slices: i,
|
|
32
|
+
smallSliceThreshold: L = 0.02,
|
|
33
|
+
title: N
|
|
31
34
|
}) {
|
|
32
|
-
const { font:
|
|
35
|
+
const { font: s, height: S, radius: j, ref: w, width: n } = k(), { fillHeight: T, value: m } = W(v, S), o = q({
|
|
33
36
|
accent: h,
|
|
34
|
-
defaultHiddenSlices:
|
|
35
|
-
hiddenSlices:
|
|
36
|
-
onHiddenSlicesChange:
|
|
37
|
-
onHoverSlice:
|
|
38
|
-
otherLabel:
|
|
39
|
-
slices:
|
|
40
|
-
smallSliceThreshold:
|
|
41
|
-
}),
|
|
42
|
-
return /* @__PURE__ */
|
|
43
|
-
|
|
37
|
+
defaultHiddenSlices: p,
|
|
38
|
+
hiddenSlices: x,
|
|
39
|
+
onHiddenSlicesChange: C,
|
|
40
|
+
onHoverSlice: O,
|
|
41
|
+
otherLabel: y,
|
|
42
|
+
slices: i,
|
|
43
|
+
smallSliceThreshold: L
|
|
44
|
+
}), l = X(n, m) / 2, B = A ?? j;
|
|
45
|
+
return /* @__PURE__ */ P(
|
|
46
|
+
z,
|
|
44
47
|
{
|
|
45
48
|
centerOrigin: !0,
|
|
46
|
-
containerRef:
|
|
47
|
-
empty: o.slices.length === 0 ||
|
|
49
|
+
containerRef: w,
|
|
50
|
+
empty: o.slices.length === 0 || i.every((r) => !(r.value > 0)),
|
|
48
51
|
emptyMessage: g,
|
|
49
|
-
fillHeight:
|
|
50
|
-
height:
|
|
52
|
+
fillHeight: T,
|
|
53
|
+
height: m,
|
|
51
54
|
legend: o.slices.map((r, e) => ({
|
|
52
55
|
color: o.colors[e],
|
|
53
56
|
hidden: o.isHidden(r.label),
|
|
54
57
|
label: r.label,
|
|
55
|
-
value:
|
|
58
|
+
value: H ? t(o.ratioOf(e)) : void 0
|
|
56
59
|
})),
|
|
57
|
-
legendAlign:
|
|
58
|
-
legendPosition:
|
|
60
|
+
legendAlign: R,
|
|
61
|
+
legendPosition: M,
|
|
59
62
|
onToggleSeries: o.toggle,
|
|
60
63
|
swatch: "dot",
|
|
61
|
-
title:
|
|
64
|
+
title: N,
|
|
65
|
+
tooltip: $ ? V({
|
|
66
|
+
colors: o.colors,
|
|
67
|
+
formatPercent: t,
|
|
68
|
+
formatValue: b ?? a,
|
|
69
|
+
index: o.focused,
|
|
70
|
+
slices: o.slices,
|
|
71
|
+
total: o.total
|
|
72
|
+
}) : void 0,
|
|
62
73
|
width: n,
|
|
63
74
|
children: [
|
|
64
|
-
o.slices.map((r, e) => /* @__PURE__ */
|
|
75
|
+
o.slices.map((r, e) => /* @__PURE__ */ d(
|
|
65
76
|
"path",
|
|
66
77
|
{
|
|
67
|
-
"aria-label": `${r.label}: ${
|
|
68
|
-
className:
|
|
69
|
-
d:
|
|
78
|
+
"aria-label": `${r.label}: ${a(Math.max(r.value, 0))} (${t(o.ratioOf(e))})`,
|
|
79
|
+
className: f.slice,
|
|
80
|
+
d: G({ ...o.angles[e], cornerRadius: B, innerRadius: 0, outerRadius: l }),
|
|
70
81
|
fill: o.colors[e],
|
|
71
82
|
onMouseEnter: () => o.focus(e),
|
|
72
83
|
onMouseLeave: () => o.focus(null)
|
|
73
84
|
},
|
|
74
85
|
e
|
|
75
86
|
)),
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
return o.isHidden(r.label) ||
|
|
87
|
+
D && o.slices.map((r, e) => {
|
|
88
|
+
const u = t(o.ratioOf(e)), [E, F] = J({ ...o.angles[e], innerRadius: 0, outerRadius: l }), c = o.angles[e].endAngle - o.angles[e].startAngle, I = c >= Math.PI ? l : 2 * (l / 2) * Math.sin(c / 2);
|
|
89
|
+
return o.isHidden(r.label) || Q(u, s) > I ? null : /* @__PURE__ */ d(
|
|
79
90
|
"text",
|
|
80
91
|
{
|
|
81
|
-
className:
|
|
92
|
+
className: f.sliceLabel,
|
|
82
93
|
dominantBaseline: "middle",
|
|
83
|
-
fill:
|
|
94
|
+
fill: U(o.colors[e]),
|
|
84
95
|
textAnchor: "middle",
|
|
85
|
-
x:
|
|
86
|
-
y:
|
|
87
|
-
children:
|
|
96
|
+
x: E,
|
|
97
|
+
y: F,
|
|
98
|
+
children: u
|
|
88
99
|
},
|
|
89
100
|
e
|
|
90
101
|
);
|
|
@@ -94,6 +105,6 @@ function lo({
|
|
|
94
105
|
);
|
|
95
106
|
}
|
|
96
107
|
export {
|
|
97
|
-
|
|
108
|
+
mo as ChartPie
|
|
98
109
|
};
|
|
99
110
|
//# sourceMappingURL=ChartPie.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPie.js","sources":["../../../../src/components/charts/ChartPie/ChartPie.tsx"],"sourcesContent":["import {\n ChartFrame,\n arcCentroid,\n arcPath,\n chartHeight,\n measureLabel,\n ringDiameter,\n useChartMetrics,\n useSliceRing,\n type ChartHeight,\n type ChartLegendAlign,\n type ChartLegendPosition,\n type ChartSlice,\n} from '../core';\nimport { textColorOn } from '../palette';\nimport { formatarNumero } from '../../../utils/formatters';\nimport styles from './ChartPie.module.css';\n\nexport type { ChartSlice as ChartPieSlice };\n\nexport interface ChartPieProps {\n accent?: string;\n defaultHiddenSlices?: readonly string[];\n emptyMessage?: string;\n formatPercent?: (ratio: number) => string;\n formatValue?: (value: number) => string;\n height?: ChartHeight;\n hiddenSlices?: readonly string[];\n legend?: ChartLegendPosition;\n legendAlign?: ChartLegendAlign;\n onHiddenSlicesChange?: (hidden: readonly string[]) => void;\n /** Fatia sob o ponteiro, ja agrupada, ou `null` ao sair dela. */\n onHoverSlice?: (slice: ChartSlice | null) => void;\n /** Rotulo da fatia que reune as pequenas. */\n otherLabel?: string;\n showDataLabels?: boolean;\n showLegendValues?: boolean;\n /** Raio dos cantos de cada fatia. Sem valor, o token de raio pequeno. */\n sliceRadius?: number;\n slices: readonly ChartSlice[];\n /** Fracao do total abaixo da qual a fatia entra no agrupamento. */\n smallSliceThreshold?: number;\n title: string;\n}\n\nexport function ChartPie({\n accent,\n defaultHiddenSlices,\n emptyMessage = 'Sem dados no período',\n formatPercent = (fracao) => `${Math.round(fracao * 100)}%`,\n formatValue = formatarNumero,\n height = 260,\n hiddenSlices,\n legend = 'bottom',\n legendAlign,\n onHiddenSlicesChange,\n onHoverSlice,\n otherLabel = 'Outros',\n showDataLabels = false,\n showLegendValues = false,\n sliceRadius,\n slices,\n smallSliceThreshold = 0.02,\n title,\n}: ChartPieProps) {\n const { font, height: alturaMedida, radius: raioDoCanto, ref, width } = useChartMetrics();\n const { fillHeight, value: alturaDoDesenho } = chartHeight(height, alturaMedida);\n\n const anel = useSliceRing({\n accent,\n defaultHiddenSlices,\n hiddenSlices,\n onHiddenSlicesChange,\n onHoverSlice,\n otherLabel,\n slices,\n smallSliceThreshold,\n });\n\n const raio = ringDiameter(width, alturaDoDesenho) / 2;\n const canto = sliceRadius ?? raioDoCanto;\n\n return (\n <ChartFrame\n centerOrigin\n containerRef={ref}\n empty={anel.slices.length === 0 || slices.every((fatia) => !(fatia.value > 0))}\n emptyMessage={emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legend={anel.slices.map((fatia, indice) => ({\n color: anel.colors[indice],\n hidden: anel.isHidden(fatia.label),\n label: fatia.label,\n value: showLegendValues ? formatPercent(anel.ratioOf(indice)) : undefined,\n }))}\n legendAlign={legendAlign}\n legendPosition={legend}\n onToggleSeries={anel.toggle}\n swatch=\"dot\"\n title={title}\n width={width}\n >\n {anel.slices.map((fatia, indice) => (\n <path\n aria-label={`${fatia.label}: ${formatValue(Math.max(fatia.value, 0))} (${formatPercent(anel.ratioOf(indice))})`}\n className={styles.slice}\n d={arcPath({ ...anel.angles[indice], cornerRadius: canto, innerRadius: 0, outerRadius: raio })}\n fill={anel.colors[indice]}\n key={indice}\n onMouseEnter={() => anel.focus(indice)}\n onMouseLeave={() => anel.focus(null)}\n />\n ))}\n\n {showDataLabels &&\n anel.slices.map((fatia, indice) => {\n const rotulo = formatPercent(anel.ratioOf(indice));\n const [x, y] = arcCentroid({ ...anel.angles[indice], innerRadius: 0, outerRadius: raio });\n const angulo = anel.angles[indice].endAngle - anel.angles[indice].startAngle;\n\n // O rotulo so entra quando a fatia o comporta. Ate meia volta a\n // largura disponivel e a corda no centro do arco; dali em diante a\n // corda volta a encolher, e quem manda e o raio.\n const disponivel =\n angulo >= Math.PI ? raio : 2 * (raio / 2) * Math.sin(angulo / 2);\n\n if (anel.isHidden(fatia.label) || measureLabel(rotulo, font) > disponivel) {\n return null;\n }\n\n return (\n <text\n className={styles.sliceLabel}\n dominantBaseline=\"middle\"\n fill={textColorOn(anel.colors[indice])}\n key={indice}\n textAnchor=\"middle\"\n x={x}\n y={y}\n >\n {rotulo}\n </text>\n );\n })}\n </ChartFrame>\n );\n}\n"],"names":["ChartPie","accent","defaultHiddenSlices","emptyMessage","formatPercent","fracao","formatValue","formatarNumero","height","hiddenSlices","legend","legendAlign","onHiddenSlicesChange","onHoverSlice","otherLabel","showDataLabels","showLegendValues","sliceRadius","slices","smallSliceThreshold","title","font","alturaMedida","raioDoCanto","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","anel","useSliceRing","raio","ringDiameter","canto","jsxs","ChartFrame","fatia","indice","jsx","styles","arcPath","rotulo","x","y","arcCentroid","angulo","disponivel","measureLabel","textColorOn"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChartPie.js","sources":["../../../../src/components/charts/ChartPie/ChartPie.tsx"],"sourcesContent":["import {\n ChartFrame,\n arcCentroid,\n arcPath,\n chartHeight,\n measureLabel,\n ringDiameter,\n sliceTooltip,\n useChartMetrics,\n useSliceRing,\n type ChartHeight,\n type ChartLegendAlign,\n type ChartLegendPosition,\n type ChartSlice,\n} from '../core';\nimport { textColorOn } from '../palette';\nimport { formatarNumero } from '../../../utils/formatters';\nimport styles from './ChartPie.module.css';\n\nexport type { ChartSlice as ChartPieSlice };\n\nexport interface ChartPieProps {\n accent?: string;\n defaultHiddenSlices?: 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 hiddenSlices?: readonly string[];\n legend?: ChartLegendPosition;\n legendAlign?: ChartLegendAlign;\n onHiddenSlicesChange?: (hidden: readonly string[]) => void;\n /** Fatia sob o ponteiro, ja agrupada, ou `null` ao sair dela. */\n onHoverSlice?: (slice: ChartSlice | null) => void;\n /** Rotulo da fatia que reune as pequenas. */\n otherLabel?: string;\n showDataLabels?: boolean;\n showLegendValues?: boolean;\n /** Balao com a fatia sob o ponteiro, o valor e a parte do total. Desligue para montar o proprio `ChartTooltip`. */\n showTooltip?: boolean;\n /** Raio dos cantos de cada fatia. Sem valor, o token de raio pequeno. */\n sliceRadius?: number;\n slices: readonly ChartSlice[];\n /** Fracao do total abaixo da qual a fatia entra no agrupamento. */\n smallSliceThreshold?: number;\n title: string;\n}\n\nexport function ChartPie({\n accent,\n defaultHiddenSlices,\n emptyMessage = 'Sem dados no período',\n formatPercent = (fracao) => `${Math.round(fracao * 100)}%`,\n formatTooltipValue,\n formatValue = formatarNumero,\n height = 260,\n hiddenSlices,\n legend = 'bottom',\n legendAlign,\n onHiddenSlicesChange,\n onHoverSlice,\n otherLabel = 'Outros',\n showDataLabels = false,\n showLegendValues = false,\n showTooltip = true,\n sliceRadius,\n slices,\n smallSliceThreshold = 0.02,\n title,\n}: ChartPieProps) {\n const { font, height: alturaMedida, radius: raioDoCanto, ref, width } = useChartMetrics();\n const { fillHeight, value: alturaDoDesenho } = chartHeight(height, alturaMedida);\n\n const anel = useSliceRing({\n accent,\n defaultHiddenSlices,\n hiddenSlices,\n onHiddenSlicesChange,\n onHoverSlice,\n otherLabel,\n slices,\n smallSliceThreshold,\n });\n\n const raio = ringDiameter(width, alturaDoDesenho) / 2;\n const canto = sliceRadius ?? raioDoCanto;\n\n return (\n <ChartFrame\n centerOrigin\n containerRef={ref}\n empty={anel.slices.length === 0 || slices.every((fatia) => !(fatia.value > 0))}\n emptyMessage={emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legend={anel.slices.map((fatia, indice) => ({\n color: anel.colors[indice],\n hidden: anel.isHidden(fatia.label),\n label: fatia.label,\n value: showLegendValues ? formatPercent(anel.ratioOf(indice)) : undefined,\n }))}\n legendAlign={legendAlign}\n legendPosition={legend}\n onToggleSeries={anel.toggle}\n swatch=\"dot\"\n title={title}\n tooltip={\n showTooltip\n ? sliceTooltip({\n colors: anel.colors,\n formatPercent,\n formatValue: formatTooltipValue ?? formatValue,\n index: anel.focused,\n slices: anel.slices,\n total: anel.total,\n })\n : undefined\n }\n width={width}\n >\n {anel.slices.map((fatia, indice) => (\n <path\n aria-label={`${fatia.label}: ${formatValue(Math.max(fatia.value, 0))} (${formatPercent(anel.ratioOf(indice))})`}\n className={styles.slice}\n d={arcPath({ ...anel.angles[indice], cornerRadius: canto, innerRadius: 0, outerRadius: raio })}\n fill={anel.colors[indice]}\n key={indice}\n onMouseEnter={() => anel.focus(indice)}\n onMouseLeave={() => anel.focus(null)}\n />\n ))}\n\n {showDataLabels &&\n anel.slices.map((fatia, indice) => {\n const rotulo = formatPercent(anel.ratioOf(indice));\n const [x, y] = arcCentroid({ ...anel.angles[indice], innerRadius: 0, outerRadius: raio });\n const angulo = anel.angles[indice].endAngle - anel.angles[indice].startAngle;\n\n // O rotulo so entra quando a fatia o comporta. Ate meia volta a\n // largura disponivel e a corda no centro do arco; dali em diante a\n // corda volta a encolher, e quem manda e o raio.\n const disponivel =\n angulo >= Math.PI ? raio : 2 * (raio / 2) * Math.sin(angulo / 2);\n\n if (anel.isHidden(fatia.label) || measureLabel(rotulo, font) > disponivel) {\n return null;\n }\n\n return (\n <text\n className={styles.sliceLabel}\n dominantBaseline=\"middle\"\n fill={textColorOn(anel.colors[indice])}\n key={indice}\n textAnchor=\"middle\"\n x={x}\n y={y}\n >\n {rotulo}\n </text>\n );\n })}\n </ChartFrame>\n );\n}\n"],"names":["ChartPie","accent","defaultHiddenSlices","emptyMessage","formatPercent","fracao","formatTooltipValue","formatValue","formatarNumero","height","hiddenSlices","legend","legendAlign","onHiddenSlicesChange","onHoverSlice","otherLabel","showDataLabels","showLegendValues","showTooltip","sliceRadius","slices","smallSliceThreshold","title","font","alturaMedida","raioDoCanto","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","anel","useSliceRing","raio","ringDiameter","canto","jsxs","ChartFrame","fatia","indice","sliceTooltip","jsx","styles","arcPath","rotulo","x","y","arcCentroid","angulo","disponivel","measureLabel","textColorOn"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),I=require("react"),u=require("./ChartRadial.module.css.cjs"),me=require("../core/useChartMetrics.cjs"),he=require("../core/useSeriesToggle.cjs"),ge=require("../palette/seriesColor.cjs"),ve=require("../core/useTweenedNumbers.cjs"),_=require("../../../utils/formatters/formatarNumero.cjs"),w=require("../core/centerText.cjs"),fe=require("../core/ChartFrame.cjs"),M=require("../core/arcs.cjs"),xe=require("../core/spacing.cjs"),be=require("../core/cartesianLayout.cjs"),L=6,z=8;function $(c){return c*Math.PI/180}function Me({accent:c,centerLabel:B,defaultHiddenTracks:V,emptyMessage:G="Sem dados no período",endAngle:J=360,formatTooltipValue:K,formatValue:d=_.formatarNumero,height:Q=260,hiddenTracks:U,legend:W="bottom",legendAlign:X,onHiddenTracksChange:Y,showCenter:Z=!0,showTooltip:C=!0,startAngle:k=0,thickness:R=16,trackRadius:ee,title:te,tracks:o}){var O;const{font:S,height:oe,radius:ae,ref:ne,width:p}=me.useChartMetrics(),{fillHeight:re,value:q}=be.chartHeight(Q,oe),{isHidden:v,toggle:se}=he.useSeriesToggle({defaultHiddenSeries:V,hiddenSeries:U,onHiddenSeriesChange:Y}),f=I.useMemo(()=>ge.resolveSeriesColors(o,{accent:c}),[c,o]),l=e=>Number.isFinite(e.value),N=o.reduce((e,t)=>l(t)?Math.max(e,t.value):e,0),A=o.map(e=>{const t=e.max??N;return v(e.label)||!l(e)||!(t>0)?0:Math.min(Math.max(e.value,0)/t,1)}),le=ve.useTweenedNumbers(A,{from:A.map(()=>0)}),[r,j]=I.useState(null);function ie(){const e=r===null?void 0:o[r];if(!e||!l(e)||r===null)return[];const t=e.max??N,s=[{color:f[r],label:"Valor",values:[e.value]},{label:"Meta",values:[t]}];return t>0?[...s,{format:g=>_.formatarPercentual(g),label:"Atingido",values:[e.value/t]}]:s}const i=$(k),T=Math.min($(J)-i,M.VOLTA),x=xe.ringDiameter(p,q)/2,m=o.find(e=>!v(e.label)),h=Z&&m?d(m.value):void 0,y=h===void 0?z:Math.max(z,Math.min(w.centerTextRadius(h,S),x/2)),D=Math.min(1,Math.max(x-y,0)/(Math.max(o.length,1)*(R+L))),b=Math.max(R*D,1),ue=L*D,P=e=>x-e*(b+ue),ce=Math.max(P(Math.max(o.length-1,0))-b,y),E=ee??ae,n=m&&h!==void 0?w.fitCenterText(h,B??m.label,S,ce*2):void 0;return a.jsxs(fe.ChartFrame,{centerOrigin:!0,containerRef:ne,empty:o.length===0,emptyMessage:G,fillHeight:re,height:q,legend:o.map((e,t)=>({color:f[t],hidden:v(e.label),label:e.label,value:l(e)?d(e.value):void 0})),legendAlign:X,legendPosition:o.length>1?W:"none",onToggleSeries:se,swatch:"dot",title:te,tooltip:C?{columns:[{format:K??d}],computed:"none",rows:ie(),title:r===null||(O=o[r])==null?void 0:O.label}:void 0,width:p,children:[o.map((e,t)=>{const s=P(t),g=s-b,F=le[t]??0,de=i+T*F,H=l(e)?`${e.label}: ${d(e.value)}`:e.label;return a.jsxs("g",{onMouseEnter:()=>j(t),onMouseLeave:()=>j(null),children:[a.jsx("path",{"aria-label":H,className:u.default.track,d:M.arcPath({cornerRadius:E,endAngle:i+T,innerRadius:g,outerRadius:s,startAngle:i}),children:!C&&a.jsx("title",{children:H})}),F>0&&a.jsx("path",{className:u.default.fill,d:M.arcPath({cornerRadius:E,endAngle:de,innerRadius:g,outerRadius:s,startAngle:i}),fill:f[t]})]},t)}),n&&a.jsxs("g",{className:u.default.center,children:[a.jsx("text",{className:u.default.centerValue,dy:n.size*.1,style:{fontFamily:n.family,fontSize:n.size},textAnchor:"middle",children:n.value}),a.jsx("text",{className:u.default.centerLabel,dy:n.lineHeight*.62,textAnchor:"middle",children:n.label})]})]})}exports.ChartRadial=Me;
|
|
2
2
|
//# sourceMappingURL=ChartRadial.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRadial.cjs","sources":["../../../../src/components/charts/ChartRadial/ChartRadial.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n ChartFrame,\n VOLTA,\n arcPath,\n chartHeight,\n centerTextRadius,\n fitCenterText,\n ringDiameter,\n useChartMetrics,\n useSeriesToggle,\n useTweenedNumbers,\n type ChartHeight,\n type ChartLegendAlign,\n type ChartLegendPosition,\n} from '../core';\nimport { resolveSeriesColors, type SeriesAppearance } from '../palette';\nimport { formatarNumero } from '../../../utils/formatters';\nimport styles from './ChartRadial.module.css';\n\nexport interface ChartRadialTrack extends SeriesAppearance {\n label: string;\n /** Meta da medida. Sem ela, a meta e o maior valor entre os aneis. */\n max?: number;\n value: number;\n}\n\nexport interface ChartRadialProps {\n accent?: string;\n /** Texto sob o valor do centro. Sem ele, o rotulo do primeiro anel. */\n centerLabel?: string;\n defaultHiddenTracks?: readonly string[];\n emptyMessage?: string;\n /** Angulo final da volta, em graus a partir do topo. Meia-lua usa 180. */\n endAngle?: number;\n formatValue?: (value: number) => string;\n height?: ChartHeight;\n hiddenTracks?: readonly string[];\n legend?: ChartLegendPosition;\n legendAlign?: ChartLegendAlign;\n onHiddenTracksChange?: (hidden: readonly string[]) => void;\n /** Valor no centro. Ele reserva o proprio espaco, ate metade do raio: com muitos aneis, quem cede e a espessura deles. */\n showCenter?: boolean;\n startAngle?: number;\n /** Raio das pontas do arco. Sem valor, o token de raio pequeno. */\n trackRadius?: number;\n /** Espessura de cada anel, em pixels. */\n thickness?: number;\n title: string;\n tracks: readonly ChartRadialTrack[];\n}\n\n/** Folga entre dois aneis vizinhos. */\nconst ESPACO_ENTRE_ANEIS = 6;\n\n/** Raio minimo do vazio central, com ou sem texto nele. */\nconst PISO_DO_RAIO = 8;\n\nfunction emRadianos(graus: number) {\n return (graus * Math.PI) / 180;\n}\n\nexport function ChartRadial({\n accent,\n centerLabel,\n defaultHiddenTracks,\n emptyMessage = 'Sem dados no período',\n endAngle = 360,\n formatValue = formatarNumero,\n height = 260,\n hiddenTracks,\n legend = 'bottom',\n legendAlign,\n onHiddenTracksChange,\n showCenter = true,\n startAngle = 0,\n thickness = 16,\n trackRadius,\n title,\n tracks,\n}: ChartRadialProps) {\n const { font, height: alturaMedida, radius: raioDoCanto, ref, width } = useChartMetrics();\n const { fillHeight, value: alturaDoDesenho } = chartHeight(height, alturaMedida);\n const { isHidden, toggle } = useSeriesToggle({\n defaultHiddenSeries: defaultHiddenTracks,\n hiddenSeries: hiddenTracks,\n onHiddenSeriesChange: onHiddenTracksChange,\n });\n\n // A cor sai da lista inteira, e nao das visiveis: desligar um anel nao pode\n // repintar os demais.\n const cores = useMemo(() => resolveSeriesColors(tracks, { accent }), [accent, tracks]);\n\n // Valor invalido tem o destino do ausente: nao entra no maximo nem preenche o anel.\n const valido = (anel: ChartRadialTrack) => Number.isFinite(anel.value);\n const maiorValor = tracks.reduce((maior, anel) => (valido(anel) ? Math.max(maior, anel.value) : maior), 0);\n const fracoes = tracks.map((anel) => {\n const meta = anel.max ?? maiorValor;\n\n return isHidden(anel.label) || !valido(anel) || !(meta > 0) ? 0 : Math.min(Math.max(anel.value, 0) / meta, 1);\n });\n\n // As fracoes caminham ate o alvo, entao o arco cresce ao aparecer e recolhe\n // quando o anel e desligado.\n const animadas = useTweenedNumbers(fracoes, { from: fracoes.map(() => 0) });\n\n const comeco = emRadianos(startAngle);\n const volta = Math.min(emRadianos(endAngle) - comeco, VOLTA);\n\n const raioExterno = ringDiameter(width, alturaDoDesenho) / 2;\n const destaque = tracks.find((anel) => !isHidden(anel.label));\n const valorDoCentro = showCenter && destaque ? formatValue(destaque.value) : undefined;\n // O centro reserva o que o valor pede no menor degrau da escala, ate metade do raio; quem cede e a espessura dos aneis.\n const piso =\n valorDoCentro === undefined\n ? PISO_DO_RAIO\n : Math.max(PISO_DO_RAIO, Math.min(centerTextRadius(valorDoCentro, font), raioExterno / 2));\n // Com muitos aneis, espessura e folga cedem na mesma proporcao ate caber; so a espessura cedia, e os ultimos\n // aneis passavam do centro.\n const cabe = Math.min(1, Math.max(raioExterno - piso, 0) / (Math.max(tracks.length, 1) * (thickness + ESPACO_ENTRE_ANEIS)));\n const espessuraCabivel = Math.max(thickness * cabe, 1);\n const folga = ESPACO_ENTRE_ANEIS * cabe;\n const raioDe = (indice: number) => raioExterno - indice * (espessuraCabivel + folga);\n const raioInterno = Math.max(raioDe(Math.max(tracks.length - 1, 0)) - espessuraCabivel, piso);\n\n const canto = trackRadius ?? raioDoCanto;\n const centro =\n destaque && valorDoCentro !== undefined\n ? fitCenterText(valorDoCentro, centerLabel ?? destaque.label, font, raioInterno * 2)\n : undefined;\n\n return (\n <ChartFrame\n centerOrigin\n containerRef={ref}\n empty={tracks.length === 0}\n emptyMessage={emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legend={tracks.map((anel, indice) => ({\n color: cores[indice],\n hidden: isHidden(anel.label),\n label: anel.label,\n value: valido(anel) ? formatValue(anel.value) : undefined,\n }))}\n legendAlign={legendAlign}\n legendPosition={tracks.length > 1 ? legend : 'none'}\n onToggleSeries={toggle}\n swatch=\"dot\"\n title={title}\n width={width}\n >\n {tracks.map((anel, indice) => {\n const externo = raioDe(indice);\n const interno = externo - espessuraCabivel;\n const fracao = animadas[indice] ?? 0;\n const preenchido = comeco + volta * fracao;\n const descricao = valido(anel) ? `${anel.label}: ${formatValue(anel.value)}` : anel.label;\n\n return (\n <g key={indice}>\n <path\n aria-label={descricao}\n className={styles.track}\n d={arcPath({\n cornerRadius: canto,\n endAngle: comeco + volta,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n >\n <title>{descricao}</title>\n </path>\n {fracao > 0 && (\n <path\n className={styles.fill}\n d={arcPath({\n cornerRadius: canto,\n endAngle: preenchido,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n fill={cores[indice]}\n />\n )}\n </g>\n );\n })}\n\n {centro && (\n <g className={styles.center}>\n <text\n className={styles.centerValue}\n dy={centro.size * 0.1}\n style={{ fontFamily: centro.family, fontSize: centro.size }}\n textAnchor=\"middle\"\n >\n {centro.value}\n </text>\n <text className={styles.centerLabel} dy={centro.lineHeight * 0.62} textAnchor=\"middle\">\n {centro.label}\n </text>\n </g>\n )}\n </ChartFrame>\n );\n}\n"],"names":["ESPACO_ENTRE_ANEIS","PISO_DO_RAIO","emRadianos","graus","ChartRadial","accent","centerLabel","defaultHiddenTracks","emptyMessage","endAngle","formatValue","formatarNumero","height","hiddenTracks","legend","legendAlign","onHiddenTracksChange","showCenter","startAngle","thickness","trackRadius","title","tracks","font","alturaMedida","raioDoCanto","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","isHidden","toggle","useSeriesToggle","cores","useMemo","resolveSeriesColors","valido","anel","maiorValor","maior","fracoes","meta","animadas","useTweenedNumbers","comeco","volta","VOLTA","raioExterno","ringDiameter","destaque","valorDoCentro","piso","centerTextRadius","cabe","espessuraCabivel","folga","raioDe","indice","raioInterno","canto","centro","fitCenterText","jsxs","ChartFrame","externo","interno","fracao","preenchido","descricao","jsx","styles","arcPath"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartRadial.cjs","sources":["../../../../src/components/charts/ChartRadial/ChartRadial.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n ChartFrame,\n VOLTA,\n arcPath,\n chartHeight,\n centerTextRadius,\n fitCenterText,\n ringDiameter,\n useChartMetrics,\n useSeriesToggle,\n useTweenedNumbers,\n type ChartHeight,\n type ChartLegendAlign,\n type ChartLegendPosition,\n} from '../core';\nimport { resolveSeriesColors, type SeriesAppearance } from '../palette';\nimport { formatarNumero, formatarPercentual } from '../../../utils/formatters';\nimport styles from './ChartRadial.module.css';\n\nexport interface ChartRadialTrack extends SeriesAppearance {\n label: string;\n /** Meta da medida. Sem ela, a meta e o maior valor entre os aneis. */\n max?: number;\n value: number;\n}\n\nexport interface ChartRadialProps {\n accent?: string;\n /** Texto sob o valor do centro. Sem ele, o rotulo do primeiro anel. */\n centerLabel?: string;\n defaultHiddenTracks?: readonly string[];\n emptyMessage?: string;\n /** Angulo final da volta, em graus a partir do topo. Meia-lua usa 180. */\n endAngle?: number;\n /** Formato dos valores no balao. Sem ele, vale o `formatValue`. */\n formatTooltipValue?: (value: number) => string;\n formatValue?: (value: number) => string;\n height?: ChartHeight;\n hiddenTracks?: readonly string[];\n legend?: ChartLegendPosition;\n legendAlign?: ChartLegendAlign;\n onHiddenTracksChange?: (hidden: readonly string[]) => void;\n /** Valor no centro. Ele reserva o proprio espaco, ate metade do raio: com muitos aneis, quem cede e a espessura deles. */\n showCenter?: boolean;\n /** Balao com o detalhe do que esta sob o ponteiro. Desligue para nao mostrar nada alem do `<title>` nativo. */\n showTooltip?: boolean;\n startAngle?: number;\n /** Raio das pontas do arco. Sem valor, o token de raio pequeno. */\n trackRadius?: number;\n /** Espessura de cada anel, em pixels. */\n thickness?: number;\n title: string;\n tracks: readonly ChartRadialTrack[];\n}\n\n/** Folga entre dois aneis vizinhos. */\nconst ESPACO_ENTRE_ANEIS = 6;\n\n/** Raio minimo do vazio central, com ou sem texto nele. */\nconst PISO_DO_RAIO = 8;\n\nfunction emRadianos(graus: number) {\n return (graus * Math.PI) / 180;\n}\n\nexport function ChartRadial({\n accent,\n centerLabel,\n defaultHiddenTracks,\n emptyMessage = 'Sem dados no período',\n endAngle = 360,\n formatTooltipValue,\n formatValue = formatarNumero,\n height = 260,\n hiddenTracks,\n legend = 'bottom',\n legendAlign,\n onHiddenTracksChange,\n showCenter = true,\n showTooltip = true,\n startAngle = 0,\n thickness = 16,\n trackRadius,\n title,\n tracks,\n}: ChartRadialProps) {\n const { font, height: alturaMedida, radius: raioDoCanto, ref, width } = useChartMetrics();\n const { fillHeight, value: alturaDoDesenho } = chartHeight(height, alturaMedida);\n const { isHidden, toggle } = useSeriesToggle({\n defaultHiddenSeries: defaultHiddenTracks,\n hiddenSeries: hiddenTracks,\n onHiddenSeriesChange: onHiddenTracksChange,\n });\n\n // A cor sai da lista inteira, e nao das visiveis: desligar um anel nao pode\n // repintar os demais.\n const cores = useMemo(() => resolveSeriesColors(tracks, { accent }), [accent, tracks]);\n\n // Valor invalido tem o destino do ausente: nao entra no maximo nem preenche o anel.\n const valido = (anel: ChartRadialTrack) => Number.isFinite(anel.value);\n const maiorValor = tracks.reduce((maior, anel) => (valido(anel) ? Math.max(maior, anel.value) : maior), 0);\n const fracoes = tracks.map((anel) => {\n const meta = anel.max ?? maiorValor;\n\n return isHidden(anel.label) || !valido(anel) || !(meta > 0) ? 0 : Math.min(Math.max(anel.value, 0) / meta, 1);\n });\n\n // As fracoes caminham ate o alvo, entao o arco cresce ao aparecer e recolhe\n // quando o anel e desligado.\n const animadas = useTweenedNumbers(fracoes, { from: fracoes.map(() => 0) });\n\n const [emFoco, setEmFoco] = useState<number | null>(null);\n\n function linhasDoBalao() {\n const anel = emFoco === null ? undefined : tracks[emFoco];\n\n if (!anel || !valido(anel) || emFoco === null) {\n return [];\n }\n\n const meta = anel.max ?? maiorValor;\n const linhas = [{ color: cores[emFoco], label: 'Valor', values: [anel.value] }, { label: 'Meta', values: [meta] }];\n\n return meta > 0\n ? [...linhas, { format: (fracao: number) => formatarPercentual(fracao), label: 'Atingido', values: [anel.value / meta] }]\n : linhas;\n }\n\n const comeco = emRadianos(startAngle);\n const volta = Math.min(emRadianos(endAngle) - comeco, VOLTA);\n\n const raioExterno = ringDiameter(width, alturaDoDesenho) / 2;\n const destaque = tracks.find((anel) => !isHidden(anel.label));\n const valorDoCentro = showCenter && destaque ? formatValue(destaque.value) : undefined;\n // O centro reserva o que o valor pede no menor degrau da escala, ate metade do raio; quem cede e a espessura dos aneis.\n const piso =\n valorDoCentro === undefined\n ? PISO_DO_RAIO\n : Math.max(PISO_DO_RAIO, Math.min(centerTextRadius(valorDoCentro, font), raioExterno / 2));\n // Com muitos aneis, espessura e folga cedem na mesma proporcao ate caber; so a espessura cedia, e os ultimos\n // aneis passavam do centro.\n const cabe = Math.min(1, Math.max(raioExterno - piso, 0) / (Math.max(tracks.length, 1) * (thickness + ESPACO_ENTRE_ANEIS)));\n const espessuraCabivel = Math.max(thickness * cabe, 1);\n const folga = ESPACO_ENTRE_ANEIS * cabe;\n const raioDe = (indice: number) => raioExterno - indice * (espessuraCabivel + folga);\n const raioInterno = Math.max(raioDe(Math.max(tracks.length - 1, 0)) - espessuraCabivel, piso);\n\n const canto = trackRadius ?? raioDoCanto;\n const centro =\n destaque && valorDoCentro !== undefined\n ? fitCenterText(valorDoCentro, centerLabel ?? destaque.label, font, raioInterno * 2)\n : undefined;\n\n return (\n <ChartFrame\n centerOrigin\n containerRef={ref}\n empty={tracks.length === 0}\n emptyMessage={emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legend={tracks.map((anel, indice) => ({\n color: cores[indice],\n hidden: isHidden(anel.label),\n label: anel.label,\n value: valido(anel) ? formatValue(anel.value) : undefined,\n }))}\n legendAlign={legendAlign}\n legendPosition={tracks.length > 1 ? legend : 'none'}\n onToggleSeries={toggle}\n swatch=\"dot\"\n title={title}\n tooltip={\n showTooltip\n ? {\n columns: [{ format: formatTooltipValue ?? formatValue }],\n computed: 'none',\n rows: linhasDoBalao(),\n title: emFoco === null ? undefined : tracks[emFoco]?.label,\n }\n : undefined\n }\n width={width}\n >\n {tracks.map((anel, indice) => {\n const externo = raioDe(indice);\n const interno = externo - espessuraCabivel;\n const fracao = animadas[indice] ?? 0;\n const preenchido = comeco + volta * fracao;\n const descricao = valido(anel) ? `${anel.label}: ${formatValue(anel.value)}` : anel.label;\n\n return (\n <g key={indice} onMouseEnter={() => setEmFoco(indice)} onMouseLeave={() => setEmFoco(null)}>\n <path\n aria-label={descricao}\n className={styles.track}\n d={arcPath({\n cornerRadius: canto,\n endAngle: comeco + volta,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n >\n {!showTooltip && <title>{descricao}</title>}\n </path>\n {fracao > 0 && (\n <path\n className={styles.fill}\n d={arcPath({\n cornerRadius: canto,\n endAngle: preenchido,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n fill={cores[indice]}\n />\n )}\n </g>\n );\n })}\n\n {centro && (\n <g className={styles.center}>\n <text\n className={styles.centerValue}\n dy={centro.size * 0.1}\n style={{ fontFamily: centro.family, fontSize: centro.size }}\n textAnchor=\"middle\"\n >\n {centro.value}\n </text>\n <text className={styles.centerLabel} dy={centro.lineHeight * 0.62} textAnchor=\"middle\">\n {centro.label}\n </text>\n </g>\n )}\n </ChartFrame>\n );\n}\n"],"names":["ESPACO_ENTRE_ANEIS","PISO_DO_RAIO","emRadianos","graus","ChartRadial","accent","centerLabel","defaultHiddenTracks","emptyMessage","endAngle","formatTooltipValue","formatValue","formatarNumero","height","hiddenTracks","legend","legendAlign","onHiddenTracksChange","showCenter","showTooltip","startAngle","thickness","trackRadius","title","tracks","font","alturaMedida","raioDoCanto","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","isHidden","toggle","useSeriesToggle","cores","useMemo","resolveSeriesColors","valido","anel","maiorValor","maior","fracoes","meta","animadas","useTweenedNumbers","emFoco","setEmFoco","useState","linhasDoBalao","linhas","fracao","formatarPercentual","comeco","volta","VOLTA","raioExterno","ringDiameter","destaque","valorDoCentro","piso","centerTextRadius","cabe","espessuraCabivel","folga","raioDe","indice","raioInterno","canto","centro","fitCenterText","jsxs","ChartFrame","_a","externo","interno","preenchido","descricao","jsx","styles","arcPath"],"mappings":"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"}
|
|
@@ -1,121 +1,138 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useMemo as
|
|
3
|
-
import
|
|
4
|
-
import { useChartMetrics as
|
|
5
|
-
import { useSeriesToggle as
|
|
6
|
-
import { resolveSeriesColors as
|
|
7
|
-
import { useTweenedNumbers as
|
|
8
|
-
import { formatarNumero as
|
|
9
|
-
import { centerTextRadius as
|
|
10
|
-
import { ChartFrame as
|
|
11
|
-
import { arcPath as
|
|
12
|
-
import { ringDiameter as
|
|
13
|
-
import { chartHeight as
|
|
14
|
-
const
|
|
15
|
-
function
|
|
16
|
-
return
|
|
1
|
+
import { jsxs as b, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo as ce, useState as de } from "react";
|
|
3
|
+
import m from "./ChartRadial.module.css.js";
|
|
4
|
+
import { useChartMetrics as ue } from "../core/useChartMetrics.js";
|
|
5
|
+
import { useSeriesToggle as he } from "../core/useSeriesToggle.js";
|
|
6
|
+
import { resolveSeriesColors as fe } from "../palette/seriesColor.js";
|
|
7
|
+
import { useTweenedNumbers as ge } from "../core/useTweenedNumbers.js";
|
|
8
|
+
import { formatarNumero as ve, formatarPercentual as pe } from "../../../utils/formatters/formatarNumero.js";
|
|
9
|
+
import { centerTextRadius as xe, fitCenterText as be } from "../core/centerText.js";
|
|
10
|
+
import { ChartFrame as Me } from "../core/ChartFrame.js";
|
|
11
|
+
import { arcPath as w, VOLTA as Re } from "../core/arcs.js";
|
|
12
|
+
import { ringDiameter as Se } from "../core/spacing.js";
|
|
13
|
+
import { chartHeight as Ae } from "../core/cartesianLayout.js";
|
|
14
|
+
const z = 6, L = 8;
|
|
15
|
+
function j(c) {
|
|
16
|
+
return c * Math.PI / 180;
|
|
17
17
|
}
|
|
18
|
-
function
|
|
19
|
-
accent:
|
|
20
|
-
centerLabel:
|
|
21
|
-
defaultHiddenTracks:
|
|
22
|
-
emptyMessage:
|
|
23
|
-
endAngle:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
18
|
+
function ze({
|
|
19
|
+
accent: c,
|
|
20
|
+
centerLabel: $,
|
|
21
|
+
defaultHiddenTracks: q,
|
|
22
|
+
emptyMessage: B = "Sem dados no período",
|
|
23
|
+
endAngle: V = 360,
|
|
24
|
+
formatTooltipValue: G,
|
|
25
|
+
formatValue: d = ve,
|
|
26
|
+
height: J = 260,
|
|
27
|
+
hiddenTracks: K,
|
|
28
|
+
legend: Q = "bottom",
|
|
29
|
+
legendAlign: U,
|
|
30
|
+
onHiddenTracksChange: W,
|
|
31
|
+
showCenter: X = !0,
|
|
32
|
+
showTooltip: M = !0,
|
|
33
|
+
startAngle: Y = 0,
|
|
34
|
+
thickness: R = 16,
|
|
35
|
+
trackRadius: Z,
|
|
36
|
+
title: k,
|
|
35
37
|
tracks: t
|
|
36
38
|
}) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
39
|
+
var F;
|
|
40
|
+
const { font: S, height: ee, radius: oe, ref: te, width: A } = ue(), { fillHeight: ne, value: C } = Ae(J, ee), { isHidden: g, toggle: ae } = he({
|
|
41
|
+
defaultHiddenSeries: q,
|
|
42
|
+
hiddenSeries: K,
|
|
43
|
+
onHiddenSeriesChange: W
|
|
44
|
+
}), v = ce(() => fe(t, { accent: c }), [c, t]), l = (e) => Number.isFinite(e.value), N = t.reduce((e, o) => l(o) ? Math.max(e, o.value) : e, 0), D = t.map((e) => {
|
|
45
|
+
const o = e.max ?? N;
|
|
46
|
+
return g(e.label) || !l(e) || !(o > 0) ? 0 : Math.min(Math.max(e.value, 0) / o, 1);
|
|
47
|
+
}), re = ge(D, { from: D.map(() => 0) }), [a, y] = de(null);
|
|
48
|
+
function le() {
|
|
49
|
+
const e = a === null ? void 0 : t[a];
|
|
50
|
+
if (!e || !l(e) || a === null)
|
|
51
|
+
return [];
|
|
52
|
+
const o = e.max ?? N, r = [{ color: v[a], label: "Valor", values: [e.value] }, { label: "Meta", values: [o] }];
|
|
53
|
+
return o > 0 ? [...r, { format: (f) => pe(f), label: "Atingido", values: [e.value / o] }] : r;
|
|
54
|
+
}
|
|
55
|
+
const i = j(Y), E = Math.min(j(V) - i, Re), p = Se(A, C) / 2, u = t.find((e) => !g(e.label)), h = X && u ? d(u.value) : void 0, H = h === void 0 ? L : Math.max(L, Math.min(xe(h, S), p / 2)), O = Math.min(1, Math.max(p - H, 0) / (Math.max(t.length, 1) * (R + z))), x = Math.max(R * O, 1), ie = z * O, P = (e) => p - e * (x + ie), se = Math.max(P(Math.max(t.length - 1, 0)) - x, H), T = Z ?? oe, n = u && h !== void 0 ? be(h, $ ?? u.label, S, se * 2) : void 0;
|
|
56
|
+
return /* @__PURE__ */ b(
|
|
57
|
+
Me,
|
|
47
58
|
{
|
|
48
59
|
centerOrigin: !0,
|
|
49
|
-
containerRef:
|
|
60
|
+
containerRef: te,
|
|
50
61
|
empty: t.length === 0,
|
|
51
|
-
emptyMessage:
|
|
52
|
-
fillHeight:
|
|
53
|
-
height:
|
|
62
|
+
emptyMessage: B,
|
|
63
|
+
fillHeight: ne,
|
|
64
|
+
height: C,
|
|
54
65
|
legend: t.map((e, o) => ({
|
|
55
|
-
color:
|
|
56
|
-
hidden:
|
|
66
|
+
color: v[o],
|
|
67
|
+
hidden: g(e.label),
|
|
57
68
|
label: e.label,
|
|
58
|
-
value: l(e) ?
|
|
69
|
+
value: l(e) ? d(e.value) : void 0
|
|
59
70
|
})),
|
|
60
|
-
legendAlign:
|
|
61
|
-
legendPosition: t.length > 1 ?
|
|
62
|
-
onToggleSeries:
|
|
71
|
+
legendAlign: U,
|
|
72
|
+
legendPosition: t.length > 1 ? Q : "none",
|
|
73
|
+
onToggleSeries: ae,
|
|
63
74
|
swatch: "dot",
|
|
64
|
-
title:
|
|
65
|
-
|
|
75
|
+
title: k,
|
|
76
|
+
tooltip: M ? {
|
|
77
|
+
columns: [{ format: G ?? d }],
|
|
78
|
+
computed: "none",
|
|
79
|
+
rows: le(),
|
|
80
|
+
title: a === null || (F = t[a]) == null ? void 0 : F.label
|
|
81
|
+
} : void 0,
|
|
82
|
+
width: A,
|
|
66
83
|
children: [
|
|
67
84
|
t.map((e, o) => {
|
|
68
|
-
const
|
|
69
|
-
return /* @__PURE__ */
|
|
70
|
-
/* @__PURE__ */
|
|
85
|
+
const r = P(o), f = r - x, I = re[o] ?? 0, me = i + E * I, _ = l(e) ? `${e.label}: ${d(e.value)}` : e.label;
|
|
86
|
+
return /* @__PURE__ */ b("g", { onMouseEnter: () => y(o), onMouseLeave: () => y(null), children: [
|
|
87
|
+
/* @__PURE__ */ s(
|
|
71
88
|
"path",
|
|
72
89
|
{
|
|
73
|
-
"aria-label":
|
|
74
|
-
className:
|
|
75
|
-
d:
|
|
76
|
-
cornerRadius:
|
|
77
|
-
endAngle:
|
|
78
|
-
innerRadius:
|
|
79
|
-
outerRadius:
|
|
80
|
-
startAngle:
|
|
90
|
+
"aria-label": _,
|
|
91
|
+
className: m.track,
|
|
92
|
+
d: w({
|
|
93
|
+
cornerRadius: T,
|
|
94
|
+
endAngle: i + E,
|
|
95
|
+
innerRadius: f,
|
|
96
|
+
outerRadius: r,
|
|
97
|
+
startAngle: i
|
|
81
98
|
}),
|
|
82
|
-
children: /* @__PURE__ */
|
|
99
|
+
children: !M && /* @__PURE__ */ s("title", { children: _ })
|
|
83
100
|
}
|
|
84
101
|
),
|
|
85
|
-
|
|
102
|
+
I > 0 && /* @__PURE__ */ s(
|
|
86
103
|
"path",
|
|
87
104
|
{
|
|
88
|
-
className:
|
|
89
|
-
d:
|
|
90
|
-
cornerRadius:
|
|
91
|
-
endAngle:
|
|
92
|
-
innerRadius:
|
|
93
|
-
outerRadius:
|
|
94
|
-
startAngle:
|
|
105
|
+
className: m.fill,
|
|
106
|
+
d: w({
|
|
107
|
+
cornerRadius: T,
|
|
108
|
+
endAngle: me,
|
|
109
|
+
innerRadius: f,
|
|
110
|
+
outerRadius: r,
|
|
111
|
+
startAngle: i
|
|
95
112
|
}),
|
|
96
|
-
fill:
|
|
113
|
+
fill: v[o]
|
|
97
114
|
}
|
|
98
115
|
)
|
|
99
116
|
] }, o);
|
|
100
117
|
}),
|
|
101
|
-
|
|
102
|
-
/* @__PURE__ */
|
|
118
|
+
n && /* @__PURE__ */ b("g", { className: m.center, children: [
|
|
119
|
+
/* @__PURE__ */ s(
|
|
103
120
|
"text",
|
|
104
121
|
{
|
|
105
|
-
className:
|
|
106
|
-
dy:
|
|
107
|
-
style: { fontFamily:
|
|
122
|
+
className: m.centerValue,
|
|
123
|
+
dy: n.size * 0.1,
|
|
124
|
+
style: { fontFamily: n.family, fontSize: n.size },
|
|
108
125
|
textAnchor: "middle",
|
|
109
|
-
children:
|
|
126
|
+
children: n.value
|
|
110
127
|
}
|
|
111
128
|
),
|
|
112
|
-
/* @__PURE__ */
|
|
129
|
+
/* @__PURE__ */ s("text", { className: m.centerLabel, dy: n.lineHeight * 0.62, textAnchor: "middle", children: n.label })
|
|
113
130
|
] })
|
|
114
131
|
]
|
|
115
132
|
}
|
|
116
133
|
);
|
|
117
134
|
}
|
|
118
135
|
export {
|
|
119
|
-
|
|
136
|
+
ze as ChartRadial
|
|
120
137
|
};
|
|
121
138
|
//# sourceMappingURL=ChartRadial.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRadial.js","sources":["../../../../src/components/charts/ChartRadial/ChartRadial.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n ChartFrame,\n VOLTA,\n arcPath,\n chartHeight,\n centerTextRadius,\n fitCenterText,\n ringDiameter,\n useChartMetrics,\n useSeriesToggle,\n useTweenedNumbers,\n type ChartHeight,\n type ChartLegendAlign,\n type ChartLegendPosition,\n} from '../core';\nimport { resolveSeriesColors, type SeriesAppearance } from '../palette';\nimport { formatarNumero } from '../../../utils/formatters';\nimport styles from './ChartRadial.module.css';\n\nexport interface ChartRadialTrack extends SeriesAppearance {\n label: string;\n /** Meta da medida. Sem ela, a meta e o maior valor entre os aneis. */\n max?: number;\n value: number;\n}\n\nexport interface ChartRadialProps {\n accent?: string;\n /** Texto sob o valor do centro. Sem ele, o rotulo do primeiro anel. */\n centerLabel?: string;\n defaultHiddenTracks?: readonly string[];\n emptyMessage?: string;\n /** Angulo final da volta, em graus a partir do topo. Meia-lua usa 180. */\n endAngle?: number;\n formatValue?: (value: number) => string;\n height?: ChartHeight;\n hiddenTracks?: readonly string[];\n legend?: ChartLegendPosition;\n legendAlign?: ChartLegendAlign;\n onHiddenTracksChange?: (hidden: readonly string[]) => void;\n /** Valor no centro. Ele reserva o proprio espaco, ate metade do raio: com muitos aneis, quem cede e a espessura deles. */\n showCenter?: boolean;\n startAngle?: number;\n /** Raio das pontas do arco. Sem valor, o token de raio pequeno. */\n trackRadius?: number;\n /** Espessura de cada anel, em pixels. */\n thickness?: number;\n title: string;\n tracks: readonly ChartRadialTrack[];\n}\n\n/** Folga entre dois aneis vizinhos. */\nconst ESPACO_ENTRE_ANEIS = 6;\n\n/** Raio minimo do vazio central, com ou sem texto nele. */\nconst PISO_DO_RAIO = 8;\n\nfunction emRadianos(graus: number) {\n return (graus * Math.PI) / 180;\n}\n\nexport function ChartRadial({\n accent,\n centerLabel,\n defaultHiddenTracks,\n emptyMessage = 'Sem dados no período',\n endAngle = 360,\n formatValue = formatarNumero,\n height = 260,\n hiddenTracks,\n legend = 'bottom',\n legendAlign,\n onHiddenTracksChange,\n showCenter = true,\n startAngle = 0,\n thickness = 16,\n trackRadius,\n title,\n tracks,\n}: ChartRadialProps) {\n const { font, height: alturaMedida, radius: raioDoCanto, ref, width } = useChartMetrics();\n const { fillHeight, value: alturaDoDesenho } = chartHeight(height, alturaMedida);\n const { isHidden, toggle } = useSeriesToggle({\n defaultHiddenSeries: defaultHiddenTracks,\n hiddenSeries: hiddenTracks,\n onHiddenSeriesChange: onHiddenTracksChange,\n });\n\n // A cor sai da lista inteira, e nao das visiveis: desligar um anel nao pode\n // repintar os demais.\n const cores = useMemo(() => resolveSeriesColors(tracks, { accent }), [accent, tracks]);\n\n // Valor invalido tem o destino do ausente: nao entra no maximo nem preenche o anel.\n const valido = (anel: ChartRadialTrack) => Number.isFinite(anel.value);\n const maiorValor = tracks.reduce((maior, anel) => (valido(anel) ? Math.max(maior, anel.value) : maior), 0);\n const fracoes = tracks.map((anel) => {\n const meta = anel.max ?? maiorValor;\n\n return isHidden(anel.label) || !valido(anel) || !(meta > 0) ? 0 : Math.min(Math.max(anel.value, 0) / meta, 1);\n });\n\n // As fracoes caminham ate o alvo, entao o arco cresce ao aparecer e recolhe\n // quando o anel e desligado.\n const animadas = useTweenedNumbers(fracoes, { from: fracoes.map(() => 0) });\n\n const comeco = emRadianos(startAngle);\n const volta = Math.min(emRadianos(endAngle) - comeco, VOLTA);\n\n const raioExterno = ringDiameter(width, alturaDoDesenho) / 2;\n const destaque = tracks.find((anel) => !isHidden(anel.label));\n const valorDoCentro = showCenter && destaque ? formatValue(destaque.value) : undefined;\n // O centro reserva o que o valor pede no menor degrau da escala, ate metade do raio; quem cede e a espessura dos aneis.\n const piso =\n valorDoCentro === undefined\n ? PISO_DO_RAIO\n : Math.max(PISO_DO_RAIO, Math.min(centerTextRadius(valorDoCentro, font), raioExterno / 2));\n // Com muitos aneis, espessura e folga cedem na mesma proporcao ate caber; so a espessura cedia, e os ultimos\n // aneis passavam do centro.\n const cabe = Math.min(1, Math.max(raioExterno - piso, 0) / (Math.max(tracks.length, 1) * (thickness + ESPACO_ENTRE_ANEIS)));\n const espessuraCabivel = Math.max(thickness * cabe, 1);\n const folga = ESPACO_ENTRE_ANEIS * cabe;\n const raioDe = (indice: number) => raioExterno - indice * (espessuraCabivel + folga);\n const raioInterno = Math.max(raioDe(Math.max(tracks.length - 1, 0)) - espessuraCabivel, piso);\n\n const canto = trackRadius ?? raioDoCanto;\n const centro =\n destaque && valorDoCentro !== undefined\n ? fitCenterText(valorDoCentro, centerLabel ?? destaque.label, font, raioInterno * 2)\n : undefined;\n\n return (\n <ChartFrame\n centerOrigin\n containerRef={ref}\n empty={tracks.length === 0}\n emptyMessage={emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legend={tracks.map((anel, indice) => ({\n color: cores[indice],\n hidden: isHidden(anel.label),\n label: anel.label,\n value: valido(anel) ? formatValue(anel.value) : undefined,\n }))}\n legendAlign={legendAlign}\n legendPosition={tracks.length > 1 ? legend : 'none'}\n onToggleSeries={toggle}\n swatch=\"dot\"\n title={title}\n width={width}\n >\n {tracks.map((anel, indice) => {\n const externo = raioDe(indice);\n const interno = externo - espessuraCabivel;\n const fracao = animadas[indice] ?? 0;\n const preenchido = comeco + volta * fracao;\n const descricao = valido(anel) ? `${anel.label}: ${formatValue(anel.value)}` : anel.label;\n\n return (\n <g key={indice}>\n <path\n aria-label={descricao}\n className={styles.track}\n d={arcPath({\n cornerRadius: canto,\n endAngle: comeco + volta,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n >\n <title>{descricao}</title>\n </path>\n {fracao > 0 && (\n <path\n className={styles.fill}\n d={arcPath({\n cornerRadius: canto,\n endAngle: preenchido,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n fill={cores[indice]}\n />\n )}\n </g>\n );\n })}\n\n {centro && (\n <g className={styles.center}>\n <text\n className={styles.centerValue}\n dy={centro.size * 0.1}\n style={{ fontFamily: centro.family, fontSize: centro.size }}\n textAnchor=\"middle\"\n >\n {centro.value}\n </text>\n <text className={styles.centerLabel} dy={centro.lineHeight * 0.62} textAnchor=\"middle\">\n {centro.label}\n </text>\n </g>\n )}\n </ChartFrame>\n );\n}\n"],"names":["ESPACO_ENTRE_ANEIS","PISO_DO_RAIO","emRadianos","graus","ChartRadial","accent","centerLabel","defaultHiddenTracks","emptyMessage","endAngle","formatValue","formatarNumero","height","hiddenTracks","legend","legendAlign","onHiddenTracksChange","showCenter","startAngle","thickness","trackRadius","title","tracks","font","alturaMedida","raioDoCanto","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","isHidden","toggle","useSeriesToggle","cores","useMemo","resolveSeriesColors","valido","anel","maiorValor","maior","fracoes","meta","animadas","useTweenedNumbers","comeco","volta","VOLTA","raioExterno","ringDiameter","destaque","valorDoCentro","piso","centerTextRadius","cabe","espessuraCabivel","folga","raioDe","indice","raioInterno","canto","centro","fitCenterText","jsxs","ChartFrame","externo","interno","fracao","preenchido","descricao","jsx","styles","arcPath"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartRadial.js","sources":["../../../../src/components/charts/ChartRadial/ChartRadial.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n ChartFrame,\n VOLTA,\n arcPath,\n chartHeight,\n centerTextRadius,\n fitCenterText,\n ringDiameter,\n useChartMetrics,\n useSeriesToggle,\n useTweenedNumbers,\n type ChartHeight,\n type ChartLegendAlign,\n type ChartLegendPosition,\n} from '../core';\nimport { resolveSeriesColors, type SeriesAppearance } from '../palette';\nimport { formatarNumero, formatarPercentual } from '../../../utils/formatters';\nimport styles from './ChartRadial.module.css';\n\nexport interface ChartRadialTrack extends SeriesAppearance {\n label: string;\n /** Meta da medida. Sem ela, a meta e o maior valor entre os aneis. */\n max?: number;\n value: number;\n}\n\nexport interface ChartRadialProps {\n accent?: string;\n /** Texto sob o valor do centro. Sem ele, o rotulo do primeiro anel. */\n centerLabel?: string;\n defaultHiddenTracks?: readonly string[];\n emptyMessage?: string;\n /** Angulo final da volta, em graus a partir do topo. Meia-lua usa 180. */\n endAngle?: number;\n /** Formato dos valores no balao. Sem ele, vale o `formatValue`. */\n formatTooltipValue?: (value: number) => string;\n formatValue?: (value: number) => string;\n height?: ChartHeight;\n hiddenTracks?: readonly string[];\n legend?: ChartLegendPosition;\n legendAlign?: ChartLegendAlign;\n onHiddenTracksChange?: (hidden: readonly string[]) => void;\n /** Valor no centro. Ele reserva o proprio espaco, ate metade do raio: com muitos aneis, quem cede e a espessura deles. */\n showCenter?: boolean;\n /** Balao com o detalhe do que esta sob o ponteiro. Desligue para nao mostrar nada alem do `<title>` nativo. */\n showTooltip?: boolean;\n startAngle?: number;\n /** Raio das pontas do arco. Sem valor, o token de raio pequeno. */\n trackRadius?: number;\n /** Espessura de cada anel, em pixels. */\n thickness?: number;\n title: string;\n tracks: readonly ChartRadialTrack[];\n}\n\n/** Folga entre dois aneis vizinhos. */\nconst ESPACO_ENTRE_ANEIS = 6;\n\n/** Raio minimo do vazio central, com ou sem texto nele. */\nconst PISO_DO_RAIO = 8;\n\nfunction emRadianos(graus: number) {\n return (graus * Math.PI) / 180;\n}\n\nexport function ChartRadial({\n accent,\n centerLabel,\n defaultHiddenTracks,\n emptyMessage = 'Sem dados no período',\n endAngle = 360,\n formatTooltipValue,\n formatValue = formatarNumero,\n height = 260,\n hiddenTracks,\n legend = 'bottom',\n legendAlign,\n onHiddenTracksChange,\n showCenter = true,\n showTooltip = true,\n startAngle = 0,\n thickness = 16,\n trackRadius,\n title,\n tracks,\n}: ChartRadialProps) {\n const { font, height: alturaMedida, radius: raioDoCanto, ref, width } = useChartMetrics();\n const { fillHeight, value: alturaDoDesenho } = chartHeight(height, alturaMedida);\n const { isHidden, toggle } = useSeriesToggle({\n defaultHiddenSeries: defaultHiddenTracks,\n hiddenSeries: hiddenTracks,\n onHiddenSeriesChange: onHiddenTracksChange,\n });\n\n // A cor sai da lista inteira, e nao das visiveis: desligar um anel nao pode\n // repintar os demais.\n const cores = useMemo(() => resolveSeriesColors(tracks, { accent }), [accent, tracks]);\n\n // Valor invalido tem o destino do ausente: nao entra no maximo nem preenche o anel.\n const valido = (anel: ChartRadialTrack) => Number.isFinite(anel.value);\n const maiorValor = tracks.reduce((maior, anel) => (valido(anel) ? Math.max(maior, anel.value) : maior), 0);\n const fracoes = tracks.map((anel) => {\n const meta = anel.max ?? maiorValor;\n\n return isHidden(anel.label) || !valido(anel) || !(meta > 0) ? 0 : Math.min(Math.max(anel.value, 0) / meta, 1);\n });\n\n // As fracoes caminham ate o alvo, entao o arco cresce ao aparecer e recolhe\n // quando o anel e desligado.\n const animadas = useTweenedNumbers(fracoes, { from: fracoes.map(() => 0) });\n\n const [emFoco, setEmFoco] = useState<number | null>(null);\n\n function linhasDoBalao() {\n const anel = emFoco === null ? undefined : tracks[emFoco];\n\n if (!anel || !valido(anel) || emFoco === null) {\n return [];\n }\n\n const meta = anel.max ?? maiorValor;\n const linhas = [{ color: cores[emFoco], label: 'Valor', values: [anel.value] }, { label: 'Meta', values: [meta] }];\n\n return meta > 0\n ? [...linhas, { format: (fracao: number) => formatarPercentual(fracao), label: 'Atingido', values: [anel.value / meta] }]\n : linhas;\n }\n\n const comeco = emRadianos(startAngle);\n const volta = Math.min(emRadianos(endAngle) - comeco, VOLTA);\n\n const raioExterno = ringDiameter(width, alturaDoDesenho) / 2;\n const destaque = tracks.find((anel) => !isHidden(anel.label));\n const valorDoCentro = showCenter && destaque ? formatValue(destaque.value) : undefined;\n // O centro reserva o que o valor pede no menor degrau da escala, ate metade do raio; quem cede e a espessura dos aneis.\n const piso =\n valorDoCentro === undefined\n ? PISO_DO_RAIO\n : Math.max(PISO_DO_RAIO, Math.min(centerTextRadius(valorDoCentro, font), raioExterno / 2));\n // Com muitos aneis, espessura e folga cedem na mesma proporcao ate caber; so a espessura cedia, e os ultimos\n // aneis passavam do centro.\n const cabe = Math.min(1, Math.max(raioExterno - piso, 0) / (Math.max(tracks.length, 1) * (thickness + ESPACO_ENTRE_ANEIS)));\n const espessuraCabivel = Math.max(thickness * cabe, 1);\n const folga = ESPACO_ENTRE_ANEIS * cabe;\n const raioDe = (indice: number) => raioExterno - indice * (espessuraCabivel + folga);\n const raioInterno = Math.max(raioDe(Math.max(tracks.length - 1, 0)) - espessuraCabivel, piso);\n\n const canto = trackRadius ?? raioDoCanto;\n const centro =\n destaque && valorDoCentro !== undefined\n ? fitCenterText(valorDoCentro, centerLabel ?? destaque.label, font, raioInterno * 2)\n : undefined;\n\n return (\n <ChartFrame\n centerOrigin\n containerRef={ref}\n empty={tracks.length === 0}\n emptyMessage={emptyMessage}\n fillHeight={fillHeight}\n height={alturaDoDesenho}\n legend={tracks.map((anel, indice) => ({\n color: cores[indice],\n hidden: isHidden(anel.label),\n label: anel.label,\n value: valido(anel) ? formatValue(anel.value) : undefined,\n }))}\n legendAlign={legendAlign}\n legendPosition={tracks.length > 1 ? legend : 'none'}\n onToggleSeries={toggle}\n swatch=\"dot\"\n title={title}\n tooltip={\n showTooltip\n ? {\n columns: [{ format: formatTooltipValue ?? formatValue }],\n computed: 'none',\n rows: linhasDoBalao(),\n title: emFoco === null ? undefined : tracks[emFoco]?.label,\n }\n : undefined\n }\n width={width}\n >\n {tracks.map((anel, indice) => {\n const externo = raioDe(indice);\n const interno = externo - espessuraCabivel;\n const fracao = animadas[indice] ?? 0;\n const preenchido = comeco + volta * fracao;\n const descricao = valido(anel) ? `${anel.label}: ${formatValue(anel.value)}` : anel.label;\n\n return (\n <g key={indice} onMouseEnter={() => setEmFoco(indice)} onMouseLeave={() => setEmFoco(null)}>\n <path\n aria-label={descricao}\n className={styles.track}\n d={arcPath({\n cornerRadius: canto,\n endAngle: comeco + volta,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n >\n {!showTooltip && <title>{descricao}</title>}\n </path>\n {fracao > 0 && (\n <path\n className={styles.fill}\n d={arcPath({\n cornerRadius: canto,\n endAngle: preenchido,\n innerRadius: interno,\n outerRadius: externo,\n startAngle: comeco,\n })}\n fill={cores[indice]}\n />\n )}\n </g>\n );\n })}\n\n {centro && (\n <g className={styles.center}>\n <text\n className={styles.centerValue}\n dy={centro.size * 0.1}\n style={{ fontFamily: centro.family, fontSize: centro.size }}\n textAnchor=\"middle\"\n >\n {centro.value}\n </text>\n <text className={styles.centerLabel} dy={centro.lineHeight * 0.62} textAnchor=\"middle\">\n {centro.label}\n </text>\n </g>\n )}\n </ChartFrame>\n );\n}\n"],"names":["ESPACO_ENTRE_ANEIS","PISO_DO_RAIO","emRadianos","graus","ChartRadial","accent","centerLabel","defaultHiddenTracks","emptyMessage","endAngle","formatTooltipValue","formatValue","formatarNumero","height","hiddenTracks","legend","legendAlign","onHiddenTracksChange","showCenter","showTooltip","startAngle","thickness","trackRadius","title","tracks","font","alturaMedida","raioDoCanto","ref","width","useChartMetrics","fillHeight","alturaDoDesenho","chartHeight","isHidden","toggle","useSeriesToggle","cores","useMemo","resolveSeriesColors","valido","anel","maiorValor","maior","fracoes","meta","animadas","useTweenedNumbers","emFoco","setEmFoco","useState","linhasDoBalao","linhas","fracao","formatarPercentual","comeco","volta","VOLTA","raioExterno","ringDiameter","destaque","valorDoCentro","piso","centerTextRadius","cabe","espessuraCabivel","folga","raioDe","indice","raioInterno","canto","centro","fitCenterText","jsxs","ChartFrame","_a","externo","interno","preenchido","descricao","jsx","styles","arcPath"],"mappings":"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"}
|