@multiplatform.one/components 7.7.4 → 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/Accordion/index.cjs +4 -0
- package/dist/cjs/Accordion/index.native.js +5 -1
- package/dist/cjs/Accordion/index.native.js.map +1 -1
- package/dist/cjs/Alert/index.native.js.map +1 -1
- package/dist/cjs/AnimateHeight/index.cjs +29 -2
- package/dist/cjs/AnimateHeight/index.native.js +30 -2
- package/dist/cjs/AnimateHeight/index.native.js.map +1 -1
- package/dist/cjs/Avatar/getInitials.native.js.map +1 -1
- package/dist/cjs/Avatar/index.native.js.map +1 -1
- package/dist/cjs/Badge/index.native.js.map +1 -1
- package/dist/cjs/Button.native.js.map +1 -1
- package/dist/cjs/Card.cjs +7 -1
- package/dist/cjs/Card.native.js +11 -1
- package/dist/cjs/Card.native.js.map +1 -1
- package/dist/cjs/CardFooter.cjs +1 -0
- package/dist/cjs/CardFooter.native.js +1 -0
- package/dist/cjs/CardFooter.native.js.map +1 -1
- package/dist/cjs/CardHeader.native.js.map +1 -1
- package/dist/cjs/Carousel/index.native.js +1 -1
- package/dist/cjs/Carousel/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.native.js.map +1 -1
- package/dist/cjs/Collapsible.cjs +48 -0
- package/dist/cjs/Collapsible.native.js +56 -0
- package/dist/cjs/Collapsible.native.js.map +1 -0
- package/dist/cjs/ContextMenu/index.native.js.map +1 -1
- package/dist/cjs/CopyField/index.cjs +6 -1
- package/dist/cjs/CopyField/index.native.js +6 -1
- package/dist/cjs/CopyField/index.native.js.map +1 -1
- package/dist/cjs/DotIndicator/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/ErrorBoundary/index.native.js.map +1 -1
- package/dist/cjs/Heading.native.js.map +1 -1
- package/dist/cjs/Meter/index.cjs +12 -5
- package/dist/cjs/Meter/index.native.js +13 -6
- package/dist/cjs/Meter/index.native.js.map +1 -1
- package/dist/cjs/Meter/meter.native.js.map +1 -1
- package/dist/cjs/Pagination.cjs +28 -9
- package/dist/cjs/Pagination.native.js +29 -10
- package/dist/cjs/Pagination.native.js.map +1 -1
- package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
- package/dist/cjs/Quote/index.native.js.map +1 -1
- package/dist/cjs/Separator/index.native.js.map +1 -1
- package/dist/cjs/SheetModal/detents.native.js.map +1 -1
- package/dist/cjs/Skeleton/index.native.js.map +1 -1
- package/dist/cjs/SkipLink/index.native.js.map +1 -1
- package/dist/cjs/SortableList/SortableHandle.native.js.map +1 -1
- package/dist/cjs/SortableList/index.native.js.map +1 -1
- package/dist/cjs/SortableList/useSortableRows.native.js.map +1 -1
- package/dist/cjs/Tabs/index.cjs +145 -91
- package/dist/cjs/Tabs/index.native.js +187 -123
- package/dist/cjs/Tabs/index.native.js.map +1 -1
- package/dist/cjs/Text.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/Toast/store.native.js.map +1 -1
- package/dist/cjs/Tooltip/nativePress.native.js.map +1 -1
- package/dist/cjs/Tooltip/tooltipShared.native.js.map +1 -1
- package/dist/cjs/TreeSelect/index.native.js +1 -1
- package/dist/cjs/TreeSelect/index.native.js.map +1 -1
- package/dist/cjs/TreeSelect/treeSelectModel.native.js.map +1 -1
- package/dist/cjs/Video/PlayerChrome.native.js.map +1 -1
- package/dist/cjs/Video/VideoFrame.native.js.map +1 -1
- package/dist/cjs/Video/types.native.js.map +1 -1
- package/dist/cjs/Wheel/index.native.js.map +1 -1
- package/dist/cjs/Wizard/index.native.js +2 -2
- package/dist/cjs/Wizard/index.native.js.map +1 -1
- package/dist/cjs/actions/ActionBar.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/actions/devWarn.native.js.map +1 -1
- package/dist/cjs/actions/index.native.js.map +1 -1
- package/dist/cjs/actions/severity.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/composeChart.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/charts/types.native.js.map +1 -1
- package/dist/cjs/charts/useChartTheme.native.js.map +1 -1
- package/dist/cjs/code/Code/index.native.js.map +1 -1
- package/dist/cjs/code/CodeBlock/index.cjs +6 -1
- package/dist/cjs/code/CodeBlock/index.native.js +12 -7
- package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
- package/dist/cjs/code/HighlightedCode/index.native.js.map +1 -1
- package/dist/cjs/code/Highlighter/index.native.js.map +1 -1
- package/dist/cjs/code/Pre/index.native.js.map +1 -1
- package/dist/cjs/code/index.native.js +5 -5
- package/dist/cjs/code/index.native.js.map +1 -1
- package/dist/cjs/componentColors.native.js.map +1 -1
- package/dist/cjs/feedback/ConfirmDialog.cjs +7 -21
- package/dist/cjs/feedback/ConfirmDialog.native.js +7 -22
- package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
- package/dist/cjs/feedback/NotifyHost.cjs +2 -1
- package/dist/cjs/feedback/NotifyHost.native.js +5 -4
- 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/hooks/index.native.js +1 -1
- package/dist/cjs/hooks/index.native.js.map +1 -1
- package/dist/cjs/hooks/useClipboard.native.js.map +1 -1
- package/dist/cjs/hooks/useDocumentTitle.native.js.map +1 -1
- package/dist/cjs/icons/CheckRegular.native.js.map +1 -1
- package/dist/cjs/icons/MinusRegular.native.js.map +1 -1
- package/dist/cjs/icons/index.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/icons/themed.native.js.map +1 -1
- package/dist/cjs/images/Image/ImageFrame.native.js +1 -1
- package/dist/cjs/images/Image/ImageFrame.native.js.map +1 -1
- package/dist/cjs/images/Image/index.native.js +1 -1
- package/dist/cjs/images/Image/shared.native.js +1 -1
- package/dist/cjs/images/Image/shared.native.js.map +1 -1
- package/dist/cjs/images/Image/types.native.js.map +1 -1
- package/dist/cjs/images/index.native.js.map +1 -1
- package/dist/cjs/index.native.js +29 -29
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/knobImmuneExports.cjs +0 -1
- package/dist/cjs/knobImmuneExports.native.js +0 -1
- package/dist/cjs/knobImmuneExports.native.js.map +1 -1
- package/dist/cjs/layouts/AsyncBoundary.native.js +2 -2
- package/dist/cjs/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/cjs/layouts/Debug/index.native.js.map +1 -1
- package/dist/cjs/layouts/EmptyState.native.js.map +1 -1
- package/dist/cjs/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
- package/dist/cjs/layouts/PageTemplates.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/SafeAreaWrapper/insets.native.js.map +1 -1
- package/dist/cjs/layouts/ViewSwitcher.native.js.map +1 -1
- package/dist/cjs/layouts/attachments.native.js +1 -1
- package/dist/cjs/layouts/attachments.native.js.map +1 -1
- package/dist/cjs/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/cjs/layouts/index.cjs +2 -0
- package/dist/cjs/layouts/index.native.js +5 -3
- 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/layouts/pageHeadingScope.native.js.map +1 -1
- package/dist/cjs/layouts/sidebar.native.js.map +1 -1
- package/dist/cjs/layouts/tags.native.js +1 -1
- package/dist/cjs/layouts/tags.native.js.map +1 -1
- package/dist/cjs/layouts/timeline.native.js +2 -2
- package/dist/cjs/layouts/timeline.native.js.map +1 -1
- package/dist/cjs/layouts/toolbar.native.js.map +1 -1
- package/dist/cjs/shared/actionScan.native.js.map +1 -1
- package/dist/cjs/shared/i18n.native.js.map +1 -1
- package/dist/cjs/shared/t.native.js.map +1 -1
- package/dist/cjs/shared/textRidesText.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/shared/useReturnFocusOnClose.native.js.map +1 -1
- package/dist/cjs/surfaces.native.js +1 -1
- package/dist/cjs/surfaces.native.js.map +1 -1
- package/dist/cjs/tamagui.cjs +3 -2
- package/dist/cjs/tamagui.native.js +2 -1
- package/dist/cjs/tamagui.native.js.map +1 -1
- package/dist/cjs/testSetup.native.js.map +1 -1
- package/dist/cjs/utils/setTinted.native.js.map +1 -1
- package/dist/cjs/utils/unwrapText.native.js.map +1 -1
- package/dist/cjs/views/Calendar.native.js.map +1 -1
- package/dist/cjs/views/Dashboard.cjs +110 -17
- package/dist/cjs/views/Dashboard.native.js +152 -46
- 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 +444 -95
- package/dist/cjs/views/Gantt.native.js.map +1 -1
- package/dist/cjs/views/ImageGrid.native.js +1 -1
- package/dist/cjs/views/ImageGrid.native.js.map +1 -1
- package/dist/cjs/views/List.native.js.map +1 -1
- package/dist/cjs/views/ReportBuilder.native.js +1 -1
- package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
- package/dist/cjs/views/TreeView.native.js.map +1 -1
- package/dist/cjs/views/calendarMath.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 +21 -2
- package/dist/cjs/views/index.native.js.map +1 -1
- package/dist/cjs/views/kanbanDnd.native.js.map +1 -1
- package/dist/cjs/views/treeViewDnd.native.js.map +1 -1
- package/dist/cjs/views/treeViewLayout.native.js.map +1 -1
- package/dist/cjs/views/treeViewMotion.native.js.map +1 -1
- package/dist/esm/Accordion/index.mjs +4 -0
- package/dist/esm/Accordion/index.mjs.map +1 -1
- package/dist/esm/Accordion/index.native.js +4 -0
- package/dist/esm/Accordion/index.native.js.map +1 -1
- package/dist/esm/AnimateHeight/index.mjs +29 -2
- package/dist/esm/AnimateHeight/index.mjs.map +1 -1
- package/dist/esm/AnimateHeight/index.native.js +30 -2
- package/dist/esm/AnimateHeight/index.native.js.map +1 -1
- package/dist/esm/Avatar/getInitials.native.js.map +1 -1
- package/dist/esm/Avatar/index.native.js.map +1 -1
- package/dist/esm/Badge/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/Carousel/index.native.js.map +1 -1
- package/dist/esm/Chip/index.native.js.map +1 -1
- package/dist/esm/Collapsible.mjs +23 -0
- package/dist/esm/Collapsible.mjs.map +1 -0
- package/dist/esm/Collapsible.native.js +28 -0
- package/dist/esm/Collapsible.native.js.map +1 -0
- package/dist/esm/ContextMenu/index.native.js.map +1 -1
- package/dist/esm/CopyField/index.mjs +7 -2
- package/dist/esm/CopyField/index.mjs.map +1 -1
- package/dist/esm/CopyField/index.native.js +7 -2
- package/dist/esm/CopyField/index.native.js.map +1 -1
- package/dist/esm/DotIndicator/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/ErrorBoundary/index.native.js.map +1 -1
- package/dist/esm/Heading.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/Meter/meter.native.js.map +1 -1
- package/dist/esm/Pagination.mjs +28 -9
- package/dist/esm/Pagination.mjs.map +1 -1
- package/dist/esm/Pagination.native.js +28 -9
- package/dist/esm/Pagination.native.js.map +1 -1
- package/dist/esm/ProgressSteps/index.native.js.map +1 -1
- package/dist/esm/Quote/index.native.js.map +1 -1
- package/dist/esm/Separator/index.native.js.map +1 -1
- package/dist/esm/SheetModal/detents.native.js.map +1 -1
- package/dist/esm/Skeleton/index.native.js.map +1 -1
- package/dist/esm/SkipLink/index.native.js.map +1 -1
- package/dist/esm/SortableList/SortableHandle.native.js.map +1 -1
- package/dist/esm/SortableList/index.native.js.map +1 -1
- package/dist/esm/SortableList/useSortableRows.native.js.map +1 -1
- package/dist/esm/Tabs/index.mjs +145 -91
- package/dist/esm/Tabs/index.mjs.map +1 -1
- package/dist/esm/Tabs/index.native.js +187 -123
- package/dist/esm/Tabs/index.native.js.map +1 -1
- package/dist/esm/Text.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/Toast/store.native.js.map +1 -1
- package/dist/esm/Tooltip/nativePress.native.js.map +1 -1
- package/dist/esm/Tooltip/tooltipShared.native.js.map +1 -1
- package/dist/esm/TreeSelect/index.native.js.map +1 -1
- package/dist/esm/TreeSelect/treeSelectModel.native.js.map +1 -1
- package/dist/esm/Video/PlayerChrome.native.js.map +1 -1
- package/dist/esm/Video/VideoFrame.native.js.map +1 -1
- package/dist/esm/Video/types.native.js.map +1 -1
- package/dist/esm/Wheel/index.native.js.map +1 -1
- package/dist/esm/Wizard/index.native.js.map +1 -1
- package/dist/esm/actions/ActionBar.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/actions/devWarn.native.js.map +1 -1
- package/dist/esm/actions/index.native.js.map +1 -1
- package/dist/esm/actions/severity.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/composeChart.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/charts/types.native.js.map +1 -1
- package/dist/esm/charts/useChartTheme.native.js.map +1 -1
- package/dist/esm/code/CodeBlock/index.mjs +7 -2
- package/dist/esm/code/CodeBlock/index.mjs.map +1 -1
- package/dist/esm/code/CodeBlock/index.native.js +7 -2
- package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
- package/dist/esm/code/HighlightedCode/index.native.js.map +1 -1
- package/dist/esm/code/Highlighter/index.native.js.map +1 -1
- package/dist/esm/code/Pre/index.native.js.map +1 -1
- package/dist/esm/code/index.native.js.map +1 -1
- package/dist/esm/componentColors.native.js.map +1 -1
- package/dist/esm/feedback/ConfirmDialog.mjs +8 -22
- package/dist/esm/feedback/ConfirmDialog.mjs.map +1 -1
- package/dist/esm/feedback/ConfirmDialog.native.js +8 -23
- package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
- package/dist/esm/feedback/NotifyHost.mjs +2 -1
- package/dist/esm/feedback/NotifyHost.mjs.map +1 -1
- package/dist/esm/feedback/NotifyHost.native.js +3 -2
- package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
- package/dist/esm/feedback/copy.mjs +35 -4
- package/dist/esm/feedback/copy.mjs.map +1 -1
- package/dist/esm/feedback/copy.native.js +37 -4
- package/dist/esm/feedback/copy.native.js.map +1 -1
- package/dist/esm/feedback/index.mjs +2 -2
- package/dist/esm/feedback/index.mjs.map +1 -1
- package/dist/esm/feedback/index.native.js +2 -2
- package/dist/esm/feedback/index.native.js.map +1 -1
- package/dist/esm/feedback/notify.mjs +1 -0
- package/dist/esm/feedback/notify.mjs.map +1 -1
- package/dist/esm/feedback/notify.native.js +1 -0
- package/dist/esm/feedback/notify.native.js.map +1 -1
- package/dist/esm/feedback/route.mjs +3 -0
- package/dist/esm/feedback/route.mjs.map +1 -1
- package/dist/esm/feedback/route.native.js +3 -0
- package/dist/esm/feedback/route.native.js.map +1 -1
- package/dist/esm/feedback/store.mjs +6 -1
- package/dist/esm/feedback/store.mjs.map +1 -1
- package/dist/esm/feedback/store.native.js +8 -1
- package/dist/esm/feedback/store.native.js.map +1 -1
- package/dist/esm/hooks/index.native.js.map +1 -1
- package/dist/esm/hooks/useClipboard.native.js.map +1 -1
- package/dist/esm/hooks/useDocumentTitle.native.js.map +1 -1
- package/dist/esm/icons/CheckRegular.native.js.map +1 -1
- package/dist/esm/icons/MinusRegular.native.js.map +1 -1
- package/dist/esm/icons/index.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/icons/themed.native.js.map +1 -1
- package/dist/esm/images/Image/ImageFrame.native.js.map +1 -1
- package/dist/esm/images/Image/shared.native.js.map +1 -1
- package/dist/esm/images/Image/types.native.js.map +1 -1
- package/dist/esm/images/index.native.js.map +1 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/knobImmuneExports.mjs +0 -1
- package/dist/esm/knobImmuneExports.mjs.map +1 -1
- package/dist/esm/knobImmuneExports.native.js +0 -1
- package/dist/esm/knobImmuneExports.native.js.map +1 -1
- package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/esm/layouts/Debug/index.native.js.map +1 -1
- package/dist/esm/layouts/EmptyState.native.js.map +1 -1
- package/dist/esm/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
- package/dist/esm/layouts/PageTemplates.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/SafeAreaWrapper/insets.native.js.map +1 -1
- package/dist/esm/layouts/ViewSwitcher.native.js.map +1 -1
- package/dist/esm/layouts/attachments.native.js.map +1 -1
- package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/esm/layouts/index.mjs +2 -1
- package/dist/esm/layouts/index.mjs.map +1 -1
- package/dist/esm/layouts/index.native.js +2 -1
- package/dist/esm/layouts/index.native.js.map +1 -1
- package/dist/esm/layouts/page.mjs +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/layouts/pageHeadingScope.native.js.map +1 -1
- package/dist/esm/layouts/sidebar.native.js.map +1 -1
- package/dist/esm/layouts/tags.native.js.map +1 -1
- package/dist/esm/layouts/timeline.native.js.map +1 -1
- package/dist/esm/layouts/toolbar.native.js.map +1 -1
- package/dist/esm/shared/actionScan.native.js.map +1 -1
- package/dist/esm/shared/i18n.native.js.map +1 -1
- package/dist/esm/shared/t.native.js.map +1 -1
- package/dist/esm/shared/textRidesText.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/shared/useReturnFocusOnClose.native.js.map +1 -1
- package/dist/esm/surfaces.native.js.map +1 -1
- package/dist/esm/tamagui.mjs +2 -1
- package/dist/esm/tamagui.mjs.map +1 -1
- package/dist/esm/tamagui.native.js +2 -1
- package/dist/esm/tamagui.native.js.map +1 -1
- package/dist/esm/testSetup.native.js.map +1 -1
- package/dist/esm/utils/setTinted.native.js.map +1 -1
- package/dist/esm/utils/unwrapText.native.js.map +1 -1
- package/dist/esm/views/Calendar.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/ImageGrid.native.js.map +1 -1
- package/dist/esm/views/List.native.js.map +1 -1
- package/dist/esm/views/ReportBuilder.native.js.map +1 -1
- package/dist/esm/views/TreeView.native.js.map +1 -1
- package/dist/esm/views/calendarMath.native.js.map +1 -1
- package/dist/esm/views/ganttMath.mjs +84 -3
- package/dist/esm/views/ganttMath.mjs.map +1 -1
- package/dist/esm/views/ganttMath.native.js +106 -4
- package/dist/esm/views/ganttMath.native.js.map +1 -1
- package/dist/esm/views/index.mjs +2 -2
- package/dist/esm/views/index.mjs.map +1 -1
- package/dist/esm/views/index.native.js +2 -2
- package/dist/esm/views/index.native.js.map +1 -1
- package/dist/esm/views/kanbanDnd.native.js.map +1 -1
- package/dist/esm/views/treeViewDnd.native.js.map +1 -1
- package/dist/esm/views/treeViewLayout.native.js.map +1 -1
- package/dist/esm/views/treeViewMotion.native.js.map +1 -1
- package/dist/jsx/Accordion/index.mjs +4 -0
- package/dist/jsx/Accordion/index.mjs.map +1 -1
- package/dist/jsx/Accordion/index.native.js +4 -0
- package/dist/jsx/Accordion/index.native.js.map +1 -1
- package/dist/jsx/AnimateHeight/index.mjs +29 -2
- package/dist/jsx/AnimateHeight/index.mjs.map +1 -1
- package/dist/jsx/AnimateHeight/index.native.js +30 -2
- package/dist/jsx/AnimateHeight/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/Collapsible.mjs +23 -0
- package/dist/jsx/Collapsible.mjs.map +1 -0
- package/dist/jsx/Collapsible.native.js +56 -0
- package/dist/jsx/Collapsible.native.js.map +1 -0
- 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/Pagination.mjs +28 -9
- package/dist/jsx/Pagination.mjs.map +1 -1
- package/dist/jsx/Pagination.native.js +28 -9
- package/dist/jsx/Pagination.native.js.map +1 -1
- package/dist/jsx/Tabs/index.mjs +145 -91
- package/dist/jsx/Tabs/index.mjs.map +1 -1
- package/dist/jsx/Tabs/index.native.js +187 -123
- 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/knobImmuneExports.mjs +0 -1
- package/dist/jsx/knobImmuneExports.mjs.map +1 -1
- package/dist/jsx/knobImmuneExports.native.js +0 -1
- package/dist/jsx/knobImmuneExports.native.js.map +1 -1
- package/dist/jsx/layouts/PaneScaffold.mjs +97 -42
- package/dist/jsx/layouts/PaneScaffold.mjs.map +1 -1
- package/dist/jsx/layouts/PaneScaffold.native.js +97 -41
- package/dist/jsx/layouts/PaneScaffold.native.js.map +1 -1
- package/dist/jsx/layouts/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/tamagui.mjs +2 -1
- package/dist/jsx/tamagui.mjs.map +1 -1
- package/dist/jsx/tamagui.native.js +2 -1
- package/dist/jsx/tamagui.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/Accordion/index.tsx +7 -1
- package/src/AnimateHeight/AnimateHeight.native.spec.tsx +51 -0
- package/src/AnimateHeight/index.tsx +30 -5
- 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/Collapsible.tsx +23 -0
- 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/Pagination.simple.spec.tsx +23 -0
- package/src/Pagination.stories.tsx +8 -0
- package/src/Pagination.tsx +27 -10
- package/src/Panel.stories.tsx +1 -1
- package/src/SortableList/SortableList.spec.tsx +3 -3
- package/src/Tabs/Tabs.bandColor.spec.tsx +23 -0
- package/src/Tabs/Tabs.native.spec.tsx +35 -0
- package/src/Tabs/Tabs.spec.tsx +91 -1
- package/src/Tabs/Tabs.stories.tsx +36 -1
- package/src/Tabs/index.tsx +272 -187
- 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/disclosureForm.spec.tsx +57 -0
- package/src/disclosureNativeProps.spec.tsx +35 -0
- 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/knobImmuneExports.ts +0 -2
- 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/primitives.spec.tsx +19 -4
- package/src/shared/useKeyboardInset.native.ts +43 -0
- package/src/shared/useKeyboardInset.ts +2 -41
- package/src/tamagui.spec.ts +63 -0
- package/src/tamagui.ts +3 -1
- 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/Accordion/index.d.ts +2 -0
- package/types/Accordion/index.d.ts.map +1 -1
- package/types/AnimateHeight/index.d.ts +3 -4
- package/types/AnimateHeight/index.d.ts.map +1 -1
- package/types/Button.d.ts +12 -2
- package/types/Button.d.ts.map +1 -1
- package/types/Card.d.ts.map +1 -1
- package/types/CardFooter.d.ts +2 -1
- package/types/CardFooter.d.ts.map +1 -1
- package/types/Collapsible.d.ts +19 -0
- package/types/Collapsible.d.ts.map +1 -0
- 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/Pagination.d.ts +1 -1
- package/types/Pagination.d.ts.map +1 -1
- package/types/Tabs/index.d.ts +7 -3
- 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/knobImmuneExports.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/tamagui.d.ts +2 -1
- package/types/tamagui.d.ts.map +1 -1
- 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/primitives.spec.tsx
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* MPO-21 G1-G4, G6 — five primitives the house barrel could not express.
|
|
5
5
|
*
|
|
6
6
|
* G1 Collapsible / G2 LinearGradient / G3 VisuallyHidden / G4 Unspaced are
|
|
7
|
-
* knob-immune
|
|
7
|
+
* knob-immune primitives. Collapsible adds safe form-button defaults. G6 AlertDialogContent is a
|
|
8
8
|
* house surface: `unstyled` drops Tamagui's baked elevate chrome so the
|
|
9
9
|
* overlay elevation token is the only surface source.
|
|
10
10
|
*/
|
|
@@ -20,11 +20,11 @@ import { AlertDialogContent, AlertDialogOverlay } from "./surfaces";
|
|
|
20
20
|
afterEach(cleanup);
|
|
21
21
|
|
|
22
22
|
describe("MPO-21 G1-G4 — knob-immune primitives on the house barrel", () => {
|
|
23
|
-
it("
|
|
24
|
-
expect(pkg.Collapsible).toBe(tamagui.Collapsible);
|
|
23
|
+
it("isolates the safe Collapsible adapter and preserves other primitives", () => {
|
|
24
|
+
expect(pkg.Collapsible).not.toBe(tamagui.Collapsible);
|
|
25
25
|
expect(pkg.Unspaced).toBe(tamagui.Unspaced);
|
|
26
26
|
expect(pkg.VisuallyHidden).toBe(tamagui.VisuallyHidden);
|
|
27
|
-
expect(pkg.Collapsible.Trigger).toBe(tamagui.Collapsible.Trigger);
|
|
27
|
+
expect(pkg.Collapsible.Trigger).not.toBe(tamagui.Collapsible.Trigger);
|
|
28
28
|
expect(pkg.Collapsible.Content).toBe(tamagui.Collapsible.Content);
|
|
29
29
|
});
|
|
30
30
|
|
|
@@ -33,6 +33,21 @@ describe("MPO-21 G1-G4 — knob-immune primitives on the house barrel", () => {
|
|
|
33
33
|
expect(pkg.LinearGradient).toBe(tamaguiLinearGradient.LinearGradient);
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
+
it("leaves the raw trigger untouched while giving the public trigger a safe default", () => {
|
|
37
|
+
const result = renderWithProviders(
|
|
38
|
+
<>
|
|
39
|
+
<tamagui.Collapsible>
|
|
40
|
+
<tamagui.Collapsible.Trigger>Raw</tamagui.Collapsible.Trigger>
|
|
41
|
+
</tamagui.Collapsible>
|
|
42
|
+
<pkg.Collapsible>
|
|
43
|
+
<pkg.Collapsible.Trigger>Safe</pkg.Collapsible.Trigger>
|
|
44
|
+
</pkg.Collapsible>
|
|
45
|
+
</>,
|
|
46
|
+
);
|
|
47
|
+
expect(result.getByRole("button", { name: "Raw" }).getAttribute("type")).toBeNull();
|
|
48
|
+
expect(result.getByRole("button", { name: "Safe" }).getAttribute("type")).toBe("button");
|
|
49
|
+
});
|
|
50
|
+
|
|
36
51
|
it("renders Collapsible open with trigger and content", () => {
|
|
37
52
|
const { getByText } = renderWithProviders(
|
|
38
53
|
<pkg.Collapsible defaultOpen>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How many points of the native screen the software keyboard currently covers.
|
|
3
|
+
*
|
|
4
|
+
* A sheet that ignores this draws its frame UNDER the keyboard: the last row
|
|
5
|
+
* is sliced mid-glyph, the rounded top edge lands on top of the autocomplete
|
|
6
|
+
* suggestion strip, and the field being typed into can be occluded by it
|
|
7
|
+
* (MPO-64). KeyboardAvoidingView is not enough inside a `Modal` — it pads the
|
|
8
|
+
* container but the sheet keeps whatever fixed height it was given, so it
|
|
9
|
+
* simply overflows off the top instead of shrinking.
|
|
10
|
+
*
|
|
11
|
+
* The number comes from the platform, never from a constant: the suggestion
|
|
12
|
+
* strip is exactly the band that overlapped, and its height varies with the
|
|
13
|
+
* field, the language and whether QuickType is on.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { useEffect, useState } from "react";
|
|
17
|
+
import { Dimensions, Keyboard, Platform } from "react-native";
|
|
18
|
+
|
|
19
|
+
export function useKeyboardInset(): number {
|
|
20
|
+
const [inset, setInset] = useState(0);
|
|
21
|
+
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
// iOS fires the *Will* pair one frame before the animation, so the sheet
|
|
24
|
+
// resizes with the keyboard rather than after it. Android has no *Will*.
|
|
25
|
+
const showEvent = Platform.OS === "ios" ? "keyboardWillChangeFrame" : "keyboardDidShow";
|
|
26
|
+
const hideEvent = Platform.OS === "ios" ? "keyboardWillHide" : "keyboardDidHide";
|
|
27
|
+
|
|
28
|
+
const show = Keyboard.addListener(showEvent, (event) => {
|
|
29
|
+
const screen = event?.endCoordinates;
|
|
30
|
+
if (!screen) return;
|
|
31
|
+
const windowHeight = Dimensions.get("window").height;
|
|
32
|
+
setInset(Math.max(0, Math.round(windowHeight - screen.screenY)));
|
|
33
|
+
});
|
|
34
|
+
const hide = Keyboard.addListener(hideEvent, () => setInset(0));
|
|
35
|
+
|
|
36
|
+
return () => {
|
|
37
|
+
show.remove();
|
|
38
|
+
hide.remove();
|
|
39
|
+
};
|
|
40
|
+
}, []);
|
|
41
|
+
|
|
42
|
+
return inset;
|
|
43
|
+
}
|
|
@@ -1,43 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* How many points of the screen the software keyboard currently covers.
|
|
3
|
-
*
|
|
4
|
-
* A sheet that ignores this draws its frame UNDER the keyboard: the last row
|
|
5
|
-
* is sliced mid-glyph, the rounded top edge lands on top of the autocomplete
|
|
6
|
-
* suggestion strip, and the field being typed into can be occluded by it
|
|
7
|
-
* (MPO-64). KeyboardAvoidingView is not enough inside a `Modal` — it pads the
|
|
8
|
-
* container but the sheet keeps whatever fixed height it was given, so it
|
|
9
|
-
* simply overflows off the top instead of shrinking.
|
|
10
|
-
*
|
|
11
|
-
* The number comes from the platform, never from a constant: the suggestion
|
|
12
|
-
* strip is exactly the band that overlapped, and its height varies with the
|
|
13
|
-
* field, the language and whether QuickType is on.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import { useEffect, useState } from "react";
|
|
17
|
-
import { Dimensions, Keyboard, Platform } from "react-native";
|
|
18
|
-
|
|
1
|
+
/** Web overlays use the browser viewport; native overlays measure the keyboard band. */
|
|
19
2
|
export function useKeyboardInset(): number {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
// iOS fires the *Will* pair one frame before the animation, so the sheet
|
|
24
|
-
// resizes with the keyboard rather than after it. Android has no *Will*.
|
|
25
|
-
const showEvent = Platform.OS === "ios" ? "keyboardWillChangeFrame" : "keyboardDidShow";
|
|
26
|
-
const hideEvent = Platform.OS === "ios" ? "keyboardWillHide" : "keyboardDidHide";
|
|
27
|
-
|
|
28
|
-
const show = Keyboard.addListener(showEvent, (event) => {
|
|
29
|
-
const screen = event?.endCoordinates;
|
|
30
|
-
if (!screen) return;
|
|
31
|
-
const windowHeight = Dimensions.get("window").height;
|
|
32
|
-
setInset(Math.max(0, Math.round(windowHeight - screen.screenY)));
|
|
33
|
-
});
|
|
34
|
-
const hide = Keyboard.addListener(hideEvent, () => setInset(0));
|
|
35
|
-
|
|
36
|
-
return () => {
|
|
37
|
-
show.remove();
|
|
38
|
-
hide.remove();
|
|
39
|
-
};
|
|
40
|
-
}, []);
|
|
41
|
-
|
|
42
|
-
return inset;
|
|
3
|
+
return 0;
|
|
43
4
|
}
|
package/src/tamagui.spec.ts
CHANGED
|
@@ -16,9 +16,13 @@
|
|
|
16
16
|
* 4. House shadows (Tabs, Tooltip, Card, Toast, …) must stay the house
|
|
17
17
|
* versions, not the tamagui primitives.
|
|
18
18
|
*/
|
|
19
|
+
import { readdirSync, readFileSync } from "node:fs";
|
|
20
|
+
import { join } from "node:path";
|
|
19
21
|
import * as tamagui from "tamagui";
|
|
22
|
+
import * as tamaguiLinearGradient from "tamagui/linear-gradient";
|
|
20
23
|
import { describe, expect, it } from "vitest";
|
|
21
24
|
import * as pkg from "./index";
|
|
25
|
+
import * as houseTamagui from "./tamagui";
|
|
22
26
|
|
|
23
27
|
const EXCLUDED_BARE_NAMES = [
|
|
24
28
|
"Checkbox",
|
|
@@ -44,12 +48,19 @@ const ALLOWLIST_VALUE_NAMES = [
|
|
|
44
48
|
// barrel and had been red ever since. MPO-78: CI runs `turbo run build`
|
|
45
49
|
// only, so nothing caught it.)
|
|
46
50
|
"Circle",
|
|
51
|
+
// MPO-21 G1 / G3 / G4. Restored by MPO-148; MPO-169 locks them here so a
|
|
52
|
+
// later Adapt-style rewrite cannot drop them without this spec going red.
|
|
53
|
+
// LinearGradient (G2) is not on the main tamagui barrel — see the dedicated
|
|
54
|
+
// assertion below rather than this identity check.
|
|
55
|
+
"Collapsible",
|
|
47
56
|
"Group",
|
|
48
57
|
"ListItem",
|
|
49
58
|
"ScrollView",
|
|
50
59
|
"Spacer",
|
|
51
60
|
"Square",
|
|
61
|
+
"Unspaced",
|
|
52
62
|
"View",
|
|
63
|
+
"VisuallyHidden",
|
|
53
64
|
"XGroup",
|
|
54
65
|
"XStack",
|
|
55
66
|
"YGroup",
|
|
@@ -205,8 +216,60 @@ describe("curated tamagui surface", () => {
|
|
|
205
216
|
).toBe((tamagui as Record<string, unknown>)[name]);
|
|
206
217
|
}
|
|
207
218
|
});
|
|
219
|
+
|
|
220
|
+
it("exports LinearGradient from tamagui/linear-gradient, not the main tamagui barrel", () => {
|
|
221
|
+
expect((tamagui as Record<string, unknown>).LinearGradient).toBeUndefined();
|
|
222
|
+
expect(houseTamagui.LinearGradient).toBe(tamaguiLinearGradient.LinearGradient);
|
|
223
|
+
expect(pkg.LinearGradient).toBe(tamaguiLinearGradient.LinearGradient);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it("every Components story import from ./tamagui is a live barrel export (MPO-169)", () => {
|
|
227
|
+
const exported = new Set(Object.keys(houseTamagui));
|
|
228
|
+
const missing: string[] = [];
|
|
229
|
+
for (const file of walkStoryFiles(import.meta.dirname)) {
|
|
230
|
+
for (const name of namedValueImportsFromHouseTamagui(readFileSync(file, "utf8"))) {
|
|
231
|
+
if (!exported.has(name)) {
|
|
232
|
+
missing.push(`${file.slice(import.meta.dirname.length + 1)}:${name}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
expect(
|
|
237
|
+
missing,
|
|
238
|
+
`stories import names ./tamagui.ts does not export: ${missing.join(", ")}`,
|
|
239
|
+
).toEqual([]);
|
|
240
|
+
});
|
|
208
241
|
});
|
|
209
242
|
|
|
243
|
+
function walkStoryFiles(dir: string): string[] {
|
|
244
|
+
const out: string[] = [];
|
|
245
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
246
|
+
const path = join(dir, entry.name);
|
|
247
|
+
if (entry.isDirectory()) out.push(...walkStoryFiles(path));
|
|
248
|
+
else if (/\.stories\.tsx?$/.test(entry.name)) out.push(path);
|
|
249
|
+
}
|
|
250
|
+
return out;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function namedValueImportsFromHouseTamagui(src: string): string[] {
|
|
254
|
+
const names: string[] = [];
|
|
255
|
+
const re = /import\s+(type\s+)?\{([^}]+)\}\s+from\s+["']\.\/tamagui["']/g;
|
|
256
|
+
for (const match of src.matchAll(re)) {
|
|
257
|
+
const wholeClauseIsType = Boolean(match[1]);
|
|
258
|
+
for (const raw of match[2].split(",")) {
|
|
259
|
+
const part = raw.trim();
|
|
260
|
+
if (!part) continue;
|
|
261
|
+
if (wholeClauseIsType || /^type\s/.test(part)) continue;
|
|
262
|
+
names.push(
|
|
263
|
+
part
|
|
264
|
+
.replace(/^type\s+/, "")
|
|
265
|
+
.split(/\s+as\s+/)[0]
|
|
266
|
+
.trim(),
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return names;
|
|
271
|
+
}
|
|
272
|
+
|
|
210
273
|
// ---------------------------------------------------------------------------
|
|
211
274
|
// Type-level locks (checked by `tsc --noEmit`, not vitest): excluded Props
|
|
212
275
|
// types must not be re-exported either, and allowlisted types must exist.
|
package/src/tamagui.ts
CHANGED
|
@@ -30,7 +30,6 @@
|
|
|
30
30
|
// quiet = opacity 0.5). Raw stays reachable as TamaguiSeparator below.
|
|
31
31
|
export {
|
|
32
32
|
Circle,
|
|
33
|
-
Collapsible,
|
|
34
33
|
Group,
|
|
35
34
|
ListItem,
|
|
36
35
|
ScrollView,
|
|
@@ -175,3 +174,6 @@ export {
|
|
|
175
174
|
SizableText as TamaguiSizableText,
|
|
176
175
|
Text as TamaguiText,
|
|
177
176
|
} from "tamagui";
|
|
177
|
+
|
|
178
|
+
// Safe disclosure button defaults around the unpainted compound.
|
|
179
|
+
export { Collapsible } from "./Collapsible";
|
|
@@ -8,7 +8,8 @@ import {
|
|
|
8
8
|
UsersIcon,
|
|
9
9
|
} from "@phosphor-icons/react";
|
|
10
10
|
import type { Meta } from "@storybook/react-native-web-vite";
|
|
11
|
-
import {
|
|
11
|
+
import { YStack } from "tamagui";
|
|
12
|
+
import { Dashboard, KPICard, type DashboardWidget } from "./Dashboard";
|
|
12
13
|
|
|
13
14
|
const iconSize = 16;
|
|
14
15
|
|
|
@@ -165,6 +166,42 @@ const meta: Meta = {
|
|
|
165
166
|
|
|
166
167
|
export default meta;
|
|
167
168
|
|
|
169
|
+
export const TrendSentiment = {
|
|
170
|
+
render: () => (
|
|
171
|
+
<YStack width="100%" maxWidth={360} gap="$3">
|
|
172
|
+
<KPICard
|
|
173
|
+
config={{
|
|
174
|
+
id: "improving",
|
|
175
|
+
title: "Improving revenue",
|
|
176
|
+
value: 120,
|
|
177
|
+
trend: "up",
|
|
178
|
+
trendValue: "+12%",
|
|
179
|
+
goodDirection: "up",
|
|
180
|
+
}}
|
|
181
|
+
/>
|
|
182
|
+
<KPICard
|
|
183
|
+
config={{
|
|
184
|
+
id: "worsening",
|
|
185
|
+
title: "Worsening revenue",
|
|
186
|
+
value: 96,
|
|
187
|
+
trend: "down",
|
|
188
|
+
trendValue: "-4%",
|
|
189
|
+
goodDirection: "up",
|
|
190
|
+
}}
|
|
191
|
+
/>
|
|
192
|
+
<KPICard
|
|
193
|
+
config={{
|
|
194
|
+
id: "undeclared",
|
|
195
|
+
title: "Undeclared sentiment",
|
|
196
|
+
value: 102,
|
|
197
|
+
trend: "up",
|
|
198
|
+
trendValue: "2%",
|
|
199
|
+
}}
|
|
200
|
+
/>
|
|
201
|
+
</YStack>
|
|
202
|
+
),
|
|
203
|
+
};
|
|
204
|
+
|
|
168
205
|
export const Default = {
|
|
169
206
|
name: "Main",
|
|
170
207
|
render: () => (
|
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
|
+
});
|