@multiplatform.one/components 7.10.0 → 7.15.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/README.md +100 -2
- package/dist/cjs/Accordion/index.cjs +2 -6
- package/dist/cjs/Accordion/index.native.js +2 -6
- package/dist/cjs/Accordion/index.native.js.map +1 -1
- package/dist/cjs/AnimateHeight/index.cjs +1 -3
- package/dist/cjs/AnimateHeight/index.native.js +1 -3
- package/dist/cjs/AnimateHeight/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.cjs +8 -1
- package/dist/cjs/Chip/index.native.js +8 -1
- package/dist/cjs/Chip/index.native.js.map +1 -1
- package/dist/cjs/SheetModal/index.cjs +22 -3
- package/dist/cjs/SheetModal/index.native.js +115 -27
- package/dist/cjs/SheetModal/index.native.js.map +1 -1
- package/dist/cjs/Tabs/index.cjs +35 -18
- package/dist/cjs/Tabs/index.native.js +39 -18
- package/dist/cjs/Tabs/index.native.js.map +1 -1
- package/dist/cjs/Text.cjs +2 -0
- package/dist/cjs/Text.native.js +2 -0
- package/dist/cjs/Text.native.js.map +1 -1
- package/dist/cjs/TreeSelect/index.cjs +55 -52
- package/dist/cjs/TreeSelect/index.native.js +55 -52
- package/dist/cjs/TreeSelect/index.native.js.map +1 -1
- package/dist/cjs/Video/PlayerChrome.cjs +3 -9
- package/dist/cjs/Video/PlayerChrome.native.js +3 -9
- package/dist/cjs/Video/PlayerChrome.native.js.map +1 -1
- package/dist/cjs/code/Code/index.cjs +6 -0
- package/dist/cjs/code/Code/index.native.js +7 -4
- package/dist/cjs/code/Code/index.native.js.map +1 -1
- package/dist/cjs/code/CodeBlock/index.cjs +4 -5
- package/dist/cjs/code/CodeBlock/index.native.js +4 -5
- package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
- package/dist/cjs/icons/themed.cjs +2 -1
- package/dist/cjs/icons/themed.native.js +2 -1
- package/dist/cjs/icons/themed.native.js.map +1 -1
- package/dist/cjs/knobImmuneExports.cjs +3 -3
- package/dist/cjs/knobImmuneExports.native.js +3 -3
- package/dist/cjs/layouts/PaneScaffold.cjs +70 -42
- package/dist/cjs/layouts/PaneScaffold.native.js +75 -48
- package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
- package/dist/cjs/layouts/page.cjs +2 -1
- package/dist/cjs/layouts/page.native.js +2 -1
- package/dist/cjs/layouts/page.native.js.map +1 -1
- package/dist/cjs/layouts/sidebar.cjs +1 -3
- package/dist/cjs/layouts/sidebar.native.js +1 -3
- package/dist/cjs/layouts/sidebar.native.js.map +1 -1
- package/dist/cjs/layouts/tags.native.js.map +1 -1
- package/dist/cjs/surfaces.cjs +0 -32
- package/dist/cjs/surfaces.native.js +0 -32
- package/dist/cjs/surfaces.native.js.map +1 -1
- package/dist/cjs/views/List.cjs +1 -3
- package/dist/cjs/views/List.native.js +1 -3
- package/dist/cjs/views/List.native.js.map +1 -1
- package/dist/cjs/views/Matrix.cjs +568 -0
- package/dist/cjs/views/Matrix.native.js +612 -0
- package/dist/cjs/views/Matrix.native.js.map +1 -0
- package/dist/cjs/views/TreeView.cjs +175 -43
- package/dist/cjs/views/TreeView.native.js +181 -46
- package/dist/cjs/views/TreeView.native.js.map +1 -1
- package/dist/cjs/views/ganttMath.cjs +2 -0
- package/dist/cjs/views/ganttMath.native.js +2 -0
- package/dist/cjs/views/ganttMath.native.js.map +1 -1
- package/dist/cjs/views/index.cjs +16 -0
- package/dist/cjs/views/index.native.js +16 -0
- package/dist/cjs/views/index.native.js.map +1 -1
- package/dist/cjs/views/matrixMath.cjs +157 -0
- package/dist/cjs/views/matrixMath.native.js +229 -0
- package/dist/cjs/views/matrixMath.native.js.map +1 -0
- package/dist/esm/Accordion/index.mjs +3 -7
- package/dist/esm/Accordion/index.mjs.map +1 -1
- package/dist/esm/Accordion/index.native.js +3 -7
- package/dist/esm/Accordion/index.native.js.map +1 -1
- package/dist/esm/AnimateHeight/index.mjs +2 -4
- package/dist/esm/AnimateHeight/index.mjs.map +1 -1
- package/dist/esm/AnimateHeight/index.native.js +2 -4
- 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.mjs +9 -2
- package/dist/esm/Chip/index.mjs.map +1 -1
- package/dist/esm/Chip/index.native.js +9 -2
- package/dist/esm/Chip/index.native.js.map +1 -1
- package/dist/esm/Collapsible.native.js.map +1 -1
- 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.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/SheetModal/index.mjs +22 -3
- package/dist/esm/SheetModal/index.mjs.map +1 -1
- package/dist/esm/SheetModal/index.native.js +117 -29
- package/dist/esm/SheetModal/index.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 +36 -19
- package/dist/esm/Tabs/index.mjs.map +1 -1
- package/dist/esm/Tabs/index.native.js +40 -19
- package/dist/esm/Tabs/index.native.js.map +1 -1
- package/dist/esm/Text.mjs +3 -1
- package/dist/esm/Text.mjs.map +1 -1
- package/dist/esm/Text.native.js +3 -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.mjs +56 -53
- package/dist/esm/TreeSelect/index.mjs.map +1 -1
- package/dist/esm/TreeSelect/index.native.js +56 -53
- 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.mjs +4 -10
- package/dist/esm/Video/PlayerChrome.mjs.map +1 -1
- package/dist/esm/Video/PlayerChrome.native.js +4 -10
- 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/ChartDataView.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/Code/index.mjs +6 -0
- package/dist/esm/code/Code/index.mjs.map +1 -1
- package/dist/esm/code/Code/index.native.js +10 -7
- package/dist/esm/code/Code/index.native.js.map +1 -1
- package/dist/esm/code/CodeBlock/index.mjs +5 -6
- package/dist/esm/code/CodeBlock/index.mjs.map +1 -1
- package/dist/esm/code/CodeBlock/index.native.js +5 -6
- 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.mjs +3 -2
- package/dist/esm/icons/themed.mjs.map +1 -1
- package/dist/esm/icons/themed.native.js +3 -2
- 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 +3 -3
- package/dist/esm/knobImmuneExports.native.js +3 -3
- 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 +70 -42
- package/dist/esm/layouts/PaneScaffold.mjs.map +1 -1
- package/dist/esm/layouts/PaneScaffold.native.js +75 -48
- 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.mjs +3 -2
- package/dist/esm/layouts/page.mjs.map +1 -1
- package/dist/esm/layouts/page.native.js +3 -2
- 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.mjs +2 -4
- package/dist/esm/layouts/sidebar.mjs.map +1 -1
- package/dist/esm/layouts/sidebar.native.js +2 -4
- package/dist/esm/layouts/sidebar.native.js.map +1 -1
- package/dist/esm/layouts/tags.mjs.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/useReturnFocusOnClose.native.js.map +1 -1
- package/dist/esm/surfaces.mjs +1 -33
- package/dist/esm/surfaces.mjs.map +1 -1
- package/dist/esm/surfaces.native.js +1 -33
- package/dist/esm/surfaces.native.js.map +1 -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.mjs +2 -4
- package/dist/esm/views/List.mjs.map +1 -1
- package/dist/esm/views/List.native.js +2 -4
- package/dist/esm/views/List.native.js.map +1 -1
- package/dist/esm/views/Matrix.mjs +543 -0
- package/dist/esm/views/Matrix.mjs.map +1 -0
- package/dist/esm/views/Matrix.native.js +573 -0
- package/dist/esm/views/Matrix.native.js.map +1 -0
- package/dist/esm/views/ReportBuilder.native.js.map +1 -1
- package/dist/esm/views/TreeView.mjs +175 -43
- package/dist/esm/views/TreeView.mjs.map +1 -1
- package/dist/esm/views/TreeView.native.js +181 -46
- 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 +1 -1
- package/dist/esm/views/ganttMath.mjs.map +1 -1
- package/dist/esm/views/ganttMath.native.js +1 -1
- package/dist/esm/views/ganttMath.native.js.map +1 -1
- package/dist/esm/views/index.mjs +4 -2
- package/dist/esm/views/index.mjs.map +1 -1
- package/dist/esm/views/index.native.js +4 -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/matrixMath.mjs +122 -0
- package/dist/esm/views/matrixMath.mjs.map +1 -0
- package/dist/esm/views/matrixMath.native.js +191 -0
- package/dist/esm/views/matrixMath.native.js.map +1 -0
- 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/esm/views/treeViewReveal.native.js.map +1 -1
- package/dist/jsx/Accordion/index.mjs +3 -7
- package/dist/jsx/Accordion/index.mjs.map +1 -1
- package/dist/jsx/Accordion/index.native.js +2 -6
- package/dist/jsx/Accordion/index.native.js.map +1 -1
- package/dist/jsx/AnimateHeight/index.mjs +2 -4
- package/dist/jsx/AnimateHeight/index.mjs.map +1 -1
- package/dist/jsx/AnimateHeight/index.native.js +1 -3
- package/dist/jsx/AnimateHeight/index.native.js.map +1 -1
- package/dist/jsx/Chip/index.mjs +9 -2
- package/dist/jsx/Chip/index.mjs.map +1 -1
- package/dist/jsx/Chip/index.native.js +8 -1
- package/dist/jsx/Chip/index.native.js.map +1 -1
- package/dist/jsx/SheetModal/index.mjs +22 -3
- package/dist/jsx/SheetModal/index.mjs.map +1 -1
- package/dist/jsx/SheetModal/index.native.js +115 -27
- package/dist/jsx/SheetModal/index.native.js.map +1 -1
- package/dist/jsx/Tabs/index.mjs +36 -19
- package/dist/jsx/Tabs/index.mjs.map +1 -1
- package/dist/jsx/Tabs/index.native.js +39 -18
- package/dist/jsx/Tabs/index.native.js.map +1 -1
- package/dist/jsx/Text.mjs +3 -1
- package/dist/jsx/Text.mjs.map +1 -1
- package/dist/jsx/Text.native.js +2 -0
- package/dist/jsx/Text.native.js.map +1 -1
- package/dist/jsx/TreeSelect/index.mjs +56 -53
- package/dist/jsx/TreeSelect/index.mjs.map +1 -1
- package/dist/jsx/TreeSelect/index.native.js +55 -52
- package/dist/jsx/TreeSelect/index.native.js.map +1 -1
- package/dist/jsx/Video/PlayerChrome.mjs +4 -10
- package/dist/jsx/Video/PlayerChrome.mjs.map +1 -1
- package/dist/jsx/Video/PlayerChrome.native.js +3 -9
- package/dist/jsx/Video/PlayerChrome.native.js.map +1 -1
- package/dist/jsx/code/Code/index.mjs +6 -0
- package/dist/jsx/code/Code/index.mjs.map +1 -1
- package/dist/jsx/code/Code/index.native.js +7 -4
- package/dist/jsx/code/Code/index.native.js.map +1 -1
- package/dist/jsx/code/CodeBlock/index.mjs +5 -6
- package/dist/jsx/code/CodeBlock/index.mjs.map +1 -1
- package/dist/jsx/code/CodeBlock/index.native.js +4 -5
- package/dist/jsx/code/CodeBlock/index.native.js.map +1 -1
- package/dist/jsx/icons/themed.mjs +3 -2
- package/dist/jsx/icons/themed.mjs.map +1 -1
- package/dist/jsx/icons/themed.native.js +2 -1
- package/dist/jsx/icons/themed.native.js.map +1 -1
- package/dist/jsx/knobImmuneExports.mjs +3 -3
- package/dist/jsx/knobImmuneExports.native.js +3 -3
- package/dist/jsx/layouts/PaneScaffold.mjs +70 -42
- package/dist/jsx/layouts/PaneScaffold.mjs.map +1 -1
- package/dist/jsx/layouts/PaneScaffold.native.js +75 -48
- package/dist/jsx/layouts/PaneScaffold.native.js.map +1 -1
- package/dist/jsx/layouts/page.mjs +3 -2
- package/dist/jsx/layouts/page.mjs.map +1 -1
- package/dist/jsx/layouts/page.native.js +2 -1
- package/dist/jsx/layouts/page.native.js.map +1 -1
- package/dist/jsx/layouts/sidebar.mjs +2 -4
- package/dist/jsx/layouts/sidebar.mjs.map +1 -1
- package/dist/jsx/layouts/sidebar.native.js +1 -3
- package/dist/jsx/layouts/sidebar.native.js.map +1 -1
- package/dist/jsx/layouts/tags.mjs.map +1 -1
- package/dist/jsx/layouts/tags.native.js.map +1 -1
- package/dist/jsx/surfaces.mjs +1 -33
- package/dist/jsx/surfaces.mjs.map +1 -1
- package/dist/jsx/surfaces.native.js +0 -32
- package/dist/jsx/surfaces.native.js.map +1 -1
- package/dist/jsx/views/List.mjs +2 -4
- package/dist/jsx/views/List.mjs.map +1 -1
- package/dist/jsx/views/List.native.js +1 -3
- package/dist/jsx/views/List.native.js.map +1 -1
- package/dist/jsx/views/Matrix.mjs +543 -0
- package/dist/jsx/views/Matrix.mjs.map +1 -0
- package/dist/jsx/views/Matrix.native.js +612 -0
- package/dist/jsx/views/Matrix.native.js.map +1 -0
- package/dist/jsx/views/TreeView.mjs +175 -43
- package/dist/jsx/views/TreeView.mjs.map +1 -1
- package/dist/jsx/views/TreeView.native.js +181 -46
- package/dist/jsx/views/TreeView.native.js.map +1 -1
- package/dist/jsx/views/ganttMath.mjs +1 -1
- package/dist/jsx/views/ganttMath.mjs.map +1 -1
- package/dist/jsx/views/ganttMath.native.js +2 -0
- package/dist/jsx/views/ganttMath.native.js.map +1 -1
- package/dist/jsx/views/index.mjs +4 -2
- package/dist/jsx/views/index.mjs.map +1 -1
- package/dist/jsx/views/index.native.js +16 -0
- package/dist/jsx/views/index.native.js.map +1 -1
- package/dist/jsx/views/matrixMath.mjs +122 -0
- package/dist/jsx/views/matrixMath.mjs.map +1 -0
- package/dist/jsx/views/matrixMath.native.js +229 -0
- package/dist/jsx/views/matrixMath.native.js.map +1 -0
- package/package.json +12 -12
- package/src/Accordion/Accordion.spec.tsx +20 -0
- package/src/Accordion/index.tsx +8 -4
- package/src/AnimateHeight/index.tsx +143 -142
- package/src/Chip/Chip.borderLadder.spec.tsx +54 -0
- package/src/Chip/Chip.pressSlop.spec.tsx +57 -0
- package/src/Chip/index.tsx +15 -1
- package/src/Heading.native.spec.tsx +1 -1
- package/src/Separator/index.tsx +3 -3
- package/src/SheetModal/SheetModal.detentLayout.spec.tsx +173 -0
- package/src/SheetModal/SheetModal.fill.spec.tsx +147 -0
- package/src/SheetModal/SheetModal.ownedBody.spec.tsx +200 -0
- package/src/SheetModal/SheetModal.stories.spec.tsx +23 -2
- package/src/SheetModal/SheetModal.stories.tsx +275 -2
- package/src/SheetModal/SheetModal.touch.spec.tsx +63 -0
- package/src/SheetModal/index.native.tsx +143 -21
- package/src/SheetModal/index.tsx +40 -3
- package/src/Tabs/Tabs.hydration.spec.tsx +123 -0
- package/src/Tabs/Tabs.lifecycle.spec.tsx +123 -0
- package/src/Tabs/Tabs.measurement.spec.tsx +186 -0
- package/src/Tabs/Tabs.stories.tsx +43 -0
- package/src/Tabs/index.tsx +45 -15
- package/src/Text.spec.tsx +32 -2
- package/src/Text.tsx +7 -6
- package/src/Toast/Toast.spec.tsx +50 -0
- package/src/Tooltip/Tooltip.spec.tsx +55 -2
- package/src/TreeSelect/TreeSelect.spec.tsx +15 -15
- package/src/TreeSelect/index.tsx +53 -50
- package/src/Video/PlayerChrome.tsx +4 -3
- package/src/Wheel/Wheel.spec.tsx +4 -4
- package/src/adjacency.l1.spec.tsx +175 -0
- package/src/code/Code/code.spec.tsx +2 -19
- package/src/code/Code/index.tsx +0 -6
- package/src/code/CodeBlock/index.tsx +5 -3
- package/src/code/highlightedCode.spec.tsx +2 -2
- package/src/code/hostProps.spec.tsx +55 -0
- package/src/icons/themed.hydration.spec.tsx +60 -0
- package/src/icons/themed.tsx +3 -6
- package/src/knobImmuneExports.ts +3 -3
- package/src/layouts/PaneScaffold.spec.tsx +148 -2
- package/src/layouts/PaneScaffold.stories.tsx +33 -1
- package/src/layouts/PaneScaffold.tsx +101 -48
- package/src/layouts/page.designLaw.spec.tsx +20 -0
- package/src/layouts/page.tsx +2 -0
- package/src/layouts/sidebar.tsx +2 -3
- package/src/layouts/tags.tsx +2 -1
- package/src/overlayElevation.spec.tsx +39 -51
- package/src/surfaces.spec.tsx +13 -10
- package/src/surfaces.tsx +4 -33
- package/src/tamagui.spec.ts +4 -3
- package/src/textAccentSecondary.spec.tsx +100 -2
- package/src/views/List.tsx +2 -1
- package/src/views/Matrix.spec.tsx +339 -0
- package/src/views/Matrix.stories.spec.tsx +68 -0
- package/src/views/Matrix.stories.tsx +153 -0
- package/src/views/Matrix.tsx +738 -0
- package/src/views/TreeView.reveal.spec.tsx +7 -0
- package/src/views/TreeView.reveal.stories.tsx +134 -0
- package/src/views/TreeView.scroll-index.spec.tsx +246 -0
- package/src/views/TreeView.scroll.spec.tsx +711 -50
- package/src/views/TreeView.tsx +230 -49
- package/src/views/ganttMath.ts +4 -2
- package/src/views/index.ts +30 -0
- package/src/views/matrixMath.spec.ts +237 -0
- package/src/views/matrixMath.ts +251 -0
- package/src/views/views.spec.tsx +3 -1
- package/types/Accordion/index.d.ts.map +1 -1
- package/types/AnimateHeight/index.d.ts.map +1 -1
- package/types/Chip/index.d.ts.map +1 -1
- package/types/Separator/index.d.ts +3 -3
- package/types/SheetModal/index.d.ts +8 -1
- package/types/SheetModal/index.d.ts.map +1 -1
- package/types/SheetModal/index.native.d.ts +1 -1
- package/types/SheetModal/index.native.d.ts.map +1 -1
- package/types/Tabs/index.d.ts.map +1 -1
- package/types/Text.d.ts.map +1 -1
- package/types/TreeSelect/index.d.ts.map +1 -1
- package/types/Video/PlayerChrome.d.ts.map +1 -1
- package/types/code/Code/index.d.ts.map +1 -1
- package/types/code/CodeBlock/index.d.ts.map +1 -1
- package/types/icons/themed.d.ts.map +1 -1
- package/types/layouts/PaneScaffold.d.ts +14 -1
- package/types/layouts/PaneScaffold.d.ts.map +1 -1
- package/types/layouts/page.d.ts.map +1 -1
- package/types/layouts/sidebar.d.ts.map +1 -1
- package/types/layouts/tags.d.ts.map +1 -1
- package/types/surfaces.d.ts.map +1 -1
- package/types/views/List.d.ts.map +1 -1
- package/types/views/Matrix.d.ts +102 -0
- package/types/views/Matrix.d.ts.map +1 -0
- package/types/views/TreeView.d.ts +10 -1
- package/types/views/TreeView.d.ts.map +1 -1
- package/types/views/ganttMath.d.ts +4 -0
- package/types/views/ganttMath.d.ts.map +1 -1
- package/types/views/index.d.ts +3 -1
- package/types/views/index.d.ts.map +1 -1
- package/types/views/matrixMath.d.ts +114 -0
- package/types/views/matrixMath.d.ts.map +1 -0
|
@@ -0,0 +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","matrixMath_exports","alignMatrixRange","bucketName","bucketStart","computeMatrixRange","generateBuckets","localDateKey","matrixCellIntensity","matrixCellKey","matrixMaxValue","nextBucketStart","summarizeMatrixCells","module","exports","import_theme","require","import_ganttMath","date","y","getFullYear","m","String","getMonth","padStart","d","getDate","rule","firstDayOfWeek","arguments","length","startOfDay","startOfWeek","startOfMonth","start","addDays","Date","range","lastIncluded","end","lastDay","getTime","dates","today","min","max","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","err","return","lo","hi","formatAbsoluteDate","year","formatMonthYear","aligned","majors","generateTicks","filter","tick","major","map","index","_ref","_tick_label"],"sources":["../../../src/views/matrixMath.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.
|
|
3
|
+
"version": "7.15.0",
|
|
4
4
|
"description": "multiplatform.one ui components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"components",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"license": "Apache-2.0",
|
|
16
16
|
"repository": {
|
|
17
17
|
"type": "git",
|
|
18
|
-
"url": "git+https://
|
|
18
|
+
"url": "git+https://git.corp.bitspur.com/multiplatform.one/mpo.git",
|
|
19
19
|
"directory": "public/components"
|
|
20
20
|
},
|
|
21
21
|
"source": "src/index.ts",
|
|
@@ -57,6 +57,11 @@
|
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@floating-ui/react": "^0.27.19",
|
|
60
|
+
"@multiplatform.one/forms": "7.15.0",
|
|
61
|
+
"@multiplatform.one/i18n": "7.15.0",
|
|
62
|
+
"@multiplatform.one/platform": "7.15.0",
|
|
63
|
+
"@multiplatform.one/router": "7.15.0",
|
|
64
|
+
"@multiplatform.one/theme": "7.15.0",
|
|
60
65
|
"@phosphor-icons/react": "^2.1.10",
|
|
61
66
|
"@shopify/flash-list": "^2.3.1",
|
|
62
67
|
"@tamagui/core": "2.7.6",
|
|
@@ -76,14 +81,12 @@
|
|
|
76
81
|
"fast-xml-parser": "^5.7.2",
|
|
77
82
|
"link": "^2.1.2",
|
|
78
83
|
"shiki": "^4.0.2",
|
|
79
|
-
"tamagui": "2.7.6"
|
|
80
|
-
"@multiplatform.one/platform": "7.10.0",
|
|
81
|
-
"@multiplatform.one/router": "7.10.0",
|
|
82
|
-
"@multiplatform.one/theme": "7.10.0",
|
|
83
|
-
"@multiplatform.one/i18n": "7.10.0",
|
|
84
|
-
"@multiplatform.one/forms": "7.10.0"
|
|
84
|
+
"tamagui": "2.7.6"
|
|
85
85
|
},
|
|
86
86
|
"devDependencies": {
|
|
87
|
+
"@multiplatform.one/config": "7.15.0",
|
|
88
|
+
"@multiplatform.one/storybook": "7.15.0",
|
|
89
|
+
"@multiplatform.one/test-utils": "7.15.0",
|
|
87
90
|
"@tamagui/build": "2.7.6",
|
|
88
91
|
"@testing-library/jest-dom": "^6.9.1",
|
|
89
92
|
"@testing-library/react": "^16.3.2",
|
|
@@ -100,10 +103,7 @@
|
|
|
100
103
|
"react-native-reanimated": "~4.3.0",
|
|
101
104
|
"react-native-svg": "15.15.4",
|
|
102
105
|
"react-native-web": "^0.21.2",
|
|
103
|
-
"vitest": "^4.1.5"
|
|
104
|
-
"@multiplatform.one/test-utils": "7.10.0",
|
|
105
|
-
"@multiplatform.one/storybook": "7.10.0",
|
|
106
|
-
"@multiplatform.one/config": "7.10.0"
|
|
106
|
+
"vitest": "^4.1.5"
|
|
107
107
|
},
|
|
108
108
|
"peerDependencies": {
|
|
109
109
|
"@mdx-js/mdx": "^3.1.1",
|
|
@@ -245,4 +245,24 @@ describe("Accordion density — pad and gap move, control height holds (LC-76)",
|
|
|
245
245
|
expect(atoms(compactTrigger, gap)).not.toEqual(comfortableMeasure.gap);
|
|
246
246
|
expect(atoms(compactTrigger, height)).toEqual(comfortableMeasure.height);
|
|
247
247
|
});
|
|
248
|
+
it("survives the animation knob flipping live from none to bouncy (MPO-327)", () => {
|
|
249
|
+
const Flip = ({ animation }: { animation: "none" | "bouncy" }) => (
|
|
250
|
+
<Preset overrides={{ animation }}>
|
|
251
|
+
<Accordion defaultValue="a">
|
|
252
|
+
<Accordion.Item value="a">
|
|
253
|
+
<Accordion.Trigger>Section A</Accordion.Trigger>
|
|
254
|
+
<Accordion.Content>
|
|
255
|
+
<Text>Content A</Text>
|
|
256
|
+
</Accordion.Content>
|
|
257
|
+
</Accordion.Item>
|
|
258
|
+
</Accordion>
|
|
259
|
+
</Preset>
|
|
260
|
+
);
|
|
261
|
+
const { container, rerender } = renderWithProviders(<Flip animation="none" />);
|
|
262
|
+
expect(container.textContent).toContain("Content A");
|
|
263
|
+
|
|
264
|
+
expect(() => rerender(<Flip animation="bouncy" />)).not.toThrow();
|
|
265
|
+
expect(container.textContent).toContain("Content A");
|
|
266
|
+
expect(getTriggers(container)[0].getAttribute("aria-expanded")).toBe("true");
|
|
267
|
+
});
|
|
248
268
|
});
|
package/src/Accordion/index.tsx
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
useResolvedKnobs,
|
|
16
16
|
wasKeyboardFocus,
|
|
17
17
|
type GroupPosition,
|
|
18
|
+
transitionProps,
|
|
18
19
|
} from "@multiplatform.one/theme";
|
|
19
20
|
import type { ReactNode } from "react";
|
|
20
21
|
import {
|
|
@@ -243,7 +244,7 @@ function Chevron({
|
|
|
243
244
|
}: {
|
|
244
245
|
open: boolean;
|
|
245
246
|
size: number;
|
|
246
|
-
color: string;
|
|
247
|
+
color: string | undefined;
|
|
247
248
|
transition: ReturnType<typeof useResolvedKnobs>["knobProps"]["transition"];
|
|
248
249
|
}) {
|
|
249
250
|
return (
|
|
@@ -254,7 +255,7 @@ function Chevron({
|
|
|
254
255
|
rotate={open ? "180deg" : "0deg"}
|
|
255
256
|
aria-hidden
|
|
256
257
|
pointerEvents="none"
|
|
257
|
-
{...(transition
|
|
258
|
+
{...transitionProps(transition)}
|
|
258
259
|
>
|
|
259
260
|
<ThemedCaretDown color={color} size={size} />
|
|
260
261
|
</View>
|
|
@@ -550,13 +551,16 @@ const AccordionTrigger = forwardRef<TamaguiElement, AccordionTriggerProps>(
|
|
|
550
551
|
},
|
|
551
552
|
}
|
|
552
553
|
: { onFocus, onBlur })}
|
|
553
|
-
{...(knobProps.transition
|
|
554
|
+
{...transitionProps(knobProps.transition)}
|
|
554
555
|
{...props}
|
|
555
556
|
>
|
|
556
557
|
<Chevron
|
|
557
558
|
open={item.open}
|
|
558
559
|
size={chevronPx}
|
|
559
|
-
color={
|
|
560
|
+
color={
|
|
561
|
+
(item.disabled ? disabledState.textKnobProps.color : knobProps.textAccentColor) ??
|
|
562
|
+
knobProps.textAccentColor
|
|
563
|
+
}
|
|
560
564
|
transition={knobProps.transition}
|
|
561
565
|
/>
|
|
562
566
|
{icon ? (
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isWeb } from "@multiplatform.one/platform";
|
|
2
|
-
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
2
|
+
import { transitionProps, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
3
3
|
import type { ReactNode } from "react";
|
|
4
4
|
import { forwardRef, useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
5
5
|
import type { LayoutChangeEvent } from "react-native";
|
|
@@ -77,163 +77,164 @@ export function settleMs(transition: TransitionProp | undefined): number {
|
|
|
77
77
|
return (ms ?? 600) + 80;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
const WebAnimateHeight = forwardRef<TamaguiElement, AnimateHeightProps>(
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
80
|
+
const WebAnimateHeight = forwardRef<TamaguiElement, AnimateHeightProps>(function AnimateHeight(
|
|
81
|
+
{ open, children, transition: transitionProp, ...props },
|
|
82
|
+
ref,
|
|
83
|
+
) {
|
|
84
|
+
const { knobProps } = useResolvedKnobs();
|
|
85
|
+
// knob transition is undefined under reduced motion / animation="none"
|
|
86
|
+
const transition = transitionProp ?? knobProps.transition;
|
|
87
|
+
const collapsible = open !== undefined;
|
|
86
88
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
89
|
+
// null = natural (auto) height: initial open/follower render before the
|
|
90
|
+
// first measurement, so there is never a flash of collapsed content.
|
|
91
|
+
const [displayHeight, setDisplayHeight] = useState<number | null>(
|
|
92
|
+
collapsible && !open ? 0 : null,
|
|
93
|
+
);
|
|
94
|
+
// Children stay mounted through the exit tween, then unmount at rest.
|
|
95
|
+
const [exiting, setExiting] = useState(false);
|
|
96
|
+
const [prevOpen, setPrevOpen] = useState(open);
|
|
95
97
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
98
|
+
const measuredRef = useRef<number | null>(null);
|
|
99
|
+
// Set on closed → open: hold height 0 until the first measurement so the
|
|
100
|
+
// expand tweens 0 → px instead of snapping to auto.
|
|
101
|
+
const openingRef = useRef(false);
|
|
102
|
+
const unmountTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
103
|
+
const rafRef = useRef<number | null>(null);
|
|
104
|
+
const innerRef = useRef<TamaguiElement | null>(null);
|
|
103
105
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
106
|
+
// Adjust state during render (React's usePrevious pattern) so children
|
|
107
|
+
// mount in the SAME commit `open` flips true, and stay mounted for the
|
|
108
|
+
// exit tween when it flips false.
|
|
109
|
+
if (collapsible && open !== prevOpen) {
|
|
110
|
+
setPrevOpen(open);
|
|
111
|
+
if (open) {
|
|
112
|
+
// Hold at 0 until measurement only when children were unmounted (at
|
|
113
|
+
// rest). Re-opening mid-exit keeps the existing measurement — the
|
|
114
|
+
// observer will not re-fire for unchanged content — so the effect
|
|
115
|
+
// below retargets it directly and the tween reverses in place.
|
|
116
|
+
openingRef.current = !exiting;
|
|
117
|
+
if (exiting) setExiting(false);
|
|
118
|
+
} else {
|
|
119
|
+
openingRef.current = false;
|
|
120
|
+
setExiting(true);
|
|
120
121
|
}
|
|
122
|
+
}
|
|
121
123
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
+
const shouldRenderChildren = !collapsible || open || exiting;
|
|
125
|
+
const atRestClosed = collapsible && !open && !exiting;
|
|
124
126
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
127
|
+
const clearPending = useCallback(() => {
|
|
128
|
+
if (unmountTimerRef.current != null) {
|
|
129
|
+
clearTimeout(unmountTimerRef.current);
|
|
130
|
+
unmountTimerRef.current = null;
|
|
131
|
+
}
|
|
132
|
+
if (rafRef.current != null && typeof cancelAnimationFrame === "function") {
|
|
133
|
+
cancelAnimationFrame(rafRef.current);
|
|
134
|
+
rafRef.current = null;
|
|
135
|
+
}
|
|
136
|
+
}, []);
|
|
135
137
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
138
|
+
const handleMeasured = useCallback(
|
|
139
|
+
(height: number) => {
|
|
140
|
+
measuredRef.current = height;
|
|
141
|
+
// Closing (or closed): the target stays 0 — ignore content measures.
|
|
142
|
+
if (collapsible && !open) return;
|
|
143
|
+
if (openingRef.current) {
|
|
144
|
+
openingRef.current = false;
|
|
145
|
+
// Double rAF: guarantee the browser paints the height-0 frame
|
|
146
|
+
// before the target lands, or the 0 → px tween never runs.
|
|
147
|
+
rafRef.current = requestAnimationFrame(() => {
|
|
145
148
|
rafRef.current = requestAnimationFrame(() => {
|
|
146
|
-
rafRef.current =
|
|
147
|
-
|
|
148
|
-
setDisplayHeight(height);
|
|
149
|
-
});
|
|
149
|
+
rafRef.current = null;
|
|
150
|
+
setDisplayHeight(height);
|
|
150
151
|
});
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
152
|
+
});
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
setDisplayHeight(height);
|
|
156
|
+
},
|
|
157
|
+
[collapsible, open],
|
|
158
|
+
);
|
|
159
|
+
const handleMeasuredRef = useRef(handleMeasured);
|
|
160
|
+
handleMeasuredRef.current = handleMeasured;
|
|
161
|
+
const transitionRef = useRef(transition);
|
|
162
|
+
transitionRef.current = transition;
|
|
161
163
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
164
|
+
// Web: ResizeObserver on the content wrapper — fires on observe (initial
|
|
165
|
+
// measure) and on any intrinsic size change while mounted.
|
|
166
|
+
useLayoutEffect(() => {
|
|
167
|
+
if (!isWeb || !shouldRenderChildren) return;
|
|
168
|
+
const node = innerRef.current as unknown as HTMLElement | null;
|
|
169
|
+
if (!node || typeof ResizeObserver === "undefined") return;
|
|
170
|
+
const observer = new ResizeObserver(() => {
|
|
171
|
+
// getBoundingClientRect keeps fractional text heights exact.
|
|
172
|
+
handleMeasuredRef.current(node.getBoundingClientRect().height);
|
|
173
|
+
});
|
|
174
|
+
observer.observe(node);
|
|
175
|
+
return () => observer.disconnect();
|
|
176
|
+
}, [shouldRenderChildren]);
|
|
175
177
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
// Native: onLayout on the content wrapper is the measurement source.
|
|
179
|
+
const onInnerLayout = useCallback((event: LayoutChangeEvent) => {
|
|
180
|
+
handleMeasuredRef.current(event.nativeEvent.layout.height);
|
|
181
|
+
}, []);
|
|
180
182
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
192
|
-
return;
|
|
183
|
+
// Drive the open/close targets after commit.
|
|
184
|
+
useEffect(() => {
|
|
185
|
+
if (!collapsible) return;
|
|
186
|
+
clearPending();
|
|
187
|
+
if (open) {
|
|
188
|
+
// Opening from closed holds 0 until measurement (openingRef); if a
|
|
189
|
+
// measurement already exists (close interrupted mid-tween), retarget
|
|
190
|
+
// it immediately so the tween reverses from wherever it is.
|
|
191
|
+
if (!openingRef.current && measuredRef.current != null) {
|
|
192
|
+
setDisplayHeight(measuredRef.current);
|
|
193
193
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
} else {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// Closing: tween px → 0, then unmount at rest. When nothing can tween
|
|
197
|
+
// (no transition token — reduced motion — or no real measurement, as in
|
|
198
|
+
// non-layout test environments), finalize immediately. The transition is
|
|
199
|
+
// read through a ref at close time only — mid-tween knob changes should
|
|
200
|
+
// not restart the exit timer.
|
|
201
|
+
setDisplayHeight(0);
|
|
202
|
+
const closeTransition = transitionRef.current;
|
|
203
|
+
const canTween = Boolean(closeTransition) && (measuredRef.current ?? 0) > 0;
|
|
204
|
+
if (canTween) {
|
|
205
|
+
unmountTimerRef.current = setTimeout(() => {
|
|
206
|
+
unmountTimerRef.current = null;
|
|
208
207
|
setExiting(false);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
208
|
+
}, settleMs(closeTransition));
|
|
209
|
+
} else {
|
|
210
|
+
setExiting(false);
|
|
211
|
+
}
|
|
212
|
+
}, [collapsible, open, clearPending]);
|
|
211
213
|
|
|
212
|
-
|
|
214
|
+
useEffect(() => clearPending, [clearPending]);
|
|
213
215
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
);
|
|
216
|
+
return (
|
|
217
|
+
<View
|
|
218
|
+
ref={ref}
|
|
219
|
+
overflow="hidden"
|
|
220
|
+
{...(displayHeight != null ? { height: displayHeight } : {})}
|
|
221
|
+
{...(atRestClosed ? { display: "none" as const } : {})}
|
|
222
|
+
{...transitionProps(transition)}
|
|
223
|
+
{...props}
|
|
224
|
+
>
|
|
225
|
+
{shouldRenderChildren ? (
|
|
226
|
+
<View
|
|
227
|
+
ref={innerRef}
|
|
228
|
+
// keep natural height inside the clipped, height-driven outer
|
|
229
|
+
flexShrink={0}
|
|
230
|
+
{...(!isWeb ? { onLayout: onInnerLayout } : {})}
|
|
231
|
+
>
|
|
232
|
+
{children}
|
|
233
|
+
</View>
|
|
234
|
+
) : null}
|
|
235
|
+
</View>
|
|
236
|
+
);
|
|
237
|
+
});
|
|
237
238
|
|
|
238
239
|
/** Native layout has no height tween, so measurement must not gate visibility. */
|
|
239
240
|
const NativeAnimateHeight = forwardRef<TamaguiElement, AnimateHeightProps>(
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MPO-134: the story-backed Chip (`Components/Chip`) spreads the resolver's
|
|
3
|
+
* borderWidth as-is. knob-laws used to describe the frame as an ignore pinned
|
|
4
|
+
* at 1, and the sweep measured 1 / 1 / 1 / 2 while a local `Math.max(…, 1)`
|
|
5
|
+
* floor was in place; that floor went with 5056bce23, so the real ladder is
|
|
6
|
+
* the resolver's, and the box moves with it. This pins the declared edge at
|
|
7
|
+
* every stop so the doc row cannot drift from the component again.
|
|
8
|
+
*
|
|
9
|
+
* Assertions read the atomic border-width class the FRAME emits.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
13
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
14
|
+
import { cleanup } from "@testing-library/react";
|
|
15
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
16
|
+
import { Chip } from "./index";
|
|
17
|
+
|
|
18
|
+
afterEach(cleanup);
|
|
19
|
+
|
|
20
|
+
const STOPS = ["none", "small", "medium", "large"] as const;
|
|
21
|
+
|
|
22
|
+
function renderAt(stop: (typeof STOPS)[number], outlined = false): string[] {
|
|
23
|
+
const result = renderWithProviders(
|
|
24
|
+
<Preset overrides={{ fillStyle: outlined ? "outlined" : "filled", borderWidth: stop }}>
|
|
25
|
+
<Chip variant="outlined" onPress={() => {}}>
|
|
26
|
+
Fire
|
|
27
|
+
</Chip>
|
|
28
|
+
</Preset>,
|
|
29
|
+
);
|
|
30
|
+
const frame = result.container.querySelector("[data-chip]") as HTMLElement;
|
|
31
|
+
const atoms = String(frame.className || "")
|
|
32
|
+
.split(/\s+/)
|
|
33
|
+
.filter((c) => c.startsWith("_btw-"))
|
|
34
|
+
.sort();
|
|
35
|
+
cleanup();
|
|
36
|
+
return atoms;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
describe("Chip borderWidth ladder (MPO-134)", () => {
|
|
40
|
+
it("the frame honours the resolver's edge: 0 / 0.5 / 1 / 2", () => {
|
|
41
|
+
expect(renderAt("none")).toEqual(["_btw-0px"]);
|
|
42
|
+
expect(renderAt("small")).toEqual(["_btw-0--5px"]);
|
|
43
|
+
expect(renderAt("medium")).toEqual(["_btw-1px"]);
|
|
44
|
+
expect(renderAt("large")).toEqual(["_btw-2px"]);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("medium and large differ, so the chip box moves with the stop", () => {
|
|
48
|
+
expect(renderAt("medium")).not.toEqual(renderAt("large"));
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("none under fillStyle:outlined is the resolver's hairline, not a local floor", () => {
|
|
52
|
+
expect(renderAt("none", true)).toEqual(["_btw-0--5px"]);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MPO-134 K12: the pressable Chip body takes the press-slop channel on the
|
|
3
|
+
* vertical axis only, pitch-limited so a wrapped chip row's target never
|
|
4
|
+
* reaches the next row's (LC-54). Rows wrap at `$2` = 7px, so each row may
|
|
5
|
+
* reach 3px past its painted box; the channel's pseudo-element sits on the
|
|
6
|
+
* padding box, so the outset carries the frame's border width on top.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
10
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
11
|
+
import { cleanup } from "@testing-library/react";
|
|
12
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
13
|
+
import { Chip } from "./index";
|
|
14
|
+
|
|
15
|
+
afterEach(cleanup);
|
|
16
|
+
|
|
17
|
+
type Stop = "none" | "small" | "medium" | "large";
|
|
18
|
+
|
|
19
|
+
function frameAt(
|
|
20
|
+
borderWidth: Stop,
|
|
21
|
+
props: { onPress?: () => void; disabled?: boolean } = { onPress: () => {} },
|
|
22
|
+
) {
|
|
23
|
+
const result = renderWithProviders(
|
|
24
|
+
<Preset overrides={{ borderWidth }}>
|
|
25
|
+
<Chip variant="outlined" {...props}>
|
|
26
|
+
Fire
|
|
27
|
+
</Chip>
|
|
28
|
+
</Preset>,
|
|
29
|
+
);
|
|
30
|
+
return result.container.querySelector("[data-chip]") as HTMLElement;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
describe("Chip pressable body slop (MPO-134, K12)", () => {
|
|
34
|
+
it("reaches half the chip-row gap past the painted box, vertically only", () => {
|
|
35
|
+
const frame = frameAt("none");
|
|
36
|
+
expect(frame.getAttribute("role")).toBe("button");
|
|
37
|
+
expect(frame.getAttribute("data-mp-press-slop")).toBe("3");
|
|
38
|
+
expect(frame.getAttribute("data-mp-press-axis")).toBe("vertical");
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("adds the frame's border back, so the reach past the box is the same at every stop", () => {
|
|
42
|
+
expect(frameAt("small").getAttribute("data-mp-press-slop")).toBe("4");
|
|
43
|
+
expect(frameAt("medium").getAttribute("data-mp-press-slop")).toBe("4");
|
|
44
|
+
expect(frameAt("large").getAttribute("data-mp-press-slop")).toBe("5");
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("a chip with no press handler has no target, so no slop", () => {
|
|
48
|
+
const frame = frameAt("medium", {});
|
|
49
|
+
expect(frame.getAttribute("role")).toBeNull();
|
|
50
|
+
expect(frame.getAttribute("data-mp-press-slop")).toBeNull();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("a disabled chip gates its target and drops the slop", () => {
|
|
54
|
+
const frame = frameAt("medium", { onPress: () => {}, disabled: true });
|
|
55
|
+
expect(frame.getAttribute("data-mp-press-slop")).toBeNull();
|
|
56
|
+
});
|
|
57
|
+
});
|
package/src/Chip/index.tsx
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { pressSlopOutsetProps } from "@multiplatform.one/forms";
|
|
1
2
|
import { isWeb } from "@multiplatform.one/platform";
|
|
2
3
|
import {
|
|
3
4
|
MIN_PRESS_TARGET,
|
|
@@ -20,7 +21,7 @@ import {
|
|
|
20
21
|
} from "react";
|
|
21
22
|
import { useTranslation } from "react-i18next";
|
|
22
23
|
import type { ColorTokens, GetProps } from "tamagui";
|
|
23
|
-
import { Text, View, styled } from "tamagui";
|
|
24
|
+
import { Text, View, getTokenValue, styled } from "tamagui";
|
|
24
25
|
|
|
25
26
|
// ── Types ─────────────────────────────────────────────────────
|
|
26
27
|
|
|
@@ -290,6 +291,18 @@ const DismissRing = styled(View, {
|
|
|
290
291
|
},
|
|
291
292
|
});
|
|
292
293
|
|
|
294
|
+
// K12 (LC-54 pitch-limited): wrapped chip rows sit `$2` apart, so each row's
|
|
295
|
+
// press target may reach half that gap before it meets the next row's. The
|
|
296
|
+
// outset stops there rather than at 44; no chip size paints tall enough for
|
|
297
|
+
// the half-gap to overshoot the floor. The slop pseudo-element is placed from
|
|
298
|
+
// the padding box, so the frame's own border width is added back.
|
|
299
|
+
const CHIP_ROW_GAP = "$2";
|
|
300
|
+
|
|
301
|
+
function chipBodySlop(borderWidth: number): number {
|
|
302
|
+
const gap = getTokenValue(CHIP_ROW_GAP as Parameters<typeof getTokenValue>[0], "space");
|
|
303
|
+
return typeof gap === "number" ? Math.floor(gap / 2) + Math.ceil(borderWidth) : 0;
|
|
304
|
+
}
|
|
305
|
+
|
|
293
306
|
function normalizeIcon(icon: ReactNode, size: number): ReactNode {
|
|
294
307
|
if (icon == null || icon === false) return null;
|
|
295
308
|
if (isValidElement(icon)) {
|
|
@@ -407,6 +420,7 @@ export function Chip({
|
|
|
407
420
|
role: "button",
|
|
408
421
|
tabIndex: 0,
|
|
409
422
|
...(selected != null ? { "aria-pressed": isSelected } : undefined),
|
|
423
|
+
...pressSlopOutsetProps(chipBodySlop(knobProps.borderRadius.borderWidth), "vertical"),
|
|
410
424
|
}
|
|
411
425
|
: undefined)}
|
|
412
426
|
{...(disabled
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* rescue is mounted in NEITHER arm; the props channel is the only channel
|
|
25
25
|
* carrying the knob here, which is the channel native has. It does NOT
|
|
26
26
|
* execute the React Native renderer — it is the standing substitute for a
|
|
27
|
-
* simulator capture (`
|
|
27
|
+
* simulator capture (`docs/standards/testing/falsifiability.md`), not a
|
|
28
28
|
* replacement for one.
|
|
29
29
|
*/
|
|
30
30
|
import { cleanup, screen } from "@testing-library/react";
|
package/src/Separator/index.tsx
CHANGED
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
* specificity `flex: 1` can turn the rule into a viewport-dependent gap
|
|
40
40
|
* (the raw primitive was a `flex: 1` item, exactly that defect).
|
|
41
41
|
*
|
|
42
|
-
* Knob story: no knob channel maps to a 1px rule
|
|
43
|
-
*
|
|
44
|
-
*
|
|
42
|
+
* Knob story: no knob channel maps to a 1px rule, and none will. Clay ruled
|
|
43
|
+
* MPO-21 G10-A on 2026-09-26: there is no separator-weight knob, the rule is
|
|
44
|
+
* 1px and the quiet rule is opacity 0.5. Consumer `{...props}` stay the
|
|
45
45
|
* explicit eject (STD-EJECT-LAST).
|
|
46
46
|
*/
|
|
47
47
|
import type { GetProps } from "tamagui";
|