@multiplatform.one/components 7.7.4 → 7.7.6
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.native.js.map +1 -1
- 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.native.js.map +1 -1
- package/dist/cjs/DotIndicator/index.native.js.map +1 -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.native.js +1 -1
- 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 +144 -91
- package/dist/cjs/Tabs/index.native.js +186 -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.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.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.native.js.map +1 -1
- package/dist/cjs/charts/BarChart.native.js.map +1 -1
- package/dist/cjs/charts/ChartSurface.native.js.map +1 -1
- package/dist/cjs/charts/LineChart.native.js.map +1 -1
- package/dist/cjs/charts/PieChart.native.js.map +1 -1
- package/dist/cjs/charts/Sparkline.native.js.map +1 -1
- 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.native.js.map +1 -1
- package/dist/cjs/charts/math.native.js.map +1 -1
- package/dist/cjs/charts/series.native.js.map +1 -1
- 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.native.js +6 -6
- 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.native.js.map +1 -1
- package/dist/cjs/feedback/NotifyHost.native.js +2 -2
- package/dist/cjs/feedback/NotifyHost.native.js.map +1 -1
- package/dist/cjs/feedback/copy.native.js.map +1 -1
- package/dist/cjs/feedback/index.native.js.map +1 -1
- package/dist/cjs/feedback/notify.native.js.map +1 -1
- package/dist/cjs/feedback/route.native.js.map +1 -1
- 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.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.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.native.js +3 -3
- package/dist/cjs/layouts/index.native.js.map +1 -1
- 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.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.native.js +1 -1
- package/dist/cjs/views/Dashboard.native.js.map +1 -1
- package/dist/cjs/views/Gantt.native.js +1 -1
- 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.native.js.map +1 -1
- package/dist/cjs/views/index.native.js +1 -1
- 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.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.native.js.map +1 -1
- package/dist/esm/DotIndicator/index.native.js.map +1 -1
- 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.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 +144 -91
- package/dist/esm/Tabs/index.mjs.map +1 -1
- package/dist/esm/Tabs/index.native.js +186 -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.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.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.native.js.map +1 -1
- package/dist/esm/charts/BarChart.native.js.map +1 -1
- package/dist/esm/charts/ChartSurface.native.js.map +1 -1
- package/dist/esm/charts/LineChart.native.js.map +1 -1
- package/dist/esm/charts/PieChart.native.js.map +1 -1
- package/dist/esm/charts/Sparkline.native.js.map +1 -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.native.js.map +1 -1
- package/dist/esm/charts/math.native.js.map +1 -1
- package/dist/esm/charts/series.native.js.map +1 -1
- 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.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.native.js.map +1 -1
- package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
- package/dist/esm/feedback/copy.native.js.map +1 -1
- package/dist/esm/feedback/index.native.js.map +1 -1
- package/dist/esm/feedback/notify.native.js.map +1 -1
- package/dist/esm/feedback/route.native.js.map +1 -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.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.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.native.js.map +1 -1
- 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.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.native.js.map +1 -1
- 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.native.js.map +1 -1
- 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/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/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 +144 -91
- package/dist/jsx/Tabs/index.mjs.map +1 -1
- package/dist/jsx/Tabs/index.native.js +186 -123
- package/dist/jsx/Tabs/index.native.js.map +1 -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/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/package.json +9 -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/Collapsible.tsx +23 -0
- package/src/Pagination.simple.spec.tsx +23 -0
- package/src/Pagination.stories.tsx +8 -0
- package/src/Pagination.tsx +27 -10
- package/src/Tabs/Tabs.bandColor.spec.tsx +23 -0
- package/src/Tabs/Tabs.native.spec.tsx +35 -0
- package/src/Tabs/Tabs.spec.tsx +51 -1
- package/src/Tabs/Tabs.stories.tsx +27 -1
- package/src/Tabs/index.tsx +266 -187
- package/src/disclosureForm.spec.tsx +57 -0
- package/src/disclosureNativeProps.spec.tsx +35 -0
- package/src/knobImmuneExports.ts +0 -2
- package/src/primitives.spec.tsx +19 -4
- package/src/tamagui.ts +3 -1
- 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/Collapsible.d.ts +19 -0
- package/types/Collapsible.d.ts.map +1 -0
- 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/knobImmuneExports.d.ts.map +1 -1
- package/types/tamagui.d.ts +2 -1
- package/types/tamagui.d.ts.map +1 -1
package/dist/jsx/tamagui.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Circle","
|
|
1
|
+
{"version":3,"names":["Circle","Group","ListItem","ScrollView","Spacer","Square","Unspaced","View","VisuallyHidden","XGroup","XStack","YGroup","YStack","LinearGradient","AlertDialog","Dialog","Popover","Portal","PortalProvider","Sheet","AnimatePresence","TamaguiProvider","Theme","useControllableState","useDidFinishSSR","useEvent","useMedia","usePropsAndStyle","useTheme","useThemeName","createStyledContext","getToken","getTokens","getTokenValue","isClient","isWeb","styled","withStaticProperties","Button","Checkbox","Input","Label","Progress","RadioGroup","Select","Separator","Slider","Spinner","Switch","TextArea","ToggleGroup","Anchor","H1","H2","H3","H4","H5","H6","Heading","Paragraph","SizableText","Text","Collapsible"],"sources":["../../src/tamagui.ts"],"sourcesContent":[null],"mappings":"AA8BA,SACEA,MAAA,EACAC,KAAA,EACAC,QAAA,EACAC,UAAA,EACAC,MAAA,EACAC,MAAA,EACAC,QAAA,EACAC,IAAA,EACAC,cAAA,EACAC,MAAA,EACAC,MAAA,EACAC,MAAA,EACAC,MAAA,QACK;AAIP,SAASC,cAAA,QAAsB;AA6B/B,SAASC,WAAA,EAAaC,MAAA,EAAQC,OAAA,EAASC,MAAA,EAAQC,cAAA,EAAgBC,KAAA,QAAa;AAG5E,SAASC,eAAA,EAAiBC,eAAA,EAAiBC,KAAA,QAAa;AAGxD,SACEC,oBAAA,EACAC,eAAA,EACAC,QAAA,EACAC,QAAA,EACAC,gBAAA,EACAC,QAAA,EACAC,YAAA,QACK;AAGP,SACEC,mBAAA,EACAC,QAAA,EACAC,SAAA,EACAC,aAAA,EACAC,QAAA,EACAC,KAAA,EACAC,MAAA,EACAC,oBAAA,QACK;AAuCP,SACYC,MAAA,EACEC,QAAA,EACHC,KAAA,EACAC,KAAA,EACGC,QAAA,EACEC,UAAA,EACJC,MAAA,EACGC,SAAA,EACHC,MAAA,EACCC,OAAA,EACDC,MAAA,EACEC,QAAA,EACGC,WAAA,QACV;AAOP,SACYC,MAAA,EACJC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACKC,OAAA,EACEC,SAAA,EACEC,WAAA,EACPC,IAAA,QACH;AAGP,SAASC,WAAA,QAAmB","ignoreList":[]}
|
|
@@ -27,7 +27,7 @@ __export(tamagui_exports, {
|
|
|
27
27
|
AlertDialog: () => import_tamagui2.AlertDialog,
|
|
28
28
|
AnimatePresence: () => import_tamagui3.AnimatePresence,
|
|
29
29
|
Circle: () => import_tamagui.Circle,
|
|
30
|
-
Collapsible: () =>
|
|
30
|
+
Collapsible: () => import_Collapsible.Collapsible,
|
|
31
31
|
Dialog: () => import_tamagui2.Dialog,
|
|
32
32
|
Group: () => import_tamagui.Group,
|
|
33
33
|
LinearGradient: () => import_linear_gradient.LinearGradient,
|
|
@@ -97,4 +97,5 @@ var import_tamagui4 = require("tamagui");
|
|
|
97
97
|
var import_tamagui5 = require("tamagui");
|
|
98
98
|
var import_tamagui6 = require("tamagui");
|
|
99
99
|
var import_tamagui7 = require("tamagui");
|
|
100
|
+
var import_Collapsible = require("./Collapsible.native.js");
|
|
100
101
|
//# sourceMappingURL=tamagui.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","tamagui_exports","AlertDialog","import_tamagui2","AnimatePresence","import_tamagui3","Circle","import_tamagui","Collapsible","Dialog","Group","LinearGradient","import_linear_gradient","ListItem","Popover","Portal","PortalProvider","ScrollView","Sheet","Spacer","Square","TamaguiAnchor","import_tamagui7","Anchor","TamaguiButton","import_tamagui6","Button","TamaguiCheckbox","Checkbox","TamaguiH1","H1","TamaguiH2","H2","TamaguiH3","H3","TamaguiH4","H4","TamaguiH5","H5","TamaguiH6","H6","TamaguiHeading","Heading","TamaguiInput","Input","TamaguiLabel","Label","TamaguiParagraph","Paragraph","TamaguiProgress","Progress","TamaguiProvider","TamaguiRadioGroup","RadioGroup","TamaguiSelect","Select","TamaguiSeparator","Separator","TamaguiSizableText","SizableText","TamaguiSlider","Slider","TamaguiSpinner","Spinner","TamaguiSwitch","Switch","TamaguiText","Text","TamaguiTextArea","TextArea","TamaguiToggleGroup","ToggleGroup","Theme","Unspaced","View","VisuallyHidden","XGroup","XStack"],"sources":["../../src/tamagui.ts"],"sourcesContent":[null],"mappings":"AA8BA;;AAAA,IACEA,SAAA,GAAAC,MAAA,CAAAC,cAAA;AAAA,IACAC,gBAAA,GAAAF,MAAA,CAAAG,wBAAA;AAAA,IACAC,iBAAA,GAAAJ,MAAA,CAAAK,mBAAA;AAAA,IACAC,YAAA,GAAAN,MAAA,CAAAO,SAAA,CAAAC,cAAA;AAAA,IACAC,QAAA,GAAAA,CAAAC,MAAA,EAAAC,GAAA;EACA,SAAAC,IAAA,IAAAD,GAAA,EACAZ,SAAA,CAAAW,MAAA,EAAAE,IAAA;IAAAC,GAAA,EAAAF,GAAA,CAAAC,IAAA;IAAAE,UAAA;EAAA;AAAA;AACA,IACAC,WAAA,GAAAA,CAAAC,EAAA,EAAAC,IAAA,EAAAC,MAAA,EAAAC,IAAA;EACA,IAAAF,IAAA,WAAAA,IAAA,wBAAAA,IAAA;IACA,SAAAG,GAAA,IAAAhB,iBAAA,CAAAa,IAAA,GACA,KAAAX,YAAA,CAAAe,IAAA,CAAAL,EAAA,EAAAI,GAAA,KAAAA,GAAA,KAAAF,MAAA,EACAnB,SAAA,CAAAiB,EAAA,EAAAI,GAAA;MAAAP,GAAA,EAAAA,CAAA,KAAAI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","tamagui_exports","AlertDialog","import_tamagui2","AnimatePresence","import_tamagui3","Circle","import_tamagui","Collapsible","import_Collapsible","Dialog","Group","LinearGradient","import_linear_gradient","ListItem","Popover","Portal","PortalProvider","ScrollView","Sheet","Spacer","Square","TamaguiAnchor","import_tamagui7","Anchor","TamaguiButton","import_tamagui6","Button","TamaguiCheckbox","Checkbox","TamaguiH1","H1","TamaguiH2","H2","TamaguiH3","H3","TamaguiH4","H4","TamaguiH5","H5","TamaguiH6","H6","TamaguiHeading","Heading","TamaguiInput","Input","TamaguiLabel","Label","TamaguiParagraph","Paragraph","TamaguiProgress","Progress","TamaguiProvider","TamaguiRadioGroup","RadioGroup","TamaguiSelect","Select","TamaguiSeparator","Separator","TamaguiSizableText","SizableText","TamaguiSlider","Slider","TamaguiSpinner","Spinner","TamaguiSwitch","Switch","TamaguiText","Text","TamaguiTextArea","TextArea","TamaguiToggleGroup","ToggleGroup","Theme","Unspaced","View","VisuallyHidden","XGroup","XStack"],"sources":["../../src/tamagui.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/components",
|
|
3
|
-
"version": "7.7.
|
|
3
|
+
"version": "7.7.6",
|
|
4
4
|
"description": "multiplatform.one ui components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"components",
|
|
@@ -75,11 +75,11 @@
|
|
|
75
75
|
"link": "^2.1.2",
|
|
76
76
|
"shiki": "^4.0.2",
|
|
77
77
|
"tamagui": "2.7.6",
|
|
78
|
-
"@multiplatform.one/forms": "7.7.
|
|
79
|
-
"@multiplatform.one/i18n": "7.7.
|
|
80
|
-
"@multiplatform.one/platform": "7.7.
|
|
81
|
-
"@multiplatform.one/router": "7.7.
|
|
82
|
-
"@multiplatform.one/theme": "7.7.
|
|
78
|
+
"@multiplatform.one/forms": "7.7.6",
|
|
79
|
+
"@multiplatform.one/i18n": "7.7.6",
|
|
80
|
+
"@multiplatform.one/platform": "7.7.6",
|
|
81
|
+
"@multiplatform.one/router": "7.7.6",
|
|
82
|
+
"@multiplatform.one/theme": "7.7.6"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"@tamagui/build": "2.7.6",
|
|
@@ -99,9 +99,9 @@
|
|
|
99
99
|
"react-native-svg": "15.15.4",
|
|
100
100
|
"react-native-web": "^0.21.2",
|
|
101
101
|
"vitest": "^4.1.5",
|
|
102
|
-
"@multiplatform.one/config": "7.7.
|
|
103
|
-
"@multiplatform.one/storybook": "7.7.
|
|
104
|
-
"@multiplatform.one/test-utils": "7.7.
|
|
102
|
+
"@multiplatform.one/config": "7.7.6",
|
|
103
|
+
"@multiplatform.one/storybook": "7.7.6",
|
|
104
|
+
"@multiplatform.one/test-utils": "7.7.6"
|
|
105
105
|
},
|
|
106
106
|
"peerDependencies": {
|
|
107
107
|
"@mdx-js/mdx": "^3.1.1",
|
package/src/Accordion/index.tsx
CHANGED
|
@@ -114,6 +114,8 @@ export interface AccordionItemProps extends StackProps {
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
export interface AccordionTriggerProps extends Omit<StackProps, "children"> {
|
|
117
|
+
/** Web button intent; disclosure controls do not submit forms by default. */
|
|
118
|
+
type?: "button" | "submit" | "reset";
|
|
117
119
|
/** Header title (string or custom node) */
|
|
118
120
|
children?: ReactNode;
|
|
119
121
|
/** Secondary line under the title */
|
|
@@ -447,7 +449,10 @@ const AccordionItem = forwardRef<TamaguiElement, AccordionItemProps>(function Ac
|
|
|
447
449
|
// ── Trigger (header row) ──────────────────────────────────────
|
|
448
450
|
|
|
449
451
|
const AccordionTrigger = forwardRef<TamaguiElement, AccordionTriggerProps>(
|
|
450
|
-
function AccordionTrigger(
|
|
452
|
+
function AccordionTrigger(
|
|
453
|
+
{ children, description, icon, onFocus, onBlur, type = "button", ...props },
|
|
454
|
+
ref,
|
|
455
|
+
) {
|
|
451
456
|
const { knobProps, control, disabledState } = useAccordionKnobs();
|
|
452
457
|
const { headingLevel } = useContext(AccordionCtx);
|
|
453
458
|
const item = useContext(AccordionItemCtx);
|
|
@@ -502,6 +507,7 @@ const AccordionTrigger = forwardRef<TamaguiElement, AccordionTriggerProps>(
|
|
|
502
507
|
// role="heading" + aria-level for AT parity with an h3.
|
|
503
508
|
<View role="heading" aria-level={headingLevel} margin={0} width="100%">
|
|
504
509
|
<TamaguiAccordion.Trigger
|
|
510
|
+
{...(isWeb ? { type } : {})}
|
|
505
511
|
ref={ref}
|
|
506
512
|
unstyled
|
|
507
513
|
id={item.triggerId}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
2
|
+
import { createRef } from "react";
|
|
3
|
+
import { Text, type TamaguiElement } from "tamagui";
|
|
4
|
+
import { expect, it, vi } from "vitest";
|
|
5
|
+
import { AnimateHeight } from "./index";
|
|
6
|
+
|
|
7
|
+
vi.mock("@multiplatform.one/platform", async (original) => ({
|
|
8
|
+
...(await original<typeof import("@multiplatform.one/platform")>()),
|
|
9
|
+
isWeb: false,
|
|
10
|
+
}));
|
|
11
|
+
|
|
12
|
+
it("opens native content intrinsically without waiting for layout or animation frames", () => {
|
|
13
|
+
const view = renderWithProviders(
|
|
14
|
+
<AnimateHeight open={false} testID="height">
|
|
15
|
+
<Text>Body</Text>
|
|
16
|
+
</AnimateHeight>,
|
|
17
|
+
);
|
|
18
|
+
expect(view.queryByText("Body")).toBeNull();
|
|
19
|
+
view.rerender(
|
|
20
|
+
<AnimateHeight open testID="height">
|
|
21
|
+
<Text>Body</Text>
|
|
22
|
+
</AnimateHeight>,
|
|
23
|
+
);
|
|
24
|
+
expect(view.getByText("Body")).toBeTruthy();
|
|
25
|
+
expect(getComputedStyle(view.getByTestId("height")).height).not.toBe("0px");
|
|
26
|
+
view.rerender(
|
|
27
|
+
<AnimateHeight open={false} testID="height">
|
|
28
|
+
<Text>Body</Text>
|
|
29
|
+
</AnimateHeight>,
|
|
30
|
+
);
|
|
31
|
+
expect(view.queryByText("Body")).toBeNull();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it("keeps native follower updates intrinsic and preserves the outer ref and props", () => {
|
|
35
|
+
const ref = createRef<TamaguiElement>();
|
|
36
|
+
const view = renderWithProviders(
|
|
37
|
+
<AnimateHeight ref={ref} testID="height" padding={7}>
|
|
38
|
+
<Text>First</Text>
|
|
39
|
+
</AnimateHeight>,
|
|
40
|
+
);
|
|
41
|
+
expect(ref.current).toBe(view.getByTestId("height"));
|
|
42
|
+
expect(getComputedStyle(view.getByTestId("height")).padding).toBe("7px");
|
|
43
|
+
view.rerender(
|
|
44
|
+
<AnimateHeight ref={ref} testID="height" padding={7}>
|
|
45
|
+
<Text>Longer updated body</Text>
|
|
46
|
+
</AnimateHeight>,
|
|
47
|
+
);
|
|
48
|
+
expect(view.getByText("Longer updated body")).toBeTruthy();
|
|
49
|
+
expect(getComputedStyle(view.getByTestId("height")).height).not.toBe("0px");
|
|
50
|
+
expect(ref.current).toBe(view.getByTestId("height"));
|
|
51
|
+
});
|
|
@@ -14,10 +14,9 @@ import { View } from "tamagui";
|
|
|
14
14
|
* changes snap no matter what `transition` is set, because height never
|
|
15
15
|
* appears as an interpolable value. This container measures its content
|
|
16
16
|
* (ResizeObserver on web, onLayout on native) and drives a NUMERIC `height`
|
|
17
|
-
* through the house `transition` token. The
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* while mount/unmount sequencing still works on both platforms.
|
|
17
|
+
* through the house `transition` token on web. The RN driver cannot tween
|
|
18
|
+
* layout props (Axiom 4), so native uses intrinsic height while open and
|
|
19
|
+
* unmounts closed content immediately, without waiting for a measurement.
|
|
21
20
|
*
|
|
22
21
|
* Two modes:
|
|
23
22
|
* - follower (no `open` prop): always mounted; height tracks the content's
|
|
@@ -78,7 +77,7 @@ export function settleMs(transition: TransitionProp | undefined): number {
|
|
|
78
77
|
return (ms ?? 600) + 80;
|
|
79
78
|
}
|
|
80
79
|
|
|
81
|
-
|
|
80
|
+
const WebAnimateHeight = forwardRef<TamaguiElement, AnimateHeightProps>(
|
|
82
81
|
function AnimateHeight({ open, children, transition: transitionProp, ...props }, ref) {
|
|
83
82
|
const { knobProps } = useResolvedKnobs();
|
|
84
83
|
// knob transition is undefined under reduced motion / animation="none"
|
|
@@ -235,3 +234,29 @@ export const AnimateHeight = forwardRef<TamaguiElement, AnimateHeightProps>(
|
|
|
235
234
|
);
|
|
236
235
|
},
|
|
237
236
|
);
|
|
237
|
+
|
|
238
|
+
/** Native layout has no height tween, so measurement must not gate visibility. */
|
|
239
|
+
const NativeAnimateHeight = forwardRef<TamaguiElement, AnimateHeightProps>(
|
|
240
|
+
function NativeAnimateHeight({ open, children, ...props }, ref) {
|
|
241
|
+
return (
|
|
242
|
+
<View
|
|
243
|
+
ref={ref}
|
|
244
|
+
overflow="hidden"
|
|
245
|
+
{...(open === false ? { display: "none" as const } : {})}
|
|
246
|
+
{...props}
|
|
247
|
+
>
|
|
248
|
+
{open !== false ? <View flexShrink={0}>{children}</View> : null}
|
|
249
|
+
</View>
|
|
250
|
+
);
|
|
251
|
+
},
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
export const AnimateHeight = forwardRef<TamaguiElement, AnimateHeightProps>(
|
|
255
|
+
function AnimateHeight(props, ref) {
|
|
256
|
+
return isWeb ? (
|
|
257
|
+
<WebAnimateHeight {...props} ref={ref} />
|
|
258
|
+
) : (
|
|
259
|
+
<NativeAnimateHeight {...props} ref={ref} />
|
|
260
|
+
);
|
|
261
|
+
},
|
|
262
|
+
);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { forwardRef, type ComponentProps, type ComponentRef } from "react";
|
|
2
|
+
import { isWeb } from "@multiplatform.one/platform";
|
|
3
|
+
import { Collapsible as TamaguiCollapsible, withStaticProperties } from "tamagui";
|
|
4
|
+
|
|
5
|
+
export type CollapsibleTriggerProps = ComponentProps<typeof TamaguiCollapsible.Trigger> & {
|
|
6
|
+
/** Web button intent; disclosure controls do not submit forms by default. */
|
|
7
|
+
type?: "button" | "submit" | "reset";
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const Trigger = TamaguiCollapsible.Trigger.styleable<CollapsibleTriggerProps>(
|
|
11
|
+
({ type = "button", ...props }, ref) => (
|
|
12
|
+
<TamaguiCollapsible.Trigger {...(isWeb ? { type } : {})} {...props} ref={ref} />
|
|
13
|
+
),
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
// A separate root keeps Tamagui's shared compound untouched while preserving
|
|
17
|
+
// its forwarded ref and content implementation.
|
|
18
|
+
export const Collapsible = withStaticProperties(
|
|
19
|
+
forwardRef<ComponentRef<typeof TamaguiCollapsible>, ComponentProps<typeof TamaguiCollapsible>>(
|
|
20
|
+
(props, ref) => <TamaguiCollapsible {...props} ref={ref} />,
|
|
21
|
+
),
|
|
22
|
+
{ Trigger, Content: TamaguiCollapsible.Content },
|
|
23
|
+
);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
2
|
+
import { fireEvent, screen } from "@testing-library/react";
|
|
3
|
+
import { describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { Pagination } from "./Pagination";
|
|
5
|
+
|
|
6
|
+
describe("simple page navigation", () => {
|
|
7
|
+
it("keeps page context without a numbered window and navigates once", () => {
|
|
8
|
+
const change = vi.fn();
|
|
9
|
+
renderWithProviders(
|
|
10
|
+
<Pagination variant="simple" total={100} page={50} onPageChange={change} />,
|
|
11
|
+
);
|
|
12
|
+
expect(screen.getByText(/50.*100/)).toBeInTheDocument();
|
|
13
|
+
expect(screen.getAllByRole("button")).toHaveLength(2);
|
|
14
|
+
fireEvent.click(screen.getByLabelText("Go to next page"));
|
|
15
|
+
expect(change).toHaveBeenCalledExactlyOnceWith(51);
|
|
16
|
+
});
|
|
17
|
+
it("disables backward navigation on the first page and forward on the last", () => {
|
|
18
|
+
const { rerender } = renderWithProviders(<Pagination variant="simple" total={3} page={1} />);
|
|
19
|
+
expect(screen.getByLabelText("Go to previous page")).toHaveAttribute("aria-disabled", "true");
|
|
20
|
+
rerender(<Pagination variant="simple" total={3} page={3} />);
|
|
21
|
+
expect(screen.getByLabelText("Go to next page")).toHaveAttribute("aria-disabled", "true");
|
|
22
|
+
});
|
|
23
|
+
});
|
package/src/Pagination.tsx
CHANGED
|
@@ -118,7 +118,7 @@ export interface PaginationProps extends Omit<XStackProps, "children" | "onChang
|
|
|
118
118
|
* step) at the pager's large step — see `DotVariant` for the one rule that
|
|
119
119
|
* governs a strip mark's size.
|
|
120
120
|
*/
|
|
121
|
-
variant?: "dots" | "bars" | "numbered";
|
|
121
|
+
variant?: "dots" | "bars" | "numbered" | "simple";
|
|
122
122
|
/** Total number of items across all pages (numbered summary slot) */
|
|
123
123
|
totalItems?: number;
|
|
124
124
|
/** Items per page (numbered summary slot) */
|
|
@@ -235,17 +235,19 @@ export function Pagination({
|
|
|
235
235
|
...(kbFocus === id ? FOCUS_VISIBLE_RING : restRing),
|
|
236
236
|
});
|
|
237
237
|
|
|
238
|
+
const isSimple = variant === "simple";
|
|
238
239
|
const isNumbered = variant === "numbered";
|
|
240
|
+
const isPageNavigation = isNumbered || isSimple;
|
|
239
241
|
|
|
240
242
|
// The two idioms differ in which glyphs the controls take, whether the
|
|
241
243
|
// control is circular, and whether the last step submits — not in structure.
|
|
242
244
|
const canPrev = !disabled && index > 0;
|
|
243
|
-
const canNext =
|
|
245
|
+
const canNext = isPageNavigation
|
|
244
246
|
? !disabled && currentPage < total
|
|
245
247
|
: // dots/bars: an onSubmit makes the last step actionable, so the forward
|
|
246
248
|
// control is not dead there.
|
|
247
249
|
!(disabled || (!isLastStep && index >= total - 1 && !onSubmit));
|
|
248
|
-
const submits = !
|
|
250
|
+
const submits = !isPageNavigation && isLastStep;
|
|
249
251
|
|
|
250
252
|
const items = isNumbered
|
|
251
253
|
? getPaginationItems(total, currentPage, siblingCount, boundaryCount)
|
|
@@ -282,6 +284,7 @@ export function Pagination({
|
|
|
282
284
|
data-pad="panel"
|
|
283
285
|
{...knobProps.panelPadding}
|
|
284
286
|
{...knobProps.gap}
|
|
287
|
+
{...(isSimple ? { paddingHorizontal: 0, minWidth: 0, flexShrink: 1 } : undefined)}
|
|
285
288
|
{...stackProps}
|
|
286
289
|
>
|
|
287
290
|
{isNumbered && showFirstLast && (
|
|
@@ -299,19 +302,31 @@ export function Pagination({
|
|
|
299
302
|
|
|
300
303
|
<Button
|
|
301
304
|
size={knobProps.sizeToken}
|
|
302
|
-
circular={!
|
|
305
|
+
circular={!isPageNavigation}
|
|
303
306
|
chromeless
|
|
304
|
-
icon={
|
|
307
|
+
icon={isPageNavigation ? PrevIcon : PrevArrowIcon}
|
|
305
308
|
onPress={handlePrev}
|
|
306
309
|
disabled={!canPrev}
|
|
307
310
|
// LC-40: the Button's own disabled wash owns the treatment — the
|
|
308
311
|
// legacy opacity 0.3 dim stacked on top of it (double-dim).
|
|
309
|
-
aria-label={
|
|
312
|
+
aria-label={isPageNavigation ? t("Go to previous page") : t("Previous page")}
|
|
310
313
|
onKeyDown={activateOnEnterSpace(handlePrev, canPrev)}
|
|
311
314
|
{...pageControlProps("prev")}
|
|
312
315
|
/>
|
|
313
316
|
|
|
314
|
-
{
|
|
317
|
+
{isSimple ? (
|
|
318
|
+
<Text
|
|
319
|
+
{...knobProps.body}
|
|
320
|
+
color={componentColors.text.primary}
|
|
321
|
+
aria-live="polite"
|
|
322
|
+
userSelect="none"
|
|
323
|
+
numberOfLines={1}
|
|
324
|
+
flexShrink={1}
|
|
325
|
+
minWidth={0}
|
|
326
|
+
>
|
|
327
|
+
{bidiIsolate(withInterp(t("{{page}} of {{total}}"), { page: currentPage, total }))}
|
|
328
|
+
</Text>
|
|
329
|
+
) : isNumbered ? (
|
|
315
330
|
<XStack alignItems="center" {...knobProps.gap}>
|
|
316
331
|
{items.map((item) => {
|
|
317
332
|
if (typeof item !== "number") {
|
|
@@ -374,13 +389,15 @@ export function Pagination({
|
|
|
374
389
|
|
|
375
390
|
<Button
|
|
376
391
|
size={knobProps.sizeToken}
|
|
377
|
-
circular={!
|
|
392
|
+
circular={!isPageNavigation}
|
|
378
393
|
chromeless={!submits}
|
|
379
394
|
theme={submits ? "active" : undefined}
|
|
380
|
-
icon={
|
|
395
|
+
icon={isPageNavigation ? NextIcon : submits ? CheckIcon : NextArrowIcon}
|
|
381
396
|
onPress={handleNext}
|
|
382
397
|
disabled={!canNext}
|
|
383
|
-
aria-label={
|
|
398
|
+
aria-label={
|
|
399
|
+
isPageNavigation ? t("Go to next page") : submits ? t("Submit") : t("Next page")
|
|
400
|
+
}
|
|
384
401
|
onKeyDown={activateOnEnterSpace(handleNext, canNext)}
|
|
385
402
|
{...pageControlProps(submits ? "submit" : "next")}
|
|
386
403
|
/>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
2
|
+
import { describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { Tabs } from "./index";
|
|
4
|
+
|
|
5
|
+
vi.mock("@multiplatform.one/theme", async (importOriginal) => ({
|
|
6
|
+
...(await importOriginal<typeof import("@multiplatform.one/theme")>()),
|
|
7
|
+
useReadableTextOn: () => "#fff",
|
|
8
|
+
}));
|
|
9
|
+
|
|
10
|
+
describe("selected tab ink follows its painted surface", () => {
|
|
11
|
+
it("uses page-surface ink for the band even when contained tint needs white ink", () => {
|
|
12
|
+
const result = renderWithProviders(
|
|
13
|
+
<Tabs variant="band" value="one" items={[{ value: "one", label: "Selected" }]} />,
|
|
14
|
+
);
|
|
15
|
+
expect(result.getByText("Selected").className).toContain("_col-color");
|
|
16
|
+
});
|
|
17
|
+
it("keeps contrasting tint ink for the contained indicator", () => {
|
|
18
|
+
const result = renderWithProviders(
|
|
19
|
+
<Tabs variant="contained" value="one" items={[{ value: "one", label: "Selected" }]} />,
|
|
20
|
+
);
|
|
21
|
+
expect(result.getByText("Selected").className).not.toContain("_col-color");
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
2
|
+
import { describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { Tabs } from "./index";
|
|
4
|
+
|
|
5
|
+
// Exercise the native accessibility branch while retaining the test host renderer.
|
|
6
|
+
// Geometry still requires a native runtime; this test asserts role/name/state only.
|
|
7
|
+
vi.mock("tamagui", async (importOriginal) => ({
|
|
8
|
+
...(await importOriginal<typeof import("tamagui")>()),
|
|
9
|
+
isWeb: false,
|
|
10
|
+
}));
|
|
11
|
+
|
|
12
|
+
describe("native Tabs accessibility contract", () => {
|
|
13
|
+
it("names each button and exposes selected and disabled states", () => {
|
|
14
|
+
const result = renderWithProviders(
|
|
15
|
+
<Tabs
|
|
16
|
+
variant="band"
|
|
17
|
+
value="one"
|
|
18
|
+
items={[
|
|
19
|
+
{ value: "one", label: "One" },
|
|
20
|
+
{ value: "two", label: "Two", disabled: true },
|
|
21
|
+
{ value: "three", label: "Three", accessibilityLabel: "Third destination" },
|
|
22
|
+
]}
|
|
23
|
+
/>,
|
|
24
|
+
);
|
|
25
|
+
const selected = result.getByRole("button", { name: "One" });
|
|
26
|
+
expect(selected).toHaveAttribute("aria-selected", "true");
|
|
27
|
+
const disabled = result.getByRole("button", { name: "Two" });
|
|
28
|
+
expect(disabled).toHaveAttribute("aria-disabled", "true");
|
|
29
|
+
const third = result.getByRole("button", { name: "Three" });
|
|
30
|
+
expect(third).toHaveAttribute("accessibilitylabel", "Third destination");
|
|
31
|
+
expect(third).toHaveAttribute("aria-selected", "false");
|
|
32
|
+
expect(selected).toHaveAttribute("accessibilityrole", "button");
|
|
33
|
+
expect(selected).toHaveAttribute("accessibilitylabel", "One");
|
|
34
|
+
});
|
|
35
|
+
});
|
package/src/Tabs/Tabs.spec.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { fireEvent, screen } from "@testing-library/react";
|
|
1
|
+
import { fireEvent, screen, waitFor } from "@testing-library/react";
|
|
2
2
|
import { Text } from "tamagui";
|
|
3
3
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
4
4
|
import { afterEach, describe, expect, it, vitest } from "vitest";
|
|
@@ -220,6 +220,56 @@ describe("Tabs", () => {
|
|
|
220
220
|
expect(screen.getByRole("tab", { name: "Three" }).tabIndex).toBe(-1);
|
|
221
221
|
});
|
|
222
222
|
|
|
223
|
+
it("navigates the band by keyboard while skipping disabled tabs", async () => {
|
|
224
|
+
renderWithProviders(
|
|
225
|
+
<Tabs items={[...items, { value: "four", label: "Four" }]} variant="band" />,
|
|
226
|
+
);
|
|
227
|
+
const one = screen.getByRole("tab", { name: "One" });
|
|
228
|
+
one.focus();
|
|
229
|
+
fireEvent.keyDown(one, { key: "End" });
|
|
230
|
+
await waitFor(() => expect(screen.getByRole("tab", { name: "Four" })).toHaveFocus());
|
|
231
|
+
fireEvent.keyDown(document.activeElement!, { key: "ArrowLeft" });
|
|
232
|
+
await waitFor(() => expect(screen.getByRole("tab", { name: "Two" })).toHaveFocus());
|
|
233
|
+
fireEvent.keyDown(document.activeElement!, { key: "Home" });
|
|
234
|
+
await waitFor(() => expect(one).toHaveFocus());
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it("keeps manual activation distinct from keyboard focus in a band", async () => {
|
|
238
|
+
renderWithProviders(<Tabs items={items} variant="band" activationMode="manual" />);
|
|
239
|
+
const one = screen.getByRole("tab", { name: "One" });
|
|
240
|
+
const two = screen.getByRole("tab", { name: "Two" });
|
|
241
|
+
one.focus();
|
|
242
|
+
fireEvent.keyDown(one, { key: "ArrowRight" });
|
|
243
|
+
await waitFor(() => expect(two).toHaveFocus());
|
|
244
|
+
expect(two).toHaveAttribute("aria-selected", "false");
|
|
245
|
+
fireEvent.keyDown(two, { key: "Enter" });
|
|
246
|
+
expect(two).toHaveAttribute("aria-selected", "true");
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
it("keeps an enabled entry point when the selected tab is disabled", () => {
|
|
250
|
+
renderWithProviders(<Tabs items={items} value="three" />);
|
|
251
|
+
const stops = screen.getAllByRole("tab").filter((tab) => tab.tabIndex === 0);
|
|
252
|
+
expect(stops).toHaveLength(1);
|
|
253
|
+
expect(stops[0]).toHaveAccessibleName("One");
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
it("renders a flat equal band with named tabs and no scrolling viewport", () => {
|
|
257
|
+
const { container } = renderWithProviders(<Tabs items={items} variant="band" />);
|
|
258
|
+
expect(container.querySelector('[data-tabs-distribution="equal"]')).not.toBeNull();
|
|
259
|
+
expect(container.querySelector('[data-tabs-scroll="true"]')).toBeNull();
|
|
260
|
+
expect(screen.getAllByRole("tab")).toHaveLength(3);
|
|
261
|
+
expect(container.querySelector("[data-tabs-indicator]")).toBeNull();
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
it("lets equal-band chrome shrink inside each allocated tab without horizontal insets", () => {
|
|
265
|
+
renderWithProviders(<Tabs items={items} variant="band" />);
|
|
266
|
+
const chrome = screen.getByRole("tab", { name: "One" }).firstElementChild!;
|
|
267
|
+
expect(chrome.className).toContain("_fs-1");
|
|
268
|
+
expect(chrome.className).toContain("_fb-0px");
|
|
269
|
+
expect(chrome.className).toContain("_pl-0px");
|
|
270
|
+
expect(chrome.className).toContain("_pr-0px");
|
|
271
|
+
});
|
|
272
|
+
|
|
223
273
|
it("ariaLabel overrides the default tablist name", () => {
|
|
224
274
|
renderWithProviders(<Tabs items={items} ariaLabel="Document sections" />);
|
|
225
275
|
expect(screen.getByRole("tablist")).toHaveAttribute("aria-label", "Document sections");
|
|
@@ -26,7 +26,7 @@ const meta: Meta<typeof Tabs> = {
|
|
|
26
26
|
},
|
|
27
27
|
},
|
|
28
28
|
argTypes: {
|
|
29
|
-
variant: { control: "select", options: ["underline", "contained"] },
|
|
29
|
+
variant: { control: "select", options: ["underline", "contained", "band"] },
|
|
30
30
|
size: { control: "select", options: ["$2", "$3", "$4", "$5"] },
|
|
31
31
|
accent: { control: "boolean" },
|
|
32
32
|
error: { control: "boolean" },
|
|
@@ -327,3 +327,29 @@ export const CompactAndSize: Story = {
|
|
|
327
327
|
</YStack>
|
|
328
328
|
),
|
|
329
329
|
};
|
|
330
|
+
|
|
331
|
+
export const EqualBand: Story = {
|
|
332
|
+
render: () => (
|
|
333
|
+
<YStack width={390} maxWidth="100%">
|
|
334
|
+
<Tabs
|
|
335
|
+
variant="band"
|
|
336
|
+
ariaLabel="Sections"
|
|
337
|
+
items={[
|
|
338
|
+
{ value: "overview", label: "Overview" },
|
|
339
|
+
{ value: "activity", label: "Activity" },
|
|
340
|
+
{ value: "resources", label: "Resources" },
|
|
341
|
+
{ value: "reports", label: "Reports" },
|
|
342
|
+
{ value: "settings", label: "Settings" },
|
|
343
|
+
]}
|
|
344
|
+
/>
|
|
345
|
+
</YStack>
|
|
346
|
+
),
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
export const IntrinsicHorizontalHost: Story = {
|
|
350
|
+
render: () => (
|
|
351
|
+
<ScrollView horizontal width={390}>
|
|
352
|
+
<Tabs items={baseItems} ariaLabel="Intrinsic tabs" />
|
|
353
|
+
</ScrollView>
|
|
354
|
+
),
|
|
355
|
+
};
|