@multiplatform.one/components 7.7.6 → 7.8.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/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/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 +31 -1
- package/dist/cjs/DropdownMenu/index.native.js +31 -1
- package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
- package/dist/cjs/Meter/index.cjs +12 -5
- package/dist/cjs/Meter/index.native.js +12 -5
- package/dist/cjs/Meter/index.native.js.map +1 -1
- package/dist/cjs/Tabs/index.cjs +7 -6
- package/dist/cjs/Tabs/index.native.js +8 -7
- package/dist/cjs/Tabs/index.native.js.map +1 -1
- package/dist/cjs/Toast/index.cjs +53 -2
- package/dist/cjs/Toast/index.native.js +55 -2
- package/dist/cjs/Toast/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 -73
- package/dist/cjs/charts/PieChart.native.js +109 -84
- 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/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/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/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 +48 -7
- package/dist/cjs/layouts/page.native.js +50 -7
- package/dist/cjs/layouts/page.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/views/Dashboard.cjs +110 -17
- package/dist/cjs/views/Dashboard.native.js +151 -45
- package/dist/cjs/views/Dashboard.native.js.map +1 -1
- package/dist/cjs/views/Gantt.cjs +374 -91
- package/dist/cjs/views/Gantt.native.js +443 -94
- package/dist/cjs/views/Gantt.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/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/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 +32 -2
- package/dist/esm/DropdownMenu/index.mjs.map +1 -1
- package/dist/esm/DropdownMenu/index.native.js +32 -2
- package/dist/esm/DropdownMenu/index.native.js.map +1 -1
- package/dist/esm/Meter/index.mjs +12 -5
- package/dist/esm/Meter/index.mjs.map +1 -1
- package/dist/esm/Meter/index.native.js +12 -5
- package/dist/esm/Meter/index.native.js.map +1 -1
- package/dist/esm/Tabs/index.mjs +7 -6
- package/dist/esm/Tabs/index.mjs.map +1 -1
- package/dist/esm/Tabs/index.native.js +8 -7
- package/dist/esm/Tabs/index.native.js.map +1 -1
- package/dist/esm/Toast/index.mjs +52 -3
- package/dist/esm/Toast/index.mjs.map +1 -1
- package/dist/esm/Toast/index.native.js +54 -3
- package/dist/esm/Toast/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 -75
- package/dist/esm/charts/PieChart.mjs.map +1 -1
- package/dist/esm/charts/PieChart.native.js +111 -86
- 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/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/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/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 +49 -8
- package/dist/esm/layouts/page.mjs.map +1 -1
- package/dist/esm/layouts/page.native.js +51 -8
- package/dist/esm/layouts/page.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/views/Dashboard.mjs +112 -19
- package/dist/esm/views/Dashboard.mjs.map +1 -1
- package/dist/esm/views/Dashboard.native.js +153 -47
- package/dist/esm/views/Dashboard.native.js.map +1 -1
- package/dist/esm/views/Gantt.mjs +376 -93
- package/dist/esm/views/Gantt.mjs.map +1 -1
- package/dist/esm/views/Gantt.native.js +445 -96
- package/dist/esm/views/Gantt.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/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/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 +32 -2
- package/dist/jsx/DropdownMenu/index.mjs.map +1 -1
- package/dist/jsx/DropdownMenu/index.native.js +31 -1
- package/dist/jsx/DropdownMenu/index.native.js.map +1 -1
- package/dist/jsx/Meter/index.mjs +12 -5
- package/dist/jsx/Meter/index.mjs.map +1 -1
- package/dist/jsx/Meter/index.native.js +12 -5
- package/dist/jsx/Meter/index.native.js.map +1 -1
- package/dist/jsx/Tabs/index.mjs +7 -6
- package/dist/jsx/Tabs/index.mjs.map +1 -1
- package/dist/jsx/Tabs/index.native.js +8 -7
- package/dist/jsx/Tabs/index.native.js.map +1 -1
- package/dist/jsx/Toast/index.mjs +52 -3
- package/dist/jsx/Toast/index.mjs.map +1 -1
- package/dist/jsx/Toast/index.native.js +55 -2
- package/dist/jsx/Toast/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 -75
- package/dist/jsx/charts/PieChart.mjs.map +1 -1
- package/dist/jsx/charts/PieChart.native.js +109 -84
- 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/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/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/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 +49 -8
- package/dist/jsx/layouts/page.mjs.map +1 -1
- package/dist/jsx/layouts/page.native.js +50 -7
- package/dist/jsx/layouts/page.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/views/Dashboard.mjs +112 -19
- package/dist/jsx/views/Dashboard.mjs.map +1 -1
- package/dist/jsx/views/Dashboard.native.js +151 -45
- package/dist/jsx/views/Dashboard.native.js.map +1 -1
- package/dist/jsx/views/Gantt.mjs +376 -93
- package/dist/jsx/views/Gantt.mjs.map +1 -1
- package/dist/jsx/views/Gantt.native.js +443 -94
- package/dist/jsx/views/Gantt.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/package.json +11 -9
- 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/Collapsible.stories.tsx +2 -2
- 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 +67 -6
- package/src/LinearGradient.stories.tsx +2 -2
- package/src/Meter/Meter.spec.tsx +59 -2
- package/src/Meter/Meter.stories.tsx +38 -0
- package/src/Meter/index.tsx +9 -4
- package/src/Panel.stories.tsx +1 -1
- 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 +19 -13
- package/src/Toast/Toast.spec.tsx +56 -1
- package/src/Toast/index.tsx +68 -3
- 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 -9
- 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/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/SvgUri/index.native.ts +11 -3
- package/src/layouts/EmptyState.stories.tsx +2 -2
- 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 +58 -2
- package/src/layouts/PaneScaffold.tsx +156 -58
- package/src/layouts/ScreenToolbar.stories.tsx +6 -23
- 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 +46 -9
- package/src/shared/useKeyboardInset.native.ts +43 -0
- package/src/shared/useKeyboardInset.ts +2 -41
- package/src/tamagui.spec.ts +63 -0
- package/src/views/Dashboard.stories.tsx +38 -1
- package/src/views/Dashboard.tsx +119 -21
- 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 +564 -96
- package/src/views/Kanban.spec.tsx +11 -0
- package/src/views/ganttMath.ts +142 -4
- package/src/views/index.ts +44 -1
- package/src/views/views.spec.tsx +39 -0
- 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/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/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/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/SvgUri/index.native.d.ts +4 -3
- package/types/images/SvgUri/index.native.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/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/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/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/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/src/views/Dashboard.tsx
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Meter } from "../Meter";
|
|
2
|
+
import { ChartDataView } from "../charts/ChartDataView";
|
|
2
3
|
import { BarChart } from "../charts/BarChart";
|
|
3
4
|
import { LineChart } from "../charts/LineChart";
|
|
4
5
|
import { PieChart } from "../charts/PieChart";
|
|
@@ -12,7 +13,7 @@ import {
|
|
|
12
13
|
formatPercent,
|
|
13
14
|
useResolvedKnobs,
|
|
14
15
|
} from "@multiplatform.one/theme";
|
|
15
|
-
import React, { useCallback, useMemo, type ReactNode } from "react";
|
|
16
|
+
import React, { useCallback, useMemo, useState, type ReactNode } from "react";
|
|
16
17
|
import { useTranslation } from "../shared/i18n";
|
|
17
18
|
import {
|
|
18
19
|
ScrollView,
|
|
@@ -56,6 +57,13 @@ function trendFill(color: string): string {
|
|
|
56
57
|
return "$color4";
|
|
57
58
|
}
|
|
58
59
|
|
|
60
|
+
function trendInk(color: string): string {
|
|
61
|
+
// Step 11 clears the page, but falls below AA on the status pill's step 4 wash.
|
|
62
|
+
if (color === componentColors.semantic.success) return "$green12";
|
|
63
|
+
if (color === componentColors.semantic.error) return "$red12";
|
|
64
|
+
return color;
|
|
65
|
+
}
|
|
66
|
+
|
|
59
67
|
// ============================================================================
|
|
60
68
|
// Types
|
|
61
69
|
// ============================================================================
|
|
@@ -222,7 +230,7 @@ export interface DashboardProps extends Omit<YStackProps, "children"> {
|
|
|
222
230
|
// Shared card chrome
|
|
223
231
|
// ============================================================================
|
|
224
232
|
|
|
225
|
-
function useWidgetChrome(onPress?:
|
|
233
|
+
function useWidgetChrome(onPress?: YStackProps["onPress"]) {
|
|
226
234
|
const resolved = useResolvedKnobs();
|
|
227
235
|
const { knobProps, control } = resolved;
|
|
228
236
|
const nested = splitNestedControl(knobProps.nestedControl);
|
|
@@ -294,11 +302,11 @@ function TrendPill({
|
|
|
294
302
|
{...radius}
|
|
295
303
|
data-nested-px={px}
|
|
296
304
|
>
|
|
297
|
-
<Text {...label} color={color}>
|
|
305
|
+
<Text {...label} color={trendInk(color)}>
|
|
298
306
|
{symbol}
|
|
299
307
|
</Text>
|
|
300
308
|
{value != null && value !== "" && (
|
|
301
|
-
<Text {...label} color={color}>
|
|
309
|
+
<Text {...label} color={trendInk(color)}>
|
|
302
310
|
{value}
|
|
303
311
|
</Text>
|
|
304
312
|
)}
|
|
@@ -339,8 +347,13 @@ export function resolveTrendColor(
|
|
|
339
347
|
*/
|
|
340
348
|
export function KPICard({ config, ...stackProps }: KPICardProps) {
|
|
341
349
|
const { t } = useTranslation();
|
|
342
|
-
const {
|
|
350
|
+
const { onPress: consumerOnPress, ...cardProps } = stackProps;
|
|
351
|
+
const onPress = Object.hasOwn(stackProps, "onPress") ? consumerOnPress : config.onClick;
|
|
352
|
+
const { knobProps, nested, interactive } = useWidgetChrome(onPress);
|
|
343
353
|
const { px, box } = nested;
|
|
354
|
+
const [dataActionSize, setDataActionSize] = useState({ width: 0, height: 44 });
|
|
355
|
+
const [dataHeaderHeight, setDataHeaderHeight] = useState(44);
|
|
356
|
+
const hasDataView = Boolean(config.sparkline?.length);
|
|
344
357
|
const formatMetric = useCallback(
|
|
345
358
|
(num: number) => {
|
|
346
359
|
if (config.format === "currency") {
|
|
@@ -370,15 +383,16 @@ export function KPICard({ config, ...stackProps }: KPICardProps) {
|
|
|
370
383
|
return "—";
|
|
371
384
|
}, [config.trend]);
|
|
372
385
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
386
|
+
const content = (
|
|
387
|
+
<>
|
|
388
|
+
<XStack
|
|
389
|
+
justifyContent="space-between"
|
|
390
|
+
alignItems="center"
|
|
391
|
+
{...knobProps.gap}
|
|
392
|
+
onLayout={
|
|
393
|
+
hasDataView ? (event) => setDataHeaderHeight(event.nativeEvent.layout.height) : undefined
|
|
394
|
+
}
|
|
395
|
+
>
|
|
382
396
|
<Text {...knobProps.label} color={knobProps.textAccentColor} flex={1}>
|
|
383
397
|
{config.title}
|
|
384
398
|
</Text>
|
|
@@ -387,6 +401,13 @@ export function KPICard({ config, ...stackProps }: KPICardProps) {
|
|
|
387
401
|
{config.icon}
|
|
388
402
|
</NestedIconWell>
|
|
389
403
|
) : null}
|
|
404
|
+
{hasDataView ? (
|
|
405
|
+
<YStack
|
|
406
|
+
width={dataActionSize.width}
|
|
407
|
+
height={dataActionSize.height}
|
|
408
|
+
pointerEvents="none"
|
|
409
|
+
/>
|
|
410
|
+
) : null}
|
|
390
411
|
</XStack>
|
|
391
412
|
|
|
392
413
|
<Text fontSize="$8" color="$color" {...knobProps.heading}>
|
|
@@ -394,7 +415,12 @@ export function KPICard({ config, ...stackProps }: KPICardProps) {
|
|
|
394
415
|
</Text>
|
|
395
416
|
|
|
396
417
|
{config.sparkline && config.sparkline.length > 0 ? (
|
|
397
|
-
<Sparkline
|
|
418
|
+
<Sparkline
|
|
419
|
+
data={config.sparkline}
|
|
420
|
+
height={px}
|
|
421
|
+
title={config.title}
|
|
422
|
+
valueFormatter={formatMetric}
|
|
423
|
+
/>
|
|
398
424
|
) : null}
|
|
399
425
|
|
|
400
426
|
{(config.trend || config.trendValue) && (
|
|
@@ -414,10 +440,70 @@ export function KPICard({ config, ...stackProps }: KPICardProps) {
|
|
|
414
440
|
)}
|
|
415
441
|
</XStack>
|
|
416
442
|
)}
|
|
417
|
-
|
|
443
|
+
</>
|
|
444
|
+
);
|
|
445
|
+
if (!hasDataView)
|
|
446
|
+
return (
|
|
447
|
+
<Card
|
|
448
|
+
width="100%"
|
|
449
|
+
elevation={knobProps.elevation}
|
|
450
|
+
{...knobProps.surface}
|
|
451
|
+
{...interactive}
|
|
452
|
+
{...stackProps}
|
|
453
|
+
>
|
|
454
|
+
{content}
|
|
455
|
+
</Card>
|
|
456
|
+
);
|
|
457
|
+
return (
|
|
458
|
+
<ChartDataView data={config.sparkline!} title={config.title} valueFormatter={formatMetric}>
|
|
459
|
+
{({ action }) => (
|
|
460
|
+
<Card width="100%" elevation={knobProps.elevation} {...knobProps.surface} {...cardProps}>
|
|
461
|
+
<YStack position="relative">
|
|
462
|
+
<YStack
|
|
463
|
+
{...knobProps.gap}
|
|
464
|
+
{...knobProps.containerRadius}
|
|
465
|
+
{...interactive}
|
|
466
|
+
focusable={Boolean(onPress)}
|
|
467
|
+
{...(isWeb
|
|
468
|
+
? {
|
|
469
|
+
"data-mpo-kpi-navigation": config.id,
|
|
470
|
+
tabIndex: onPress ? 0 : undefined,
|
|
471
|
+
onKeyDown: onPress
|
|
472
|
+
? (event: React.KeyboardEvent<HTMLElement>) => {
|
|
473
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
474
|
+
event.preventDefault();
|
|
475
|
+
if (!event.repeat) event.currentTarget.click();
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
: undefined,
|
|
479
|
+
}
|
|
480
|
+
: {})}
|
|
481
|
+
>
|
|
482
|
+
{content}
|
|
483
|
+
</YStack>
|
|
484
|
+
<YStack
|
|
485
|
+
position="absolute"
|
|
486
|
+
top={Math.max(0, (dataHeaderHeight - dataActionSize.height) / 2)}
|
|
487
|
+
right={0}
|
|
488
|
+
minHeight={44}
|
|
489
|
+
justifyContent="center"
|
|
490
|
+
onLayout={(event) => {
|
|
491
|
+
const { width, height } = event.nativeEvent.layout;
|
|
492
|
+
setDataActionSize((previous) =>
|
|
493
|
+
previous.width === width && previous.height === height
|
|
494
|
+
? previous
|
|
495
|
+
: { width, height },
|
|
496
|
+
);
|
|
497
|
+
}}
|
|
498
|
+
>
|
|
499
|
+
{action}
|
|
500
|
+
</YStack>
|
|
501
|
+
</YStack>
|
|
502
|
+
</Card>
|
|
503
|
+
)}
|
|
504
|
+
</ChartDataView>
|
|
418
505
|
);
|
|
419
506
|
}
|
|
420
|
-
|
|
421
507
|
// ============================================================================
|
|
422
508
|
// Chart Card Component
|
|
423
509
|
// ============================================================================
|
|
@@ -455,11 +541,14 @@ export function ChartCard({ config, colors, headingLevel = 2, ...stackProps }: C
|
|
|
455
541
|
const dataColors = config.colors ?? colors;
|
|
456
542
|
const showXAxis = config.showLabels !== false;
|
|
457
543
|
|
|
458
|
-
|
|
544
|
+
const renderCard = (action?: ReactNode) => (
|
|
459
545
|
<YStack {...knobProps.gap} width="100%" {...stackProps}>
|
|
460
|
-
<
|
|
461
|
-
{
|
|
462
|
-
|
|
546
|
+
<XStack alignItems="center" justifyContent="space-between" {...knobProps.gap}>
|
|
547
|
+
<HeadingTag flex={1} minWidth={0} margin={0} {...knobProps.heading} {...sectionHeading}>
|
|
548
|
+
{config.title}
|
|
549
|
+
</HeadingTag>
|
|
550
|
+
{action}
|
|
551
|
+
</XStack>
|
|
463
552
|
<Card elevation={knobProps.elevation} {...knobProps.surface}>
|
|
464
553
|
{config.type === "pie" ? (
|
|
465
554
|
<PieChart
|
|
@@ -473,6 +562,7 @@ export function ChartCard({ config, colors, headingLevel = 2, ...stackProps }: C
|
|
|
473
562
|
) : config.type === "line" ? (
|
|
474
563
|
<LineChart
|
|
475
564
|
data={config.data}
|
|
565
|
+
title={config.title}
|
|
476
566
|
height={config.height}
|
|
477
567
|
color={dataColors?.[0]}
|
|
478
568
|
showPoints
|
|
@@ -482,6 +572,7 @@ export function ChartCard({ config, colors, headingLevel = 2, ...stackProps }: C
|
|
|
482
572
|
) : (
|
|
483
573
|
<BarChart
|
|
484
574
|
data={config.data}
|
|
575
|
+
title={config.title}
|
|
485
576
|
height={config.height}
|
|
486
577
|
colors={dataColors}
|
|
487
578
|
showXAxis={showXAxis}
|
|
@@ -491,6 +582,13 @@ export function ChartCard({ config, colors, headingLevel = 2, ...stackProps }: C
|
|
|
491
582
|
</Card>
|
|
492
583
|
</YStack>
|
|
493
584
|
);
|
|
585
|
+
return config.type === "pie" && config.showLegend !== false ? (
|
|
586
|
+
renderCard()
|
|
587
|
+
) : (
|
|
588
|
+
<ChartDataView data={config.data} title={config.title}>
|
|
589
|
+
{({ action }) => renderCard(action)}
|
|
590
|
+
</ChartDataView>
|
|
591
|
+
);
|
|
494
592
|
}
|
|
495
593
|
|
|
496
594
|
// ============================================================================
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { act, cleanup, fireEvent } from "@testing-library/react";
|
|
2
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
3
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { GanttView, type GanttTask } from "./Gantt";
|
|
5
|
+
import { addDays, computeGanttRange, dateToX, rangeDays, startOfDay } from "./ganttMath";
|
|
6
|
+
|
|
7
|
+
// Match the Carousel layout harness: RNW measures through ResizeObserver and
|
|
8
|
+
// a deferred offsetWidth read. Keep prototype patches isolated to this file.
|
|
9
|
+
let viewportWidth = 178;
|
|
10
|
+
const resizeCallbacks = new Map<Element, () => void>();
|
|
11
|
+
vi.stubGlobal(
|
|
12
|
+
"ResizeObserver",
|
|
13
|
+
class {
|
|
14
|
+
constructor(private callback: ResizeObserverCallback) {}
|
|
15
|
+
observe(target: Element) {
|
|
16
|
+
const notify = () =>
|
|
17
|
+
this.callback([{ target } as ResizeObserverEntry], this as unknown as ResizeObserver);
|
|
18
|
+
resizeCallbacks.set(target, notify);
|
|
19
|
+
notify();
|
|
20
|
+
}
|
|
21
|
+
unobserve(target: Element) {
|
|
22
|
+
resizeCallbacks.delete(target);
|
|
23
|
+
}
|
|
24
|
+
disconnect() {}
|
|
25
|
+
},
|
|
26
|
+
);
|
|
27
|
+
Object.defineProperty(HTMLElement.prototype, "offsetWidth", {
|
|
28
|
+
configurable: true,
|
|
29
|
+
get: () => viewportWidth,
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(HTMLElement.prototype, "offsetHeight", {
|
|
32
|
+
configurable: true,
|
|
33
|
+
get: () => 240,
|
|
34
|
+
});
|
|
35
|
+
const scrollCalls: number[] = [];
|
|
36
|
+
Object.defineProperty(HTMLElement.prototype, "scroll", {
|
|
37
|
+
configurable: true,
|
|
38
|
+
writable: true,
|
|
39
|
+
value(options: { left?: number }) {
|
|
40
|
+
if (typeof options.left === "number") scrollCalls.push(options.left);
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
const today = startOfDay(new Date());
|
|
45
|
+
const tasks: GanttTask[] = [
|
|
46
|
+
{ id: "track", title: "Track", start: addDays(today, -44), end: addDays(today, 19) },
|
|
47
|
+
];
|
|
48
|
+
const range = computeGanttRange([{ start: tasks[0].start!, end: tasks[0].end! }], "week", today);
|
|
49
|
+
const chartWidth = rangeDays(range) * 24;
|
|
50
|
+
const anchorX = dateToX(today, range.start, 24);
|
|
51
|
+
|
|
52
|
+
async function flushLayout() {
|
|
53
|
+
await act(async () => new Promise((resolve) => setTimeout(resolve, 0)));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
beforeEach(() => {
|
|
57
|
+
viewportWidth = 178;
|
|
58
|
+
scrollCalls.length = 0;
|
|
59
|
+
});
|
|
60
|
+
afterEach(() => {
|
|
61
|
+
cleanup();
|
|
62
|
+
document.documentElement.removeAttribute("dir");
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
describe("Gantt measured viewport anchoring", () => {
|
|
66
|
+
it("reanchors a narrow LTR mount after layout so the marker is inside the viewport", async () => {
|
|
67
|
+
renderWithProviders(<GanttView tasks={tasks} initialDate={today} markerDate={today} />);
|
|
68
|
+
await flushLayout();
|
|
69
|
+
const left = scrollCalls.at(-1)!;
|
|
70
|
+
expect(left).toBeGreaterThanOrEqual(0);
|
|
71
|
+
expect(left).toBeLessThanOrEqual(chartWidth - viewportWidth);
|
|
72
|
+
expect(anchorX + 12 - left).toBeGreaterThanOrEqual(0);
|
|
73
|
+
expect(anchorX + 12 - left).toBeLessThan(viewportWidth);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("keeps the narrow RTL marker inside the mirrored viewport", async () => {
|
|
77
|
+
document.documentElement.setAttribute("dir", "rtl");
|
|
78
|
+
renderWithProviders(<GanttView tasks={tasks} initialDate={today} markerDate={today} />);
|
|
79
|
+
await flushLayout();
|
|
80
|
+
const markerLeft = chartWidth - anchorX - 12 - scrollCalls.at(-1)!;
|
|
81
|
+
expect(markerLeft).toBeGreaterThanOrEqual(0);
|
|
82
|
+
expect(markerLeft).toBeLessThan(viewportWidth);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it("retains its pending anchor through a hidden zero-width first layout", async () => {
|
|
86
|
+
viewportWidth = 0;
|
|
87
|
+
renderWithProviders(<GanttView tasks={tasks} initialDate={today} markerDate={today} />);
|
|
88
|
+
await flushLayout();
|
|
89
|
+
viewportWidth = 178;
|
|
90
|
+
for (const notify of resizeCallbacks.values()) notify();
|
|
91
|
+
await flushLayout();
|
|
92
|
+
const markerLeft = anchorX + 12 - scrollCalls.at(-1)!;
|
|
93
|
+
expect(markerLeft).toBeGreaterThanOrEqual(0);
|
|
94
|
+
expect(markerLeft).toBeLessThan(viewportWidth);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("preserves the desktop anchor inset", async () => {
|
|
98
|
+
viewportWidth = 820;
|
|
99
|
+
renderWithProviders(<GanttView tasks={tasks} initialDate={today} />);
|
|
100
|
+
await flushLayout();
|
|
101
|
+
expect(scrollCalls.at(-1)).toBe(anchorX - 180);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("clamps a range-end anchor to the measured scroll extent", async () => {
|
|
105
|
+
viewportWidth = 820;
|
|
106
|
+
renderWithProviders(<GanttView tasks={tasks} initialDate={addDays(range.end, -1)} />);
|
|
107
|
+
await flushLayout();
|
|
108
|
+
expect(scrollCalls.at(-1)).toBeLessThanOrEqual(chartWidth - viewportWidth);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("uses the measured viewport for the Today action", async () => {
|
|
112
|
+
const result = renderWithProviders(<GanttView tasks={tasks} initialDate={range.start} />);
|
|
113
|
+
await flushLayout();
|
|
114
|
+
scrollCalls.length = 0;
|
|
115
|
+
fireEvent.click(result.getByRole("button", { name: "Today" }));
|
|
116
|
+
const markerLeft = anchorX + 12 - scrollCalls.at(-1)!;
|
|
117
|
+
expect(markerLeft).toBeGreaterThanOrEqual(0);
|
|
118
|
+
expect(markerLeft).toBeLessThan(viewportWidth);
|
|
119
|
+
});
|
|
120
|
+
});
|