@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
|
@@ -13,6 +13,37 @@ import * as Layouts from "./index";
|
|
|
13
13
|
|
|
14
14
|
afterEach(cleanup);
|
|
15
15
|
|
|
16
|
+
const originalInnerWidth = window.innerWidth;
|
|
17
|
+
|
|
18
|
+
/** Drive the real size-class path from a viewport width (setup reads it at render). */
|
|
19
|
+
function setViewportWidth(width: number) {
|
|
20
|
+
Object.defineProperty(window, "innerWidth", { configurable: true, value: width });
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
afterEach(() => setViewportWidth(originalInnerWidth));
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Rail | (centre | inspector) — the three-region page the kit composes from
|
|
27
|
+
* two scaffolds. `sizeClass` is set on the OUTER one only, so this also
|
|
28
|
+
* covers whether the class reaches the inner scaffold.
|
|
29
|
+
*/
|
|
30
|
+
function ThreeRegionPage(props: {
|
|
31
|
+
sizeClass?: "compact" | "medium" | "expanded" | "large" | "xl";
|
|
32
|
+
}) {
|
|
33
|
+
return (
|
|
34
|
+
<PaneScaffold
|
|
35
|
+
sizeClass={props.sizeClass}
|
|
36
|
+
primary={<Paragraph>Rail</Paragraph>}
|
|
37
|
+
secondary={
|
|
38
|
+
<PaneScaffold
|
|
39
|
+
primary={<Paragraph>Centre</Paragraph>}
|
|
40
|
+
secondary={<Paragraph>Inspector</Paragraph>}
|
|
41
|
+
/>
|
|
42
|
+
}
|
|
43
|
+
/>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
16
47
|
describe("layouts index exports (W11)", () => {
|
|
17
48
|
it("exports PaneScaffold canonical layouts + ReadingWidth", () => {
|
|
18
49
|
expect(Layouts.PaneScaffold).toBe(PaneScaffold);
|
|
@@ -24,7 +55,7 @@ describe("layouts index exports (W11)", () => {
|
|
|
24
55
|
});
|
|
25
56
|
|
|
26
57
|
describe("PaneScaffold", () => {
|
|
27
|
-
it("
|
|
58
|
+
it("stacks both panes below the two-pane budget", () => {
|
|
28
59
|
renderWithProviders(
|
|
29
60
|
<PaneScaffold
|
|
30
61
|
sizeClass="compact"
|
|
@@ -33,8 +64,34 @@ describe("PaneScaffold", () => {
|
|
|
33
64
|
/>,
|
|
34
65
|
);
|
|
35
66
|
const root = screen.getByTestId("pane-scaffold");
|
|
36
|
-
expect(root).toHaveAttribute("data-panes", "
|
|
37
|
-
expect(
|
|
67
|
+
expect(root).toHaveAttribute("data-panes", "2");
|
|
68
|
+
expect(root).toHaveAttribute("data-pane-layout", "stack");
|
|
69
|
+
expect(screen.getByTestId("pane-primary")).toHaveTextContent("List");
|
|
70
|
+
expect(screen.getByTestId("pane-secondary")).toHaveTextContent("Detail");
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("drops the sash when stacked (nothing to drag with a thumb)", () => {
|
|
74
|
+
renderWithProviders(
|
|
75
|
+
<PaneScaffold
|
|
76
|
+
sizeClass="compact"
|
|
77
|
+
primary={<Paragraph>List</Paragraph>}
|
|
78
|
+
secondary={<Paragraph>Detail</Paragraph>}
|
|
79
|
+
/>,
|
|
80
|
+
);
|
|
81
|
+
expect(screen.getByTestId("pane-scaffold")).toHaveAttribute("data-sash", "false");
|
|
82
|
+
expect(screen.queryByTestId("pane-sash")).not.toBeInTheDocument();
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it("narrowLayout=swap drops the inactive pane", () => {
|
|
86
|
+
renderWithProviders(
|
|
87
|
+
<PaneScaffold
|
|
88
|
+
sizeClass="compact"
|
|
89
|
+
narrowLayout="swap"
|
|
90
|
+
primary={<Paragraph>List</Paragraph>}
|
|
91
|
+
secondary={<Paragraph>Detail</Paragraph>}
|
|
92
|
+
/>,
|
|
93
|
+
);
|
|
94
|
+
expect(screen.getByTestId("pane-scaffold")).toHaveAttribute("data-panes", "1");
|
|
38
95
|
expect(screen.queryByText("Detail")).not.toBeInTheDocument();
|
|
39
96
|
});
|
|
40
97
|
|
|
@@ -66,12 +123,27 @@ describe("PaneScaffold", () => {
|
|
|
66
123
|
expect(screen.getByTestId("pane-secondary")).toHaveTextContent("Detail");
|
|
67
124
|
});
|
|
68
125
|
|
|
69
|
-
it("maxPanes=1
|
|
126
|
+
it("maxPanes=1 takes the narrow path even when expanded", () => {
|
|
70
127
|
renderWithProviders(
|
|
71
128
|
<PaneScaffold
|
|
72
129
|
sizeClass="xl"
|
|
73
130
|
maxPanes={1}
|
|
74
131
|
primary={<Paragraph>Only</Paragraph>}
|
|
132
|
+
secondary={<Paragraph>Also</Paragraph>}
|
|
133
|
+
/>,
|
|
134
|
+
);
|
|
135
|
+
const root = screen.getByTestId("pane-scaffold");
|
|
136
|
+
expect(root).toHaveAttribute("data-pane-layout", "stack");
|
|
137
|
+
expect(screen.getByText("Also")).toBeInTheDocument();
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it("maxPanes=1 with activePane drops the other pane", () => {
|
|
141
|
+
renderWithProviders(
|
|
142
|
+
<PaneScaffold
|
|
143
|
+
sizeClass="xl"
|
|
144
|
+
maxPanes={1}
|
|
145
|
+
activePane="primary"
|
|
146
|
+
primary={<Paragraph>Only</Paragraph>}
|
|
75
147
|
secondary={<Paragraph>Hidden</Paragraph>}
|
|
76
148
|
/>,
|
|
77
149
|
);
|
|
@@ -80,7 +152,64 @@ describe("PaneScaffold", () => {
|
|
|
80
152
|
});
|
|
81
153
|
});
|
|
82
154
|
|
|
155
|
+
// MPO-235: two scaffolds are how the kit builds three regions, and a phone
|
|
156
|
+
// rendered only the outer primary — the centre and inspector were unreachable.
|
|
157
|
+
describe("PaneScaffold nesting (MPO-235)", () => {
|
|
158
|
+
it("renders all three regions at a 402pt viewport", () => {
|
|
159
|
+
setViewportWidth(402);
|
|
160
|
+
renderWithProviders(<ThreeRegionPage />);
|
|
161
|
+
|
|
162
|
+
expect(screen.getByText("Rail")).toBeInTheDocument();
|
|
163
|
+
expect(screen.getByText("Centre")).toBeInTheDocument();
|
|
164
|
+
expect(screen.getByText("Inspector")).toBeInTheDocument();
|
|
165
|
+
|
|
166
|
+
const scaffolds = screen.getAllByTestId("pane-scaffold");
|
|
167
|
+
expect(scaffolds).toHaveLength(2);
|
|
168
|
+
for (const node of scaffolds) {
|
|
169
|
+
expect(node).toHaveAttribute("data-pane-layout", "stack");
|
|
170
|
+
expect(node).toHaveAttribute("data-size-class", "compact");
|
|
171
|
+
}
|
|
172
|
+
expect(screen.queryAllByTestId("pane-sash")).toHaveLength(0);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it("passes the outer size class to the inner scaffold", () => {
|
|
176
|
+
// Viewport stays wide: only the outer override may narrow the inner one.
|
|
177
|
+
setViewportWidth(1440);
|
|
178
|
+
renderWithProviders(<ThreeRegionPage sizeClass="compact" />);
|
|
179
|
+
|
|
180
|
+
expect(screen.getByText("Centre")).toBeInTheDocument();
|
|
181
|
+
expect(screen.getByText("Inspector")).toBeInTheDocument();
|
|
182
|
+
for (const node of screen.getAllByTestId("pane-scaffold")) {
|
|
183
|
+
expect(node).toHaveAttribute("data-pane-layout", "stack");
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it("still splits both scaffolds when the viewport is wide", () => {
|
|
188
|
+
setViewportWidth(1440);
|
|
189
|
+
renderWithProviders(<ThreeRegionPage />);
|
|
190
|
+
|
|
191
|
+
const scaffolds = screen.getAllByTestId("pane-scaffold");
|
|
192
|
+
expect(scaffolds).toHaveLength(2);
|
|
193
|
+
for (const node of scaffolds) {
|
|
194
|
+
expect(node).toHaveAttribute("data-pane-layout", "split");
|
|
195
|
+
}
|
|
196
|
+
expect(screen.getAllByTestId("pane-sash")).toHaveLength(2);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
|
|
83
200
|
describe("ListDetailLayout", () => {
|
|
201
|
+
it("keeps the swap idiom on compact: list only until an item is picked", () => {
|
|
202
|
+
renderWithProviders(
|
|
203
|
+
<ListDetailLayout
|
|
204
|
+
sizeClass="compact"
|
|
205
|
+
list={<Paragraph>Items</Paragraph>}
|
|
206
|
+
detail={<Paragraph>Item 1</Paragraph>}
|
|
207
|
+
/>,
|
|
208
|
+
);
|
|
209
|
+
expect(screen.getByTestId("pane-scaffold")).toHaveAttribute("data-panes", "1");
|
|
210
|
+
expect(screen.queryByText("Item 1")).not.toBeInTheDocument();
|
|
211
|
+
});
|
|
212
|
+
|
|
84
213
|
it("flips to detail when selected on compact", () => {
|
|
85
214
|
renderWithProviders(
|
|
86
215
|
<ListDetailLayout
|
|
@@ -96,6 +225,17 @@ describe("ListDetailLayout", () => {
|
|
|
96
225
|
});
|
|
97
226
|
|
|
98
227
|
describe("SupportingPaneLayout", () => {
|
|
228
|
+
it("stacks the supporting pane on compact instead of hiding it", () => {
|
|
229
|
+
renderWithProviders(
|
|
230
|
+
<SupportingPaneLayout sizeClass="compact" supporting={<Paragraph>Meta</Paragraph>}>
|
|
231
|
+
<Paragraph>Body</Paragraph>
|
|
232
|
+
</SupportingPaneLayout>,
|
|
233
|
+
);
|
|
234
|
+
expect(screen.getByTestId("pane-scaffold")).toHaveAttribute("data-pane-layout", "stack");
|
|
235
|
+
expect(screen.getByText("Body")).toBeInTheDocument();
|
|
236
|
+
expect(screen.getByText("Meta")).toBeInTheDocument();
|
|
237
|
+
});
|
|
238
|
+
|
|
99
239
|
it("renders side-by-side at large", () => {
|
|
100
240
|
renderWithProviders(
|
|
101
241
|
<SupportingPaneLayout sizeClass="large" supporting={<Paragraph>Meta</Paragraph>}>
|
|
@@ -113,7 +113,7 @@ const meta: Meta<typeof PaneScaffold> = {
|
|
|
113
113
|
docs: {
|
|
114
114
|
description: {
|
|
115
115
|
component:
|
|
116
|
-
|
|
116
|
+
'Adaptive TWO-pane shell (DG-LAY-01/02) — `primary` and `secondary`, no more. Size classes: compact <640, medium ≥640, expanded ≥860 (FloatingPanel), large ≥1024, xl ≥1280. Two panes from expanded up unless `maxPanes` ejects. Side-by-side uses a hairline sash (Linear / VS Code / Polaris Frame); pass `paneGap` to eject to spaced columns. Below expanded the panes stack and the sash goes away, so nothing is hidden on a phone; `narrowLayout="swap"` (what `activePane` opts into) is the list-detail exception. Three regions come from nesting a scaffold inside a pane — see the Nested three-region story; the size class rides down, so the inner scaffold stacks with the outer.',
|
|
117
117
|
},
|
|
118
118
|
},
|
|
119
119
|
},
|
|
@@ -123,12 +123,12 @@ const meta: Meta<typeof PaneScaffold> = {
|
|
|
123
123
|
options: ["compact", "medium", "expanded", "large", "xl"],
|
|
124
124
|
},
|
|
125
125
|
activePane: { control: "radio", options: ["primary", "secondary"] },
|
|
126
|
+
narrowLayout: { control: "radio", options: ["stack", "swap"] },
|
|
126
127
|
maxPanes: { control: "radio", options: [1, 2, undefined] },
|
|
127
128
|
resizable: { control: "boolean" },
|
|
128
129
|
},
|
|
129
130
|
args: {
|
|
130
131
|
sizeClass: "expanded",
|
|
131
|
-
activePane: "primary",
|
|
132
132
|
},
|
|
133
133
|
};
|
|
134
134
|
export default meta;
|
|
@@ -150,7 +150,63 @@ export const TwoPane: Story = {
|
|
|
150
150
|
),
|
|
151
151
|
};
|
|
152
152
|
|
|
153
|
+
export const CompactStacked: Story = {
|
|
154
|
+
name: "Compact (stacked)",
|
|
155
|
+
args: { sizeClass: "compact" },
|
|
156
|
+
parameters: {
|
|
157
|
+
docs: {
|
|
158
|
+
description: {
|
|
159
|
+
story:
|
|
160
|
+
"Below the two-pane budget the secondary sits under the primary and the sash is gone. Reflow, not hide.",
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
render: (args) => (
|
|
165
|
+
<YStack height={400} padding="$4">
|
|
166
|
+
<SplitFrame>
|
|
167
|
+
<PaneScaffold
|
|
168
|
+
{...args}
|
|
169
|
+
primary={<PaneFill label="Primary" />}
|
|
170
|
+
secondary={<PaneFill label="Secondary" muted />}
|
|
171
|
+
/>
|
|
172
|
+
</SplitFrame>
|
|
173
|
+
</YStack>
|
|
174
|
+
),
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
export const NestedThreeRegion: Story = {
|
|
178
|
+
name: "Nested three-region",
|
|
179
|
+
args: { sizeClass: "compact" },
|
|
180
|
+
parameters: {
|
|
181
|
+
docs: {
|
|
182
|
+
description: {
|
|
183
|
+
story:
|
|
184
|
+
"Rail | (centre | inspector): the recipe for three regions. Switch `sizeClass` to `xl` for two seams side by side; on compact all three stack, none is dropped.",
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
render: (args) => (
|
|
189
|
+
<YStack height={520} padding="$4">
|
|
190
|
+
<SplitFrame height={480}>
|
|
191
|
+
<PaneScaffold
|
|
192
|
+
{...args}
|
|
193
|
+
paneFlex={[1, 3]}
|
|
194
|
+
primary={<PaneFill label="Rail" muted />}
|
|
195
|
+
secondary={
|
|
196
|
+
<PaneScaffold
|
|
197
|
+
paneFlex={[2, 1]}
|
|
198
|
+
primary={<PaneFill label="Centre" hint="Main canvas" />}
|
|
199
|
+
secondary={<PaneFill label="Inspector" muted />}
|
|
200
|
+
/>
|
|
201
|
+
}
|
|
202
|
+
/>
|
|
203
|
+
</SplitFrame>
|
|
204
|
+
</YStack>
|
|
205
|
+
),
|
|
206
|
+
};
|
|
207
|
+
|
|
153
208
|
export const CompactActiveSecondary: Story = {
|
|
209
|
+
name: "Compact (swap)",
|
|
154
210
|
args: { sizeClass: "compact", activePane: "secondary" },
|
|
155
211
|
render: (args) => (
|
|
156
212
|
<YStack height={400} padding="$4">
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PaneScaffold + canonical layouts (DG-LAY-02) — W11.
|
|
3
3
|
*
|
|
4
|
+
* PaneScaffold is a TWO-pane scaffold: `primary` and `secondary`, no more.
|
|
5
|
+
* Three regions come from NESTING one scaffold inside a pane of another. The
|
|
6
|
+
* resolved size class rides a context down, so an inner scaffold reflows with
|
|
7
|
+
* the outer one instead of splitting inside a stacked column.
|
|
8
|
+
*
|
|
4
9
|
* Devs declare pane roles; the scaffold picks 1 vs 2 columns from the
|
|
5
10
|
* canonical layout size class (`expanded` @ 860 = two-pane budget).
|
|
6
11
|
*
|
|
@@ -13,7 +18,10 @@
|
|
|
13
18
|
* - **Supporting-pane**: secondary is meaningful only relative to primary.
|
|
14
19
|
* - **Feed**: equal-weight cards in a responsive grid.
|
|
15
20
|
*
|
|
16
|
-
*
|
|
21
|
+
* Below the two-pane budget the panes STACK (primary above secondary) and the
|
|
22
|
+
* sash goes away — a drag handle is a pointer affordance and there is nothing
|
|
23
|
+
* to drag with a thumb. Hiding a pane is the list-detail navigation idiom, not
|
|
24
|
+
* the responsive default: pass `activePane` (or `narrowLayout="swap"`) for it.
|
|
17
25
|
*/
|
|
18
26
|
|
|
19
27
|
import {
|
|
@@ -31,7 +39,17 @@ import {
|
|
|
31
39
|
type LayoutSizeClass,
|
|
32
40
|
READING_WIDTH_CH,
|
|
33
41
|
} from "@multiplatform.one/theme";
|
|
34
|
-
import {
|
|
42
|
+
import {
|
|
43
|
+
Children,
|
|
44
|
+
createContext,
|
|
45
|
+
useCallback,
|
|
46
|
+
useContext,
|
|
47
|
+
useEffect,
|
|
48
|
+
useId,
|
|
49
|
+
useRef,
|
|
50
|
+
useState,
|
|
51
|
+
type ReactNode,
|
|
52
|
+
} from "react";
|
|
35
53
|
import type { XStackProps, YStackProps } from "tamagui";
|
|
36
54
|
import { isWeb, XStack, YStack } from "tamagui";
|
|
37
55
|
import { useDirection } from "../hooks/useDirection";
|
|
@@ -51,10 +69,17 @@ export interface PaneScaffoldProps extends Omit<XStackProps, "children"> {
|
|
|
51
69
|
primary: ReactNode;
|
|
52
70
|
secondary?: ReactNode;
|
|
53
71
|
/**
|
|
54
|
-
* Which pane to show when
|
|
55
|
-
* List-detail on compact typically flips to `secondary` once an item is
|
|
72
|
+
* Which pane to show when `narrowLayout` is `swap`. Default: `primary`.
|
|
73
|
+
* List-detail on compact typically flips to `secondary` once an item is
|
|
74
|
+
* selected. Passing this prop opts the scaffold into `swap`.
|
|
56
75
|
*/
|
|
57
76
|
activePane?: PaneRole;
|
|
77
|
+
/**
|
|
78
|
+
* What happens below the two-pane budget. `stack` (the default) puts
|
|
79
|
+
* secondary under primary so no content is unreachable; `swap` renders
|
|
80
|
+
* `activePane` alone, which is the list-detail navigation idiom.
|
|
81
|
+
*/
|
|
82
|
+
narrowLayout?: "stack" | "swap";
|
|
58
83
|
/** Override the default pane budget (compact/medium → 1, expanded+ → 2). */
|
|
59
84
|
maxPanes?: 1 | 2;
|
|
60
85
|
/**
|
|
@@ -82,6 +107,14 @@ export interface PaneScaffoldProps extends Omit<XStackProps, "children"> {
|
|
|
82
107
|
sizeClass?: LayoutSizeClass;
|
|
83
108
|
}
|
|
84
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Resolved size class handed down to nested scaffolds. Without it an inner
|
|
112
|
+
* scaffold reads the WINDOW while the outer one was overridden (Storybook
|
|
113
|
+
* viewport, template test), so a stacked outer could still hold a split
|
|
114
|
+
* inner and the narrow reflow would only go one level deep.
|
|
115
|
+
*/
|
|
116
|
+
const PaneSizeClassContext = createContext<LayoutSizeClass | null>(null);
|
|
117
|
+
|
|
85
118
|
/**
|
|
86
119
|
* Adaptive one-/two-pane shell. Geometry only — surface colors stay stable
|
|
87
120
|
* across breakpoints (Material M-L5).
|
|
@@ -89,7 +122,8 @@ export interface PaneScaffoldProps extends Omit<XStackProps, "children"> {
|
|
|
89
122
|
export function PaneScaffold({
|
|
90
123
|
primary,
|
|
91
124
|
secondary,
|
|
92
|
-
activePane
|
|
125
|
+
activePane: activePaneProp,
|
|
126
|
+
narrowLayout: narrowLayoutProp,
|
|
93
127
|
maxPanes: maxPanesProp,
|
|
94
128
|
paneFlex = [1, 1],
|
|
95
129
|
paneGap,
|
|
@@ -102,23 +136,73 @@ export function PaneScaffold({
|
|
|
102
136
|
...rest
|
|
103
137
|
}: PaneScaffoldProps) {
|
|
104
138
|
const liveClass = useLayoutSizeClass();
|
|
105
|
-
const
|
|
139
|
+
const inheritedClass = useContext(PaneSizeClassContext);
|
|
140
|
+
const sizeClass = sizeClassProp ?? inheritedClass ?? liveClass;
|
|
106
141
|
// Explicit `maxPanes` is the eject hatch (force 1 or 2 regardless of class).
|
|
107
142
|
const budget = maxPanesProp ?? defaultMaxPanes(sizeClass);
|
|
108
143
|
const hasSecondary = secondary !== null && secondary !== undefined;
|
|
109
|
-
const
|
|
144
|
+
const split = budget >= 2 && hasSecondary;
|
|
110
145
|
const gapped = paneGap !== undefined;
|
|
111
146
|
const gap = gapped ? paneGap : undefined;
|
|
112
|
-
const resizable = (resizableProp ?? !gapped) &&
|
|
147
|
+
const resizable = (resizableProp ?? !gapped) && split && !gapped;
|
|
148
|
+
// `activePane` only decides anything when a pane is dropped, so passing it
|
|
149
|
+
// IS the swap opt-in. Everything else stacks: a scaffold that hides its
|
|
150
|
+
// secondary by default leaves that content unreachable on a phone.
|
|
151
|
+
const narrowLayout = narrowLayoutProp ?? (activePaneProp === undefined ? "stack" : "swap");
|
|
152
|
+
const stacked = !split && hasSecondary && narrowLayout === "stack";
|
|
153
|
+
const [primaryFlex, secondaryFlex] = paneFlex;
|
|
113
154
|
|
|
114
155
|
// flexBasis auto, not the flex:1 shorthand's 0%: react-native-web resets
|
|
115
156
|
// min-height to 0, so a 0% basis contributes zero intrinsic height inside
|
|
116
157
|
// auto-height scroll flows (Screen scroll pages) and the scaffold collapses,
|
|
117
158
|
// painting pane content over whatever follows. Bounded parents still fill
|
|
118
159
|
// (grow 1) exactly as before.
|
|
119
|
-
|
|
160
|
+
let content: ReactNode;
|
|
161
|
+
if (stacked) {
|
|
162
|
+
content = (
|
|
163
|
+
<YStack
|
|
164
|
+
flexGrow={1}
|
|
165
|
+
flexShrink={1}
|
|
166
|
+
flexBasis="auto"
|
|
167
|
+
minWidth={0}
|
|
168
|
+
width="100%"
|
|
169
|
+
gap={gap ?? 0}
|
|
170
|
+
data-testid="pane-scaffold"
|
|
171
|
+
data-panes="2"
|
|
172
|
+
data-pane-layout="stack"
|
|
173
|
+
data-size-class={sizeClass}
|
|
174
|
+
data-sash="false"
|
|
175
|
+
{...rest}
|
|
176
|
+
>
|
|
177
|
+
<YStack
|
|
178
|
+
flexGrow={1}
|
|
179
|
+
flexShrink={1}
|
|
180
|
+
flexBasis="auto"
|
|
181
|
+
minWidth={0}
|
|
182
|
+
minHeight={0}
|
|
183
|
+
width="100%"
|
|
184
|
+
{...(gapped ? undefined : paneHairlineBottom)}
|
|
185
|
+
data-testid="pane-primary"
|
|
186
|
+
>
|
|
187
|
+
{primary}
|
|
188
|
+
</YStack>
|
|
189
|
+
<YStack
|
|
190
|
+
flexGrow={1}
|
|
191
|
+
flexShrink={1}
|
|
192
|
+
flexBasis="auto"
|
|
193
|
+
minWidth={0}
|
|
194
|
+
minHeight={0}
|
|
195
|
+
width="100%"
|
|
196
|
+
data-testid="pane-secondary"
|
|
197
|
+
>
|
|
198
|
+
{secondary}
|
|
199
|
+
</YStack>
|
|
200
|
+
</YStack>
|
|
201
|
+
);
|
|
202
|
+
} else if (!split) {
|
|
203
|
+
const activePane = activePaneProp ?? "primary";
|
|
120
204
|
const shown = activePane === "secondary" && hasSecondary ? secondary : primary;
|
|
121
|
-
|
|
205
|
+
content = (
|
|
122
206
|
<YStack
|
|
123
207
|
flexGrow={1}
|
|
124
208
|
flexShrink={1}
|
|
@@ -127,62 +211,64 @@ export function PaneScaffold({
|
|
|
127
211
|
width="100%"
|
|
128
212
|
data-testid="pane-scaffold"
|
|
129
213
|
data-panes="1"
|
|
214
|
+
data-pane-layout="single"
|
|
130
215
|
data-size-class={sizeClass}
|
|
131
216
|
{...rest}
|
|
132
217
|
>
|
|
133
218
|
{shown}
|
|
134
219
|
</YStack>
|
|
135
220
|
);
|
|
221
|
+
} else {
|
|
222
|
+
content = (
|
|
223
|
+
<XStack
|
|
224
|
+
flexGrow={1}
|
|
225
|
+
flexShrink={1}
|
|
226
|
+
flexBasis="auto"
|
|
227
|
+
minWidth={0}
|
|
228
|
+
minHeight={0}
|
|
229
|
+
width="100%"
|
|
230
|
+
alignItems="stretch"
|
|
231
|
+
gap={gap ?? 0}
|
|
232
|
+
position="relative"
|
|
233
|
+
data-testid="pane-scaffold"
|
|
234
|
+
data-panes="2"
|
|
235
|
+
data-pane-layout="split"
|
|
236
|
+
data-size-class={sizeClass}
|
|
237
|
+
data-sash={resizable ? "true" : "false"}
|
|
238
|
+
{...rest}
|
|
239
|
+
>
|
|
240
|
+
{resizable ? (
|
|
241
|
+
<ResizablePanes
|
|
242
|
+
primary={primary}
|
|
243
|
+
secondary={secondary}
|
|
244
|
+
primaryFlex={primaryFlex}
|
|
245
|
+
secondaryFlex={secondaryFlex}
|
|
246
|
+
minFraction={minPaneFraction}
|
|
247
|
+
maxFraction={maxPaneFraction}
|
|
248
|
+
fraction={primaryFractionProp}
|
|
249
|
+
onFractionChange={onPrimaryFractionChange}
|
|
250
|
+
/>
|
|
251
|
+
) : (
|
|
252
|
+
<>
|
|
253
|
+
<YStack
|
|
254
|
+
flex={primaryFlex}
|
|
255
|
+
minWidth={0}
|
|
256
|
+
minHeight={0}
|
|
257
|
+
{...(gapped ? undefined : paneHairlineEnd)}
|
|
258
|
+
data-testid="pane-primary"
|
|
259
|
+
>
|
|
260
|
+
{primary}
|
|
261
|
+
</YStack>
|
|
262
|
+
<YStack flex={secondaryFlex} minWidth={0} minHeight={0} data-testid="pane-secondary">
|
|
263
|
+
{secondary}
|
|
264
|
+
</YStack>
|
|
265
|
+
</>
|
|
266
|
+
)}
|
|
267
|
+
</XStack>
|
|
268
|
+
);
|
|
136
269
|
}
|
|
137
270
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
return (
|
|
141
|
-
<XStack
|
|
142
|
-
flexGrow={1}
|
|
143
|
-
flexShrink={1}
|
|
144
|
-
flexBasis="auto"
|
|
145
|
-
minWidth={0}
|
|
146
|
-
minHeight={0}
|
|
147
|
-
width="100%"
|
|
148
|
-
alignItems="stretch"
|
|
149
|
-
gap={gap ?? 0}
|
|
150
|
-
position="relative"
|
|
151
|
-
data-testid="pane-scaffold"
|
|
152
|
-
data-panes="2"
|
|
153
|
-
data-size-class={sizeClass}
|
|
154
|
-
data-sash={resizable ? "true" : "false"}
|
|
155
|
-
{...rest}
|
|
156
|
-
>
|
|
157
|
-
{resizable ? (
|
|
158
|
-
<ResizablePanes
|
|
159
|
-
primary={primary}
|
|
160
|
-
secondary={secondary}
|
|
161
|
-
primaryFlex={primaryFlex}
|
|
162
|
-
secondaryFlex={secondaryFlex}
|
|
163
|
-
minFraction={minPaneFraction}
|
|
164
|
-
maxFraction={maxPaneFraction}
|
|
165
|
-
fraction={primaryFractionProp}
|
|
166
|
-
onFractionChange={onPrimaryFractionChange}
|
|
167
|
-
/>
|
|
168
|
-
) : (
|
|
169
|
-
<>
|
|
170
|
-
<YStack
|
|
171
|
-
flex={primaryFlex}
|
|
172
|
-
minWidth={0}
|
|
173
|
-
minHeight={0}
|
|
174
|
-
{...(gapped ? undefined : paneHairlineEnd)}
|
|
175
|
-
data-testid="pane-primary"
|
|
176
|
-
>
|
|
177
|
-
{primary}
|
|
178
|
-
</YStack>
|
|
179
|
-
<YStack flex={secondaryFlex} minWidth={0} minHeight={0} data-testid="pane-secondary">
|
|
180
|
-
{secondary}
|
|
181
|
-
</YStack>
|
|
182
|
-
</>
|
|
183
|
-
)}
|
|
184
|
-
</XStack>
|
|
185
|
-
);
|
|
271
|
+
return <PaneSizeClassContext.Provider value={sizeClass}>{content}</PaneSizeClassContext.Provider>;
|
|
186
272
|
}
|
|
187
273
|
|
|
188
274
|
const paneHairlineEnd = isWeb
|
|
@@ -194,6 +280,9 @@ const paneHairlineEnd = isWeb
|
|
|
194
280
|
}
|
|
195
281
|
: { borderEndWidth: hairlineWidth, borderColor: "$borderColor" };
|
|
196
282
|
|
|
283
|
+
/** Stacked seam: the horizontal twin of `paneHairlineEnd`. */
|
|
284
|
+
const paneHairlineBottom = { ...hairline.bottom, borderColor: "$borderColor" };
|
|
285
|
+
|
|
197
286
|
function clampFraction(value: number, min: number, max: number): number {
|
|
198
287
|
return Math.min(max, Math.max(min, value));
|
|
199
288
|
}
|
|
@@ -458,12 +547,17 @@ export interface ListDetailLayoutProps extends Omit<
|
|
|
458
547
|
* Canonical list-detail: explorative list + item detail. Detail remains
|
|
459
548
|
* meaningful without the list (Material M-L4). List is the narrower pane
|
|
460
549
|
* (Linear issue view / VS Code explorer), not a 50/50 split.
|
|
550
|
+
*
|
|
551
|
+
* Below the two-pane budget this SWAPS rather than stacks — list and detail
|
|
552
|
+
* are two steps of one navigation, so `selected` decides which is on screen.
|
|
553
|
+
* Pass `narrowLayout="stack"` to show both instead.
|
|
461
554
|
*/
|
|
462
555
|
export function ListDetailLayout({
|
|
463
556
|
list,
|
|
464
557
|
detail,
|
|
465
558
|
selected = false,
|
|
466
559
|
activePane,
|
|
560
|
+
narrowLayout,
|
|
467
561
|
...rest
|
|
468
562
|
}: ListDetailLayoutProps) {
|
|
469
563
|
return (
|
|
@@ -472,6 +566,7 @@ export function ListDetailLayout({
|
|
|
472
566
|
secondary={detail}
|
|
473
567
|
paneFlex={[1, 2]}
|
|
474
568
|
activePane={activePane ?? (selected ? "secondary" : "primary")}
|
|
569
|
+
narrowLayout={narrowLayout ?? "swap"}
|
|
475
570
|
data-canonical="list-detail"
|
|
476
571
|
{...rest}
|
|
477
572
|
/>
|
|
@@ -493,6 +588,9 @@ export interface SupportingPaneLayoutProps extends Omit<
|
|
|
493
588
|
* Canonical supporting-pane: primary content + contextual support (~⅔ / ⅓).
|
|
494
589
|
* Supporting content is only meaningful relative to primary (Material M-L4).
|
|
495
590
|
* Seam is a hairline (Polaris Frame navigation / Linear properties column).
|
|
591
|
+
*
|
|
592
|
+
* Below the two-pane budget the supporting content stacks under the primary.
|
|
593
|
+
* It is never dropped: it has no screen of its own to be reached from.
|
|
496
594
|
*/
|
|
497
595
|
export function SupportingPaneLayout({ children, supporting, ...rest }: SupportingPaneLayoutProps) {
|
|
498
596
|
return (
|
|
@@ -26,16 +26,10 @@ export const Default: Story = {
|
|
|
26
26
|
name: "Main",
|
|
27
27
|
render: () => (
|
|
28
28
|
<ScreenToolbar
|
|
29
|
-
leading={
|
|
30
|
-
<Button compact variant="outlined">
|
|
31
|
-
Back
|
|
32
|
-
</Button>
|
|
33
|
-
}
|
|
29
|
+
leading={<Button compact>Back</Button>}
|
|
34
30
|
trailing={
|
|
35
31
|
<>
|
|
36
|
-
<Button compact
|
|
37
|
-
Cancel
|
|
38
|
-
</Button>
|
|
32
|
+
<Button compact>Cancel</Button>
|
|
39
33
|
<Button compact>Save</Button>
|
|
40
34
|
</>
|
|
41
35
|
}
|
|
@@ -59,7 +53,6 @@ export const DisabledAndLoading: Story = {
|
|
|
59
53
|
// the toolbar row's shared control height.
|
|
60
54
|
<Button
|
|
61
55
|
compact
|
|
62
|
-
variant="outlined"
|
|
63
56
|
disabled
|
|
64
57
|
disabledReason="No screen to go back to"
|
|
65
58
|
disabledReasonPlacement="inline"
|
|
@@ -82,22 +75,12 @@ export const ManyActionsNarrow: Story = {
|
|
|
82
75
|
render: () => (
|
|
83
76
|
<YStack maxWidth={320} borderWidth={1} borderColor="$color6" borderStyle="dashed">
|
|
84
77
|
<ScreenToolbar
|
|
85
|
-
leading={
|
|
86
|
-
<Button compact variant="outlined">
|
|
87
|
-
Back to the previous screen
|
|
88
|
-
</Button>
|
|
89
|
-
}
|
|
78
|
+
leading={<Button compact>Back to the previous screen</Button>}
|
|
90
79
|
trailing={
|
|
91
80
|
<>
|
|
92
|
-
<Button compact
|
|
93
|
-
|
|
94
|
-
</Button>
|
|
95
|
-
<Button compact variant="outlined">
|
|
96
|
-
Archive
|
|
97
|
-
</Button>
|
|
98
|
-
<Button compact variant="outlined">
|
|
99
|
-
Delete permanently
|
|
100
|
-
</Button>
|
|
81
|
+
<Button compact>Duplicate</Button>
|
|
82
|
+
<Button compact>Archive</Button>
|
|
83
|
+
<Button compact>Delete permanently</Button>
|
|
101
84
|
<Button compact>Save changes</Button>
|
|
102
85
|
</>
|
|
103
86
|
}
|
package/src/layouts/index.tsx
CHANGED
|
@@ -12,6 +12,17 @@ export * from "./page";
|
|
|
12
12
|
export * from "./pageHeadingScope";
|
|
13
13
|
export * from "./PageTemplates";
|
|
14
14
|
export * from "./PaneScaffold";
|
|
15
|
+
// EmptyState is NAMED here rather than left to reach the barrel through
|
|
16
|
+
// `export * from "./page"` (page.tsx re-exports it, so it has always been
|
|
17
|
+
// importable from @multiplatform.one/components — MPO-223's "not exported"
|
|
18
|
+
// premise was wrong, measured against published 7.7.1). Naming it is still
|
|
19
|
+
// worth doing: reachability that rides a transitive star through an unrelated
|
|
20
|
+
// module is the fragility that dropped ProgressCard twice (MPO-53, 5c7af7134),
|
|
21
|
+
// and it reads as absent to anyone grepping this file, which is how a consumer
|
|
22
|
+
// talked itself into a deep `src/layouts/EmptyState` import. `layouts.spec.tsx`
|
|
23
|
+
// asserts every module in this directory is reachable from here, so the next
|
|
24
|
+
// omission fails a test.
|
|
25
|
+
export { EmptyState, type EmptyStateProps } from "./EmptyState";
|
|
15
26
|
export {
|
|
16
27
|
AsyncBoundary,
|
|
17
28
|
AsyncSkeleton,
|