@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useListing.js","sources":["../../../../src/components/data-display/List/useListing.ts"],"sourcesContent":["import { useMemo, useRef, useState, type KeyboardEvent } from 'react';\nimport { useSelection, type SelectionItem, type SelectionStatus } from '../../../hooks/useSelection';\nimport { containsTerm } from '../../../utils/textSearch';\n\nexport type ListingSelectionMode = 'none' | 'single' | 'multiple';\n\nexport interface ListingItem {\n disabled?: boolean;\n label: string;\n value: string;\n}\n\nexport interface UseListingOptions {\n defaultValue?: readonly ListingItem[];\n items: readonly ListingItem[];\n onSearch?: (term: string) => void;\n onSelectionChange?: (items: readonly ListingItem[]) => void;\n selectionMode?: ListingSelectionMode;\n value?: readonly ListingItem[];\n}\n\nexport interface Listing {\n detached: readonly ListingItem[];\n focus: (value?: string) => void;\n focusFirst: () => void;\n focusLast: () => void;\n focusedKey?: string;\n handleKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n isSelected: (value: string) => boolean;\n filter: (term: string) => void;\n reset: () => void;\n typeahead: (character: string) => void;\n select: (item: ListingItem, extend?: boolean) => void;\n selected: readonly ListingItem[];\n selectionMode: ListingSelectionMode;\n status: SelectionStatus;\n toggleAll: () => void;\n term: string;\n visible: readonly ListingItem[];\n}\n\n/** Teclas que, num campo de texto, editam o texto; nele, a listagem nao as toma para si. */\nconst TECLAS_DE_EDICAO = ['Home', 'End', ' '];\n\nexport function useListing({\n defaultValue,\n items,\n onSearch,\n onSelectionChange,\n selectionMode = 'none',\n value,\n}: UseListingOptions): Listing {\n const [term, setTerm] = useState('');\n\n const visible = useMemo(() => {\n if (onSearch || !term) {\n return items;\n }\n\n return items.filter((item) => containsTerm(item.label, term));\n }, [items, onSearch, term]);\n\n const collection = useMemo<SelectionItem[]>(\n () => visible.map((item) => ({ key: item.value, disabled: item.disabled, textValue: item.label })),\n [visible],\n );\n\n // Toda opcao ja vista fica registrada, inclusive a que so chegou pelo valor. Com busca assincrona, `items`\n // e trocada a cada consulta, e resolver a escolha so contra ela descartava o que veio de outra consulta.\n const conhecidos = useRef(new Map<string, ListingItem>());\n\n for (const item of [...(defaultValue ?? []), ...(value ?? [])]) {\n if (!conhecidos.current.has(item.value)) {\n conhecidos.current.set(item.value, item);\n }\n }\n\n for (const item of items) {\n conhecidos.current.set(item.value, item);\n }\n\n const conhecido = (chave: string): ListingItem => conhecidos.current.get(chave) ?? { value: chave, label: '' };\n\n const selection = useSelection({\n items: collection,\n mode: selectionMode,\n defaultSelectedKeys: defaultValue?.map((item) => item.value),\n selectedKeys: value?.map((item) => item.value),\n onSelectionChange: (keys) => onSelectionChange?.([...keys].map(conhecido)),\n });\n\n const selected = (value ?? selection.selectedItems.map((item) => ({ value: item.key, label: '' }))).map((item) =>\n conhecido(item.value),\n );\n\n const detached = useMemo(() => {\n if (!term || selectionMode !== 'multiple') {\n return [];\n }\n\n const visibleValues = new Set(visible.map((item) => item.value));\n\n return selected.filter((item) => !visibleValues.has(item.value));\n }, [selected, selectionMode, term, visible]);\n\n function handleKeyDown(event: KeyboardEvent<HTMLElement>) {\n if (selectionMode === 'none' || (event.target instanceof HTMLInputElement && TECLAS_DE_EDICAO.includes(event.key))) {\n return;\n }\n\n const estender = event.shiftKey;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (selection.focusedKey === undefined) {\n selection.focusFirst(estender);\n } else {\n selection.focusNext(estender);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n selection.focusPrevious(estender);\n } else if (event.key === 'Home') {\n event.preventDefault();\n selection.focusFirst(estender);\n } else if (event.key === 'End') {\n event.preventDefault();\n selection.focusLast(estender);\n } else if (event.key === 'Enter' || event.key === ' ') {\n const focused = visible.find((item) => item.value === selection.focusedKey);\n\n if (focused && !focused.disabled) {\n event.preventDefault();\n selection.select(focused.value);\n }\n }\n }\n\n return {\n detached,\n focus: selection.focus,\n focusFirst: selection.focusFirst,\n focusLast: selection.focusLast,\n focusedKey: selection.focusedKey,\n handleKeyDown,\n isSelected: (itemValue) => selected.some((item) => item.value === itemValue),\n filter: (nextTerm) => {\n setTerm(nextTerm);\n selection.focus(undefined);\n onSearch?.(nextTerm);\n },\n reset: selection.reset,\n typeahead: selection.search,\n select: (item, extend) => {\n if (item.disabled) {\n return;\n }\n\n if (extend && selectionMode === 'multiple') {\n selection.selectRange(item.value);\n return;\n }\n\n selection.select(item.value);\n },\n selected,\n selectionMode,\n status: selection.status,\n toggleAll: selection.toggleAll,\n term,\n visible,\n };\n}\n"],"names":["TECLAS_DE_EDICAO","useListing","defaultValue","items","onSearch","onSelectionChange","selectionMode","value","term","setTerm","useState","visible","useMemo","item","containsTerm","collection","conhecidos","useRef","conhecido","chave","selection","useSelection","keys","selected","detached","visibleValues","handleKeyDown","event","estender","focused","itemValue","nextTerm","extend"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"useListing.js","sources":["../../../../src/components/data-display/List/useListing.ts"],"sourcesContent":["import { useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { useSelection, type SelectionItem, type SelectionStatus } from '../../../hooks/useSelection';\nimport { containsTerm } from '../../../utils/textSearch';\n\nexport type ListingSelectionMode = 'none' | 'single' | 'multiple';\n\nexport interface ListingItem {\n /** Segunda linha da opção, como a coleção de um documento. */\n description?: string;\n disabled?: boolean;\n /** Título do grupo. As opções seguidas de um mesmo grupo aparecem juntas, sob ele. */\n group?: string;\n /** Decorativo, à frente do rótulo: quem nomeia a opção é o rótulo. */\n icon?: ReactNode;\n label: string;\n value: string;\n}\n\nexport interface UseListingOptions {\n defaultValue?: readonly ListingItem[];\n items: readonly ListingItem[];\n onSearch?: (term: string) => void;\n onSelectionChange?: (items: readonly ListingItem[]) => void;\n selectionMode?: ListingSelectionMode;\n value?: readonly ListingItem[];\n}\n\nexport interface Listing {\n detached: readonly ListingItem[];\n focus: (value?: string) => void;\n focusFirst: () => void;\n focusLast: () => void;\n focusedKey?: string;\n handleKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n isSelected: (value: string) => boolean;\n filter: (term: string) => void;\n reset: () => void;\n typeahead: (character: string) => void;\n select: (item: ListingItem, extend?: boolean) => void;\n selected: readonly ListingItem[];\n selectionMode: ListingSelectionMode;\n status: SelectionStatus;\n toggleAll: () => void;\n term: string;\n visible: readonly ListingItem[];\n}\n\n/** Teclas que, num campo de texto, editam o texto; nele, a listagem nao as toma para si. */\nconst TECLAS_DE_EDICAO = ['Home', 'End', ' '];\n\nexport function useListing({\n defaultValue,\n items,\n onSearch,\n onSelectionChange,\n selectionMode = 'none',\n value,\n}: UseListingOptions): Listing {\n const [term, setTerm] = useState('');\n\n const visible = useMemo(() => {\n if (onSearch || !term) {\n return items;\n }\n\n return items.filter((item) => containsTerm(item.label, term));\n }, [items, onSearch, term]);\n\n const collection = useMemo<SelectionItem[]>(\n () => visible.map((item) => ({ key: item.value, disabled: item.disabled, textValue: item.label })),\n [visible],\n );\n\n // Toda opcao ja vista fica registrada, inclusive a que so chegou pelo valor. Com busca assincrona, `items`\n // e trocada a cada consulta, e resolver a escolha so contra ela descartava o que veio de outra consulta.\n const conhecidos = useRef(new Map<string, ListingItem>());\n\n for (const item of [...(defaultValue ?? []), ...(value ?? [])]) {\n if (!conhecidos.current.has(item.value)) {\n conhecidos.current.set(item.value, item);\n }\n }\n\n for (const item of items) {\n conhecidos.current.set(item.value, item);\n }\n\n const conhecido = (chave: string): ListingItem => conhecidos.current.get(chave) ?? { value: chave, label: '' };\n\n const selection = useSelection({\n items: collection,\n mode: selectionMode,\n defaultSelectedKeys: defaultValue?.map((item) => item.value),\n selectedKeys: value?.map((item) => item.value),\n onSelectionChange: (keys) => onSelectionChange?.([...keys].map(conhecido)),\n });\n\n const selected = (value ?? selection.selectedItems.map((item) => ({ value: item.key, label: '' }))).map((item) =>\n conhecido(item.value),\n );\n\n const detached = useMemo(() => {\n if (!term || selectionMode !== 'multiple') {\n return [];\n }\n\n const visibleValues = new Set(visible.map((item) => item.value));\n\n return selected.filter((item) => !visibleValues.has(item.value));\n }, [selected, selectionMode, term, visible]);\n\n function handleKeyDown(event: KeyboardEvent<HTMLElement>) {\n if (selectionMode === 'none' || (event.target instanceof HTMLInputElement && TECLAS_DE_EDICAO.includes(event.key))) {\n return;\n }\n\n const estender = event.shiftKey;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (selection.focusedKey === undefined) {\n selection.focusFirst(estender);\n } else {\n selection.focusNext(estender);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n selection.focusPrevious(estender);\n } else if (event.key === 'Home') {\n event.preventDefault();\n selection.focusFirst(estender);\n } else if (event.key === 'End') {\n event.preventDefault();\n selection.focusLast(estender);\n } else if (event.key === 'Enter' || event.key === ' ') {\n const focused = visible.find((item) => item.value === selection.focusedKey);\n\n if (focused && !focused.disabled) {\n event.preventDefault();\n selection.select(focused.value);\n }\n }\n }\n\n return {\n detached,\n focus: selection.focus,\n focusFirst: selection.focusFirst,\n focusLast: selection.focusLast,\n focusedKey: selection.focusedKey,\n handleKeyDown,\n isSelected: (itemValue) => selected.some((item) => item.value === itemValue),\n filter: (nextTerm) => {\n setTerm(nextTerm);\n selection.focus(undefined);\n onSearch?.(nextTerm);\n },\n reset: selection.reset,\n typeahead: selection.search,\n select: (item, extend) => {\n if (item.disabled) {\n return;\n }\n\n if (extend && selectionMode === 'multiple') {\n selection.selectRange(item.value);\n return;\n }\n\n selection.select(item.value);\n },\n selected,\n selectionMode,\n status: selection.status,\n toggleAll: selection.toggleAll,\n term,\n visible,\n };\n}\n"],"names":["TECLAS_DE_EDICAO","useListing","defaultValue","items","onSearch","onSelectionChange","selectionMode","value","term","setTerm","useState","visible","useMemo","item","containsTerm","collection","conhecidos","useRef","conhecido","chave","selection","useSelection","keys","selected","detached","visibleValues","handleKeyDown","event","estender","focused","itemValue","nextTerm","extend"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),i=require("react"),a=require("./SortableList.module.css.cjs"),C=require("../../../hooks/useSelection/useSelection.cjs"),F=require("../../icons/icons.cjs"),E="button, a[href], input, select, textarea, [tabindex]";function O(h,k,t){var w;const b=[h,...h.querySelectorAll(E)].filter(p=>!p.matches(":disabled"));(w=b[b.indexOf(k)+t])==null||w.focus()}function H({className:h,defaultSelectedKey:k,items:t,label:b,onReorder:w,onSelectionChange:p,selectedKey:A,...R}){var $;const x=i.useId(),d=i.useRef(new Map),j=i.useRef(void 0),[o,y]=i.useState(null),[q,L]=i.useState(""),P=i.useMemo(()=>t.map(e=>({key:e.key,textValue:e.title})),[t]),g=C.useSelection({items:P,mode:"single",defaultSelectedKeys:k===void 0?void 0:[k],selectedKeys:A===void 0?void 0:A===null?[]:[A],onSelectionChange:e=>{const[r]=e;r!==void 0&&(p==null||p(r))}}),[D]=g.selectedKeys,K=[g.focusedKey,D].find(e=>t.some(r=>r.key===e))??(($=t[0])==null?void 0:$.key),S=o!==null,v=o&&o.gap!==o.from&&o.gap!==o.from+1?o.gap:void 0;i.useEffect(()=>{d.current.forEach(e=>e.querySelectorAll(E).forEach(r=>r.tabIndex=-1))}),i.useEffect(()=>{var e;j.current!==void 0&&((e=d.current.get(j.current))==null||e.focus(),j.current=void 0)},[t]),i.useEffect(()=>{if(!S)return;function e(r){r.key==="Escape"&&(r.preventDefault(),r.stopPropagation(),y(null))}return document.addEventListener("keydown",e,!0),()=>document.removeEventListener("keydown",e,!0)},[S]);function f(e){var r;e!==void 0&&(e===D?g.focus(e):g.select(e),(r=d.current.get(e))==null||r.focus())}function N(e,r){r<0||r>=t.length||r===e||(j.current=t[e].key,w(e,r),L(`Movido para a posição ${r+1} de ${t.length}`))}function B(e){var u,s;const r=e.target,c=r.closest('[role="row"]'),n=t.findIndex(m=>d.current.get(m.key)===c);if(!(!c||n<0)){if(e.key==="ArrowLeft"||e.key==="ArrowRight"){e.preventDefault(),O(c,r,e.key==="ArrowRight"?1:-1);return}if(r===c){if(e.altKey&&e.key==="ArrowUp")N(n,n-1);else if(e.altKey&&e.key==="ArrowDown")N(n,n+1);else if(e.key==="ArrowUp")f((u=t[n-1])==null?void 0:u.key);else if(e.key==="ArrowDown")f((s=t[n+1])==null?void 0:s.key);else if(e.key==="Home")f(t[0].key);else if(e.key==="End")f(t[t.length-1].key);else if(e.key===" "||e.key==="Enter")f(t[n].key);else return;e.preventDefault()}}}function M(e,r){e.target.closest(E)===e.currentTarget&&f(r)}function T(e,r){e.button===0&&(e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),y({from:r,gap:r}))}function I(e){if(!o)return;const r=t.filter(c=>{var u;const n=(u=d.current.get(c.key))==null?void 0:u.getBoundingClientRect();return n!==void 0&&n.top+n.height/2<e.clientY}).length;r!==o.gap&&y({...o,gap:r})}function U(){o&&(y(null),N(o.from,o.gap>o.from?o.gap-1:o.gap))}return l.jsxs(l.Fragment,{children:[l.jsx("div",{...R,"aria-label":b,className:[a.default.list,h].filter(Boolean).join(" "),onKeyDown:B,role:"grid",children:t.map((e,r)=>{const c=(e.level??1)-1,n=`${x}-${r}-title`,u=`${x}-${r}-excerpt`;return l.jsx("div",{"aria-describedby":e.excerpt?u:void 0,"aria-labelledby":n,"aria-selected":e.key===D,className:[a.default.row,e.key===D&&a.default.selected,(o==null?void 0:o.from)===r&&a.default.dragging,v===r&&a.default.dropBefore,v===t.length&&r===t.length-1&&a.default.dropAfter].filter(Boolean).join(" "),onClick:s=>M(s,e.key),onFocus:()=>g.focus(e.key),ref:s=>{s?d.current.set(e.key,s):d.current.delete(e.key)},role:"row",style:c>0?{marginInlineStart:`calc(${c} * var(--pl-space-5))`}:void 0,tabIndex:e.key===K?0:-1,children:l.jsxs("div",{className:a.default.cell,role:"gridcell",children:[l.jsx("button",{"aria-describedby":`${x}-hint`,"aria-label":`Reordenar ${e.title}`,className:a.default.handle,onPointerCancel:()=>y(null),onPointerDown:s=>T(s,r),onPointerMove:I,onPointerUp:U,type:"button",children:l.jsx(F.IconDragHandle,{})}),e.icon&&l.jsx("span",{"aria-hidden":"true",className:a.default.icon,children:e.icon}),l.jsxs("span",{className:a.default.text,children:[l.jsx("span",{className:a.default.title,id:n,children:e.title}),e.excerpt&&l.jsx("span",{className:a.default.excerpt,id:u,children:e.excerpt})]}),e.actions&&l.jsx("span",{className:a.default.actions,children:e.actions})]})},e.key)})}),l.jsx("span",{className:a.default.hiddenText,id:`${x}-hint`,children:"Na linha, Alt com as setas para cima e para baixo move o item."}),l.jsx("span",{className:a.default.hiddenText,role:"status",children:q})]})}exports.SortableList=H;
|
|
2
|
+
//# sourceMappingURL=SortableList.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortableList.cjs","sources":["../../../../src/components/data-display/SortableList/SortableList.tsx"],"sourcesContent":["import {\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type KeyboardEvent,\n type MouseEvent,\n type PointerEvent,\n type ReactNode,\n} from 'react';\nimport { useSelection, type SelectionItem } from '../../../hooks/useSelection';\nimport { IconDragHandle } from '../../icons';\nimport styles from './SortableList.module.css';\n\nexport interface SortableListItem {\n /** Ações da linha, como `ButtonIcon`: alcançadas pelas setas para os lados. */\n actions?: ReactNode;\n excerpt?: string;\n icon?: ReactNode;\n key: string;\n /** Nível de aninhamento, a partir de 1. Só recua a linha. */\n level?: number;\n title: string;\n}\n\nexport interface SortableListProps extends Omit<ComponentPropsWithRef<'div'>, 'children' | 'onKeyDown'> {\n defaultSelectedKey?: string;\n items: readonly SortableListItem[];\n /** Nome da lista, para o leitor de tela. */\n label: string;\n onReorder: (fromIndex: number, toIndex: number) => void;\n onSelectionChange?: (key: string) => void;\n /** `null` deixa a lista controlada sem nenhum item escolhido. */\n selectedKey?: string | null;\n}\n\ninterface Drag {\n from: number;\n /** Fresta onde o item cairia: 0 antes do primeiro, `items.length` depois do último. */\n gap: number;\n}\n\nconst FOCUSABLE = 'button, a[href], input, select, textarea, [tabindex]';\n\nfunction focusWithinRow(row: HTMLElement, from: HTMLElement, step: 1 | -1) {\n const stops = [row, ...row.querySelectorAll<HTMLElement>(FOCUSABLE)].filter((element) => !element.matches(':disabled'));\n stops[stops.indexOf(from) + step]?.focus();\n}\n\nexport function SortableList({\n className,\n defaultSelectedKey,\n items,\n label,\n onReorder,\n onSelectionChange,\n selectedKey,\n ...props\n}: SortableListProps) {\n const baseId = useId();\n const rows = useRef(new Map<string, HTMLDivElement>());\n const movedKey = useRef<string>(undefined);\n const [drag, setDrag] = useState<Drag | null>(null);\n const [announcement, setAnnouncement] = useState('');\n const collection = useMemo<SelectionItem[]>(() => items.map((item) => ({ key: item.key, textValue: item.title })), [items]);\n const selection = useSelection({\n items: collection,\n mode: 'single',\n defaultSelectedKeys: defaultSelectedKey === undefined ? undefined : [defaultSelectedKey],\n selectedKeys: selectedKey === undefined ? undefined : selectedKey === null ? [] : [selectedKey],\n onSelectionChange: (keys) => {\n const [key] = keys;\n if (key !== undefined) {\n onSelectionChange?.(key);\n }\n },\n });\n const [selected] = selection.selectedKeys;\n const tabStop = [selection.focusedKey, selected].find((key) => items.some((item) => item.key === key)) ?? items[0]?.key;\n const dragging = drag !== null;\n // Soltar logo acima ou logo abaixo de si mesmo não move nada, e não ganha indicador.\n const dropGap = drag && drag.gap !== drag.from && drag.gap !== drag.from + 1 ? drag.gap : undefined;\n\n // Os controles das linhas saem da ordem do Tab: a lista é uma parada só, e as setas para os lados chegam a eles.\n useEffect(() => {\n rows.current.forEach((row) => row.querySelectorAll<HTMLElement>(FOCUSABLE).forEach((element) => (element.tabIndex = -1)));\n });\n\n // Reordenar move o nó no DOM, e o navegador tira o foco dele.\n useEffect(() => {\n if (movedKey.current !== undefined) {\n rows.current.get(movedKey.current)?.focus();\n movedKey.current = undefined;\n }\n }, [items]);\n\n useEffect(() => {\n if (!dragging) {\n return;\n }\n\n function cancel(event: globalThis.KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setDrag(null);\n }\n }\n\n document.addEventListener('keydown', cancel, true);\n return () => document.removeEventListener('keydown', cancel, true);\n }, [dragging]);\n\n function choose(key: string | undefined) {\n if (key === undefined) {\n return;\n }\n\n if (key === selected) {\n selection.focus(key);\n } else {\n selection.select(key);\n }\n\n rows.current.get(key)?.focus();\n }\n\n function move(fromIndex: number, toIndex: number) {\n if (toIndex < 0 || toIndex >= items.length || toIndex === fromIndex) {\n return;\n }\n\n movedKey.current = items[fromIndex].key;\n onReorder(fromIndex, toIndex);\n setAnnouncement(`Movido para a posição ${toIndex + 1} de ${items.length}`);\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement;\n const row = target.closest<HTMLElement>('[role=\"row\"]');\n const index = items.findIndex((item) => rows.current.get(item.key) === row);\n\n if (!row || index < 0) {\n return;\n }\n\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n event.preventDefault();\n focusWithinRow(row, target, event.key === 'ArrowRight' ? 1 : -1);\n return;\n }\n\n // Nos controles da linha, as demais teclas são deles.\n if (target !== row) {\n return;\n }\n\n if (event.altKey && event.key === 'ArrowUp') {\n move(index, index - 1);\n } else if (event.altKey && event.key === 'ArrowDown') {\n move(index, index + 1);\n } else if (event.key === 'ArrowUp') {\n choose(items[index - 1]?.key);\n } else if (event.key === 'ArrowDown') {\n choose(items[index + 1]?.key);\n } else if (event.key === 'Home') {\n choose(items[0].key);\n } else if (event.key === 'End') {\n choose(items[items.length - 1].key);\n } else if (event.key === ' ' || event.key === 'Enter') {\n choose(items[index].key);\n } else {\n return;\n }\n\n event.preventDefault();\n }\n\n function handleRowClick(event: MouseEvent<HTMLDivElement>, key: string) {\n // O clique num controle da linha é do controle, e não escolhe a linha.\n if ((event.target as HTMLElement).closest(FOCUSABLE) === event.currentTarget) {\n choose(key);\n }\n }\n\n function startDrag(event: PointerEvent<HTMLButtonElement>, index: number) {\n if (event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.currentTarget.setPointerCapture(event.pointerId);\n setDrag({ from: index, gap: index });\n }\n\n function followDrag(event: PointerEvent<HTMLButtonElement>) {\n if (!drag) {\n return;\n }\n\n const gap = items.filter((item) => {\n const box = rows.current.get(item.key)?.getBoundingClientRect();\n return box !== undefined && box.top + box.height / 2 < event.clientY;\n }).length;\n\n if (gap !== drag.gap) {\n setDrag({ ...drag, gap });\n }\n }\n\n function endDrag() {\n if (!drag) {\n return;\n }\n\n setDrag(null);\n move(drag.from, drag.gap > drag.from ? drag.gap - 1 : drag.gap);\n }\n\n return (\n <>\n <div\n {...props}\n aria-label={label}\n className={[styles.list, className].filter(Boolean).join(' ')}\n onKeyDown={handleKeyDown}\n role=\"grid\"\n >\n {items.map((item, index) => {\n const depth = (item.level ?? 1) - 1;\n const titleId = `${baseId}-${index}-title`;\n const excerptId = `${baseId}-${index}-excerpt`;\n\n return (\n <div\n aria-describedby={item.excerpt ? excerptId : undefined}\n aria-labelledby={titleId}\n aria-selected={item.key === selected}\n className={[\n styles.row,\n item.key === selected && styles.selected,\n drag?.from === index && styles.dragging,\n dropGap === index && styles.dropBefore,\n dropGap === items.length && index === items.length - 1 && styles.dropAfter,\n ]\n .filter(Boolean)\n .join(' ')}\n key={item.key}\n onClick={(event) => handleRowClick(event, item.key)}\n onFocus={() => selection.focus(item.key)}\n ref={(node) => {\n if (node) {\n rows.current.set(item.key, node);\n } else {\n rows.current.delete(item.key);\n }\n }}\n role=\"row\"\n style={depth > 0 ? { marginInlineStart: `calc(${depth} * var(--pl-space-5))` } : undefined}\n tabIndex={item.key === tabStop ? 0 : -1}\n >\n <div className={styles.cell} role=\"gridcell\">\n <button\n aria-describedby={`${baseId}-hint`}\n aria-label={`Reordenar ${item.title}`}\n className={styles.handle}\n onPointerCancel={() => setDrag(null)}\n onPointerDown={(event) => startDrag(event, index)}\n onPointerMove={followDrag}\n onPointerUp={endDrag}\n type=\"button\"\n >\n <IconDragHandle />\n </button>\n {item.icon && (\n <span aria-hidden=\"true\" className={styles.icon}>\n {item.icon}\n </span>\n )}\n <span className={styles.text}>\n <span className={styles.title} id={titleId}>\n {item.title}\n </span>\n {item.excerpt && (\n <span className={styles.excerpt} id={excerptId}>\n {item.excerpt}\n </span>\n )}\n </span>\n {item.actions && <span className={styles.actions}>{item.actions}</span>}\n </div>\n </div>\n );\n })}\n </div>\n <span className={styles.hiddenText} id={`${baseId}-hint`}>\n Na linha, Alt com as setas para cima e para baixo move o item.\n </span>\n <span className={styles.hiddenText} role=\"status\">\n {announcement}\n </span>\n </>\n );\n}\n"],"names":["FOCUSABLE","focusWithinRow","row","from","step","stops","element","_a","SortableList","className","defaultSelectedKey","items","label","onReorder","onSelectionChange","selectedKey","props","baseId","useId","rows","useRef","movedKey","drag","setDrag","useState","announcement","setAnnouncement","collection","useMemo","item","selection","useSelection","keys","key","selected","tabStop","dragging","dropGap","useEffect","cancel","event","choose","move","fromIndex","toIndex","handleKeyDown","target","index","_b","handleRowClick","startDrag","followDrag","gap","box","endDrag","jsxs","Fragment","jsx","styles","depth","titleId","excerptId","node","IconDragHandle"],"mappings":"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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { jsxs as x, Fragment as O, jsx as c } from "react/jsx-runtime";
|
|
2
|
+
import { useId as G, useRef as P, useState as B, useMemo as V, useEffect as $ } from "react";
|
|
3
|
+
import a from "./SortableList.module.css.js";
|
|
4
|
+
import { useSelection as W } from "../../../hooks/useSelection/useSelection.js";
|
|
5
|
+
import { IconDragHandle as Y } from "../../icons/icons.js";
|
|
6
|
+
const v = "button, a[href], input, select, textarea, [tabindex]";
|
|
7
|
+
function z(g, h, o) {
|
|
8
|
+
var w;
|
|
9
|
+
const k = [g, ...g.querySelectorAll(v)].filter((f) => !f.matches(":disabled"));
|
|
10
|
+
(w = k[k.indexOf(h) + o]) == null || w.focus();
|
|
11
|
+
}
|
|
12
|
+
function ee({
|
|
13
|
+
className: g,
|
|
14
|
+
defaultSelectedKey: h,
|
|
15
|
+
items: o,
|
|
16
|
+
label: k,
|
|
17
|
+
onReorder: w,
|
|
18
|
+
onSelectionChange: f,
|
|
19
|
+
selectedKey: N,
|
|
20
|
+
...L
|
|
21
|
+
}) {
|
|
22
|
+
var K;
|
|
23
|
+
const b = G(), u = P(/* @__PURE__ */ new Map()), D = P(void 0), [n, p] = B(null), [S, j] = B(""), I = V(() => o.map((e) => ({ key: e.key, textValue: e.title })), [o]), y = W({
|
|
24
|
+
items: I,
|
|
25
|
+
mode: "single",
|
|
26
|
+
defaultSelectedKeys: h === void 0 ? void 0 : [h],
|
|
27
|
+
selectedKeys: N === void 0 ? void 0 : N === null ? [] : [N],
|
|
28
|
+
onSelectionChange: (e) => {
|
|
29
|
+
const [r] = e;
|
|
30
|
+
r !== void 0 && (f == null || f(r));
|
|
31
|
+
}
|
|
32
|
+
}), [A] = y.selectedKeys, M = [y.focusedKey, A].find((e) => o.some((r) => r.key === e)) ?? ((K = o[0]) == null ? void 0 : K.key), E = n !== null, R = n && n.gap !== n.from && n.gap !== n.from + 1 ? n.gap : void 0;
|
|
33
|
+
$(() => {
|
|
34
|
+
u.current.forEach((e) => e.querySelectorAll(v).forEach((r) => r.tabIndex = -1));
|
|
35
|
+
}), $(() => {
|
|
36
|
+
var e;
|
|
37
|
+
D.current !== void 0 && ((e = u.current.get(D.current)) == null || e.focus(), D.current = void 0);
|
|
38
|
+
}, [o]), $(() => {
|
|
39
|
+
if (!E)
|
|
40
|
+
return;
|
|
41
|
+
function e(r) {
|
|
42
|
+
r.key === "Escape" && (r.preventDefault(), r.stopPropagation(), p(null));
|
|
43
|
+
}
|
|
44
|
+
return document.addEventListener("keydown", e, !0), () => document.removeEventListener("keydown", e, !0);
|
|
45
|
+
}, [E]);
|
|
46
|
+
function d(e) {
|
|
47
|
+
var r;
|
|
48
|
+
e !== void 0 && (e === A ? y.focus(e) : y.select(e), (r = u.current.get(e)) == null || r.focus());
|
|
49
|
+
}
|
|
50
|
+
function m(e, r) {
|
|
51
|
+
r < 0 || r >= o.length || r === e || (D.current = o[e].key, w(e, r), j(`Movido para a posição ${r + 1} de ${o.length}`));
|
|
52
|
+
}
|
|
53
|
+
function T(e) {
|
|
54
|
+
var i, s;
|
|
55
|
+
const r = e.target, l = r.closest('[role="row"]'), t = o.findIndex((H) => u.current.get(H.key) === l);
|
|
56
|
+
if (!(!l || t < 0)) {
|
|
57
|
+
if (e.key === "ArrowLeft" || e.key === "ArrowRight") {
|
|
58
|
+
e.preventDefault(), z(l, r, e.key === "ArrowRight" ? 1 : -1);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (r === l) {
|
|
62
|
+
if (e.altKey && e.key === "ArrowUp")
|
|
63
|
+
m(t, t - 1);
|
|
64
|
+
else if (e.altKey && e.key === "ArrowDown")
|
|
65
|
+
m(t, t + 1);
|
|
66
|
+
else if (e.key === "ArrowUp")
|
|
67
|
+
d((i = o[t - 1]) == null ? void 0 : i.key);
|
|
68
|
+
else if (e.key === "ArrowDown")
|
|
69
|
+
d((s = o[t + 1]) == null ? void 0 : s.key);
|
|
70
|
+
else if (e.key === "Home")
|
|
71
|
+
d(o[0].key);
|
|
72
|
+
else if (e.key === "End")
|
|
73
|
+
d(o[o.length - 1].key);
|
|
74
|
+
else if (e.key === " " || e.key === "Enter")
|
|
75
|
+
d(o[t].key);
|
|
76
|
+
else
|
|
77
|
+
return;
|
|
78
|
+
e.preventDefault();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function U(e, r) {
|
|
83
|
+
e.target.closest(v) === e.currentTarget && d(r);
|
|
84
|
+
}
|
|
85
|
+
function C(e, r) {
|
|
86
|
+
e.button === 0 && (e.preventDefault(), e.currentTarget.setPointerCapture(e.pointerId), p({ from: r, gap: r }));
|
|
87
|
+
}
|
|
88
|
+
function F(e) {
|
|
89
|
+
if (!n)
|
|
90
|
+
return;
|
|
91
|
+
const r = o.filter((l) => {
|
|
92
|
+
var i;
|
|
93
|
+
const t = (i = u.current.get(l.key)) == null ? void 0 : i.getBoundingClientRect();
|
|
94
|
+
return t !== void 0 && t.top + t.height / 2 < e.clientY;
|
|
95
|
+
}).length;
|
|
96
|
+
r !== n.gap && p({ ...n, gap: r });
|
|
97
|
+
}
|
|
98
|
+
function q() {
|
|
99
|
+
n && (p(null), m(n.from, n.gap > n.from ? n.gap - 1 : n.gap));
|
|
100
|
+
}
|
|
101
|
+
return /* @__PURE__ */ x(O, { children: [
|
|
102
|
+
/* @__PURE__ */ c(
|
|
103
|
+
"div",
|
|
104
|
+
{
|
|
105
|
+
...L,
|
|
106
|
+
"aria-label": k,
|
|
107
|
+
className: [a.list, g].filter(Boolean).join(" "),
|
|
108
|
+
onKeyDown: T,
|
|
109
|
+
role: "grid",
|
|
110
|
+
children: o.map((e, r) => {
|
|
111
|
+
const l = (e.level ?? 1) - 1, t = `${b}-${r}-title`, i = `${b}-${r}-excerpt`;
|
|
112
|
+
return /* @__PURE__ */ c(
|
|
113
|
+
"div",
|
|
114
|
+
{
|
|
115
|
+
"aria-describedby": e.excerpt ? i : void 0,
|
|
116
|
+
"aria-labelledby": t,
|
|
117
|
+
"aria-selected": e.key === A,
|
|
118
|
+
className: [
|
|
119
|
+
a.row,
|
|
120
|
+
e.key === A && a.selected,
|
|
121
|
+
(n == null ? void 0 : n.from) === r && a.dragging,
|
|
122
|
+
R === r && a.dropBefore,
|
|
123
|
+
R === o.length && r === o.length - 1 && a.dropAfter
|
|
124
|
+
].filter(Boolean).join(" "),
|
|
125
|
+
onClick: (s) => U(s, e.key),
|
|
126
|
+
onFocus: () => y.focus(e.key),
|
|
127
|
+
ref: (s) => {
|
|
128
|
+
s ? u.current.set(e.key, s) : u.current.delete(e.key);
|
|
129
|
+
},
|
|
130
|
+
role: "row",
|
|
131
|
+
style: l > 0 ? { marginInlineStart: `calc(${l} * var(--pl-space-5))` } : void 0,
|
|
132
|
+
tabIndex: e.key === M ? 0 : -1,
|
|
133
|
+
children: /* @__PURE__ */ x("div", { className: a.cell, role: "gridcell", children: [
|
|
134
|
+
/* @__PURE__ */ c(
|
|
135
|
+
"button",
|
|
136
|
+
{
|
|
137
|
+
"aria-describedby": `${b}-hint`,
|
|
138
|
+
"aria-label": `Reordenar ${e.title}`,
|
|
139
|
+
className: a.handle,
|
|
140
|
+
onPointerCancel: () => p(null),
|
|
141
|
+
onPointerDown: (s) => C(s, r),
|
|
142
|
+
onPointerMove: F,
|
|
143
|
+
onPointerUp: q,
|
|
144
|
+
type: "button",
|
|
145
|
+
children: /* @__PURE__ */ c(Y, {})
|
|
146
|
+
}
|
|
147
|
+
),
|
|
148
|
+
e.icon && /* @__PURE__ */ c("span", { "aria-hidden": "true", className: a.icon, children: e.icon }),
|
|
149
|
+
/* @__PURE__ */ x("span", { className: a.text, children: [
|
|
150
|
+
/* @__PURE__ */ c("span", { className: a.title, id: t, children: e.title }),
|
|
151
|
+
e.excerpt && /* @__PURE__ */ c("span", { className: a.excerpt, id: i, children: e.excerpt })
|
|
152
|
+
] }),
|
|
153
|
+
e.actions && /* @__PURE__ */ c("span", { className: a.actions, children: e.actions })
|
|
154
|
+
] })
|
|
155
|
+
},
|
|
156
|
+
e.key
|
|
157
|
+
);
|
|
158
|
+
})
|
|
159
|
+
}
|
|
160
|
+
),
|
|
161
|
+
/* @__PURE__ */ c("span", { className: a.hiddenText, id: `${b}-hint`, children: "Na linha, Alt com as setas para cima e para baixo move o item." }),
|
|
162
|
+
/* @__PURE__ */ c("span", { className: a.hiddenText, role: "status", children: S })
|
|
163
|
+
] });
|
|
164
|
+
}
|
|
165
|
+
export {
|
|
166
|
+
ee as SortableList
|
|
167
|
+
};
|
|
168
|
+
//# sourceMappingURL=SortableList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortableList.js","sources":["../../../../src/components/data-display/SortableList/SortableList.tsx"],"sourcesContent":["import {\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type KeyboardEvent,\n type MouseEvent,\n type PointerEvent,\n type ReactNode,\n} from 'react';\nimport { useSelection, type SelectionItem } from '../../../hooks/useSelection';\nimport { IconDragHandle } from '../../icons';\nimport styles from './SortableList.module.css';\n\nexport interface SortableListItem {\n /** Ações da linha, como `ButtonIcon`: alcançadas pelas setas para os lados. */\n actions?: ReactNode;\n excerpt?: string;\n icon?: ReactNode;\n key: string;\n /** Nível de aninhamento, a partir de 1. Só recua a linha. */\n level?: number;\n title: string;\n}\n\nexport interface SortableListProps extends Omit<ComponentPropsWithRef<'div'>, 'children' | 'onKeyDown'> {\n defaultSelectedKey?: string;\n items: readonly SortableListItem[];\n /** Nome da lista, para o leitor de tela. */\n label: string;\n onReorder: (fromIndex: number, toIndex: number) => void;\n onSelectionChange?: (key: string) => void;\n /** `null` deixa a lista controlada sem nenhum item escolhido. */\n selectedKey?: string | null;\n}\n\ninterface Drag {\n from: number;\n /** Fresta onde o item cairia: 0 antes do primeiro, `items.length` depois do último. */\n gap: number;\n}\n\nconst FOCUSABLE = 'button, a[href], input, select, textarea, [tabindex]';\n\nfunction focusWithinRow(row: HTMLElement, from: HTMLElement, step: 1 | -1) {\n const stops = [row, ...row.querySelectorAll<HTMLElement>(FOCUSABLE)].filter((element) => !element.matches(':disabled'));\n stops[stops.indexOf(from) + step]?.focus();\n}\n\nexport function SortableList({\n className,\n defaultSelectedKey,\n items,\n label,\n onReorder,\n onSelectionChange,\n selectedKey,\n ...props\n}: SortableListProps) {\n const baseId = useId();\n const rows = useRef(new Map<string, HTMLDivElement>());\n const movedKey = useRef<string>(undefined);\n const [drag, setDrag] = useState<Drag | null>(null);\n const [announcement, setAnnouncement] = useState('');\n const collection = useMemo<SelectionItem[]>(() => items.map((item) => ({ key: item.key, textValue: item.title })), [items]);\n const selection = useSelection({\n items: collection,\n mode: 'single',\n defaultSelectedKeys: defaultSelectedKey === undefined ? undefined : [defaultSelectedKey],\n selectedKeys: selectedKey === undefined ? undefined : selectedKey === null ? [] : [selectedKey],\n onSelectionChange: (keys) => {\n const [key] = keys;\n if (key !== undefined) {\n onSelectionChange?.(key);\n }\n },\n });\n const [selected] = selection.selectedKeys;\n const tabStop = [selection.focusedKey, selected].find((key) => items.some((item) => item.key === key)) ?? items[0]?.key;\n const dragging = drag !== null;\n // Soltar logo acima ou logo abaixo de si mesmo não move nada, e não ganha indicador.\n const dropGap = drag && drag.gap !== drag.from && drag.gap !== drag.from + 1 ? drag.gap : undefined;\n\n // Os controles das linhas saem da ordem do Tab: a lista é uma parada só, e as setas para os lados chegam a eles.\n useEffect(() => {\n rows.current.forEach((row) => row.querySelectorAll<HTMLElement>(FOCUSABLE).forEach((element) => (element.tabIndex = -1)));\n });\n\n // Reordenar move o nó no DOM, e o navegador tira o foco dele.\n useEffect(() => {\n if (movedKey.current !== undefined) {\n rows.current.get(movedKey.current)?.focus();\n movedKey.current = undefined;\n }\n }, [items]);\n\n useEffect(() => {\n if (!dragging) {\n return;\n }\n\n function cancel(event: globalThis.KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setDrag(null);\n }\n }\n\n document.addEventListener('keydown', cancel, true);\n return () => document.removeEventListener('keydown', cancel, true);\n }, [dragging]);\n\n function choose(key: string | undefined) {\n if (key === undefined) {\n return;\n }\n\n if (key === selected) {\n selection.focus(key);\n } else {\n selection.select(key);\n }\n\n rows.current.get(key)?.focus();\n }\n\n function move(fromIndex: number, toIndex: number) {\n if (toIndex < 0 || toIndex >= items.length || toIndex === fromIndex) {\n return;\n }\n\n movedKey.current = items[fromIndex].key;\n onReorder(fromIndex, toIndex);\n setAnnouncement(`Movido para a posição ${toIndex + 1} de ${items.length}`);\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement;\n const row = target.closest<HTMLElement>('[role=\"row\"]');\n const index = items.findIndex((item) => rows.current.get(item.key) === row);\n\n if (!row || index < 0) {\n return;\n }\n\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n event.preventDefault();\n focusWithinRow(row, target, event.key === 'ArrowRight' ? 1 : -1);\n return;\n }\n\n // Nos controles da linha, as demais teclas são deles.\n if (target !== row) {\n return;\n }\n\n if (event.altKey && event.key === 'ArrowUp') {\n move(index, index - 1);\n } else if (event.altKey && event.key === 'ArrowDown') {\n move(index, index + 1);\n } else if (event.key === 'ArrowUp') {\n choose(items[index - 1]?.key);\n } else if (event.key === 'ArrowDown') {\n choose(items[index + 1]?.key);\n } else if (event.key === 'Home') {\n choose(items[0].key);\n } else if (event.key === 'End') {\n choose(items[items.length - 1].key);\n } else if (event.key === ' ' || event.key === 'Enter') {\n choose(items[index].key);\n } else {\n return;\n }\n\n event.preventDefault();\n }\n\n function handleRowClick(event: MouseEvent<HTMLDivElement>, key: string) {\n // O clique num controle da linha é do controle, e não escolhe a linha.\n if ((event.target as HTMLElement).closest(FOCUSABLE) === event.currentTarget) {\n choose(key);\n }\n }\n\n function startDrag(event: PointerEvent<HTMLButtonElement>, index: number) {\n if (event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.currentTarget.setPointerCapture(event.pointerId);\n setDrag({ from: index, gap: index });\n }\n\n function followDrag(event: PointerEvent<HTMLButtonElement>) {\n if (!drag) {\n return;\n }\n\n const gap = items.filter((item) => {\n const box = rows.current.get(item.key)?.getBoundingClientRect();\n return box !== undefined && box.top + box.height / 2 < event.clientY;\n }).length;\n\n if (gap !== drag.gap) {\n setDrag({ ...drag, gap });\n }\n }\n\n function endDrag() {\n if (!drag) {\n return;\n }\n\n setDrag(null);\n move(drag.from, drag.gap > drag.from ? drag.gap - 1 : drag.gap);\n }\n\n return (\n <>\n <div\n {...props}\n aria-label={label}\n className={[styles.list, className].filter(Boolean).join(' ')}\n onKeyDown={handleKeyDown}\n role=\"grid\"\n >\n {items.map((item, index) => {\n const depth = (item.level ?? 1) - 1;\n const titleId = `${baseId}-${index}-title`;\n const excerptId = `${baseId}-${index}-excerpt`;\n\n return (\n <div\n aria-describedby={item.excerpt ? excerptId : undefined}\n aria-labelledby={titleId}\n aria-selected={item.key === selected}\n className={[\n styles.row,\n item.key === selected && styles.selected,\n drag?.from === index && styles.dragging,\n dropGap === index && styles.dropBefore,\n dropGap === items.length && index === items.length - 1 && styles.dropAfter,\n ]\n .filter(Boolean)\n .join(' ')}\n key={item.key}\n onClick={(event) => handleRowClick(event, item.key)}\n onFocus={() => selection.focus(item.key)}\n ref={(node) => {\n if (node) {\n rows.current.set(item.key, node);\n } else {\n rows.current.delete(item.key);\n }\n }}\n role=\"row\"\n style={depth > 0 ? { marginInlineStart: `calc(${depth} * var(--pl-space-5))` } : undefined}\n tabIndex={item.key === tabStop ? 0 : -1}\n >\n <div className={styles.cell} role=\"gridcell\">\n <button\n aria-describedby={`${baseId}-hint`}\n aria-label={`Reordenar ${item.title}`}\n className={styles.handle}\n onPointerCancel={() => setDrag(null)}\n onPointerDown={(event) => startDrag(event, index)}\n onPointerMove={followDrag}\n onPointerUp={endDrag}\n type=\"button\"\n >\n <IconDragHandle />\n </button>\n {item.icon && (\n <span aria-hidden=\"true\" className={styles.icon}>\n {item.icon}\n </span>\n )}\n <span className={styles.text}>\n <span className={styles.title} id={titleId}>\n {item.title}\n </span>\n {item.excerpt && (\n <span className={styles.excerpt} id={excerptId}>\n {item.excerpt}\n </span>\n )}\n </span>\n {item.actions && <span className={styles.actions}>{item.actions}</span>}\n </div>\n </div>\n );\n })}\n </div>\n <span className={styles.hiddenText} id={`${baseId}-hint`}>\n Na linha, Alt com as setas para cima e para baixo move o item.\n </span>\n <span className={styles.hiddenText} role=\"status\">\n {announcement}\n </span>\n </>\n );\n}\n"],"names":["FOCUSABLE","focusWithinRow","row","from","step","stops","element","_a","SortableList","className","defaultSelectedKey","items","label","onReorder","onSelectionChange","selectedKey","props","baseId","useId","rows","useRef","movedKey","drag","setDrag","useState","announcement","setAnnouncement","collection","useMemo","item","selection","useSelection","keys","key","selected","tabStop","dragging","dropGap","useEffect","cancel","event","choose","move","fromIndex","toIndex","handleKeyDown","target","index","_b","handleRowClick","startDrag","followDrag","gap","box","endDrag","jsxs","Fragment","jsx","styles","depth","titleId","excerptId","node","IconDragHandle"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t="_list_31zta_1",e="_row_31zta_8",o="_selected_31zta_25",_="_dragging_31zta_31",c="_dropBefore_31zta_36",n="_dropAfter_31zta_37",r="_cell_31zta_56",s="_handle_31zta_64",d="_icon_31zta_94",l="_text_31zta_105",a="_title_31zta_112",i="_excerpt_31zta_113",g="_actions_31zta_131",z="_hiddenText_31zta_137",p={list:t,row:e,selected:o,dragging:_,dropBefore:c,dropAfter:n,cell:r,handle:s,icon:d,text:l,title:a,excerpt:i,actions:g,hiddenText:z};exports.actions=g;exports.cell=r;exports.default=p;exports.dragging=_;exports.dropAfter=n;exports.dropBefore=c;exports.excerpt=i;exports.handle=s;exports.hiddenText=z;exports.icon=d;exports.list=t;exports.row=e;exports.selected=o;exports.text=l;exports.title=a;
|
|
2
|
+
//# sourceMappingURL=SortableList.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortableList.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const t = "_list_31zta_1", e = "_row_31zta_8", _ = "_selected_31zta_25", o = "_dragging_31zta_31", c = "_dropBefore_31zta_36", n = "_dropAfter_31zta_37", s = "_cell_31zta_56", a = "_handle_31zta_64", d = "_icon_31zta_94", r = "_text_31zta_105", l = "_title_31zta_112", i = "_excerpt_31zta_113", z = "_actions_31zta_131", p = "_hiddenText_31zta_137", x = {
|
|
2
|
+
list: t,
|
|
3
|
+
row: e,
|
|
4
|
+
selected: _,
|
|
5
|
+
dragging: o,
|
|
6
|
+
dropBefore: c,
|
|
7
|
+
dropAfter: n,
|
|
8
|
+
cell: s,
|
|
9
|
+
handle: a,
|
|
10
|
+
icon: d,
|
|
11
|
+
text: r,
|
|
12
|
+
title: l,
|
|
13
|
+
excerpt: i,
|
|
14
|
+
actions: z,
|
|
15
|
+
hiddenText: p
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
z as actions,
|
|
19
|
+
s as cell,
|
|
20
|
+
x as default,
|
|
21
|
+
o as dragging,
|
|
22
|
+
n as dropAfter,
|
|
23
|
+
c as dropBefore,
|
|
24
|
+
i as excerpt,
|
|
25
|
+
a as handle,
|
|
26
|
+
p as hiddenText,
|
|
27
|
+
d as icon,
|
|
28
|
+
t as list,
|
|
29
|
+
e as row,
|
|
30
|
+
_ as selected,
|
|
31
|
+
r as text,
|
|
32
|
+
l as title
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=SortableList.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortableList.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),r=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),r=require("react"),te=require("../../../hooks/useMergedRefs.cjs"),e=require("./Table.module.css.cjs"),se=require("../../../hooks/useSelection/useSelection.cjs"),w=require("../../icons/icons.cjs"),B=require("../../feedback/Skeleton/Skeleton.cjs"),le=require("../../feedback/EmptyState/EmptyState.cjs"),ae=require("../../overlays/Tooltip/Tooltip.cjs"),L=r.createContext(void 0),R=r.createContext(void 0);function z(i){return r.Children.toArray(i).map((a,l)=>t.jsx(R.Provider,{value:l,children:a},r.isValidElement(a)&&a.key!==null?a.key:l))}function _(i,a,l){const c=[...i];return c[a]=l,c}function T(i){const a=r.useContext(L);if(!a)throw new Error(i+" deve ser usado dentro de Table.");return a}function C({children:i,className:a,defaultSelectedIds:l,defaultSort:c,divider:f=!0,highlightSelectedRow:n=!0,label:o,loading:m=!1,loadingMessage:x="Carregando",onSelectionChange:b,onSortChange:g,rows:h=[],selectedIds:d,selectionControl:p,selectionMode:j="none",size:v="md",sort:E,stickyHeader:k=!1,striped:K=!1,ref:O,...H}){const P=r.useId(),[W,F]=r.useState(c),[M,I]=r.useState(()=>new Set),N=E??W,q=p??(j==="single"?"radio":"checkbox"),[D,Q]=r.useState(!0),U=r.useCallback(s=>{if(!s||typeof ResizeObserver>"u")return;const u=new ResizeObserver(()=>Q(s.scrollWidth>s.clientWidth||s.scrollHeight>s.clientHeight));return u.observe(s),s.firstElementChild&&u.observe(s.firstElementChild),()=>u.disconnect()},[]),V=te.useMergedRefs(k?U:void 0,O),$=r.useCallback(s=>(I(u=>new Set(u).add(s)),()=>I(u=>{const y=new Set(u);return y.delete(s),y})),[]),[G,A]=r.useState([]),J=r.useCallback((s,u)=>(A(y=>_(y,s,u)),()=>A(y=>_(y,s,void 0))),[]);function X(s){const u={column:s,direction:(N==null?void 0:N.column)===s&&N.direction==="ascending"?"descending":"ascending"};E===void 0&&F(u),g==null||g(u)}const Y=r.useMemo(()=>h.map(s=>({key:s.id,disabled:s.disabled})),[h]),S=se.useSelection({allowEmpty:q!=="radio",defaultSelectedKeys:l,items:Y,mode:j,selectedKeys:d,onSelectionChange:s=>b==null?void 0:b([...s])}),Z={baseId:P,columnAt:s=>G[s],countColumns:()=>Math.max(M.size,1),loading:m,registerColumn:$,registerLayout:J,requestSort:X,selection:{control:q,empty:h.length===0,highlight:n,isSelected:s=>S.selectedKeys.has(s),mode:j,status:S.status,toggle:(s,u)=>{if(u&&j==="multiple"){S.selectRange(s);return}S.select(s)},toggleAll:S.toggleAll},size:v,sort:N},ee=[e.default.table,e.default[v],f&&e.default.divider,K&&e.default.striped,k&&e.default.sticky].filter(Boolean).join(" ");return t.jsxs("div",{...H,className:[e.default.scroll,k&&!D&&e.default.noScroll,a].filter(Boolean).join(" "),ref:V,children:[t.jsx("table",{"aria-busy":m||void 0,"aria-label":o,className:ee,children:t.jsx(L.Provider,{value:Z,children:i})}),m&&t.jsx("p",{className:e.default.status,role:"status",children:x})]})}function ne({children:i}){const{registerColumn:a,selection:l}=T("Table.Header");return r.useEffect(()=>l.mode==="none"?void 0:a("__selecao__"),[a,l.mode]),t.jsx("thead",{className:e.default.head,children:t.jsxs("tr",{children:[l.mode==="multiple"&&t.jsx("th",{className:[e.default.column,e.default.lead].join(" "),scope:"col",children:t.jsx("input",{"aria-label":"Selecionar todas as linhas",checked:l.status==="all",className:e.default.checkbox,disabled:l.empty,onChange:l.toggleAll,ref:c=>{c&&(c.indeterminate=l.status==="partial")},type:"checkbox"})}),l.mode==="single"&&t.jsx("th",{className:[e.default.column,e.default.lead].join(" "),scope:"col"}),z(i)]})})}function oe({align:i,children:a,help:l,hideBelow:c,id:f,numeric:n=!1,sortable:o=!1,width:m}){const{registerColumn:x,registerLayout:b,requestSort:g,sort:h}=T("Table.Column"),d=r.useContext(R),p=i??(n?"end":"start");r.useEffect(()=>x(f),[f,x]),r.useLayoutEffect(()=>d===void 0?void 0:b(d,{align:p,hideBelow:c,numeric:n}),[p,c,d,n,b]);const j=(h==null?void 0:h.column)===f?h.direction:void 0,v=l&&t.jsx(ae.Tooltip,{content:l,children:t.jsx("span",{"aria-label":l,className:e.default.help,role:"img",tabIndex:0,children:t.jsx(w.IconQuestionCircle,{size:14})})});return t.jsx("th",{"aria-sort":o?j??"none":void 0,className:[e.default.column,e.default[p],o&&e.default.sortable].filter(Boolean).join(" "),"data-hide-below":c,scope:"col",style:{width:m},children:o?t.jsxs("div",{className:e.default.sortHeader,children:[t.jsxs("button",{className:e.default.sortButton,onClick:()=>g(f),type:"button",children:[a,j?t.jsx(w.IconArrowUp,{className:[e.default.sortIcon,j==="descending"&&e.default.sortDescending].filter(Boolean).join(" "),size:12}):t.jsx(w.IconChevronExpand,{className:e.default.sortIcon,size:12})]}),v]}):t.jsxs(t.Fragment,{children:[a,v]})})}const re=3;function ce({children:i,emptyDescription:a="Não há registros para exibir. Se houver busca ou filtros aplicados, experimente ajustá-los.",emptyTitle:l="Nenhum registro encontrado",items:c}){const{columnAt:f,countColumns:n,loading:o,selection:m}=T("Table.Body");if(o){const x=Array.from({length:c.length||re},(h,d)=>d),b=m.mode==="none"?0:1,g=Array.from({length:n()-b},(h,d)=>f(d));return t.jsx("tbody",{"aria-hidden":"true",children:x.map(h=>t.jsxs("tr",{className:[e.default.row,e.default.skeletonRow].join(" "),children:[b>0&&t.jsx("td",{className:[e.default.cell,e.default.lead].join(" "),children:t.jsx(B.Skeleton,{className:e.default.skeleton})}),g.map((d,p)=>t.jsx("td",{className:[e.default.cell,e.default[(d==null?void 0:d.align)??"start"]].join(" "),"data-hide-below":d==null?void 0:d.hideBelow,children:t.jsx(B.Skeleton,{className:e.default.skeleton})},p))]},h))})}return c.length===0?t.jsx("tbody",{children:t.jsx("tr",{children:t.jsx("td",{className:e.default.empty,colSpan:n(),children:t.jsx(le.EmptyState,{description:a,title:l})})})}):t.jsx("tbody",{children:c.map(x=>t.jsx(r.Fragment,{children:i(x)},x.id))})}function ie({children:i,disabled:a=!1,id:l,label:c}){const{baseId:f,selection:n}=T("Table.Row"),o=n.mode!=="none"&&n.isSelected(l);return t.jsxs("tr",{className:[e.default.row,o&&n.highlight&&e.default.selected].filter(Boolean).join(" "),children:[n.mode!=="none"&&t.jsx("td",{className:[e.default.cell,e.default.lead].join(" "),children:t.jsx("input",{"aria-label":c??"Selecionar linha",checked:o,className:e.default[n.control],disabled:a,name:n.control==="radio"?`${f}-selecao`:void 0,onChange:()=>{},onClick:m=>n.toggle(l,m.shiftKey),role:n.control==="toggle"?"switch":void 0,type:n.control==="radio"?"radio":"checkbox"})}),z(i)]})}function de({align:i,children:a,hideBelow:l,numeric:c}){const{columnAt:f}=T("Table.Cell"),n=r.useContext(R),o=n===void 0?void 0:f(n),m=c??(o==null?void 0:o.numeric)??!1;return t.jsx("td",{className:[e.default.cell,e.default[i??(o==null?void 0:o.align)??(m?"end":"start")],m&&e.default.numeric].filter(Boolean).join(" "),"data-hide-below":l??(o==null?void 0:o.hideBelow),children:a})}C.Header=ne;C.Column=oe;C.Body=ce;C.Row=ie;C.Cell=de;exports.Table=C;
|
|
2
2
|
//# sourceMappingURL=Table.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.cjs","sources":["../../../../src/components/data-display/Table/Table.tsx"],"sourcesContent":["import {\n Children,\n createContext,\n Fragment,\n isValidElement,\n type ComponentPropsWithRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport { useMergedRefs } from '../../../hooks/useMergedRefs';\nimport { useSelection, type SelectionItem } from '../../../hooks/useSelection';\nimport { Tooltip } from '../../overlays/Tooltip';\nimport styles from './Table.module.css';\nimport { EmptyState } from '../../feedback/EmptyState';\nimport { IconArrowUp, IconChevronExpand, IconQuestionCircle } from '../../icons';\n\nexport type TableSize = 'sm' | 'md';\nexport type TableAlign = 'start' | 'center' | 'end';\nexport type TableBreakpoint = 'sm' | 'md' | 'lg';\nexport type SortDirection = 'ascending' | 'descending';\nexport type TableSelectionMode = 'none' | 'single' | 'multiple';\nexport type TableSelectionControl = 'checkbox' | 'radio' | 'toggle';\n\nexport interface TableRowItem {\n disabled?: boolean;\n id: string;\n}\n\nexport interface TableSort {\n column: string;\n direction: SortDirection;\n}\n\nexport interface TableProps extends ComponentPropsWithRef<'div'> {\n children: ReactNode;\n /** Escolha inicial no modo nao controlado. */\n defaultSelectedIds?: readonly string[];\n defaultSort?: TableSort;\n divider?: boolean;\n label?: string;\n loading?: boolean;\n loadingMessage?: string;\n highlightSelectedRow?: boolean;\n onSelectionChange?: (ids: readonly string[]) => void;\n onSortChange?: (sort: TableSort) => void;\n rows?: readonly TableRowItem[];\n selectedIds?: readonly string[];\n selectionControl?: TableSelectionControl;\n selectionMode?: TableSelectionMode;\n size?: TableSize;\n sort?: TableSort;\n /** Cabecalho colado no topo da rolagem da pagina; com a tabela mais larga ou mais alta que o espaco, no dela. */\n stickyHeader?: boolean;\n striped?: boolean;\n}\n\n/** O que a celula herda da coluna na mesma posicao, quando nao declara o proprio. */\ninterface ColumnLayout {\n align: TableAlign;\n hideBelow?: TableBreakpoint;\n numeric: boolean;\n}\n\ninterface TableContextValue {\n baseId: string;\n columnAt: (index: number) => ColumnLayout | undefined;\n countColumns: () => number;\n loading: boolean;\n registerColumn: (id: string) => () => void;\n registerLayout: (index: number, layout: ColumnLayout) => () => void;\n requestSort: (column: string) => void;\n selection: TableSelection;\n size: TableSize;\n sort?: TableSort;\n}\n\ninterface TableSelection {\n control: TableSelectionControl;\n empty: boolean;\n highlight: boolean;\n isSelected: (id: string) => boolean;\n mode: TableSelectionMode;\n status: 'none' | 'partial' | 'all';\n toggle: (id: string, extend: boolean) => void;\n toggleAll: () => void;\n}\n\nconst TableContext = createContext<TableContextValue | undefined>(undefined);\n\n/** Posicao do filho no cabecalho ou na linha: e por ela que a celula acha a sua coluna. */\nconst ColumnIndexContext = createContext<number | undefined>(undefined);\n\nfunction withColumnIndex(children: ReactNode) {\n return Children.toArray(children).map((child, index) => (\n <ColumnIndexContext.Provider key={isValidElement(child) && child.key !== null ? child.key : index} value={index}>\n {child}\n </ColumnIndexContext.Provider>\n ));\n}\n\nfunction withLayout(\n layouts: readonly (ColumnLayout | undefined)[],\n index: number,\n layout: ColumnLayout | undefined,\n): (ColumnLayout | undefined)[] {\n const next = [...layouts];\n next[index] = layout;\n return next;\n}\n\nfunction useTableContext(part: string) {\n const context = useContext(TableContext);\n\n if (!context) {\n throw new Error(part + ' deve ser usado dentro de Table.');\n }\n\n return context;\n}\n\nexport function Table({\n children,\n className,\n defaultSelectedIds,\n defaultSort,\n divider = true,\n highlightSelectedRow = true,\n label,\n loading = false,\n loadingMessage = 'Carregando',\n onSelectionChange,\n onSortChange,\n rows = [],\n selectedIds,\n selectionControl,\n selectionMode = 'none',\n size = 'md',\n sort,\n stickyHeader = false,\n striped = false,\n ref,\n ...props\n}: TableProps) {\n const baseId = useId();\n const [internalSort, setInternalSort] = useState(defaultSort);\n const [columns, setColumns] = useState<ReadonlySet<string>>(() => new Set());\n const currentSort = sort ?? internalSort;\n const control = selectionControl ?? (selectionMode === 'single' ? 'radio' : 'checkbox');\n\n // Rolar dentro da tabela e colar o cabecalho na rolagem da pagina se excluem em CSS: o envoltorio so\n // continua conteiner de rolagem quando a tabela transborda dele.\n const [precisaRolar, setPrecisaRolar] = useState(true);\n const observarTransbordo = useCallback((envoltorio: HTMLDivElement | null) => {\n if (!envoltorio || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n const observador = new ResizeObserver(() =>\n setPrecisaRolar(\n envoltorio.scrollWidth > envoltorio.clientWidth || envoltorio.scrollHeight > envoltorio.clientHeight,\n ),\n );\n\n observador.observe(envoltorio);\n\n if (envoltorio.firstElementChild) {\n observador.observe(envoltorio.firstElementChild);\n }\n\n return () => observador.disconnect();\n }, []);\n const envoltorioRef = useMergedRefs(stickyHeader ? observarTransbordo : undefined, ref);\n\n // A coluna se registra enquanto esta na tela e sai quando sai: registrada para sempre, o vazio ocupava colunas\n // que nao existiam mais.\n const registerColumn = useCallback((id: string) => {\n setColumns((atuais) => new Set(atuais).add(id));\n\n return () =>\n setColumns((atuais) => {\n const restantes = new Set(atuais);\n restantes.delete(id);\n return restantes;\n });\n }, []);\n\n const [layouts, setLayouts] = useState<readonly (ColumnLayout | undefined)[]>([]);\n const registerLayout = useCallback((index: number, layout: ColumnLayout) => {\n setLayouts((atuais) => withLayout(atuais, index, layout));\n\n return () => setLayouts((atuais) => withLayout(atuais, index, undefined));\n }, []);\n\n function requestSort(column: string) {\n const next: TableSort = {\n column,\n direction:\n currentSort?.column === column && currentSort.direction === 'ascending' ? 'descending' : 'ascending',\n };\n\n if (sort === undefined) {\n setInternalSort(next);\n }\n\n onSortChange?.(next);\n }\n\n const collection = useMemo<SelectionItem[]>(\n () => rows.map((row) => ({ key: row.id, disabled: row.disabled })),\n [rows],\n );\n\n const selection = useSelection({\n // Caixa e chave desmarcam ao clicar de novo; o radio, nao.\n allowEmpty: control !== 'radio',\n defaultSelectedKeys: defaultSelectedIds,\n items: collection,\n mode: selectionMode,\n selectedKeys: selectedIds,\n onSelectionChange: (keys) => onSelectionChange?.([...keys]),\n });\n\n const context: TableContextValue = {\n baseId,\n columnAt: (index) => layouts[index],\n countColumns: () => Math.max(columns.size, 1),\n loading,\n registerColumn,\n registerLayout,\n requestSort,\n selection: {\n control,\n empty: rows.length === 0,\n highlight: highlightSelectedRow,\n isSelected: (id) => selection.selectedKeys.has(id),\n mode: selectionMode,\n status: selection.status,\n toggle: (id, extend) => {\n if (extend && selectionMode === 'multiple') {\n selection.selectRange(id);\n return;\n }\n\n selection.select(id);\n },\n toggleAll: selection.toggleAll,\n },\n size,\n sort: currentSort,\n };\n\n const classes = [\n styles.table,\n styles[size],\n divider && styles.divider,\n striped && styles.striped,\n stickyHeader && styles.sticky,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n {...props}\n className={[styles.scroll, stickyHeader && !precisaRolar && styles.noScroll, className].filter(Boolean).join(' ')}\n ref={envoltorioRef}\n >\n <table aria-busy={loading || undefined} aria-label={label} className={classes}>\n <TableContext.Provider value={context}>{children}</TableContext.Provider>\n </table>\n {loading && (\n <p className={styles.status} role=\"status\">\n {loadingMessage}\n </p>\n )}\n </div>\n );\n}\n\nexport interface TableHeaderProps {\n children: ReactNode;\n}\n\nfunction TableHeader({ children }: TableHeaderProps) {\n const { registerColumn, selection } = useTableContext('Table.Header');\n\n useEffect(() => (selection.mode === 'none' ? undefined : registerColumn('__selecao__')), [registerColumn, selection.mode]);\n\n return (\n <thead className={styles.head}>\n <tr>\n {selection.mode === 'multiple' && (\n <th className={[styles.column, styles.lead].join(' ')} scope=\"col\">\n {/* Sem `rows` nao ha o que marcar, e o clique so apagava a escolha que ja havia. */}\n <input\n aria-label=\"Selecionar todas as linhas\"\n checked={selection.status === 'all'}\n className={styles.checkbox}\n disabled={selection.empty}\n onChange={selection.toggleAll}\n ref={(node) => {\n if (node) {\n node.indeterminate = selection.status === 'partial';\n }\n }}\n type=\"checkbox\"\n />\n </th>\n )}\n {selection.mode === 'single' && <th className={[styles.column, styles.lead].join(' ')} scope=\"col\" />}\n {withColumnIndex(children)}\n </tr>\n </thead>\n );\n}\n\nexport interface TableColumnProps {\n align?: TableAlign;\n children: ReactNode;\n help?: string;\n hideBelow?: TableBreakpoint;\n id: string;\n numeric?: boolean;\n sortable?: boolean;\n width?: string;\n}\n\nfunction TableColumn({ align, children, help, hideBelow, id, numeric = false, sortable = false, width }: TableColumnProps) {\n const { registerColumn, registerLayout, requestSort, sort } = useTableContext('Table.Column');\n const index = useContext(ColumnIndexContext);\n const columnAlign = align ?? (numeric ? 'end' : 'start');\n\n useEffect(() => registerColumn(id), [id, registerColumn]);\n\n // Antes da pintura: com efeito comum, a celula aparecia um quadro alinhada a esquerda e so depois ia para o lado\n // da coluna.\n useLayoutEffect(\n () => (index === undefined ? undefined : registerLayout(index, { align: columnAlign, hideBelow, numeric })),\n [columnAlign, hideBelow, index, numeric, registerLayout],\n );\n\n const sorted = sort?.column === id ? sort.direction : undefined;\n\n // A ajuda e focavel e fica fora do botao de ordenacao: controle dentro de controle nao e HTML valido.\n const ajuda = help && (\n <Tooltip content={help}>\n <span aria-label={help} className={styles.help} role=\"img\" tabIndex={0}>\n <IconQuestionCircle size={14} />\n </span>\n </Tooltip>\n );\n\n return (\n <th\n aria-sort={sortable ? sorted ?? 'none' : undefined}\n className={[styles.column, styles[columnAlign], sortable && styles.sortable]\n .filter(Boolean)\n .join(' ')}\n data-hide-below={hideBelow}\n scope=\"col\"\n style={{ width }}\n >\n {sortable ? (\n <div className={styles.sortHeader}>\n <button className={styles.sortButton} onClick={() => requestSort(id)} type=\"button\">\n {children}\n {sorted ? (\n <IconArrowUp\n className={[styles.sortIcon, sorted === 'descending' && styles.sortDescending].filter(Boolean).join(' ')}\n size={12}\n />\n ) : (\n <IconChevronExpand className={styles.sortIcon} size={12} />\n )}\n </button>\n {ajuda}\n </div>\n ) : (\n <>\n {children}\n {ajuda}\n </>\n )}\n </th>\n );\n}\n\nexport interface TableBodyProps<T extends TableRowItem> {\n children: (item: T) => ReactNode;\n emptyDescription?: string;\n emptyTitle?: string;\n items: readonly T[];\n}\n\nconst SKELETON_ROWS = 3;\n\nfunction TableBody<T extends TableRowItem>({\n children,\n emptyDescription = 'Não há registros para exibir. Se houver busca ou filtros aplicados, experimente ajustá-los.',\n emptyTitle = 'Nenhum registro encontrado',\n items,\n}: TableBodyProps<T>) {\n const { columnAt, countColumns, loading, selection } = useTableContext('Table.Body');\n\n if (loading) {\n // Mantem a altura das linhas que ja estavam na tela, para a pagina nao pular quando a nova chegar.\n const rows = Array.from({ length: items.length || SKELETON_ROWS }, (_, index) => index);\n const leadCells = selection.mode === 'none' ? 0 : 1;\n const columns = Array.from({ length: countColumns() - leadCells }, (_, index) => columnAt(index));\n\n return (\n <tbody aria-hidden=\"true\">\n {rows.map((row) => (\n <tr className={[styles.row, styles.skeletonRow].join(' ')} key={row}>\n {leadCells > 0 && (\n <td className={[styles.cell, styles.lead].join(' ')}>\n <span className={styles.skeleton} />\n </td>\n )}\n {columns.map((column, index) => (\n <td className={[styles.cell, styles[column?.align ?? 'start']].join(' ')} data-hide-below={column?.hideBelow} key={index}>\n <span className={styles.skeleton} />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n );\n }\n\n if (items.length === 0) {\n return (\n <tbody>\n <tr>\n <td className={styles.empty} colSpan={countColumns()}>\n <EmptyState description={emptyDescription} title={emptyTitle} />\n </td>\n </tr>\n </tbody>\n );\n }\n\n return (\n <tbody>\n {items.map((item) => (\n <Fragment key={item.id}>{children(item)}</Fragment>\n ))}\n </tbody>\n );\n}\n\nexport interface TableRowProps {\n children: ReactNode;\n disabled?: boolean;\n id: string;\n label?: string;\n}\n\nfunction TableRow({ children, disabled = false, id, label }: TableRowProps) {\n const { baseId, selection } = useTableContext('Table.Row');\n const selected = selection.mode !== 'none' && selection.isSelected(id);\n\n return (\n // Sem `aria-selected` na linha: ele so vale em grade, e numa tabela quem anuncia a marcacao e o controle.\n <tr className={[styles.row, selected && selection.highlight && styles.selected].filter(Boolean).join(' ')}>\n {selection.mode !== 'none' && (\n <td className={[styles.cell, styles.lead].join(' ')}>\n <input\n aria-label={label ?? 'Selecionar linha'}\n checked={selected}\n className={styles[selection.control]}\n disabled={disabled}\n name={selection.control === 'radio' ? `${baseId}-selecao` : undefined}\n onChange={() => undefined}\n onClick={(event) => selection.toggle(id, event.shiftKey)}\n role={selection.control === 'toggle' ? 'switch' : undefined}\n type={selection.control === 'radio' ? 'radio' : 'checkbox'}\n />\n </td>\n )}\n {withColumnIndex(children)}\n </tr>\n );\n}\n\n/** Sem valor proprio, `align`, `hideBelow` e `numeric` seguem a coluna da mesma posicao no cabecalho. */\nexport interface TableCellProps {\n align?: TableAlign;\n children?: ReactNode;\n hideBelow?: TableBreakpoint;\n numeric?: boolean;\n}\n\nfunction TableCell({ align, children, hideBelow, numeric }: TableCellProps) {\n const { columnAt } = useTableContext('Table.Cell');\n const index = useContext(ColumnIndexContext);\n const column = index === undefined ? undefined : columnAt(index);\n const isNumeric = numeric ?? column?.numeric ?? false;\n\n return (\n <td\n className={[styles.cell, styles[align ?? column?.align ?? (isNumeric ? 'end' : 'start')], isNumeric && styles.numeric]\n .filter(Boolean)\n .join(' ')}\n data-hide-below={hideBelow ?? column?.hideBelow}\n >\n {children}\n </td>\n );\n}\n\nTable.Header = TableHeader;\nTable.Column = TableColumn;\nTable.Body = TableBody;\nTable.Row = TableRow;\nTable.Cell = TableCell;\n"],"names":["TableContext","createContext","ColumnIndexContext","withColumnIndex","children","Children","child","index","jsx","isValidElement","withLayout","layouts","layout","next","useTableContext","part","context","useContext","Table","className","defaultSelectedIds","defaultSort","divider","highlightSelectedRow","label","loading","loadingMessage","onSelectionChange","onSortChange","rows","selectedIds","selectionControl","selectionMode","size","sort","stickyHeader","striped","ref","props","baseId","useId","internalSort","setInternalSort","useState","columns","setColumns","currentSort","control","precisaRolar","setPrecisaRolar","observarTransbordo","useCallback","envoltorio","observador","envoltorioRef","useMergedRefs","registerColumn","id","atuais","restantes","setLayouts","registerLayout","requestSort","column","collection","useMemo","row","selection","useSelection","keys","extend","classes","styles","jsxs","TableHeader","useEffect","node","TableColumn","align","help","hideBelow","numeric","sortable","width","columnAlign","useLayoutEffect","sorted","ajuda","Tooltip","IconQuestionCircle","IconArrowUp","IconChevronExpand","Fragment","SKELETON_ROWS","TableBody","emptyDescription","emptyTitle","items","columnAt","countColumns","_","leadCells","EmptyState","item","TableRow","disabled","selected","event","TableCell","isNumeric"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.cjs","sources":["../../../../src/components/data-display/Table/Table.tsx"],"sourcesContent":["import {\n Children,\n createContext,\n Fragment,\n isValidElement,\n type ComponentPropsWithRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport { useMergedRefs } from '../../../hooks/useMergedRefs';\nimport { useSelection, type SelectionItem } from '../../../hooks/useSelection';\nimport { Tooltip } from '../../overlays/Tooltip';\nimport styles from './Table.module.css';\nimport { EmptyState } from '../../feedback/EmptyState';\nimport { Skeleton } from '../../feedback/Skeleton';\nimport { IconArrowUp, IconChevronExpand, IconQuestionCircle } from '../../icons';\n\nexport type TableSize = 'sm' | 'md';\nexport type TableAlign = 'start' | 'center' | 'end';\nexport type TableBreakpoint = 'sm' | 'md' | 'lg';\nexport type SortDirection = 'ascending' | 'descending';\nexport type TableSelectionMode = 'none' | 'single' | 'multiple';\nexport type TableSelectionControl = 'checkbox' | 'radio' | 'toggle';\n\nexport interface TableRowItem {\n disabled?: boolean;\n id: string;\n}\n\nexport interface TableSort {\n column: string;\n direction: SortDirection;\n}\n\nexport interface TableProps extends ComponentPropsWithRef<'div'> {\n children: ReactNode;\n /** Escolha inicial no modo nao controlado. */\n defaultSelectedIds?: readonly string[];\n defaultSort?: TableSort;\n divider?: boolean;\n label?: string;\n loading?: boolean;\n loadingMessage?: string;\n highlightSelectedRow?: boolean;\n onSelectionChange?: (ids: readonly string[]) => void;\n onSortChange?: (sort: TableSort) => void;\n rows?: readonly TableRowItem[];\n selectedIds?: readonly string[];\n selectionControl?: TableSelectionControl;\n selectionMode?: TableSelectionMode;\n size?: TableSize;\n sort?: TableSort;\n /** Cabecalho colado no topo da rolagem da pagina; com a tabela mais larga ou mais alta que o espaco, no dela. */\n stickyHeader?: boolean;\n striped?: boolean;\n}\n\n/** O que a celula herda da coluna na mesma posicao, quando nao declara o proprio. */\ninterface ColumnLayout {\n align: TableAlign;\n hideBelow?: TableBreakpoint;\n numeric: boolean;\n}\n\ninterface TableContextValue {\n baseId: string;\n columnAt: (index: number) => ColumnLayout | undefined;\n countColumns: () => number;\n loading: boolean;\n registerColumn: (id: string) => () => void;\n registerLayout: (index: number, layout: ColumnLayout) => () => void;\n requestSort: (column: string) => void;\n selection: TableSelection;\n size: TableSize;\n sort?: TableSort;\n}\n\ninterface TableSelection {\n control: TableSelectionControl;\n empty: boolean;\n highlight: boolean;\n isSelected: (id: string) => boolean;\n mode: TableSelectionMode;\n status: 'none' | 'partial' | 'all';\n toggle: (id: string, extend: boolean) => void;\n toggleAll: () => void;\n}\n\nconst TableContext = createContext<TableContextValue | undefined>(undefined);\n\n/** Posicao do filho no cabecalho ou na linha: e por ela que a celula acha a sua coluna. */\nconst ColumnIndexContext = createContext<number | undefined>(undefined);\n\nfunction withColumnIndex(children: ReactNode) {\n return Children.toArray(children).map((child, index) => (\n <ColumnIndexContext.Provider key={isValidElement(child) && child.key !== null ? child.key : index} value={index}>\n {child}\n </ColumnIndexContext.Provider>\n ));\n}\n\nfunction withLayout(\n layouts: readonly (ColumnLayout | undefined)[],\n index: number,\n layout: ColumnLayout | undefined,\n): (ColumnLayout | undefined)[] {\n const next = [...layouts];\n next[index] = layout;\n return next;\n}\n\nfunction useTableContext(part: string) {\n const context = useContext(TableContext);\n\n if (!context) {\n throw new Error(part + ' deve ser usado dentro de Table.');\n }\n\n return context;\n}\n\nexport function Table({\n children,\n className,\n defaultSelectedIds,\n defaultSort,\n divider = true,\n highlightSelectedRow = true,\n label,\n loading = false,\n loadingMessage = 'Carregando',\n onSelectionChange,\n onSortChange,\n rows = [],\n selectedIds,\n selectionControl,\n selectionMode = 'none',\n size = 'md',\n sort,\n stickyHeader = false,\n striped = false,\n ref,\n ...props\n}: TableProps) {\n const baseId = useId();\n const [internalSort, setInternalSort] = useState(defaultSort);\n const [columns, setColumns] = useState<ReadonlySet<string>>(() => new Set());\n const currentSort = sort ?? internalSort;\n const control = selectionControl ?? (selectionMode === 'single' ? 'radio' : 'checkbox');\n\n // Rolar dentro da tabela e colar o cabecalho na rolagem da pagina se excluem em CSS: o envoltorio so\n // continua conteiner de rolagem quando a tabela transborda dele.\n const [precisaRolar, setPrecisaRolar] = useState(true);\n const observarTransbordo = useCallback((envoltorio: HTMLDivElement | null) => {\n if (!envoltorio || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n const observador = new ResizeObserver(() =>\n setPrecisaRolar(\n envoltorio.scrollWidth > envoltorio.clientWidth || envoltorio.scrollHeight > envoltorio.clientHeight,\n ),\n );\n\n observador.observe(envoltorio);\n\n if (envoltorio.firstElementChild) {\n observador.observe(envoltorio.firstElementChild);\n }\n\n return () => observador.disconnect();\n }, []);\n const envoltorioRef = useMergedRefs(stickyHeader ? observarTransbordo : undefined, ref);\n\n // A coluna se registra enquanto esta na tela e sai quando sai: registrada para sempre, o vazio ocupava colunas\n // que nao existiam mais.\n const registerColumn = useCallback((id: string) => {\n setColumns((atuais) => new Set(atuais).add(id));\n\n return () =>\n setColumns((atuais) => {\n const restantes = new Set(atuais);\n restantes.delete(id);\n return restantes;\n });\n }, []);\n\n const [layouts, setLayouts] = useState<readonly (ColumnLayout | undefined)[]>([]);\n const registerLayout = useCallback((index: number, layout: ColumnLayout) => {\n setLayouts((atuais) => withLayout(atuais, index, layout));\n\n return () => setLayouts((atuais) => withLayout(atuais, index, undefined));\n }, []);\n\n function requestSort(column: string) {\n const next: TableSort = {\n column,\n direction:\n currentSort?.column === column && currentSort.direction === 'ascending' ? 'descending' : 'ascending',\n };\n\n if (sort === undefined) {\n setInternalSort(next);\n }\n\n onSortChange?.(next);\n }\n\n const collection = useMemo<SelectionItem[]>(\n () => rows.map((row) => ({ key: row.id, disabled: row.disabled })),\n [rows],\n );\n\n const selection = useSelection({\n // Caixa e chave desmarcam ao clicar de novo; o radio, nao.\n allowEmpty: control !== 'radio',\n defaultSelectedKeys: defaultSelectedIds,\n items: collection,\n mode: selectionMode,\n selectedKeys: selectedIds,\n onSelectionChange: (keys) => onSelectionChange?.([...keys]),\n });\n\n const context: TableContextValue = {\n baseId,\n columnAt: (index) => layouts[index],\n countColumns: () => Math.max(columns.size, 1),\n loading,\n registerColumn,\n registerLayout,\n requestSort,\n selection: {\n control,\n empty: rows.length === 0,\n highlight: highlightSelectedRow,\n isSelected: (id) => selection.selectedKeys.has(id),\n mode: selectionMode,\n status: selection.status,\n toggle: (id, extend) => {\n if (extend && selectionMode === 'multiple') {\n selection.selectRange(id);\n return;\n }\n\n selection.select(id);\n },\n toggleAll: selection.toggleAll,\n },\n size,\n sort: currentSort,\n };\n\n const classes = [\n styles.table,\n styles[size],\n divider && styles.divider,\n striped && styles.striped,\n stickyHeader && styles.sticky,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n {...props}\n className={[styles.scroll, stickyHeader && !precisaRolar && styles.noScroll, className].filter(Boolean).join(' ')}\n ref={envoltorioRef}\n >\n <table aria-busy={loading || undefined} aria-label={label} className={classes}>\n <TableContext.Provider value={context}>{children}</TableContext.Provider>\n </table>\n {loading && (\n <p className={styles.status} role=\"status\">\n {loadingMessage}\n </p>\n )}\n </div>\n );\n}\n\nexport interface TableHeaderProps {\n children: ReactNode;\n}\n\nfunction TableHeader({ children }: TableHeaderProps) {\n const { registerColumn, selection } = useTableContext('Table.Header');\n\n useEffect(() => (selection.mode === 'none' ? undefined : registerColumn('__selecao__')), [registerColumn, selection.mode]);\n\n return (\n <thead className={styles.head}>\n <tr>\n {selection.mode === 'multiple' && (\n <th className={[styles.column, styles.lead].join(' ')} scope=\"col\">\n {/* Sem `rows` nao ha o que marcar, e o clique so apagava a escolha que ja havia. */}\n <input\n aria-label=\"Selecionar todas as linhas\"\n checked={selection.status === 'all'}\n className={styles.checkbox}\n disabled={selection.empty}\n onChange={selection.toggleAll}\n ref={(node) => {\n if (node) {\n node.indeterminate = selection.status === 'partial';\n }\n }}\n type=\"checkbox\"\n />\n </th>\n )}\n {selection.mode === 'single' && <th className={[styles.column, styles.lead].join(' ')} scope=\"col\" />}\n {withColumnIndex(children)}\n </tr>\n </thead>\n );\n}\n\nexport interface TableColumnProps {\n align?: TableAlign;\n children: ReactNode;\n help?: string;\n hideBelow?: TableBreakpoint;\n id: string;\n numeric?: boolean;\n sortable?: boolean;\n width?: string;\n}\n\nfunction TableColumn({ align, children, help, hideBelow, id, numeric = false, sortable = false, width }: TableColumnProps) {\n const { registerColumn, registerLayout, requestSort, sort } = useTableContext('Table.Column');\n const index = useContext(ColumnIndexContext);\n const columnAlign = align ?? (numeric ? 'end' : 'start');\n\n useEffect(() => registerColumn(id), [id, registerColumn]);\n\n // Antes da pintura: com efeito comum, a celula aparecia um quadro alinhada a esquerda e so depois ia para o lado\n // da coluna.\n useLayoutEffect(\n () => (index === undefined ? undefined : registerLayout(index, { align: columnAlign, hideBelow, numeric })),\n [columnAlign, hideBelow, index, numeric, registerLayout],\n );\n\n const sorted = sort?.column === id ? sort.direction : undefined;\n\n // A ajuda e focavel e fica fora do botao de ordenacao: controle dentro de controle nao e HTML valido.\n const ajuda = help && (\n <Tooltip content={help}>\n <span aria-label={help} className={styles.help} role=\"img\" tabIndex={0}>\n <IconQuestionCircle size={14} />\n </span>\n </Tooltip>\n );\n\n return (\n <th\n aria-sort={sortable ? sorted ?? 'none' : undefined}\n className={[styles.column, styles[columnAlign], sortable && styles.sortable]\n .filter(Boolean)\n .join(' ')}\n data-hide-below={hideBelow}\n scope=\"col\"\n style={{ width }}\n >\n {sortable ? (\n <div className={styles.sortHeader}>\n <button className={styles.sortButton} onClick={() => requestSort(id)} type=\"button\">\n {children}\n {sorted ? (\n <IconArrowUp\n className={[styles.sortIcon, sorted === 'descending' && styles.sortDescending].filter(Boolean).join(' ')}\n size={12}\n />\n ) : (\n <IconChevronExpand className={styles.sortIcon} size={12} />\n )}\n </button>\n {ajuda}\n </div>\n ) : (\n <>\n {children}\n {ajuda}\n </>\n )}\n </th>\n );\n}\n\nexport interface TableBodyProps<T extends TableRowItem> {\n children: (item: T) => ReactNode;\n emptyDescription?: string;\n emptyTitle?: string;\n items: readonly T[];\n}\n\nconst SKELETON_ROWS = 3;\n\nfunction TableBody<T extends TableRowItem>({\n children,\n emptyDescription = 'Não há registros para exibir. Se houver busca ou filtros aplicados, experimente ajustá-los.',\n emptyTitle = 'Nenhum registro encontrado',\n items,\n}: TableBodyProps<T>) {\n const { columnAt, countColumns, loading, selection } = useTableContext('Table.Body');\n\n if (loading) {\n // Mantem a altura das linhas que ja estavam na tela, para a pagina nao pular quando a nova chegar.\n const rows = Array.from({ length: items.length || SKELETON_ROWS }, (_, index) => index);\n const leadCells = selection.mode === 'none' ? 0 : 1;\n const columns = Array.from({ length: countColumns() - leadCells }, (_, index) => columnAt(index));\n\n return (\n <tbody aria-hidden=\"true\">\n {rows.map((row) => (\n <tr className={[styles.row, styles.skeletonRow].join(' ')} key={row}>\n {leadCells > 0 && (\n <td className={[styles.cell, styles.lead].join(' ')}>\n <Skeleton className={styles.skeleton} />\n </td>\n )}\n {columns.map((column, index) => (\n <td className={[styles.cell, styles[column?.align ?? 'start']].join(' ')} data-hide-below={column?.hideBelow} key={index}>\n <Skeleton className={styles.skeleton} />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n );\n }\n\n if (items.length === 0) {\n return (\n <tbody>\n <tr>\n <td className={styles.empty} colSpan={countColumns()}>\n <EmptyState description={emptyDescription} title={emptyTitle} />\n </td>\n </tr>\n </tbody>\n );\n }\n\n return (\n <tbody>\n {items.map((item) => (\n <Fragment key={item.id}>{children(item)}</Fragment>\n ))}\n </tbody>\n );\n}\n\nexport interface TableRowProps {\n children: ReactNode;\n disabled?: boolean;\n id: string;\n label?: string;\n}\n\nfunction TableRow({ children, disabled = false, id, label }: TableRowProps) {\n const { baseId, selection } = useTableContext('Table.Row');\n const selected = selection.mode !== 'none' && selection.isSelected(id);\n\n return (\n // Sem `aria-selected` na linha: ele so vale em grade, e numa tabela quem anuncia a marcacao e o controle.\n <tr className={[styles.row, selected && selection.highlight && styles.selected].filter(Boolean).join(' ')}>\n {selection.mode !== 'none' && (\n <td className={[styles.cell, styles.lead].join(' ')}>\n <input\n aria-label={label ?? 'Selecionar linha'}\n checked={selected}\n className={styles[selection.control]}\n disabled={disabled}\n name={selection.control === 'radio' ? `${baseId}-selecao` : undefined}\n onChange={() => undefined}\n onClick={(event) => selection.toggle(id, event.shiftKey)}\n role={selection.control === 'toggle' ? 'switch' : undefined}\n type={selection.control === 'radio' ? 'radio' : 'checkbox'}\n />\n </td>\n )}\n {withColumnIndex(children)}\n </tr>\n );\n}\n\n/** Sem valor proprio, `align`, `hideBelow` e `numeric` seguem a coluna da mesma posicao no cabecalho. */\nexport interface TableCellProps {\n align?: TableAlign;\n children?: ReactNode;\n hideBelow?: TableBreakpoint;\n numeric?: boolean;\n}\n\nfunction TableCell({ align, children, hideBelow, numeric }: TableCellProps) {\n const { columnAt } = useTableContext('Table.Cell');\n const index = useContext(ColumnIndexContext);\n const column = index === undefined ? undefined : columnAt(index);\n const isNumeric = numeric ?? column?.numeric ?? false;\n\n return (\n <td\n className={[styles.cell, styles[align ?? column?.align ?? (isNumeric ? 'end' : 'start')], isNumeric && styles.numeric]\n .filter(Boolean)\n .join(' ')}\n data-hide-below={hideBelow ?? column?.hideBelow}\n >\n {children}\n </td>\n );\n}\n\nTable.Header = TableHeader;\nTable.Column = TableColumn;\nTable.Body = TableBody;\nTable.Row = TableRow;\nTable.Cell = TableCell;\n"],"names":["TableContext","createContext","ColumnIndexContext","withColumnIndex","children","Children","child","index","jsx","isValidElement","withLayout","layouts","layout","next","useTableContext","part","context","useContext","Table","className","defaultSelectedIds","defaultSort","divider","highlightSelectedRow","label","loading","loadingMessage","onSelectionChange","onSortChange","rows","selectedIds","selectionControl","selectionMode","size","sort","stickyHeader","striped","ref","props","baseId","useId","internalSort","setInternalSort","useState","columns","setColumns","currentSort","control","precisaRolar","setPrecisaRolar","observarTransbordo","useCallback","envoltorio","observador","envoltorioRef","useMergedRefs","registerColumn","id","atuais","restantes","setLayouts","registerLayout","requestSort","column","collection","useMemo","row","selection","useSelection","keys","extend","classes","styles","jsxs","TableHeader","useEffect","node","TableColumn","align","help","hideBelow","numeric","sortable","width","columnAlign","useLayoutEffect","sorted","ajuda","Tooltip","IconQuestionCircle","IconArrowUp","IconChevronExpand","Fragment","SKELETON_ROWS","TableBody","emptyDescription","emptyTitle","items","columnAt","countColumns","_","leadCells","Skeleton","EmptyState","item","TableRow","disabled","selected","event","TableCell","isNumeric"],"mappings":"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"}
|