@multiplatform.one/components 7.7.6 → 7.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Accordion/index.cjs +3 -3
- package/dist/cjs/Accordion/index.native.js +4 -4
- package/dist/cjs/Accordion/index.native.js.map +1 -1
- package/dist/cjs/Button.native.js.map +1 -1
- package/dist/cjs/Card.cjs +7 -1
- package/dist/cjs/Card.native.js +11 -1
- package/dist/cjs/Card.native.js.map +1 -1
- package/dist/cjs/CardFooter.cjs +1 -0
- package/dist/cjs/CardFooter.native.js +1 -0
- package/dist/cjs/CardFooter.native.js.map +1 -1
- package/dist/cjs/Chip/index.cjs +1 -1
- package/dist/cjs/Chip/index.native.js +1 -1
- package/dist/cjs/Chip/index.native.js.map +1 -1
- package/dist/cjs/ContextMenu/index.cjs +3 -3
- package/dist/cjs/ContextMenu/index.native.js +3 -3
- package/dist/cjs/ContextMenu/index.native.js.map +1 -1
- package/dist/cjs/CopyField/index.cjs +6 -1
- package/dist/cjs/CopyField/index.native.js +6 -1
- package/dist/cjs/CopyField/index.native.js.map +1 -1
- package/dist/cjs/DropdownMenu/index.cjs +34 -4
- package/dist/cjs/DropdownMenu/index.native.js +34 -4
- package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
- package/dist/cjs/Meter/index.cjs +15 -7
- package/dist/cjs/Meter/index.native.js +15 -7
- package/dist/cjs/Meter/index.native.js.map +1 -1
- package/dist/cjs/Meter/meter.cjs +1 -2
- package/dist/cjs/Meter/meter.native.js +1 -2
- package/dist/cjs/Meter/meter.native.js.map +1 -1
- package/dist/cjs/Pagination.cjs +2 -2
- package/dist/cjs/Pagination.native.js +2 -2
- package/dist/cjs/Pagination.native.js.map +1 -1
- package/dist/cjs/ProgressSteps/index.cjs +3 -3
- package/dist/cjs/ProgressSteps/index.native.js +3 -3
- package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
- package/dist/cjs/Quote/index.cjs +1 -2
- package/dist/cjs/Quote/index.native.js +1 -2
- package/dist/cjs/Quote/index.native.js.map +1 -1
- package/dist/cjs/Tabs/index.cjs +8 -7
- package/dist/cjs/Tabs/index.native.js +9 -8
- package/dist/cjs/Tabs/index.native.js.map +1 -1
- package/dist/cjs/Toast/index.cjs +57 -7
- package/dist/cjs/Toast/index.native.js +59 -7
- package/dist/cjs/Toast/index.native.js.map +1 -1
- package/dist/cjs/TreeSelect/index.cjs +46 -7
- package/dist/cjs/TreeSelect/index.native.js +58 -7
- package/dist/cjs/TreeSelect/index.native.js.map +1 -1
- package/dist/cjs/actions/DestructiveAction.cjs +7 -13
- package/dist/cjs/actions/DestructiveAction.native.js +7 -15
- package/dist/cjs/actions/DestructiveAction.native.js.map +1 -1
- package/dist/cjs/charts/Axis.cjs +5 -0
- package/dist/cjs/charts/Axis.native.js +5 -0
- package/dist/cjs/charts/Axis.native.js.map +1 -1
- package/dist/cjs/charts/BarChart.cjs +71 -57
- package/dist/cjs/charts/BarChart.native.js +81 -67
- package/dist/cjs/charts/BarChart.native.js.map +1 -1
- package/dist/cjs/charts/ChartDataView.cjs +212 -0
- package/dist/cjs/charts/ChartDataView.native.js +224 -0
- package/dist/cjs/charts/ChartDataView.native.js.map +1 -0
- package/dist/cjs/charts/ChartSurface.cjs +5 -1
- package/dist/cjs/charts/ChartSurface.native.js +5 -1
- package/dist/cjs/charts/ChartSurface.native.js.map +1 -1
- package/dist/cjs/charts/LineChart.cjs +81 -67
- package/dist/cjs/charts/LineChart.native.js +94 -80
- package/dist/cjs/charts/LineChart.native.js.map +1 -1
- package/dist/cjs/charts/PieChart.cjs +98 -74
- package/dist/cjs/charts/PieChart.native.js +109 -85
- package/dist/cjs/charts/PieChart.native.js.map +1 -1
- package/dist/cjs/charts/Sparkline.cjs +10 -1
- package/dist/cjs/charts/Sparkline.native.js +10 -1
- package/dist/cjs/charts/Sparkline.native.js.map +1 -1
- package/dist/cjs/charts/accessibility.cjs +4 -0
- package/dist/cjs/charts/accessibility.native.js +7 -0
- package/dist/cjs/charts/accessibility.native.js.map +1 -1
- package/dist/cjs/charts/index.cjs +3 -1
- package/dist/cjs/charts/index.native.js +2 -0
- package/dist/cjs/charts/index.native.js.map +1 -1
- package/dist/cjs/charts/math.cjs +16 -0
- package/dist/cjs/charts/math.native.js +18 -0
- package/dist/cjs/charts/math.native.js.map +1 -1
- package/dist/cjs/charts/series.cjs +49 -7
- package/dist/cjs/charts/series.native.js +53 -11
- package/dist/cjs/charts/series.native.js.map +1 -1
- package/dist/cjs/charts/svg.cjs +46 -3
- package/dist/cjs/charts/svg.native.js +46 -3
- package/dist/cjs/charts/svg.native.js.map +1 -1
- package/dist/cjs/code/CodeBlock/index.cjs +6 -1
- package/dist/cjs/code/CodeBlock/index.native.js +6 -1
- package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
- package/dist/cjs/code/HighlightedCode/index.cjs +1 -1
- package/dist/cjs/code/HighlightedCode/index.native.js +1 -1
- package/dist/cjs/code/HighlightedCode/index.native.js.map +1 -1
- package/dist/cjs/componentColors.cjs +6 -4
- package/dist/cjs/componentColors.native.js +6 -4
- package/dist/cjs/componentColors.native.js.map +1 -1
- package/dist/cjs/feedback/ConfirmDialog.cjs +7 -21
- package/dist/cjs/feedback/ConfirmDialog.native.js +7 -22
- package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
- package/dist/cjs/feedback/NotifyHost.cjs +2 -1
- package/dist/cjs/feedback/NotifyHost.native.js +3 -2
- package/dist/cjs/feedback/NotifyHost.native.js.map +1 -1
- package/dist/cjs/feedback/copy.cjs +36 -4
- package/dist/cjs/feedback/copy.native.js +38 -4
- package/dist/cjs/feedback/copy.native.js.map +1 -1
- package/dist/cjs/feedback/index.cjs +1 -0
- package/dist/cjs/feedback/index.native.js +1 -0
- package/dist/cjs/feedback/index.native.js.map +1 -1
- package/dist/cjs/feedback/notify.cjs +1 -0
- package/dist/cjs/feedback/notify.native.js +1 -0
- package/dist/cjs/feedback/notify.native.js.map +1 -1
- package/dist/cjs/feedback/route.cjs +3 -0
- package/dist/cjs/feedback/route.native.js +3 -0
- package/dist/cjs/feedback/route.native.js.map +1 -1
- package/dist/cjs/feedback/store.cjs +6 -0
- package/dist/cjs/feedback/store.native.js +8 -0
- package/dist/cjs/feedback/store.native.js.map +1 -1
- package/dist/cjs/icons/lucide.cjs +2 -1
- package/dist/cjs/icons/lucide.native.js +2 -1
- package/dist/cjs/icons/lucide.native.js.map +1 -1
- package/dist/cjs/images/Image/ImageFrame.cjs +4 -2
- package/dist/cjs/images/Image/ImageFrame.native.js +4 -2
- package/dist/cjs/images/Image/ImageFrame.native.js.map +1 -1
- package/dist/cjs/layouts/AsyncBoundary.cjs +1 -2
- package/dist/cjs/layouts/AsyncBoundary.native.js +1 -2
- package/dist/cjs/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/cjs/layouts/EmptyState.cjs +6 -2
- package/dist/cjs/layouts/EmptyState.native.js +10 -6
- package/dist/cjs/layouts/EmptyState.native.js.map +1 -1
- package/dist/cjs/layouts/PaneScaffold.cjs +96 -41
- package/dist/cjs/layouts/PaneScaffold.native.js +97 -41
- package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
- package/dist/cjs/layouts/attachments.cjs +4 -4
- package/dist/cjs/layouts/attachments.native.js +4 -4
- package/dist/cjs/layouts/attachments.native.js.map +1 -1
- package/dist/cjs/layouts/breadcrumbs.cjs +1 -2
- package/dist/cjs/layouts/breadcrumbs.native.js +1 -2
- package/dist/cjs/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/cjs/layouts/index.cjs +2 -0
- package/dist/cjs/layouts/index.native.js +2 -0
- package/dist/cjs/layouts/index.native.js.map +1 -1
- package/dist/cjs/layouts/page.cjs +50 -9
- package/dist/cjs/layouts/page.native.js +52 -9
- package/dist/cjs/layouts/page.native.js.map +1 -1
- package/dist/cjs/layouts/sidebar.cjs +2 -2
- package/dist/cjs/layouts/sidebar.native.js +2 -2
- package/dist/cjs/layouts/sidebar.native.js.map +1 -1
- package/dist/cjs/layouts/tags.cjs +6 -7
- package/dist/cjs/layouts/tags.native.js +6 -9
- package/dist/cjs/layouts/tags.native.js.map +1 -1
- package/dist/cjs/layouts/timeline.cjs +5 -5
- package/dist/cjs/layouts/timeline.native.js +5 -5
- package/dist/cjs/layouts/timeline.native.js.map +1 -1
- package/dist/cjs/shared/useKeyboardInset.cjs +1 -19
- package/dist/cjs/shared/useKeyboardInset.native.js +3 -3
- package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
- package/dist/cjs/surfaces.cjs +1 -0
- package/dist/cjs/surfaces.native.js +1 -0
- package/dist/cjs/surfaces.native.js.map +1 -1
- package/dist/cjs/views/Calendar.cjs +11 -8
- package/dist/cjs/views/Calendar.native.js +11 -8
- package/dist/cjs/views/Calendar.native.js.map +1 -1
- package/dist/cjs/views/Dashboard.cjs +116 -23
- package/dist/cjs/views/Dashboard.native.js +158 -52
- package/dist/cjs/views/Dashboard.native.js.map +1 -1
- package/dist/cjs/views/Gantt.cjs +377 -94
- package/dist/cjs/views/Gantt.native.js +446 -97
- package/dist/cjs/views/Gantt.native.js.map +1 -1
- package/dist/cjs/views/Kanban.cjs +2 -2
- package/dist/cjs/views/Kanban.native.js +2 -2
- package/dist/cjs/views/Kanban.native.js.map +1 -1
- package/dist/cjs/views/ReportBuilder.cjs +4 -4
- package/dist/cjs/views/ReportBuilder.native.js +4 -4
- package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
- package/dist/cjs/views/TreeView.cjs +103 -6
- package/dist/cjs/views/TreeView.native.js +115 -6
- package/dist/cjs/views/TreeView.native.js.map +1 -1
- package/dist/cjs/views/ganttMath.cjs +91 -2
- package/dist/cjs/views/ganttMath.native.js +113 -3
- package/dist/cjs/views/ganttMath.native.js.map +1 -1
- package/dist/cjs/views/index.cjs +20 -1
- package/dist/cjs/views/index.native.js +20 -1
- package/dist/cjs/views/index.native.js.map +1 -1
- package/dist/cjs/views/treeViewReveal.cjs +55 -0
- package/dist/cjs/views/treeViewReveal.native.js +80 -0
- package/dist/cjs/views/treeViewReveal.native.js.map +1 -0
- package/dist/esm/Accordion/index.mjs +3 -3
- package/dist/esm/Accordion/index.mjs.map +1 -1
- package/dist/esm/Accordion/index.native.js +4 -4
- package/dist/esm/Accordion/index.native.js.map +1 -1
- package/dist/esm/Button.mjs.map +1 -1
- package/dist/esm/Button.native.js.map +1 -1
- package/dist/esm/Card.mjs +8 -2
- package/dist/esm/Card.mjs.map +1 -1
- package/dist/esm/Card.native.js +12 -2
- package/dist/esm/Card.native.js.map +1 -1
- package/dist/esm/CardFooter.mjs +1 -0
- package/dist/esm/CardFooter.mjs.map +1 -1
- package/dist/esm/CardFooter.native.js +1 -0
- package/dist/esm/CardFooter.native.js.map +1 -1
- package/dist/esm/Chip/index.mjs +1 -1
- package/dist/esm/Chip/index.mjs.map +1 -1
- package/dist/esm/Chip/index.native.js +1 -1
- package/dist/esm/Chip/index.native.js.map +1 -1
- package/dist/esm/ContextMenu/index.mjs +3 -3
- package/dist/esm/ContextMenu/index.mjs.map +1 -1
- package/dist/esm/ContextMenu/index.native.js +3 -3
- package/dist/esm/ContextMenu/index.native.js.map +1 -1
- package/dist/esm/CopyField/index.mjs +7 -2
- package/dist/esm/CopyField/index.mjs.map +1 -1
- package/dist/esm/CopyField/index.native.js +7 -2
- package/dist/esm/CopyField/index.native.js.map +1 -1
- package/dist/esm/DropdownMenu/index.mjs +35 -5
- package/dist/esm/DropdownMenu/index.mjs.map +1 -1
- package/dist/esm/DropdownMenu/index.native.js +35 -5
- package/dist/esm/DropdownMenu/index.native.js.map +1 -1
- package/dist/esm/Meter/index.mjs +15 -7
- package/dist/esm/Meter/index.mjs.map +1 -1
- package/dist/esm/Meter/index.native.js +15 -7
- package/dist/esm/Meter/index.native.js.map +1 -1
- package/dist/esm/Meter/meter.mjs +1 -2
- package/dist/esm/Meter/meter.mjs.map +1 -1
- package/dist/esm/Meter/meter.native.js +1 -2
- package/dist/esm/Meter/meter.native.js.map +1 -1
- package/dist/esm/Pagination.mjs +2 -2
- package/dist/esm/Pagination.mjs.map +1 -1
- package/dist/esm/Pagination.native.js +2 -2
- package/dist/esm/Pagination.native.js.map +1 -1
- package/dist/esm/ProgressSteps/index.mjs +3 -3
- package/dist/esm/ProgressSteps/index.mjs.map +1 -1
- package/dist/esm/ProgressSteps/index.native.js +3 -3
- package/dist/esm/ProgressSteps/index.native.js.map +1 -1
- package/dist/esm/Quote/index.mjs +1 -2
- package/dist/esm/Quote/index.mjs.map +1 -1
- package/dist/esm/Quote/index.native.js +1 -2
- package/dist/esm/Quote/index.native.js.map +1 -1
- package/dist/esm/Tabs/index.mjs +8 -7
- package/dist/esm/Tabs/index.mjs.map +1 -1
- package/dist/esm/Tabs/index.native.js +9 -8
- package/dist/esm/Tabs/index.native.js.map +1 -1
- package/dist/esm/Toast/index.mjs +56 -8
- package/dist/esm/Toast/index.mjs.map +1 -1
- package/dist/esm/Toast/index.native.js +58 -8
- package/dist/esm/Toast/index.native.js.map +1 -1
- package/dist/esm/TreeSelect/index.mjs +46 -7
- package/dist/esm/TreeSelect/index.mjs.map +1 -1
- package/dist/esm/TreeSelect/index.native.js +58 -7
- package/dist/esm/TreeSelect/index.native.js.map +1 -1
- package/dist/esm/actions/DestructiveAction.mjs +8 -14
- package/dist/esm/actions/DestructiveAction.mjs.map +1 -1
- package/dist/esm/actions/DestructiveAction.native.js +8 -16
- package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
- package/dist/esm/charts/Axis.mjs +6 -1
- package/dist/esm/charts/Axis.mjs.map +1 -1
- package/dist/esm/charts/Axis.native.js +6 -1
- package/dist/esm/charts/Axis.native.js.map +1 -1
- package/dist/esm/charts/BarChart.mjs +72 -58
- package/dist/esm/charts/BarChart.mjs.map +1 -1
- package/dist/esm/charts/BarChart.native.js +82 -68
- package/dist/esm/charts/BarChart.native.js.map +1 -1
- package/dist/esm/charts/ChartDataView.mjs +185 -0
- package/dist/esm/charts/ChartDataView.mjs.map +1 -0
- package/dist/esm/charts/ChartDataView.native.js +194 -0
- package/dist/esm/charts/ChartDataView.native.js.map +1 -0
- package/dist/esm/charts/ChartSurface.mjs +5 -1
- package/dist/esm/charts/ChartSurface.mjs.map +1 -1
- package/dist/esm/charts/ChartSurface.native.js +5 -1
- package/dist/esm/charts/ChartSurface.native.js.map +1 -1
- package/dist/esm/charts/LineChart.mjs +82 -68
- package/dist/esm/charts/LineChart.mjs.map +1 -1
- package/dist/esm/charts/LineChart.native.js +95 -81
- package/dist/esm/charts/LineChart.native.js.map +1 -1
- package/dist/esm/charts/PieChart.mjs +100 -76
- package/dist/esm/charts/PieChart.mjs.map +1 -1
- package/dist/esm/charts/PieChart.native.js +111 -87
- package/dist/esm/charts/PieChart.native.js.map +1 -1
- package/dist/esm/charts/Sparkline.mjs +11 -2
- package/dist/esm/charts/Sparkline.mjs.map +1 -1
- package/dist/esm/charts/Sparkline.native.js +11 -2
- package/dist/esm/charts/Sparkline.native.js.map +1 -1
- package/dist/esm/charts/accessibility.mjs +4 -1
- package/dist/esm/charts/accessibility.mjs.map +1 -1
- package/dist/esm/charts/accessibility.native.js +7 -1
- package/dist/esm/charts/accessibility.native.js.map +1 -1
- package/dist/esm/charts/index.mjs +2 -1
- package/dist/esm/charts/index.mjs.map +1 -1
- package/dist/esm/charts/index.native.js +2 -1
- package/dist/esm/charts/index.native.js.map +1 -1
- package/dist/esm/charts/math.mjs +16 -1
- package/dist/esm/charts/math.mjs.map +1 -1
- package/dist/esm/charts/math.native.js +18 -1
- package/dist/esm/charts/math.native.js.map +1 -1
- package/dist/esm/charts/series.mjs +51 -9
- package/dist/esm/charts/series.mjs.map +1 -1
- package/dist/esm/charts/series.native.js +55 -13
- package/dist/esm/charts/series.native.js.map +1 -1
- package/dist/esm/charts/svg.mjs +40 -4
- package/dist/esm/charts/svg.mjs.map +1 -1
- package/dist/esm/charts/svg.native.js +40 -4
- package/dist/esm/charts/svg.native.js.map +1 -1
- package/dist/esm/code/CodeBlock/index.mjs +7 -2
- package/dist/esm/code/CodeBlock/index.mjs.map +1 -1
- package/dist/esm/code/CodeBlock/index.native.js +7 -2
- package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
- package/dist/esm/code/HighlightedCode/index.mjs +1 -1
- package/dist/esm/code/HighlightedCode/index.mjs.map +1 -1
- package/dist/esm/code/HighlightedCode/index.native.js +1 -1
- package/dist/esm/code/HighlightedCode/index.native.js.map +1 -1
- package/dist/esm/componentColors.mjs +6 -4
- package/dist/esm/componentColors.mjs.map +1 -1
- package/dist/esm/componentColors.native.js +6 -4
- package/dist/esm/componentColors.native.js.map +1 -1
- package/dist/esm/feedback/ConfirmDialog.mjs +8 -22
- package/dist/esm/feedback/ConfirmDialog.mjs.map +1 -1
- package/dist/esm/feedback/ConfirmDialog.native.js +8 -23
- package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
- package/dist/esm/feedback/NotifyHost.mjs +2 -1
- package/dist/esm/feedback/NotifyHost.mjs.map +1 -1
- package/dist/esm/feedback/NotifyHost.native.js +3 -2
- package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
- package/dist/esm/feedback/copy.mjs +35 -4
- package/dist/esm/feedback/copy.mjs.map +1 -1
- package/dist/esm/feedback/copy.native.js +37 -4
- package/dist/esm/feedback/copy.native.js.map +1 -1
- package/dist/esm/feedback/index.mjs +2 -2
- package/dist/esm/feedback/index.mjs.map +1 -1
- package/dist/esm/feedback/index.native.js +2 -2
- package/dist/esm/feedback/index.native.js.map +1 -1
- package/dist/esm/feedback/notify.mjs +1 -0
- package/dist/esm/feedback/notify.mjs.map +1 -1
- package/dist/esm/feedback/notify.native.js +1 -0
- package/dist/esm/feedback/notify.native.js.map +1 -1
- package/dist/esm/feedback/route.mjs +3 -0
- package/dist/esm/feedback/route.mjs.map +1 -1
- package/dist/esm/feedback/route.native.js +3 -0
- package/dist/esm/feedback/route.native.js.map +1 -1
- package/dist/esm/feedback/store.mjs +6 -1
- package/dist/esm/feedback/store.mjs.map +1 -1
- package/dist/esm/feedback/store.native.js +8 -1
- package/dist/esm/feedback/store.native.js.map +1 -1
- package/dist/esm/icons/lucide.mjs +2 -2
- package/dist/esm/icons/lucide.mjs.map +1 -1
- package/dist/esm/icons/lucide.native.js +2 -2
- package/dist/esm/icons/lucide.native.js.map +1 -1
- package/dist/esm/images/Image/ImageFrame.mjs +4 -2
- package/dist/esm/images/Image/ImageFrame.mjs.map +1 -1
- package/dist/esm/images/Image/ImageFrame.native.js +4 -2
- package/dist/esm/images/Image/ImageFrame.native.js.map +1 -1
- package/dist/esm/layouts/AsyncBoundary.mjs +1 -2
- package/dist/esm/layouts/AsyncBoundary.mjs.map +1 -1
- package/dist/esm/layouts/AsyncBoundary.native.js +1 -2
- package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/esm/layouts/EmptyState.mjs +7 -3
- package/dist/esm/layouts/EmptyState.mjs.map +1 -1
- package/dist/esm/layouts/EmptyState.native.js +11 -7
- package/dist/esm/layouts/EmptyState.native.js.map +1 -1
- package/dist/esm/layouts/PaneScaffold.mjs +97 -42
- package/dist/esm/layouts/PaneScaffold.mjs.map +1 -1
- package/dist/esm/layouts/PaneScaffold.native.js +98 -42
- package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
- package/dist/esm/layouts/attachments.mjs +4 -4
- package/dist/esm/layouts/attachments.mjs.map +1 -1
- package/dist/esm/layouts/attachments.native.js +4 -4
- package/dist/esm/layouts/attachments.native.js.map +1 -1
- package/dist/esm/layouts/breadcrumbs.mjs +1 -2
- package/dist/esm/layouts/breadcrumbs.mjs.map +1 -1
- package/dist/esm/layouts/breadcrumbs.native.js +1 -2
- package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/esm/layouts/index.mjs +2 -1
- package/dist/esm/layouts/index.mjs.map +1 -1
- package/dist/esm/layouts/index.native.js +2 -1
- package/dist/esm/layouts/index.native.js.map +1 -1
- package/dist/esm/layouts/page.mjs +51 -10
- package/dist/esm/layouts/page.mjs.map +1 -1
- package/dist/esm/layouts/page.native.js +53 -10
- package/dist/esm/layouts/page.native.js.map +1 -1
- package/dist/esm/layouts/sidebar.mjs +2 -2
- package/dist/esm/layouts/sidebar.mjs.map +1 -1
- package/dist/esm/layouts/sidebar.native.js +2 -2
- package/dist/esm/layouts/sidebar.native.js.map +1 -1
- package/dist/esm/layouts/tags.mjs +6 -7
- package/dist/esm/layouts/tags.mjs.map +1 -1
- package/dist/esm/layouts/tags.native.js +6 -9
- package/dist/esm/layouts/tags.native.js.map +1 -1
- package/dist/esm/layouts/timeline.mjs +5 -5
- package/dist/esm/layouts/timeline.mjs.map +1 -1
- package/dist/esm/layouts/timeline.native.js +5 -5
- package/dist/esm/layouts/timeline.native.js.map +1 -1
- package/dist/esm/shared/useKeyboardInset.mjs +1 -19
- package/dist/esm/shared/useKeyboardInset.mjs.map +1 -1
- package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
- package/dist/esm/surfaces.mjs +1 -0
- package/dist/esm/surfaces.mjs.map +1 -1
- package/dist/esm/surfaces.native.js +1 -0
- package/dist/esm/surfaces.native.js.map +1 -1
- package/dist/esm/views/Calendar.mjs +11 -8
- package/dist/esm/views/Calendar.mjs.map +1 -1
- package/dist/esm/views/Calendar.native.js +11 -8
- package/dist/esm/views/Calendar.native.js.map +1 -1
- package/dist/esm/views/Dashboard.mjs +118 -25
- package/dist/esm/views/Dashboard.mjs.map +1 -1
- package/dist/esm/views/Dashboard.native.js +160 -54
- package/dist/esm/views/Dashboard.native.js.map +1 -1
- package/dist/esm/views/Gantt.mjs +379 -96
- package/dist/esm/views/Gantt.mjs.map +1 -1
- package/dist/esm/views/Gantt.native.js +448 -99
- package/dist/esm/views/Gantt.native.js.map +1 -1
- package/dist/esm/views/Kanban.mjs +2 -2
- package/dist/esm/views/Kanban.mjs.map +1 -1
- package/dist/esm/views/Kanban.native.js +2 -2
- package/dist/esm/views/Kanban.native.js.map +1 -1
- package/dist/esm/views/ReportBuilder.mjs +4 -4
- package/dist/esm/views/ReportBuilder.mjs.map +1 -1
- package/dist/esm/views/ReportBuilder.native.js +4 -4
- package/dist/esm/views/ReportBuilder.native.js.map +1 -1
- package/dist/esm/views/TreeView.mjs +104 -7
- package/dist/esm/views/TreeView.mjs.map +1 -1
- package/dist/esm/views/TreeView.native.js +116 -7
- package/dist/esm/views/TreeView.native.js.map +1 -1
- package/dist/esm/views/ganttMath.mjs +84 -3
- package/dist/esm/views/ganttMath.mjs.map +1 -1
- package/dist/esm/views/ganttMath.native.js +106 -4
- package/dist/esm/views/ganttMath.native.js.map +1 -1
- package/dist/esm/views/index.mjs +2 -2
- package/dist/esm/views/index.mjs.map +1 -1
- package/dist/esm/views/index.native.js +2 -2
- package/dist/esm/views/index.native.js.map +1 -1
- package/dist/esm/views/treeViewReveal.mjs +29 -0
- package/dist/esm/views/treeViewReveal.mjs.map +1 -0
- package/dist/esm/views/treeViewReveal.native.js +51 -0
- package/dist/esm/views/treeViewReveal.native.js.map +1 -0
- package/dist/jsx/Accordion/index.mjs +3 -3
- package/dist/jsx/Accordion/index.mjs.map +1 -1
- package/dist/jsx/Accordion/index.native.js +4 -4
- package/dist/jsx/Accordion/index.native.js.map +1 -1
- package/dist/jsx/Button.mjs.map +1 -1
- package/dist/jsx/Button.native.js.map +1 -1
- package/dist/jsx/Card.mjs +8 -2
- package/dist/jsx/Card.mjs.map +1 -1
- package/dist/jsx/Card.native.js +11 -1
- package/dist/jsx/Card.native.js.map +1 -1
- package/dist/jsx/CardFooter.mjs +1 -0
- package/dist/jsx/CardFooter.mjs.map +1 -1
- package/dist/jsx/CardFooter.native.js +1 -0
- package/dist/jsx/CardFooter.native.js.map +1 -1
- package/dist/jsx/Chip/index.mjs +1 -1
- package/dist/jsx/Chip/index.mjs.map +1 -1
- package/dist/jsx/Chip/index.native.js +1 -1
- package/dist/jsx/Chip/index.native.js.map +1 -1
- package/dist/jsx/ContextMenu/index.mjs +3 -3
- package/dist/jsx/ContextMenu/index.mjs.map +1 -1
- package/dist/jsx/ContextMenu/index.native.js +3 -3
- package/dist/jsx/ContextMenu/index.native.js.map +1 -1
- package/dist/jsx/CopyField/index.mjs +7 -2
- package/dist/jsx/CopyField/index.mjs.map +1 -1
- package/dist/jsx/CopyField/index.native.js +6 -1
- package/dist/jsx/CopyField/index.native.js.map +1 -1
- package/dist/jsx/DropdownMenu/index.mjs +35 -5
- package/dist/jsx/DropdownMenu/index.mjs.map +1 -1
- package/dist/jsx/DropdownMenu/index.native.js +34 -4
- package/dist/jsx/DropdownMenu/index.native.js.map +1 -1
- package/dist/jsx/Meter/index.mjs +15 -7
- package/dist/jsx/Meter/index.mjs.map +1 -1
- package/dist/jsx/Meter/index.native.js +15 -7
- package/dist/jsx/Meter/index.native.js.map +1 -1
- package/dist/jsx/Meter/meter.mjs +1 -2
- package/dist/jsx/Meter/meter.mjs.map +1 -1
- package/dist/jsx/Meter/meter.native.js +1 -2
- package/dist/jsx/Meter/meter.native.js.map +1 -1
- package/dist/jsx/Pagination.mjs +2 -2
- package/dist/jsx/Pagination.mjs.map +1 -1
- package/dist/jsx/Pagination.native.js +2 -2
- package/dist/jsx/Pagination.native.js.map +1 -1
- package/dist/jsx/ProgressSteps/index.mjs +3 -3
- package/dist/jsx/ProgressSteps/index.mjs.map +1 -1
- package/dist/jsx/ProgressSteps/index.native.js +3 -3
- package/dist/jsx/ProgressSteps/index.native.js.map +1 -1
- package/dist/jsx/Quote/index.mjs +1 -2
- package/dist/jsx/Quote/index.mjs.map +1 -1
- package/dist/jsx/Quote/index.native.js +1 -2
- package/dist/jsx/Quote/index.native.js.map +1 -1
- package/dist/jsx/Tabs/index.mjs +8 -7
- package/dist/jsx/Tabs/index.mjs.map +1 -1
- package/dist/jsx/Tabs/index.native.js +9 -8
- package/dist/jsx/Tabs/index.native.js.map +1 -1
- package/dist/jsx/Toast/index.mjs +56 -8
- package/dist/jsx/Toast/index.mjs.map +1 -1
- package/dist/jsx/Toast/index.native.js +59 -7
- package/dist/jsx/Toast/index.native.js.map +1 -1
- package/dist/jsx/TreeSelect/index.mjs +46 -7
- package/dist/jsx/TreeSelect/index.mjs.map +1 -1
- package/dist/jsx/TreeSelect/index.native.js +58 -7
- package/dist/jsx/TreeSelect/index.native.js.map +1 -1
- package/dist/jsx/actions/DestructiveAction.mjs +8 -14
- package/dist/jsx/actions/DestructiveAction.mjs.map +1 -1
- package/dist/jsx/actions/DestructiveAction.native.js +7 -15
- package/dist/jsx/actions/DestructiveAction.native.js.map +1 -1
- package/dist/jsx/charts/Axis.mjs +6 -1
- package/dist/jsx/charts/Axis.mjs.map +1 -1
- package/dist/jsx/charts/Axis.native.js +5 -0
- package/dist/jsx/charts/Axis.native.js.map +1 -1
- package/dist/jsx/charts/BarChart.mjs +72 -58
- package/dist/jsx/charts/BarChart.mjs.map +1 -1
- package/dist/jsx/charts/BarChart.native.js +81 -67
- package/dist/jsx/charts/BarChart.native.js.map +1 -1
- package/dist/jsx/charts/ChartDataView.mjs +185 -0
- package/dist/jsx/charts/ChartDataView.mjs.map +1 -0
- package/dist/jsx/charts/ChartDataView.native.js +224 -0
- package/dist/jsx/charts/ChartDataView.native.js.map +1 -0
- package/dist/jsx/charts/ChartSurface.mjs +5 -1
- package/dist/jsx/charts/ChartSurface.mjs.map +1 -1
- package/dist/jsx/charts/ChartSurface.native.js +5 -1
- package/dist/jsx/charts/ChartSurface.native.js.map +1 -1
- package/dist/jsx/charts/LineChart.mjs +82 -68
- package/dist/jsx/charts/LineChart.mjs.map +1 -1
- package/dist/jsx/charts/LineChart.native.js +94 -80
- package/dist/jsx/charts/LineChart.native.js.map +1 -1
- package/dist/jsx/charts/PieChart.mjs +100 -76
- package/dist/jsx/charts/PieChart.mjs.map +1 -1
- package/dist/jsx/charts/PieChart.native.js +109 -85
- package/dist/jsx/charts/PieChart.native.js.map +1 -1
- package/dist/jsx/charts/Sparkline.mjs +11 -2
- package/dist/jsx/charts/Sparkline.mjs.map +1 -1
- package/dist/jsx/charts/Sparkline.native.js +10 -1
- package/dist/jsx/charts/Sparkline.native.js.map +1 -1
- package/dist/jsx/charts/accessibility.mjs +4 -1
- package/dist/jsx/charts/accessibility.mjs.map +1 -1
- package/dist/jsx/charts/accessibility.native.js +7 -0
- package/dist/jsx/charts/accessibility.native.js.map +1 -1
- package/dist/jsx/charts/index.mjs +2 -1
- package/dist/jsx/charts/index.mjs.map +1 -1
- package/dist/jsx/charts/index.native.js +2 -0
- package/dist/jsx/charts/index.native.js.map +1 -1
- package/dist/jsx/charts/math.mjs +16 -1
- package/dist/jsx/charts/math.mjs.map +1 -1
- package/dist/jsx/charts/math.native.js +18 -0
- package/dist/jsx/charts/math.native.js.map +1 -1
- package/dist/jsx/charts/series.mjs +51 -9
- package/dist/jsx/charts/series.mjs.map +1 -1
- package/dist/jsx/charts/series.native.js +53 -11
- package/dist/jsx/charts/series.native.js.map +1 -1
- package/dist/jsx/charts/svg.mjs +40 -4
- package/dist/jsx/charts/svg.mjs.map +1 -1
- package/dist/jsx/charts/svg.native.js +46 -3
- package/dist/jsx/charts/svg.native.js.map +1 -1
- package/dist/jsx/code/CodeBlock/index.mjs +7 -2
- package/dist/jsx/code/CodeBlock/index.mjs.map +1 -1
- package/dist/jsx/code/CodeBlock/index.native.js +6 -1
- package/dist/jsx/code/CodeBlock/index.native.js.map +1 -1
- package/dist/jsx/code/HighlightedCode/index.mjs +1 -1
- package/dist/jsx/code/HighlightedCode/index.mjs.map +1 -1
- package/dist/jsx/code/HighlightedCode/index.native.js +1 -1
- package/dist/jsx/code/HighlightedCode/index.native.js.map +1 -1
- package/dist/jsx/componentColors.mjs +6 -4
- package/dist/jsx/componentColors.mjs.map +1 -1
- package/dist/jsx/componentColors.native.js +6 -4
- package/dist/jsx/componentColors.native.js.map +1 -1
- package/dist/jsx/feedback/ConfirmDialog.mjs +8 -22
- package/dist/jsx/feedback/ConfirmDialog.mjs.map +1 -1
- package/dist/jsx/feedback/ConfirmDialog.native.js +7 -22
- package/dist/jsx/feedback/ConfirmDialog.native.js.map +1 -1
- package/dist/jsx/feedback/NotifyHost.mjs +2 -1
- package/dist/jsx/feedback/NotifyHost.mjs.map +1 -1
- package/dist/jsx/feedback/NotifyHost.native.js +3 -2
- package/dist/jsx/feedback/NotifyHost.native.js.map +1 -1
- package/dist/jsx/feedback/copy.mjs +35 -4
- package/dist/jsx/feedback/copy.mjs.map +1 -1
- package/dist/jsx/feedback/copy.native.js +38 -4
- package/dist/jsx/feedback/copy.native.js.map +1 -1
- package/dist/jsx/feedback/index.mjs +2 -2
- package/dist/jsx/feedback/index.mjs.map +1 -1
- package/dist/jsx/feedback/index.native.js +1 -0
- package/dist/jsx/feedback/index.native.js.map +1 -1
- package/dist/jsx/feedback/notify.mjs +1 -0
- package/dist/jsx/feedback/notify.mjs.map +1 -1
- package/dist/jsx/feedback/notify.native.js +1 -0
- package/dist/jsx/feedback/notify.native.js.map +1 -1
- package/dist/jsx/feedback/route.mjs +3 -0
- package/dist/jsx/feedback/route.mjs.map +1 -1
- package/dist/jsx/feedback/route.native.js +3 -0
- package/dist/jsx/feedback/route.native.js.map +1 -1
- package/dist/jsx/feedback/store.mjs +6 -1
- package/dist/jsx/feedback/store.mjs.map +1 -1
- package/dist/jsx/feedback/store.native.js +8 -0
- package/dist/jsx/feedback/store.native.js.map +1 -1
- package/dist/jsx/icons/lucide.mjs +2 -2
- package/dist/jsx/icons/lucide.mjs.map +1 -1
- package/dist/jsx/icons/lucide.native.js +2 -1
- package/dist/jsx/images/Image/ImageFrame.mjs +4 -2
- package/dist/jsx/images/Image/ImageFrame.mjs.map +1 -1
- package/dist/jsx/images/Image/ImageFrame.native.js +4 -2
- package/dist/jsx/images/Image/ImageFrame.native.js.map +1 -1
- package/dist/jsx/layouts/AsyncBoundary.mjs +1 -2
- package/dist/jsx/layouts/AsyncBoundary.mjs.map +1 -1
- package/dist/jsx/layouts/AsyncBoundary.native.js +1 -2
- package/dist/jsx/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/jsx/layouts/EmptyState.mjs +7 -3
- package/dist/jsx/layouts/EmptyState.mjs.map +1 -1
- package/dist/jsx/layouts/EmptyState.native.js +10 -6
- package/dist/jsx/layouts/EmptyState.native.js.map +1 -1
- package/dist/jsx/layouts/PaneScaffold.mjs +97 -42
- package/dist/jsx/layouts/PaneScaffold.mjs.map +1 -1
- package/dist/jsx/layouts/PaneScaffold.native.js +97 -41
- package/dist/jsx/layouts/PaneScaffold.native.js.map +1 -1
- package/dist/jsx/layouts/attachments.mjs +4 -4
- package/dist/jsx/layouts/attachments.mjs.map +1 -1
- package/dist/jsx/layouts/attachments.native.js +4 -4
- package/dist/jsx/layouts/attachments.native.js.map +1 -1
- package/dist/jsx/layouts/breadcrumbs.mjs +1 -2
- package/dist/jsx/layouts/breadcrumbs.mjs.map +1 -1
- package/dist/jsx/layouts/breadcrumbs.native.js +1 -2
- package/dist/jsx/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/jsx/layouts/index.mjs +2 -1
- package/dist/jsx/layouts/index.mjs.map +1 -1
- package/dist/jsx/layouts/index.native.js +2 -0
- package/dist/jsx/layouts/index.native.js.map +1 -1
- package/dist/jsx/layouts/page.mjs +51 -10
- package/dist/jsx/layouts/page.mjs.map +1 -1
- package/dist/jsx/layouts/page.native.js +52 -9
- package/dist/jsx/layouts/page.native.js.map +1 -1
- package/dist/jsx/layouts/sidebar.mjs +2 -2
- package/dist/jsx/layouts/sidebar.mjs.map +1 -1
- package/dist/jsx/layouts/sidebar.native.js +2 -2
- package/dist/jsx/layouts/sidebar.native.js.map +1 -1
- package/dist/jsx/layouts/tags.mjs +6 -7
- package/dist/jsx/layouts/tags.mjs.map +1 -1
- package/dist/jsx/layouts/tags.native.js +6 -9
- package/dist/jsx/layouts/tags.native.js.map +1 -1
- package/dist/jsx/layouts/timeline.mjs +5 -5
- package/dist/jsx/layouts/timeline.mjs.map +1 -1
- package/dist/jsx/layouts/timeline.native.js +5 -5
- package/dist/jsx/layouts/timeline.native.js.map +1 -1
- package/dist/jsx/shared/useKeyboardInset.mjs +1 -19
- package/dist/jsx/shared/useKeyboardInset.mjs.map +1 -1
- package/dist/jsx/shared/useKeyboardInset.native.js +3 -3
- package/dist/jsx/shared/useKeyboardInset.native.js.map +1 -1
- package/dist/jsx/surfaces.mjs +1 -0
- package/dist/jsx/surfaces.mjs.map +1 -1
- package/dist/jsx/surfaces.native.js +1 -0
- package/dist/jsx/surfaces.native.js.map +1 -1
- package/dist/jsx/views/Calendar.mjs +11 -8
- package/dist/jsx/views/Calendar.mjs.map +1 -1
- package/dist/jsx/views/Calendar.native.js +11 -8
- package/dist/jsx/views/Calendar.native.js.map +1 -1
- package/dist/jsx/views/Dashboard.mjs +118 -25
- package/dist/jsx/views/Dashboard.mjs.map +1 -1
- package/dist/jsx/views/Dashboard.native.js +158 -52
- package/dist/jsx/views/Dashboard.native.js.map +1 -1
- package/dist/jsx/views/Gantt.mjs +379 -96
- package/dist/jsx/views/Gantt.mjs.map +1 -1
- package/dist/jsx/views/Gantt.native.js +446 -97
- package/dist/jsx/views/Gantt.native.js.map +1 -1
- package/dist/jsx/views/Kanban.mjs +2 -2
- package/dist/jsx/views/Kanban.mjs.map +1 -1
- package/dist/jsx/views/Kanban.native.js +2 -2
- package/dist/jsx/views/Kanban.native.js.map +1 -1
- package/dist/jsx/views/ReportBuilder.mjs +4 -4
- package/dist/jsx/views/ReportBuilder.mjs.map +1 -1
- package/dist/jsx/views/ReportBuilder.native.js +4 -4
- package/dist/jsx/views/ReportBuilder.native.js.map +1 -1
- package/dist/jsx/views/TreeView.mjs +104 -7
- package/dist/jsx/views/TreeView.mjs.map +1 -1
- package/dist/jsx/views/TreeView.native.js +115 -6
- package/dist/jsx/views/TreeView.native.js.map +1 -1
- package/dist/jsx/views/ganttMath.mjs +84 -3
- package/dist/jsx/views/ganttMath.mjs.map +1 -1
- package/dist/jsx/views/ganttMath.native.js +113 -3
- package/dist/jsx/views/ganttMath.native.js.map +1 -1
- package/dist/jsx/views/index.mjs +2 -2
- package/dist/jsx/views/index.mjs.map +1 -1
- package/dist/jsx/views/index.native.js +20 -1
- package/dist/jsx/views/index.native.js.map +1 -1
- package/dist/jsx/views/treeViewReveal.mjs +29 -0
- package/dist/jsx/views/treeViewReveal.mjs.map +1 -0
- package/dist/jsx/views/treeViewReveal.native.js +80 -0
- package/dist/jsx/views/treeViewReveal.native.js.map +1 -0
- package/package.json +11 -9
- package/src/Accordion/index.tsx +4 -6
- package/src/Button.tsx +10 -2
- package/src/Card.spec.tsx +76 -3
- package/src/Card.stories.tsx +1 -1
- package/src/Card.tsx +13 -1
- package/src/CardFooter.stories.tsx +3 -7
- package/src/CardFooter.tsx +3 -1
- package/src/CardHeader.stories.tsx +1 -3
- package/src/Chip/index.tsx +1 -1
- package/src/Collapsible.stories.tsx +2 -2
- package/src/ContextMenu/index.tsx +3 -3
- package/src/CopyField/CopyField.spec.tsx +66 -1
- package/src/CopyField/index.tsx +4 -3
- package/src/DropdownMenu/DropdownMenu.spec.tsx +112 -1
- package/src/DropdownMenu/DropdownMenu.stories.tsx +1 -3
- package/src/DropdownMenu/index.tsx +70 -9
- package/src/LinearGradient.stories.tsx +2 -2
- package/src/Meter/Meter.spec.tsx +71 -6
- package/src/Meter/Meter.stories.tsx +38 -0
- package/src/Meter/index.tsx +12 -6
- package/src/Meter/meter.ts +6 -1
- package/src/Pagination.tsx +2 -2
- package/src/Panel.stories.tsx +1 -1
- package/src/ProgressSteps/index.tsx +3 -3
- package/src/Quote/index.tsx +1 -3
- package/src/SortableList/SortableList.spec.tsx +3 -3
- package/src/Tabs/Tabs.spec.tsx +43 -3
- package/src/Tabs/Tabs.stories.tsx +10 -1
- package/src/Tabs/index.tsx +21 -15
- package/src/Toast/Toast.spec.tsx +176 -49
- package/src/Toast/index.tsx +73 -6
- package/src/TreeSelect/index.tsx +61 -1
- package/src/Unspaced.stories.tsx +2 -2
- package/src/VisuallyHidden.stories.tsx +2 -2
- package/src/actions/DestructiveAction.spec.tsx +19 -3
- package/src/actions/DestructiveAction.tsx +9 -14
- package/src/charts/Axis.tsx +6 -1
- package/src/charts/BarChart.tsx +82 -67
- package/src/charts/ChartDataView.spec.tsx +104 -0
- package/src/charts/ChartDataView.tsx +158 -0
- package/src/charts/ChartSurface.tsx +7 -2
- package/src/charts/Charts.stories.tsx +213 -9
- package/src/charts/LineChart.tsx +90 -75
- package/src/charts/PieChart.knobs.spec.tsx +25 -0
- package/src/charts/PieChart.tsx +51 -10
- package/src/charts/Sparkline.tsx +25 -3
- package/src/charts/accessibility.ts +8 -0
- package/src/charts/charts.spec.tsx +77 -3
- package/src/charts/index.ts +2 -0
- package/src/charts/math.spec.ts +19 -0
- package/src/charts/math.ts +36 -0
- package/src/charts/series.tsx +101 -21
- package/src/charts/svg.spec.ts +28 -0
- package/src/charts/svg.ts +56 -2
- package/src/code/CodeBlock/CodeBlock.copy.spec.tsx +23 -0
- package/src/code/CodeBlock/index.tsx +4 -3
- package/src/code/HighlightedCode/index.tsx +1 -1
- package/src/componentColors.ts +6 -4
- package/src/feedback/ConfirmDialog.nativeFocus.spec.tsx +52 -0
- package/src/feedback/ConfirmDialog.spec.tsx +20 -0
- package/src/feedback/ConfirmDialog.tsx +9 -15
- package/src/feedback/NotifyHost.tsx +11 -2
- package/src/feedback/copy.ts +36 -4
- package/src/feedback/index.ts +1 -0
- package/src/feedback/notify.spec.ts +15 -1
- package/src/feedback/notify.ts +1 -0
- package/src/feedback/route.ts +4 -0
- package/src/feedback/store.ts +7 -0
- package/src/icons/lucide.ts +1 -1
- package/src/images/Image/ImageFrame.tsx +2 -2
- package/src/images/SvgUri/index.native.ts +11 -3
- package/src/layouts/AsyncBoundary.tsx +1 -2
- package/src/layouts/EmptyState.spec.tsx +58 -1
- package/src/layouts/EmptyState.stories.tsx +2 -2
- package/src/layouts/EmptyState.tsx +11 -7
- package/src/layouts/KeyboardAvoidingWrapper/KeyboardAvoidingWrapper.stories.tsx +3 -3
- package/src/layouts/Page.weight.spec.tsx +75 -0
- package/src/layouts/PageHeader.stories.tsx +4 -4
- package/src/layouts/PageTemplates.stories.tsx +2 -2
- package/src/layouts/PaneScaffold.spec.tsx +144 -4
- package/src/layouts/PaneScaffold.stories.tsx +61 -10
- package/src/layouts/PaneScaffold.tsx +156 -58
- package/src/layouts/SafeAreaWrapper/SafeAreaWrapper.stories.tsx +3 -3
- package/src/layouts/ScreenToolbar.stories.tsx +6 -23
- package/src/layouts/attachments.tsx +4 -4
- package/src/layouts/breadcrumbs.tsx +1 -2
- package/src/layouts/index.tsx +11 -0
- package/src/layouts/layouts.spec.tsx +51 -0
- package/src/layouts/page.designLaw.spec.tsx +25 -0
- package/src/layouts/page.tsx +48 -11
- package/src/layouts/sidebar.tsx +2 -2
- package/src/layouts/tags-trigger.spec.tsx +32 -0
- package/src/layouts/tags.tsx +6 -9
- package/src/layouts/timeline.tsx +5 -5
- package/src/shared/useKeyboardInset.native.ts +43 -0
- package/src/shared/useKeyboardInset.ts +2 -41
- package/src/surfaces.spec.tsx +97 -3
- package/src/surfaces.tsx +4 -2
- package/src/tamagui.spec.ts +63 -0
- package/src/textAccentSecondary.spec.tsx +187 -0
- package/src/views/Calendar.tsx +9 -8
- package/src/views/Dashboard.stories.tsx +38 -1
- package/src/views/Dashboard.tsx +132 -29
- package/src/views/Gantt.scroll.spec.tsx +120 -0
- package/src/views/Gantt.spec.tsx +376 -0
- package/src/views/Gantt.stories.tsx +75 -2
- package/src/views/Gantt.tsx +567 -99
- package/src/views/Kanban.native.tsx +2 -2
- package/src/views/Kanban.spec.tsx +11 -0
- package/src/views/Kanban.tsx +2 -2
- package/src/views/ReportBuilder.tsx +4 -4
- package/src/views/TreeView.reveal.spec.tsx +167 -0
- package/src/views/TreeView.reveal.stories.tsx +115 -0
- package/src/views/TreeView.scroll.spec.tsx +196 -0
- package/src/views/TreeView.spec.tsx +1 -1
- package/src/views/TreeView.tsx +159 -16
- package/src/views/ganttMath.ts +142 -4
- package/src/views/index.ts +44 -1
- package/src/views/treeViewReveal.spec.ts +83 -0
- package/src/views/treeViewReveal.ts +45 -0
- package/src/views/views.spec.tsx +52 -12
- package/types/Accordion/index.d.ts.map +1 -1
- package/types/Button.d.ts +12 -2
- package/types/Button.d.ts.map +1 -1
- package/types/Card.d.ts.map +1 -1
- package/types/CardFooter.d.ts +2 -1
- package/types/CardFooter.d.ts.map +1 -1
- package/types/CopyField/index.d.ts.map +1 -1
- package/types/DropdownMenu/index.d.ts +22 -0
- package/types/DropdownMenu/index.d.ts.map +1 -1
- package/types/Meter/index.d.ts.map +1 -1
- package/types/Meter/meter.d.ts +5 -1
- package/types/Meter/meter.d.ts.map +1 -1
- package/types/Quote/index.d.ts.map +1 -1
- package/types/Tabs/index.d.ts +1 -1
- package/types/Tabs/index.d.ts.map +1 -1
- package/types/Toast/index.d.ts +16 -0
- package/types/Toast/index.d.ts.map +1 -1
- package/types/TreeSelect/index.d.ts +9 -1
- package/types/TreeSelect/index.d.ts.map +1 -1
- package/types/actions/DestructiveAction.d.ts.map +1 -1
- package/types/charts/Axis.d.ts.map +1 -1
- package/types/charts/BarChart.d.ts.map +1 -1
- package/types/charts/ChartDataView.d.ts +22 -0
- package/types/charts/ChartDataView.d.ts.map +1 -0
- package/types/charts/ChartSurface.d.ts +4 -1
- package/types/charts/ChartSurface.d.ts.map +1 -1
- package/types/charts/LineChart.d.ts.map +1 -1
- package/types/charts/PieChart.d.ts +1 -1
- package/types/charts/PieChart.d.ts.map +1 -1
- package/types/charts/Sparkline.d.ts +3 -1
- package/types/charts/Sparkline.d.ts.map +1 -1
- package/types/charts/accessibility.d.ts +3 -0
- package/types/charts/accessibility.d.ts.map +1 -1
- package/types/charts/index.d.ts +1 -0
- package/types/charts/index.d.ts.map +1 -1
- package/types/charts/math.d.ts +12 -0
- package/types/charts/math.d.ts.map +1 -1
- package/types/charts/series.d.ts +1 -1
- package/types/charts/series.d.ts.map +1 -1
- package/types/charts/svg.d.ts +18 -2
- package/types/charts/svg.d.ts.map +1 -1
- package/types/code/CodeBlock/index.d.ts.map +1 -1
- package/types/componentColors.d.ts +1 -4
- package/types/componentColors.d.ts.map +1 -1
- package/types/feedback/ConfirmDialog.d.ts.map +1 -1
- package/types/feedback/NotifyHost.d.ts +3 -1
- package/types/feedback/NotifyHost.d.ts.map +1 -1
- package/types/feedback/copy.d.ts +12 -2
- package/types/feedback/copy.d.ts.map +1 -1
- package/types/feedback/index.d.ts +1 -1
- package/types/feedback/index.d.ts.map +1 -1
- package/types/feedback/notify.d.ts.map +1 -1
- package/types/feedback/route.d.ts +3 -0
- package/types/feedback/route.d.ts.map +1 -1
- package/types/feedback/store.d.ts +2 -0
- package/types/feedback/store.d.ts.map +1 -1
- package/types/icons/lucide.d.ts +1 -1
- package/types/icons/lucide.d.ts.map +1 -1
- package/types/images/Image/ImageFrame.d.ts.map +1 -1
- package/types/images/SvgUri/index.native.d.ts +4 -3
- package/types/images/SvgUri/index.native.d.ts.map +1 -1
- package/types/layouts/AsyncBoundary.d.ts.map +1 -1
- package/types/layouts/EmptyState.d.ts.map +1 -1
- package/types/layouts/PaneScaffold.d.ts +27 -5
- package/types/layouts/PaneScaffold.d.ts.map +1 -1
- package/types/layouts/breadcrumbs.d.ts.map +1 -1
- package/types/layouts/index.d.ts +1 -0
- package/types/layouts/index.d.ts.map +1 -1
- package/types/layouts/page.d.ts +10 -5
- package/types/layouts/page.d.ts.map +1 -1
- package/types/layouts/tags.d.ts.map +1 -1
- package/types/shared/useKeyboardInset.d.ts +1 -14
- package/types/shared/useKeyboardInset.d.ts.map +1 -1
- package/types/shared/useKeyboardInset.native.d.ts +16 -0
- package/types/shared/useKeyboardInset.native.d.ts.map +1 -0
- package/types/surfaces.d.ts.map +1 -1
- package/types/views/Calendar.d.ts.map +1 -1
- package/types/views/Dashboard.d.ts +7 -3
- package/types/views/Dashboard.d.ts.map +1 -1
- package/types/views/Gantt.d.ts +132 -13
- package/types/views/Gantt.d.ts.map +1 -1
- package/types/views/TreeView.d.ts +10 -1
- package/types/views/TreeView.d.ts.map +1 -1
- package/types/views/ganttMath.d.ts +73 -0
- package/types/views/ganttMath.d.ts.map +1 -1
- package/types/views/index.d.ts +2 -2
- package/types/views/index.d.ts.map +1 -1
- package/types/views/treeViewReveal.d.ts +11 -0
- package/types/views/treeViewReveal.d.ts.map +1 -0
package/src/views/TreeView.tsx
CHANGED
|
@@ -35,7 +35,7 @@ import React, {
|
|
|
35
35
|
type ReactNode,
|
|
36
36
|
} from "react";
|
|
37
37
|
import { useTranslation } from "../shared/i18n";
|
|
38
|
-
import { Text, View, XStack, YStack, type YStackProps } from "tamagui";
|
|
38
|
+
import { Text, View, XStack, YStack, isWeb, type YStackProps } from "tamagui";
|
|
39
39
|
import { autoScrollVelocity } from "./kanbanDnd";
|
|
40
40
|
import {
|
|
41
41
|
applyTreeMove,
|
|
@@ -54,6 +54,7 @@ import {
|
|
|
54
54
|
type TreeDropTarget,
|
|
55
55
|
} from "./treeViewDnd";
|
|
56
56
|
import { diffVisibleRows, flattenVisibleIds, isEmptyDiff } from "./treeViewMotion";
|
|
57
|
+
import { treeRevealExpansion, treeRevealOffset } from "./treeViewReveal";
|
|
57
58
|
import {
|
|
58
59
|
TREE_LIFT_SHADOW,
|
|
59
60
|
treeDefaultHeight,
|
|
@@ -135,6 +136,12 @@ export interface TreeViewProps<T = unknown> extends Omit<YStackProps, "children"
|
|
|
135
136
|
height?: number;
|
|
136
137
|
/** Message shown when there are no nodes */
|
|
137
138
|
emptyMessage?: string;
|
|
139
|
+
/** Controlled expansion; takes precedence over initial expansion props. */
|
|
140
|
+
expandedIds?: string[];
|
|
141
|
+
/** Next complete expansion set from a user toggle or explicit reveal. */
|
|
142
|
+
onExpandedIdsChange?: (ids: string[]) => void;
|
|
143
|
+
/** Expand ancestors and reveal this row. Change requestId to reveal the same ID again. */
|
|
144
|
+
revealRequest?: { id: string; requestId: number };
|
|
138
145
|
/** Initially expanded node IDs (wins over expandByDefault when provided) */
|
|
139
146
|
defaultExpandedIds?: string[];
|
|
140
147
|
/** Expand every branch on initial load */
|
|
@@ -293,6 +300,9 @@ export function TreeView<T = unknown>({
|
|
|
293
300
|
height: heightProp,
|
|
294
301
|
emptyMessage: emptyMessageProp,
|
|
295
302
|
defaultExpandedIds,
|
|
303
|
+
expandedIds: controlledExpandedIds,
|
|
304
|
+
onExpandedIdsChange,
|
|
305
|
+
revealRequest,
|
|
296
306
|
expandByDefault = false,
|
|
297
307
|
display = "default",
|
|
298
308
|
showExpansionArrows = true,
|
|
@@ -357,12 +367,25 @@ export function TreeView<T = unknown>({
|
|
|
357
367
|
const handleContainerBlur = useCallback(() => {
|
|
358
368
|
setKeyboardRing(false);
|
|
359
369
|
}, []);
|
|
360
|
-
const [
|
|
370
|
+
const [internalExpandedIds, setInternalExpandedIds] = useState<Set<string>>(() => {
|
|
361
371
|
if (defaultExpandedIds) return new Set(defaultExpandedIds);
|
|
362
372
|
if (expandByDefault) return collectBranchIds(nodes);
|
|
363
373
|
return new Set();
|
|
364
374
|
});
|
|
365
375
|
|
|
376
|
+
const expandedIds = useMemo(
|
|
377
|
+
() =>
|
|
378
|
+
controlledExpandedIds === undefined ? internalExpandedIds : new Set(controlledExpandedIds),
|
|
379
|
+
[controlledExpandedIds, internalExpandedIds],
|
|
380
|
+
);
|
|
381
|
+
const setExpandedIds = useCallback(
|
|
382
|
+
(next: ReadonlySet<string>) => {
|
|
383
|
+
if (controlledExpandedIds === undefined) setInternalExpandedIds(new Set(next));
|
|
384
|
+
onExpandedIdsChange?.([...next]);
|
|
385
|
+
},
|
|
386
|
+
[controlledExpandedIds, onExpandedIdsChange],
|
|
387
|
+
);
|
|
388
|
+
|
|
366
389
|
// ── Expand/collapse motion (FLIP + enter fade; Axiom 4) ────────────────
|
|
367
390
|
const [motion, setMotion] = useState<TreeMotion | null>(null);
|
|
368
391
|
const rowHeights = useRef(new Map<string, number>());
|
|
@@ -379,24 +402,30 @@ export function TreeView<T = unknown>({
|
|
|
379
402
|
} else {
|
|
380
403
|
next.add(node.id);
|
|
381
404
|
}
|
|
382
|
-
// Mount never animates and `animation: none` / reduced motion skips
|
|
383
|
-
// the machine entirely — the toggle then renders in one jump.
|
|
384
|
-
if (transition) {
|
|
385
|
-
const diff = diffVisibleRows(
|
|
386
|
-
flattenVisibleIds(nodes, expandedIds),
|
|
387
|
-
flattenVisibleIds(nodes, next),
|
|
388
|
-
getRowHeight,
|
|
389
|
-
);
|
|
390
|
-
setMotion(isEmptyDiff(diff) ? null : { phase: "armed", ...diff });
|
|
391
|
-
} else {
|
|
392
|
-
setMotion(null);
|
|
393
|
-
}
|
|
394
405
|
setExpandedIds(next);
|
|
395
406
|
onNodeToggle?.(node);
|
|
396
407
|
},
|
|
397
|
-
[expandedIds,
|
|
408
|
+
[expandedIds, setExpandedIds, onNodeToggle],
|
|
398
409
|
);
|
|
399
410
|
|
|
411
|
+
const previousExpandedIds = useRef(expandedIds);
|
|
412
|
+
useLayoutEffect(() => {
|
|
413
|
+
const previous = previousExpandedIds.current;
|
|
414
|
+
previousExpandedIds.current = expandedIds;
|
|
415
|
+
if (previous.size === expandedIds.size && [...previous].every((id) => expandedIds.has(id)))
|
|
416
|
+
return;
|
|
417
|
+
if (transition) {
|
|
418
|
+
const diff = diffVisibleRows(
|
|
419
|
+
flattenVisibleIds(nodes, previous),
|
|
420
|
+
flattenVisibleIds(nodes, expandedIds),
|
|
421
|
+
getRowHeight,
|
|
422
|
+
);
|
|
423
|
+
setMotion(isEmptyDiff(diff) ? null : { phase: "armed", ...diff });
|
|
424
|
+
} else {
|
|
425
|
+
setMotion(null);
|
|
426
|
+
}
|
|
427
|
+
}, [expandedIds, nodes, transition, getRowHeight]);
|
|
428
|
+
|
|
400
429
|
// Release the FLIP one frame after the armed styles paint so the tween
|
|
401
430
|
// runs from the previous layout to the new one.
|
|
402
431
|
useLayoutEffect(() => {
|
|
@@ -432,6 +461,108 @@ export function TreeView<T = unknown>({
|
|
|
432
461
|
return result;
|
|
433
462
|
}, [nodes, expandedIds]);
|
|
434
463
|
|
|
464
|
+
const revealIntent = useRef<
|
|
465
|
+
| {
|
|
466
|
+
id: string;
|
|
467
|
+
requestId: number;
|
|
468
|
+
complete: boolean;
|
|
469
|
+
notifiedExpansion?: ReadonlySet<string>;
|
|
470
|
+
}
|
|
471
|
+
| undefined
|
|
472
|
+
>(undefined);
|
|
473
|
+
const revealFrame = useRef<number | undefined>(undefined);
|
|
474
|
+
const revealStep = useRef<() => void>(() => {});
|
|
475
|
+
const renderedRows = useRef(new Set<string>());
|
|
476
|
+
const scheduleReveal = useCallback(() => {
|
|
477
|
+
if (!revealIntent.current || revealIntent.current.complete || revealFrame.current !== undefined)
|
|
478
|
+
return;
|
|
479
|
+
revealFrame.current = requestAnimationFrame(() => {
|
|
480
|
+
revealFrame.current = undefined;
|
|
481
|
+
revealStep.current();
|
|
482
|
+
});
|
|
483
|
+
}, []);
|
|
484
|
+
|
|
485
|
+
useLayoutEffect(() => {
|
|
486
|
+
if (!revealRequest) {
|
|
487
|
+
revealIntent.current = undefined;
|
|
488
|
+
} else if (
|
|
489
|
+
revealIntent.current?.id !== revealRequest.id ||
|
|
490
|
+
revealIntent.current?.requestId !== revealRequest.requestId
|
|
491
|
+
) {
|
|
492
|
+
revealIntent.current = { ...revealRequest, complete: false };
|
|
493
|
+
}
|
|
494
|
+
revealStep.current = () => {
|
|
495
|
+
const intent = revealIntent.current;
|
|
496
|
+
if (!intent || intent.complete) return;
|
|
497
|
+
const next = treeRevealExpansion(nodes, expandedIds, intent.id);
|
|
498
|
+
if (!next) return;
|
|
499
|
+
if (next !== expandedIds) {
|
|
500
|
+
const notified = intent.notifiedExpansion;
|
|
501
|
+
if (!notified || notified.size !== next.size || [...next].some((id) => !notified.has(id))) {
|
|
502
|
+
intent.notifiedExpansion = next;
|
|
503
|
+
setExpandedIds(next);
|
|
504
|
+
}
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
if (motion) {
|
|
508
|
+
setMotion(null);
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
const list = flashListRef.current;
|
|
512
|
+
const index = flatNodes.findIndex((item) => item.node.id === intent.id);
|
|
513
|
+
if (!list || index < 0) return;
|
|
514
|
+
if (isWeb) {
|
|
515
|
+
const rect = containerRef.current?.getBoundingClientRect();
|
|
516
|
+
if (!rect || rect.width <= 0 || rect.height <= 0) return;
|
|
517
|
+
}
|
|
518
|
+
const viewport = list.getWindowSize();
|
|
519
|
+
if (viewport.width <= 0) return;
|
|
520
|
+
const layout = list.getLayout(index);
|
|
521
|
+
if (!layout) return;
|
|
522
|
+
const offset = list.getAbsoluteLastScrollOffset();
|
|
523
|
+
const nextOffset = treeRevealOffset(
|
|
524
|
+
{ y: layout.y + list.getFirstItemOffset(), height: layout.height },
|
|
525
|
+
offset,
|
|
526
|
+
viewport.height,
|
|
527
|
+
);
|
|
528
|
+
if (nextOffset === undefined) return;
|
|
529
|
+
if (Math.abs(nextOffset - offset) < 1) {
|
|
530
|
+
const visible = list.computeVisibleIndices();
|
|
531
|
+
if (
|
|
532
|
+
layout.isHeightMeasured &&
|
|
533
|
+
renderedRows.current.has(intent.id) &&
|
|
534
|
+
index >= visible.startIndex &&
|
|
535
|
+
index <= visible.endIndex
|
|
536
|
+
)
|
|
537
|
+
intent.complete = true;
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
// FlashList's scrollToIndex has uncancellable delayed steps. Immediate offsets
|
|
541
|
+
// let the next layout/scroll event correct estimates using only the latest intent.
|
|
542
|
+
list.scrollToOffset({ offset: nextOffset, animated: false });
|
|
543
|
+
};
|
|
544
|
+
scheduleReveal();
|
|
545
|
+
}, [
|
|
546
|
+
nodes,
|
|
547
|
+
expandedIds,
|
|
548
|
+
setExpandedIds,
|
|
549
|
+
flatNodes,
|
|
550
|
+
revealRequest?.id,
|
|
551
|
+
revealRequest?.requestId,
|
|
552
|
+
height,
|
|
553
|
+
motion,
|
|
554
|
+
scheduleReveal,
|
|
555
|
+
]);
|
|
556
|
+
|
|
557
|
+
useLayoutEffect(
|
|
558
|
+
() => () => {
|
|
559
|
+
revealIntent.current = undefined;
|
|
560
|
+
if (revealFrame.current !== undefined) cancelAnimationFrame(revealFrame.current);
|
|
561
|
+
revealFrame.current = undefined;
|
|
562
|
+
},
|
|
563
|
+
[],
|
|
564
|
+
);
|
|
565
|
+
|
|
435
566
|
const scrollToIndex = useCallback(
|
|
436
567
|
(index: number) => {
|
|
437
568
|
if (index >= 0 && index < flatNodes.length) {
|
|
@@ -1153,6 +1284,7 @@ export function TreeView<T = unknown>({
|
|
|
1153
1284
|
onFocus={handleContainerFocus}
|
|
1154
1285
|
onBlur={handleContainerBlur}
|
|
1155
1286
|
onKeyDown={handleTreeKeyDown}
|
|
1287
|
+
onLayout={revealRequest ? scheduleReveal : undefined}
|
|
1156
1288
|
position="relative"
|
|
1157
1289
|
style={{
|
|
1158
1290
|
height,
|
|
@@ -1163,6 +1295,10 @@ export function TreeView<T = unknown>({
|
|
|
1163
1295
|
data={flatNodes}
|
|
1164
1296
|
drawDistance={overscan * estimateSize}
|
|
1165
1297
|
keyExtractor={(item) => item.node.id}
|
|
1298
|
+
{...(revealRequest && {
|
|
1299
|
+
onLoad: scheduleReveal,
|
|
1300
|
+
onCommitLayoutEffect: scheduleReveal,
|
|
1301
|
+
})}
|
|
1166
1302
|
extraData={{
|
|
1167
1303
|
focused: effectiveFocused,
|
|
1168
1304
|
selectedId,
|
|
@@ -1173,13 +1309,14 @@ export function TreeView<T = unknown>({
|
|
|
1173
1309
|
keyboardRing,
|
|
1174
1310
|
collapsedSelectedAncestors,
|
|
1175
1311
|
}}
|
|
1176
|
-
{...(canReorder && {
|
|
1312
|
+
{...((canReorder || revealRequest) && {
|
|
1177
1313
|
onScroll: (e: any) => {
|
|
1178
1314
|
const y = e?.nativeEvent?.contentOffset?.y;
|
|
1179
1315
|
if (typeof y === "number") {
|
|
1180
1316
|
scrollOffsetRef.current = y;
|
|
1181
1317
|
if (dragUiRef.current) setDragScrollY(y);
|
|
1182
1318
|
}
|
|
1319
|
+
scheduleReveal();
|
|
1183
1320
|
},
|
|
1184
1321
|
scrollEventThrottle: 16,
|
|
1185
1322
|
})}
|
|
@@ -1239,6 +1376,11 @@ export function TreeView<T = unknown>({
|
|
|
1239
1376
|
// Remount when a recycled cell switches nodes so state fills
|
|
1240
1377
|
// and the caret never tween across two different rows.
|
|
1241
1378
|
key={node.id}
|
|
1379
|
+
ref={(row) => {
|
|
1380
|
+
if (row) renderedRows.current.add(node.id);
|
|
1381
|
+
else renderedRows.current.delete(node.id);
|
|
1382
|
+
scheduleReveal();
|
|
1383
|
+
}}
|
|
1242
1384
|
id={`${treeId}-node-${index}`}
|
|
1243
1385
|
{...{ "data-treeview-row": node.id }}
|
|
1244
1386
|
{...(isDropParent && { "data-treeview-drop-parent": "true" })}
|
|
@@ -1265,6 +1407,7 @@ export function TreeView<T = unknown>({
|
|
|
1265
1407
|
onLayout={(e: any) => {
|
|
1266
1408
|
const h = e?.nativeEvent?.layout?.height;
|
|
1267
1409
|
if (typeof h === "number" && h > 0) rowHeights.current.set(node.id, h);
|
|
1410
|
+
scheduleReveal();
|
|
1268
1411
|
}}
|
|
1269
1412
|
backgroundColor={
|
|
1270
1413
|
// Nest-into parent highlight wins while a drag is active
|
package/src/views/ganttMath.ts
CHANGED
|
@@ -190,6 +190,25 @@ export function dateToX(date: Date, rangeStart: Date, pxPerDay: number): number
|
|
|
190
190
|
return (dayPart + minutePart) * pxPerDay;
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Anchor near the viewport's logical start. Wide canvases keep the existing
|
|
195
|
+
* label-width inset; narrow canvases reserve room for the date and its marker.
|
|
196
|
+
* A null viewport is provisional and must be re-anchored after layout.
|
|
197
|
+
*/
|
|
198
|
+
export function scrollAnchorX(
|
|
199
|
+
date: Date,
|
|
200
|
+
rangeStart: Date,
|
|
201
|
+
pxPerDay: number,
|
|
202
|
+
options: { labelWidth: number; chartWidth: number; viewportWidth: number | null; rtl: boolean },
|
|
203
|
+
): number {
|
|
204
|
+
const { labelWidth, chartWidth, viewportWidth, rtl } = options;
|
|
205
|
+
const inset =
|
|
206
|
+
viewportWidth === null ? labelWidth : Math.min(labelWidth, Math.floor(viewportWidth / 3));
|
|
207
|
+
const maxScroll = Math.max(0, chartWidth - (viewportWidth ?? 0));
|
|
208
|
+
const ltrX = Math.min(maxScroll, Math.max(0, dateToX(date, rangeStart, pxPerDay) - inset));
|
|
209
|
+
return rtl ? Math.min(maxScroll, Math.max(0, maxScroll - ltrX)) : ltrX;
|
|
210
|
+
}
|
|
211
|
+
|
|
193
212
|
/** Start-of-day date at a horizontal px offset (fractional days floor). */
|
|
194
213
|
export function xToDate(x: number, rangeStart: Date, pxPerDay: number): Date {
|
|
195
214
|
return addDays(startOfDay(rangeStart), Math.floor(x / pxPerDay));
|
|
@@ -221,16 +240,116 @@ export function barGeometry(
|
|
|
221
240
|
return { x, width };
|
|
222
241
|
}
|
|
223
242
|
|
|
243
|
+
// ── Open-ended spans ──────────────────────────────────────────
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* A span whose bounds are BOTH optional: an absent bound means the span is
|
|
247
|
+
* open at that end, not that the caller forgot it.
|
|
248
|
+
*
|
|
249
|
+
* The distinction is the whole point. A thing live from a date with no end,
|
|
250
|
+
* or live forever with no dates at all, cannot be spelled as a `GanttSpan`
|
|
251
|
+
* without inventing the missing edge — and an invented edge reads to the
|
|
252
|
+
* viewer as a date somebody chose. So absence stays absent all the way to
|
|
253
|
+
* the paint, where `openBarGeometry` reports it as `openStart` / `openEnd`
|
|
254
|
+
* and the renderer draws a shape that says "this end is not an end".
|
|
255
|
+
*/
|
|
256
|
+
export interface GanttOpenSpan {
|
|
257
|
+
start?: Date;
|
|
258
|
+
end?: Date;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** Neither bound set: the span names no date at all and is live throughout. */
|
|
262
|
+
export function isEternalSpan(span: GanttOpenSpan): boolean {
|
|
263
|
+
return span.start === undefined && span.end === undefined;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/** Both bounds set — the only shape drag, resize and keyboard moves accept. */
|
|
267
|
+
export function isBoundedSpan(span: GanttOpenSpan): span is GanttSpan {
|
|
268
|
+
return span.start !== undefined && span.end !== undefined;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* What an open span contributes to the chart RANGE.
|
|
273
|
+
*
|
|
274
|
+
* An eternal span contributes nothing — it names no date, so it must not
|
|
275
|
+
* stretch the axis. A half-open span contributes the one date it does name,
|
|
276
|
+
* as a degenerate span, so the range always reaches far enough to show where
|
|
277
|
+
* that end opens.
|
|
278
|
+
*/
|
|
279
|
+
export function openSpanExtent(span: GanttOpenSpan): GanttSpan | undefined {
|
|
280
|
+
const start = span.start ?? span.end;
|
|
281
|
+
const end = span.end ?? span.start;
|
|
282
|
+
if (start === undefined || end === undefined) return undefined;
|
|
283
|
+
return { start, end };
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/** Every range-contributing extent in a list of open spans, eternals dropped. */
|
|
287
|
+
export function openSpanExtents(spans: readonly GanttOpenSpan[]): GanttSpan[] {
|
|
288
|
+
const extents: GanttSpan[] = [];
|
|
289
|
+
for (const span of spans) {
|
|
290
|
+
const extent = openSpanExtent(span);
|
|
291
|
+
if (extent) extents.push(extent);
|
|
292
|
+
}
|
|
293
|
+
return extents;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export interface GanttOpenBarGeometry extends GanttBarGeometry {
|
|
297
|
+
/** No start bound: the bar runs off the range's start edge, uncapped. */
|
|
298
|
+
openStart: boolean;
|
|
299
|
+
/** No end bound: the bar runs off the range's end edge, uncapped. */
|
|
300
|
+
openEnd: boolean;
|
|
301
|
+
/** Neither bound: the whole range, drawn as a rail rather than a bar. */
|
|
302
|
+
eternal: boolean;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Bar geometry for a possibly-open span, clipped to the chart.
|
|
307
|
+
*
|
|
308
|
+
* A bounded span measures exactly as `barGeometry` measures it (same
|
|
309
|
+
* normalized inclusive edges) — the range always covers it, so the clip is a
|
|
310
|
+
* no-op there. An open end runs to the matching edge of the chart, and an
|
|
311
|
+
* eternal span covers the whole of it.
|
|
312
|
+
*/
|
|
313
|
+
export function openBarGeometry(
|
|
314
|
+
span: GanttOpenSpan,
|
|
315
|
+
range: GanttRange,
|
|
316
|
+
pxPerDay: number,
|
|
317
|
+
minWidthPx = 6,
|
|
318
|
+
): GanttOpenBarGeometry {
|
|
319
|
+
const chartWidth = rangeDays(range) * pxPerDay;
|
|
320
|
+
const openStart = span.start === undefined;
|
|
321
|
+
const openEnd = span.end === undefined;
|
|
322
|
+
const extent = openSpanExtent(span);
|
|
323
|
+
if (!extent) {
|
|
324
|
+
return { x: 0, width: chartWidth, openStart: true, openEnd: true, eternal: true };
|
|
325
|
+
}
|
|
326
|
+
const { startEdge, endEdge } = normalizeSpanEdges(extent);
|
|
327
|
+
const rawStart = openStart ? 0 : dateToX(startEdge, range.start, pxPerDay);
|
|
328
|
+
const rawEnd = openEnd ? chartWidth : dateToX(endEdge, range.start, pxPerDay);
|
|
329
|
+
const x = Math.max(0, Math.min(chartWidth, rawStart));
|
|
330
|
+
const right = Math.max(0, Math.min(chartWidth, rawEnd));
|
|
331
|
+
return { x, width: Math.max(minWidthPx, right - x), openStart, openEnd, eternal: false };
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* X offset of a date's column CENTRE within the range, or null when the date
|
|
336
|
+
* falls outside it. The today line and the controlled marker are the same
|
|
337
|
+
* measurement taken at different dates.
|
|
338
|
+
*/
|
|
339
|
+
export function dateLineX(range: GanttRange, pxPerDay: number, date: Date): number | null {
|
|
340
|
+
const day = startOfDay(date);
|
|
341
|
+
if (day.getTime() < range.start.getTime() || day.getTime() >= range.end.getTime()) return null;
|
|
342
|
+
// Line sits at the middle of that date's column.
|
|
343
|
+
return dateToX(day, range.start, pxPerDay) + pxPerDay / 2;
|
|
344
|
+
}
|
|
345
|
+
|
|
224
346
|
/** X offset of the today line, or null when today is outside the range. */
|
|
225
347
|
export function todayLineX(
|
|
226
348
|
range: GanttRange,
|
|
227
349
|
pxPerDay: number,
|
|
228
350
|
today: Date = new Date(),
|
|
229
351
|
): number | null {
|
|
230
|
-
|
|
231
|
-
if (day.getTime() < range.start.getTime() || day.getTime() >= range.end.getTime()) return null;
|
|
232
|
-
// Line sits at the middle of today's column.
|
|
233
|
-
return dateToX(day, range.start, pxPerDay) + pxPerDay / 2;
|
|
352
|
+
return dateLineX(range, pxPerDay, today);
|
|
234
353
|
}
|
|
235
354
|
|
|
236
355
|
// ── Axis ticks ────────────────────────────────────────────────
|
|
@@ -335,3 +454,22 @@ export function formatSpanLabel(span: GanttSpan): string {
|
|
|
335
454
|
const endLabel = monthDayLabel(lastDay.getTime() >= startEdge.getTime() ? lastDay : startEdge);
|
|
336
455
|
return startLabel === endLabel ? startLabel : `${startLabel} – ${endLabel}`;
|
|
337
456
|
}
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* The date halves of an open span's label, each absent exactly when its bound
|
|
460
|
+
* is. The WORDS around them belong to the view, which has `t()` — this stays
|
|
461
|
+
* pure and says only what the dates are.
|
|
462
|
+
*/
|
|
463
|
+
export function openSpanLabelParts(span: GanttOpenSpan): { start?: string; end?: string } {
|
|
464
|
+
const extent = openSpanExtent(span);
|
|
465
|
+
if (!extent) return {};
|
|
466
|
+
const { startEdge, endEdge } = normalizeSpanEdges(extent);
|
|
467
|
+
const lastDay = addDays(endEdge, -1);
|
|
468
|
+
return {
|
|
469
|
+
start: span.start === undefined ? undefined : monthDayLabel(startEdge),
|
|
470
|
+
end:
|
|
471
|
+
span.end === undefined
|
|
472
|
+
? undefined
|
|
473
|
+
: monthDayLabel(lastDay.getTime() >= startEdge.getTime() ? lastDay : startEdge),
|
|
474
|
+
};
|
|
475
|
+
}
|
package/src/views/index.ts
CHANGED
|
@@ -81,19 +81,62 @@ export {
|
|
|
81
81
|
type ReportColumn,
|
|
82
82
|
type GroupByConfig,
|
|
83
83
|
} from "./ReportBuilder";
|
|
84
|
-
export { GanttView, type GanttViewProps, type GanttTask, type GanttItemMoveRange } from "./Gantt";
|
|
85
84
|
export {
|
|
85
|
+
GanttView,
|
|
86
|
+
type GanttViewProps,
|
|
87
|
+
type GanttTask,
|
|
88
|
+
type GanttTaskSpan,
|
|
89
|
+
type GanttSpanRef,
|
|
90
|
+
type GanttItemMoveRange,
|
|
91
|
+
} from "./Gantt";
|
|
92
|
+
// ganttMath is surfaced WHOLE, deliberately, against this barrel's otherwise
|
|
93
|
+
// curated style (MPO-249). It is pure, side-effect-free, DOM-free day math —
|
|
94
|
+
// there is nothing in it that is an implementation detail worth hiding, and
|
|
95
|
+
// the curated subset had already drifted into an asymmetry that cost a
|
|
96
|
+
// consumer real code: `dateToX` shipped and its inverse `xToDate` did not, so
|
|
97
|
+
// anything positioning by date could read the axis but not read a pointer back
|
|
98
|
+
// off it, which is the direction every drag, scrub and hit-test needs. The
|
|
99
|
+
// day-math helpers (`startOfDay`, `addDays`, `dayDiff`, `rangeDays`) go with
|
|
100
|
+
// them, because a consumer laying out its own timeline on `computeGanttRange`
|
|
101
|
+
// needs the same DST-safe local wall-clock arithmetic the module uses
|
|
102
|
+
// internally; re-deriving it is how two subtly different implementations of
|
|
103
|
+
// "add a day" end up in one app. `views.spec.tsx` asserts this barrel
|
|
104
|
+
// re-exports every `ganttMath` export, so the next omission fails a test
|
|
105
|
+
// instead of shipping.
|
|
106
|
+
export {
|
|
107
|
+
addDays,
|
|
86
108
|
barGeometry,
|
|
109
|
+
clampResizeDayDelta,
|
|
87
110
|
computeGanttRange,
|
|
111
|
+
dateLineX,
|
|
88
112
|
dateToX,
|
|
113
|
+
dayDiff,
|
|
89
114
|
dxToDayDelta,
|
|
115
|
+
formatRangeLabel,
|
|
116
|
+
formatSpanLabel,
|
|
90
117
|
ganttTaskAccessibleLabel,
|
|
91
118
|
generateTicks,
|
|
119
|
+
isBoundedSpan,
|
|
120
|
+
isEternalSpan,
|
|
121
|
+
MS_PER_DAY,
|
|
92
122
|
normalizeSpanEdges,
|
|
123
|
+
openBarGeometry,
|
|
124
|
+
openSpanExtent,
|
|
125
|
+
openSpanExtents,
|
|
126
|
+
openSpanLabelParts,
|
|
127
|
+
rangeDays,
|
|
128
|
+
resizeSpanByDays,
|
|
129
|
+
scrollAnchorX,
|
|
93
130
|
shiftSpanByDays,
|
|
131
|
+
spanInclusiveDays,
|
|
132
|
+
startOfDay,
|
|
94
133
|
todayLineX,
|
|
134
|
+
xToDate,
|
|
95
135
|
type GanttBarGeometry,
|
|
136
|
+
type GanttOpenBarGeometry,
|
|
137
|
+
type GanttOpenSpan,
|
|
96
138
|
type GanttRange,
|
|
139
|
+
type GanttResizeEdge,
|
|
97
140
|
type GanttSpan,
|
|
98
141
|
type GanttTick,
|
|
99
142
|
type GanttZoom,
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { treeRevealExpansion, treeRevealOffset } from "./treeViewReveal";
|
|
3
|
+
|
|
4
|
+
const nodes = [
|
|
5
|
+
{
|
|
6
|
+
id: "folders",
|
|
7
|
+
children: [
|
|
8
|
+
{
|
|
9
|
+
id: "archive",
|
|
10
|
+
children: Array.from({ length: 500 }, (_, index) => ({ id: `item-${index}` })),
|
|
11
|
+
},
|
|
12
|
+
],
|
|
13
|
+
},
|
|
14
|
+
{ id: "other", children: [{ id: "other-item" }] },
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
describe("tree reveal ancestors", () => {
|
|
18
|
+
it("finds the exact last leaf of a 500-item branch and preserves unrelated expansion", () => {
|
|
19
|
+
const expanded = new Set(["other"]);
|
|
20
|
+
expect(treeRevealExpansion(nodes, expanded, "item-499")).toEqual(
|
|
21
|
+
new Set(["other", "folders", "archive"]),
|
|
22
|
+
);
|
|
23
|
+
expect(expanded).toEqual(new Set(["other"]));
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("does not expand the target branch itself", () => {
|
|
27
|
+
expect(treeRevealExpansion(nodes, new Set(), "archive")).toEqual(new Set(["folders"]));
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it("preserves the set when the target is already exposed", () => {
|
|
31
|
+
const expanded = new Set(["folders", "archive"]);
|
|
32
|
+
expect(treeRevealExpansion(nodes, expanded, "item-499")).toBe(expanded);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("does not substitute a prefix, ancestor or similarly named leaf for a missing ID", () => {
|
|
36
|
+
expect(treeRevealExpansion(nodes, new Set(), "item-500")).toBeUndefined();
|
|
37
|
+
expect(treeRevealExpansion(nodes, new Set(), "item")).toBeUndefined();
|
|
38
|
+
expect(treeRevealExpansion([], new Set(), "folders")).toBeUndefined();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("reveals a root without expanding its children", () => {
|
|
42
|
+
const expanded = new Set<string>();
|
|
43
|
+
expect(treeRevealExpansion(nodes, expanded, "folders")).toBe(expanded);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe("tree reveal measured offsets", () => {
|
|
48
|
+
it("uses the actual layout of a distant variable-height row, not index times an estimate", () => {
|
|
49
|
+
const heights = Array.from({ length: 500 }, (_, index) => (index % 2 === 0 ? 32 : 80));
|
|
50
|
+
const y = heights.slice(0, 499).reduce((sum, height) => sum + height, 0);
|
|
51
|
+
expect(y).toBe(27920);
|
|
52
|
+
expect(treeRevealOffset({ y, height: heights[499] }, 0, 240)).toBe(27760);
|
|
53
|
+
expect(treeRevealOffset({ y, height: heights[499] }, 27760, 240)).toBe(27760);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("corrects again when virtualization replaces an estimate with a taller measurement", () => {
|
|
57
|
+
expect(treeRevealOffset({ y: 27920, height: 32 }, 0, 240)).toBe(27712);
|
|
58
|
+
expect(treeRevealOffset({ y: 27920, height: 80 }, 27712, 240)).toBe(27760);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it("leaves a fully visible row in place", () => {
|
|
62
|
+
expect(treeRevealOffset({ y: 300, height: 80 }, 250, 240)).toBe(250);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("reveals a row above the viewport at its top", () => {
|
|
66
|
+
expect(treeRevealOffset({ y: 120, height: 80 }, 250, 240)).toBe(120);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it("aligns the top of a row taller than the viewport without oscillating", () => {
|
|
70
|
+
expect(treeRevealOffset({ y: 120, height: 300 }, 250, 240)).toBe(120);
|
|
71
|
+
expect(treeRevealOffset({ y: 120, height: 300 }, 120, 240)).toBe(120);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it.each([
|
|
75
|
+
[{ y: 20, height: 32 }, 0, 0],
|
|
76
|
+
[{ y: 20, height: 0 }, 0, 240],
|
|
77
|
+
[{ y: Number.NaN, height: 32 }, 0, 240],
|
|
78
|
+
[{ y: 20, height: 32 }, Number.NaN, 240],
|
|
79
|
+
[{ y: 20, height: 32 }, 0, Number.POSITIVE_INFINITY],
|
|
80
|
+
])("waits for usable geometry: %o, %s, %s", (layout, offset, height) => {
|
|
81
|
+
expect(treeRevealOffset(layout, offset, height)).toBeUndefined();
|
|
82
|
+
});
|
|
83
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
interface RevealTreeNode {
|
|
2
|
+
id: string;
|
|
3
|
+
children?: readonly RevealTreeNode[];
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export function treeRevealExpansion(
|
|
7
|
+
nodes: readonly RevealTreeNode[],
|
|
8
|
+
expandedIds: ReadonlySet<string>,
|
|
9
|
+
targetId: string,
|
|
10
|
+
): ReadonlySet<string> | undefined {
|
|
11
|
+
const ancestors: string[] = [];
|
|
12
|
+
const find = (items: readonly RevealTreeNode[]): boolean => {
|
|
13
|
+
for (const node of items) {
|
|
14
|
+
if (node.id === targetId) return true;
|
|
15
|
+
if (node.children?.length) {
|
|
16
|
+
ancestors.push(node.id);
|
|
17
|
+
if (find(node.children)) return true;
|
|
18
|
+
ancestors.pop();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
};
|
|
23
|
+
if (!find(nodes)) return undefined;
|
|
24
|
+
if (ancestors.every((id) => expandedIds.has(id))) return expandedIds;
|
|
25
|
+
return new Set([...expandedIds, ...ancestors]);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function treeRevealOffset(
|
|
29
|
+
layout: { y: number; height: number },
|
|
30
|
+
offset: number,
|
|
31
|
+
viewportHeight: number,
|
|
32
|
+
): number | undefined {
|
|
33
|
+
if (
|
|
34
|
+
![layout.y, layout.height, offset, viewportHeight].every(Number.isFinite) ||
|
|
35
|
+
viewportHeight <= 0 ||
|
|
36
|
+
layout.height <= 0
|
|
37
|
+
) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
if (layout.height > viewportHeight || layout.y < offset) return Math.max(0, layout.y);
|
|
41
|
+
if (layout.y + layout.height > offset + viewportHeight) {
|
|
42
|
+
return Math.max(0, layout.y + layout.height - viewportHeight);
|
|
43
|
+
}
|
|
44
|
+
return offset;
|
|
45
|
+
}
|