@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
package/src/views/TreeView.tsx
CHANGED
|
@@ -134,6 +134,10 @@ export interface TreeViewProps<T = unknown> extends Omit<YStackProps, "children"
|
|
|
134
134
|
overscan?: number;
|
|
135
135
|
/** Height of the scrollable container in pixels */
|
|
136
136
|
height?: number;
|
|
137
|
+
/** Initial vertical offset in layout pixels, restored once after usable list layout. */
|
|
138
|
+
initialScrollOffset?: number;
|
|
139
|
+
/** Observed, bounded vertical offset. Does not report unacknowledged scroll commands. */
|
|
140
|
+
onScrollOffsetChange?: (offset: number) => void;
|
|
137
141
|
/** Message shown when there are no nodes */
|
|
138
142
|
emptyMessage?: string;
|
|
139
143
|
/** Controlled expansion; takes precedence over initial expansion props. */
|
|
@@ -142,6 +146,8 @@ export interface TreeViewProps<T = unknown> extends Omit<YStackProps, "children"
|
|
|
142
146
|
onExpandedIdsChange?: (ids: string[]) => void;
|
|
143
147
|
/** Expand ancestors and reveal this row. Change requestId to reveal the same ID again. */
|
|
144
148
|
revealRequest?: { id: string; requestId: number };
|
|
149
|
+
/** Called once when the current reveal target is measured, mounted and visible. */
|
|
150
|
+
onRevealComplete?: (request: { id: string; requestId: number }) => void;
|
|
145
151
|
/** Initially expanded node IDs (wins over expandByDefault when provided) */
|
|
146
152
|
defaultExpandedIds?: string[];
|
|
147
153
|
/** Expand every branch on initial load */
|
|
@@ -298,11 +304,14 @@ export function TreeView<T = unknown>({
|
|
|
298
304
|
estimateSize: estimateSizeProp,
|
|
299
305
|
overscan = 10,
|
|
300
306
|
height: heightProp,
|
|
307
|
+
initialScrollOffset,
|
|
308
|
+
onScrollOffsetChange,
|
|
301
309
|
emptyMessage: emptyMessageProp,
|
|
302
310
|
defaultExpandedIds,
|
|
303
311
|
expandedIds: controlledExpandedIds,
|
|
304
312
|
onExpandedIdsChange,
|
|
305
313
|
revealRequest,
|
|
314
|
+
onRevealComplete,
|
|
306
315
|
expandByDefault = false,
|
|
307
316
|
display = "default",
|
|
308
317
|
showExpansionArrows = true,
|
|
@@ -349,6 +358,31 @@ export function TreeView<T = unknown>({
|
|
|
349
358
|
const treeId = useId();
|
|
350
359
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
351
360
|
const flashListRef = useRef<FlashListRef<FlatNode<T>>>(null);
|
|
361
|
+
const initialScroll = useRef<
|
|
362
|
+
| {
|
|
363
|
+
offset: number;
|
|
364
|
+
attempted?: { target: number; width: number; height: number; contentHeight: number };
|
|
365
|
+
}
|
|
366
|
+
| undefined
|
|
367
|
+
>(
|
|
368
|
+
initialScrollOffset === undefined
|
|
369
|
+
? undefined
|
|
370
|
+
: { offset: Number.isFinite(initialScrollOffset) ? Math.max(0, initialScrollOffset) : 0 },
|
|
371
|
+
);
|
|
372
|
+
const cancelInitialScroll = useCallback(() => {
|
|
373
|
+
initialScroll.current = undefined;
|
|
374
|
+
}, []);
|
|
375
|
+
const hasNodes = nodes.length > 0;
|
|
376
|
+
const listInstance = useMemo(
|
|
377
|
+
() => ({ hasNodes, attached: false, loaded: false, indexScrollRequested: false, offset: 0 }),
|
|
378
|
+
[hasNodes],
|
|
379
|
+
);
|
|
380
|
+
const scrollActive = useRef(true);
|
|
381
|
+
const lastReportedOffset = useRef<number | undefined>(undefined);
|
|
382
|
+
const offsetCallback = useRef(onScrollOffsetChange);
|
|
383
|
+
useLayoutEffect(() => {
|
|
384
|
+
offsetCallback.current = onScrollOffsetChange;
|
|
385
|
+
}, [onScrollOffsetChange]);
|
|
352
386
|
const [focusedIndex, setFocusedIndex] = useState(-1);
|
|
353
387
|
// LC-71: ring is a React flag, not a render-time wasKeyboardFocus() read —
|
|
354
388
|
// Tab-away/Tab-back with the same activedescendant must still re-paint.
|
|
@@ -396,6 +430,7 @@ export function TreeView<T = unknown>({
|
|
|
396
430
|
|
|
397
431
|
const toggleNode = useCallback(
|
|
398
432
|
(node: TreeNode<T>) => {
|
|
433
|
+
cancelInitialScroll();
|
|
399
434
|
const next = new Set(expandedIds);
|
|
400
435
|
if (next.has(node.id)) {
|
|
401
436
|
next.delete(node.id);
|
|
@@ -405,7 +440,7 @@ export function TreeView<T = unknown>({
|
|
|
405
440
|
setExpandedIds(next);
|
|
406
441
|
onNodeToggle?.(node);
|
|
407
442
|
},
|
|
408
|
-
[expandedIds, setExpandedIds, onNodeToggle],
|
|
443
|
+
[expandedIds, setExpandedIds, onNodeToggle, cancelInitialScroll],
|
|
409
444
|
);
|
|
410
445
|
|
|
411
446
|
const previousExpandedIds = useRef(expandedIds);
|
|
@@ -470,16 +505,98 @@ export function TreeView<T = unknown>({
|
|
|
470
505
|
}
|
|
471
506
|
| undefined
|
|
472
507
|
>(undefined);
|
|
473
|
-
const
|
|
474
|
-
const
|
|
508
|
+
const scrollFrame = useRef<number | undefined>(undefined);
|
|
509
|
+
const scrollStep = useRef<() => void>(() => {});
|
|
475
510
|
const renderedRows = useRef(new Set<string>());
|
|
476
|
-
const
|
|
477
|
-
|
|
511
|
+
const scrollBounds = useCallback(() => {
|
|
512
|
+
const list = flashListRef.current;
|
|
513
|
+
if (!scrollActive.current || !listInstance.attached || !listInstance.loaded || !list) return;
|
|
514
|
+
if (isWeb) {
|
|
515
|
+
const rect = containerRef.current?.getBoundingClientRect();
|
|
516
|
+
if (!rect || !(rect.width > 0) || !(rect.height > 0)) return;
|
|
517
|
+
}
|
|
518
|
+
const viewport = list.getWindowSize();
|
|
519
|
+
const contentHeight = list.getChildContainerDimensions().height + list.getFirstItemOffset();
|
|
520
|
+
if (
|
|
521
|
+
!Number.isFinite(viewport.width) ||
|
|
522
|
+
viewport.width <= 0 ||
|
|
523
|
+
!Number.isFinite(viewport.height) ||
|
|
524
|
+
viewport.height <= 0 ||
|
|
525
|
+
!Number.isFinite(contentHeight) ||
|
|
526
|
+
contentHeight <= 0
|
|
527
|
+
)
|
|
528
|
+
return;
|
|
529
|
+
return {
|
|
530
|
+
list,
|
|
531
|
+
width: viewport.width,
|
|
532
|
+
height: viewport.height,
|
|
533
|
+
contentHeight,
|
|
534
|
+
maxOffset: Math.max(0, contentHeight - viewport.height),
|
|
535
|
+
};
|
|
536
|
+
}, [listInstance]);
|
|
537
|
+
const observeOffset = useCallback(
|
|
538
|
+
(offset: number, fromEvent = false) => {
|
|
539
|
+
if (!scrollActive.current || !listInstance.attached || !Number.isFinite(offset)) return;
|
|
540
|
+
if (
|
|
541
|
+
fromEvent &&
|
|
542
|
+
initialScroll.current?.attempted === undefined &&
|
|
543
|
+
offset !== listInstance.offset
|
|
544
|
+
) {
|
|
545
|
+
cancelInitialScroll();
|
|
546
|
+
}
|
|
547
|
+
listInstance.offset = offset;
|
|
548
|
+
const bounds = scrollBounds();
|
|
549
|
+
if (!bounds) return;
|
|
550
|
+
const bounded = Math.max(0, Math.min(offset, bounds.maxOffset));
|
|
551
|
+
const initial = initialScroll.current;
|
|
552
|
+
if (initial) {
|
|
553
|
+
const target = Math.min(initial.offset, bounds.maxOffset);
|
|
554
|
+
if (initial.attempted ? Math.abs(bounded - target) >= 1 : bounded !== target) return;
|
|
555
|
+
initialScroll.current = undefined;
|
|
556
|
+
}
|
|
557
|
+
if (offsetCallback.current && lastReportedOffset.current !== bounded) {
|
|
558
|
+
lastReportedOffset.current = bounded;
|
|
559
|
+
offsetCallback.current(bounded);
|
|
560
|
+
}
|
|
561
|
+
},
|
|
562
|
+
[cancelInitialScroll, scrollBounds, listInstance],
|
|
563
|
+
);
|
|
564
|
+
const scheduleScroll = useCallback(() => {
|
|
565
|
+
if (!scrollActive.current || !listInstance.attached || scrollFrame.current !== undefined)
|
|
478
566
|
return;
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
567
|
+
if (
|
|
568
|
+
!initialScroll.current &&
|
|
569
|
+
(!revealIntent.current || revealIntent.current.complete) &&
|
|
570
|
+
!offsetCallback.current
|
|
571
|
+
)
|
|
572
|
+
return;
|
|
573
|
+
scrollFrame.current = requestAnimationFrame(() => {
|
|
574
|
+
scrollFrame.current = undefined;
|
|
575
|
+
if (listInstance.attached) scrollStep.current();
|
|
482
576
|
});
|
|
577
|
+
}, [listInstance]);
|
|
578
|
+
const attachList = useCallback(
|
|
579
|
+
(list: FlashListRef<FlatNode<T>> | null) => {
|
|
580
|
+
flashListRef.current = list;
|
|
581
|
+
listInstance.attached = list !== null;
|
|
582
|
+
if (!list) {
|
|
583
|
+
listInstance.loaded = false;
|
|
584
|
+
if (initialScroll.current) initialScroll.current.attempted = undefined;
|
|
585
|
+
if (scrollFrame.current !== undefined) cancelAnimationFrame(scrollFrame.current);
|
|
586
|
+
scrollFrame.current = undefined;
|
|
587
|
+
}
|
|
588
|
+
},
|
|
589
|
+
[listInstance],
|
|
590
|
+
);
|
|
591
|
+
|
|
592
|
+
useLayoutEffect(() => {
|
|
593
|
+
scrollActive.current = true;
|
|
594
|
+
return () => {
|
|
595
|
+
scrollActive.current = false;
|
|
596
|
+
revealIntent.current = undefined;
|
|
597
|
+
if (scrollFrame.current !== undefined) cancelAnimationFrame(scrollFrame.current);
|
|
598
|
+
scrollFrame.current = undefined;
|
|
599
|
+
};
|
|
483
600
|
}, []);
|
|
484
601
|
|
|
485
602
|
useLayoutEffect(() => {
|
|
@@ -489,11 +606,49 @@ export function TreeView<T = unknown>({
|
|
|
489
606
|
revealIntent.current?.id !== revealRequest.id ||
|
|
490
607
|
revealIntent.current?.requestId !== revealRequest.requestId
|
|
491
608
|
) {
|
|
609
|
+
cancelInitialScroll();
|
|
492
610
|
revealIntent.current = { ...revealRequest, complete: false };
|
|
493
611
|
}
|
|
494
|
-
|
|
612
|
+
const step = () => {
|
|
613
|
+
const currentList = flashListRef.current;
|
|
614
|
+
if (currentList) {
|
|
615
|
+
// Index preparation changes FlashList's getter before transport completes.
|
|
616
|
+
// Once requested, only delivered events can advance this list's observation.
|
|
617
|
+
observeOffset(
|
|
618
|
+
listInstance.indexScrollRequested
|
|
619
|
+
? listInstance.offset
|
|
620
|
+
: currentList.getAbsoluteLastScrollOffset(),
|
|
621
|
+
);
|
|
622
|
+
}
|
|
623
|
+
if (!scrollActive.current) return;
|
|
624
|
+
if (scrollStep.current !== step) {
|
|
625
|
+
scheduleScroll();
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
495
628
|
const intent = revealIntent.current;
|
|
496
|
-
if (!intent || intent.complete)
|
|
629
|
+
if (!intent || intent.complete) {
|
|
630
|
+
const initial = initialScroll.current;
|
|
631
|
+
const bounds = scrollBounds();
|
|
632
|
+
if (!initial || !bounds || flatNodes.length === 0) return;
|
|
633
|
+
const target = Math.min(initial.offset, bounds.maxOffset);
|
|
634
|
+
const attempted = initial.attempted;
|
|
635
|
+
if (
|
|
636
|
+
!attempted ||
|
|
637
|
+
attempted.target !== target ||
|
|
638
|
+
attempted.width !== bounds.width ||
|
|
639
|
+
attempted.height !== bounds.height ||
|
|
640
|
+
attempted.contentHeight !== bounds.contentHeight
|
|
641
|
+
) {
|
|
642
|
+
initial.attempted = {
|
|
643
|
+
target,
|
|
644
|
+
width: bounds.width,
|
|
645
|
+
height: bounds.height,
|
|
646
|
+
contentHeight: bounds.contentHeight,
|
|
647
|
+
};
|
|
648
|
+
bounds.list.scrollToOffset({ offset: target, animated: false });
|
|
649
|
+
}
|
|
650
|
+
return;
|
|
651
|
+
}
|
|
497
652
|
const next = treeRevealExpansion(nodes, expandedIds, intent.id);
|
|
498
653
|
if (!next) return;
|
|
499
654
|
if (next !== expandedIds) {
|
|
@@ -519,29 +674,39 @@ export function TreeView<T = unknown>({
|
|
|
519
674
|
if (viewport.width <= 0) return;
|
|
520
675
|
const layout = list.getLayout(index);
|
|
521
676
|
if (!layout) return;
|
|
522
|
-
const offset =
|
|
677
|
+
const offset = listInstance.indexScrollRequested
|
|
678
|
+
? listInstance.offset
|
|
679
|
+
: list.getAbsoluteLastScrollOffset();
|
|
680
|
+
const top = layout.y + list.getFirstItemOffset();
|
|
523
681
|
const nextOffset = treeRevealOffset(
|
|
524
|
-
{ y:
|
|
682
|
+
{ y: top, height: layout.height },
|
|
525
683
|
offset,
|
|
526
684
|
viewport.height,
|
|
527
685
|
);
|
|
528
686
|
if (nextOffset === undefined) return;
|
|
529
687
|
if (Math.abs(nextOffset - offset) < 1) {
|
|
530
|
-
|
|
688
|
+
let visible = top < offset + viewport.height && top + layout.height > offset;
|
|
689
|
+
if (!listInstance.indexScrollRequested) {
|
|
690
|
+
const range = list.computeVisibleIndices();
|
|
691
|
+
visible = visible && index >= range.startIndex && index <= range.endIndex;
|
|
692
|
+
}
|
|
531
693
|
if (
|
|
694
|
+
revealIntent.current === intent &&
|
|
532
695
|
layout.isHeightMeasured &&
|
|
533
696
|
renderedRows.current.has(intent.id) &&
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
)
|
|
697
|
+
visible
|
|
698
|
+
) {
|
|
537
699
|
intent.complete = true;
|
|
700
|
+
onRevealComplete?.({ id: intent.id, requestId: intent.requestId });
|
|
701
|
+
}
|
|
538
702
|
return;
|
|
539
703
|
}
|
|
540
704
|
// FlashList's scrollToIndex has uncancellable delayed steps. Immediate offsets
|
|
541
705
|
// let the next layout/scroll event correct estimates using only the latest intent.
|
|
542
706
|
list.scrollToOffset({ offset: nextOffset, animated: false });
|
|
543
707
|
};
|
|
544
|
-
|
|
708
|
+
scrollStep.current = step;
|
|
709
|
+
scheduleScroll();
|
|
545
710
|
}, [
|
|
546
711
|
nodes,
|
|
547
712
|
expandedIds,
|
|
@@ -549,27 +714,25 @@ export function TreeView<T = unknown>({
|
|
|
549
714
|
flatNodes,
|
|
550
715
|
revealRequest?.id,
|
|
551
716
|
revealRequest?.requestId,
|
|
717
|
+
onRevealComplete,
|
|
552
718
|
height,
|
|
553
719
|
motion,
|
|
554
|
-
|
|
720
|
+
scheduleScroll,
|
|
721
|
+
cancelInitialScroll,
|
|
722
|
+
observeOffset,
|
|
723
|
+
scrollBounds,
|
|
724
|
+
listInstance,
|
|
555
725
|
]);
|
|
556
726
|
|
|
557
|
-
useLayoutEffect(
|
|
558
|
-
() => () => {
|
|
559
|
-
revealIntent.current = undefined;
|
|
560
|
-
if (revealFrame.current !== undefined) cancelAnimationFrame(revealFrame.current);
|
|
561
|
-
revealFrame.current = undefined;
|
|
562
|
-
},
|
|
563
|
-
[],
|
|
564
|
-
);
|
|
565
|
-
|
|
566
727
|
const scrollToIndex = useCallback(
|
|
567
728
|
(index: number) => {
|
|
568
729
|
if (index >= 0 && index < flatNodes.length) {
|
|
730
|
+
cancelInitialScroll();
|
|
731
|
+
listInstance.indexScrollRequested = true;
|
|
569
732
|
flashListRef.current?.scrollToIndex({ index, animated: true });
|
|
570
733
|
}
|
|
571
734
|
},
|
|
572
|
-
[flatNodes.length],
|
|
735
|
+
[flatNodes.length, cancelInitialScroll, listInstance],
|
|
573
736
|
);
|
|
574
737
|
|
|
575
738
|
const focusRow = useCallback(
|
|
@@ -863,6 +1026,7 @@ export function TreeView<T = unknown>({
|
|
|
863
1026
|
if (!container?.getBoundingClientRect) return false;
|
|
864
1027
|
const session = treeKeyboardLift(nodes, flat.node.id);
|
|
865
1028
|
if (!session) return false;
|
|
1029
|
+
cancelInitialScroll();
|
|
866
1030
|
const rowRect = rowEl.getBoundingClientRect();
|
|
867
1031
|
const containerRect = container.getBoundingClientRect();
|
|
868
1032
|
grabOffsetRef.current = { x: clientX - rowRect.left, y: clientY - rowRect.top };
|
|
@@ -890,7 +1054,7 @@ export function TreeView<T = unknown>({
|
|
|
890
1054
|
startAutoScroll();
|
|
891
1055
|
return true;
|
|
892
1056
|
},
|
|
893
|
-
[announce, nodes, startAutoScroll],
|
|
1057
|
+
[announce, nodes, startAutoScroll, cancelInitialScroll],
|
|
894
1058
|
);
|
|
895
1059
|
|
|
896
1060
|
const handleDragHandlePointerDown = useCallback(
|
|
@@ -1037,6 +1201,7 @@ export function TreeView<T = unknown>({
|
|
|
1037
1201
|
if (!flat) return false;
|
|
1038
1202
|
const session = treeKeyboardLift(nodes, flat.node.id);
|
|
1039
1203
|
if (!session) return false;
|
|
1204
|
+
cancelInitialScroll();
|
|
1040
1205
|
const ui: TreeDragUi<T> = {
|
|
1041
1206
|
mode: "keyboard",
|
|
1042
1207
|
node: flat.node,
|
|
@@ -1054,7 +1219,16 @@ export function TreeView<T = unknown>({
|
|
|
1054
1219
|
dragUiRef.current = ui;
|
|
1055
1220
|
announce(describeTreeDragState("lift", session, nodes, flat.node.label));
|
|
1056
1221
|
return true;
|
|
1057
|
-
}, [
|
|
1222
|
+
}, [
|
|
1223
|
+
announce,
|
|
1224
|
+
canReorder,
|
|
1225
|
+
dndRows,
|
|
1226
|
+
flatNodes,
|
|
1227
|
+
focusedIndex,
|
|
1228
|
+
getRowHeight,
|
|
1229
|
+
nodes,
|
|
1230
|
+
cancelInitialScroll,
|
|
1231
|
+
]);
|
|
1058
1232
|
|
|
1059
1233
|
const moveKeyboardDrag = useCallback(
|
|
1060
1234
|
(direction: "up" | "down" | "left" | "right"): boolean => {
|
|
@@ -1284,21 +1458,28 @@ export function TreeView<T = unknown>({
|
|
|
1284
1458
|
onFocus={handleContainerFocus}
|
|
1285
1459
|
onBlur={handleContainerBlur}
|
|
1286
1460
|
onKeyDown={handleTreeKeyDown}
|
|
1287
|
-
onLayout={
|
|
1461
|
+
onLayout={scheduleScroll}
|
|
1462
|
+
{...(isWeb && { onWheel: cancelInitialScroll, onPointerDown: cancelInitialScroll })}
|
|
1288
1463
|
position="relative"
|
|
1289
1464
|
style={{
|
|
1290
1465
|
height,
|
|
1291
1466
|
}}
|
|
1292
1467
|
>
|
|
1293
1468
|
<FlashList
|
|
1294
|
-
ref={
|
|
1469
|
+
ref={attachList}
|
|
1295
1470
|
data={flatNodes}
|
|
1296
1471
|
drawDistance={overscan * estimateSize}
|
|
1297
1472
|
keyExtractor={(item) => item.node.id}
|
|
1298
|
-
{
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1473
|
+
onLoad={() => {
|
|
1474
|
+
if (!scrollActive.current || !listInstance.attached) return;
|
|
1475
|
+
listInstance.loaded = true;
|
|
1476
|
+
scheduleScroll();
|
|
1477
|
+
}}
|
|
1478
|
+
onCommitLayoutEffect={scheduleScroll}
|
|
1479
|
+
onContentSizeChange={scheduleScroll}
|
|
1480
|
+
onScrollBeginDrag={() => {
|
|
1481
|
+
if (scrollActive.current && listInstance.attached) cancelInitialScroll();
|
|
1482
|
+
}}
|
|
1302
1483
|
extraData={{
|
|
1303
1484
|
focused: effectiveFocused,
|
|
1304
1485
|
selectedId,
|
|
@@ -1309,17 +1490,17 @@ export function TreeView<T = unknown>({
|
|
|
1309
1490
|
keyboardRing,
|
|
1310
1491
|
collapsedSelectedAncestors,
|
|
1311
1492
|
}}
|
|
1312
|
-
{
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
}
|
|
1493
|
+
onScroll={(e: any) => {
|
|
1494
|
+
if (!scrollActive.current || !listInstance.attached) return;
|
|
1495
|
+
const y = e?.nativeEvent?.contentOffset?.y;
|
|
1496
|
+
if (typeof y === "number" && Number.isFinite(y)) {
|
|
1497
|
+
scrollOffsetRef.current = y;
|
|
1498
|
+
if (dragUiRef.current) setDragScrollY(y);
|
|
1499
|
+
observeOffset(y, true);
|
|
1500
|
+
}
|
|
1501
|
+
scheduleScroll();
|
|
1502
|
+
}}
|
|
1503
|
+
scrollEventThrottle={16}
|
|
1323
1504
|
renderItem={({ item, index }) => {
|
|
1324
1505
|
const { node, depth, hasChildren, isExpanded } = item;
|
|
1325
1506
|
const isFocused = effectiveFocused === index;
|
|
@@ -1379,7 +1560,7 @@ export function TreeView<T = unknown>({
|
|
|
1379
1560
|
ref={(row) => {
|
|
1380
1561
|
if (row) renderedRows.current.add(node.id);
|
|
1381
1562
|
else renderedRows.current.delete(node.id);
|
|
1382
|
-
|
|
1563
|
+
scheduleScroll();
|
|
1383
1564
|
}}
|
|
1384
1565
|
id={`${treeId}-node-${index}`}
|
|
1385
1566
|
{...{ "data-treeview-row": node.id }}
|
|
@@ -1407,7 +1588,7 @@ export function TreeView<T = unknown>({
|
|
|
1407
1588
|
onLayout={(e: any) => {
|
|
1408
1589
|
const h = e?.nativeEvent?.layout?.height;
|
|
1409
1590
|
if (typeof h === "number" && h > 0) rowHeights.current.set(node.id, h);
|
|
1410
|
-
|
|
1591
|
+
scheduleScroll();
|
|
1411
1592
|
}}
|
|
1412
1593
|
backgroundColor={
|
|
1413
1594
|
// Nest-into parent highlight wins while a drag is active
|
package/src/views/ganttMath.ts
CHANGED
|
@@ -127,14 +127,16 @@ export interface GanttRange {
|
|
|
127
127
|
end: Date;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
|
|
130
|
+
/** Local start of the week containing `date` (`firstDayOfWeek`: 0 = Sunday, 1 = Monday). */
|
|
131
|
+
export function startOfWeek(date: Date, firstDayOfWeek: 0 | 1): Date {
|
|
131
132
|
const day = startOfDay(date);
|
|
132
133
|
let offset = day.getDay() - firstDayOfWeek;
|
|
133
134
|
if (offset < 0) offset += 7;
|
|
134
135
|
return addDays(day, -offset);
|
|
135
136
|
}
|
|
136
137
|
|
|
137
|
-
|
|
138
|
+
/** Local first of the month containing `date`. */
|
|
139
|
+
export function startOfMonth(date: Date): Date {
|
|
138
140
|
return new Date(date.getFullYear(), date.getMonth(), 1);
|
|
139
141
|
}
|
|
140
142
|
|
package/src/views/index.ts
CHANGED
|
@@ -130,6 +130,8 @@ export {
|
|
|
130
130
|
shiftSpanByDays,
|
|
131
131
|
spanInclusiveDays,
|
|
132
132
|
startOfDay,
|
|
133
|
+
startOfMonth,
|
|
134
|
+
startOfWeek,
|
|
133
135
|
todayLineX,
|
|
134
136
|
xToDate,
|
|
135
137
|
type GanttBarGeometry,
|
|
@@ -141,6 +143,34 @@ export {
|
|
|
141
143
|
type GanttTick,
|
|
142
144
|
type GanttZoom,
|
|
143
145
|
} from "./ganttMath";
|
|
146
|
+
export {
|
|
147
|
+
MatrixView,
|
|
148
|
+
type MatrixViewProps,
|
|
149
|
+
type MatrixRow,
|
|
150
|
+
type MatrixCellRef,
|
|
151
|
+
type MatrixLegendItem,
|
|
152
|
+
} from "./Matrix";
|
|
153
|
+
// matrixMath is surfaced whole for the same reason ganttMath is: pure bucket
|
|
154
|
+
// math a consumer laying out its own grid on the same axis needs unchanged.
|
|
155
|
+
export {
|
|
156
|
+
alignMatrixRange,
|
|
157
|
+
bucketName,
|
|
158
|
+
bucketStart,
|
|
159
|
+
computeMatrixRange,
|
|
160
|
+
generateBuckets,
|
|
161
|
+
localDateKey,
|
|
162
|
+
matrixCellIntensity,
|
|
163
|
+
matrixCellKey,
|
|
164
|
+
matrixMaxValue,
|
|
165
|
+
nextBucketStart,
|
|
166
|
+
summarizeMatrixCells,
|
|
167
|
+
type MatrixBucket,
|
|
168
|
+
type MatrixBucketRule,
|
|
169
|
+
type MatrixCell,
|
|
170
|
+
type MatrixCellSummary,
|
|
171
|
+
type MatrixIntent,
|
|
172
|
+
type MatrixRange,
|
|
173
|
+
} from "./matrixMath";
|
|
144
174
|
// Kanban drag maths. Only the helper other packages consume is surfaced, in
|
|
145
175
|
// keeping with this barrel's curated style: @multiplatform.one/table's
|
|
146
176
|
// ChildTable imports renumberIdx to renumber rows after a reorder, and failed
|