@multiplatform.one/components 7.77.2 → 7.79.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Accordion/index.native.js +1 -1
- package/dist/cjs/Accordion/index.native.js.map +1 -1
- package/dist/cjs/Alert/index.native.js.map +1 -1
- package/dist/cjs/AnimateHeight/index.native.js.map +1 -1
- package/dist/cjs/Avatar/getInitials.native.js.map +1 -1
- package/dist/cjs/Avatar/index.native.js.map +1 -1
- package/dist/cjs/Badge/index.native.js.map +1 -1
- package/dist/cjs/Button.native.js.map +1 -1
- package/dist/cjs/Card.native.js.map +1 -1
- package/dist/cjs/CardFooter.native.js.map +1 -1
- package/dist/cjs/CardHeader.native.js.map +1 -1
- package/dist/cjs/Carousel/index.native.js +3 -3
- package/dist/cjs/Carousel/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.native.js.map +1 -1
- package/dist/cjs/Collapsible.native.js.map +1 -1
- package/dist/cjs/ContextMenu/index.native.js.map +1 -1
- package/dist/cjs/CopyField/CopyMenuButton.native.js +1 -1
- package/dist/cjs/CopyField/CopyMenuButton.native.js.map +1 -1
- package/dist/cjs/CopyField/index.native.js.map +1 -1
- package/dist/cjs/Dialog.native.js.map +1 -1
- package/dist/cjs/Diff/diff.cjs +84 -0
- package/dist/cjs/Diff/diff.native.js +108 -0
- package/dist/cjs/Diff/diff.native.js.map +1 -0
- package/dist/cjs/Diff/index.cjs +174 -0
- package/dist/cjs/Diff/index.native.js +181 -0
- package/dist/cjs/Diff/index.native.js.map +1 -0
- package/dist/cjs/DotIndicator/index.native.js.map +1 -1
- package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
- package/dist/cjs/DropdownMenu/menuSettle.native.js.map +1 -1
- package/dist/cjs/ElapsedProgress/index.cjs +102 -0
- package/dist/cjs/ElapsedProgress/index.native.js +112 -0
- package/dist/cjs/ElapsedProgress/index.native.js.map +1 -0
- package/dist/cjs/ErrorBoundary/index.native.js.map +1 -1
- package/dist/cjs/Heading.native.js.map +1 -1
- package/dist/cjs/Kbd/index.native.js.map +1 -1
- package/dist/cjs/Kbd/keys.native.js.map +1 -1
- package/dist/cjs/Lightbox/MediaControl.cjs +2 -6
- package/dist/cjs/Lightbox/MediaControl.native.js +2 -8
- package/dist/cjs/Lightbox/MediaControl.native.js.map +1 -1
- package/dist/cjs/Lightbox/index.gnome.native.js.map +1 -1
- package/dist/cjs/Lightbox/index.native.js +1 -1
- package/dist/cjs/Lightbox/shared.native.js.map +1 -1
- package/dist/cjs/Lightbox/useLightbox.native.js.map +1 -1
- package/dist/cjs/MachineLiteral/index.cjs +98 -0
- package/dist/cjs/MachineLiteral/index.native.js +102 -0
- package/dist/cjs/MachineLiteral/index.native.js.map +1 -0
- package/dist/cjs/Material/blur.cjs +34 -0
- package/dist/cjs/Material/blur.native.js +100 -0
- package/dist/cjs/Material/blur.native.js.map +1 -0
- package/dist/cjs/Material/index.cjs +9 -3
- package/dist/cjs/Material/index.native.js +9 -3
- package/dist/cjs/Material/index.native.js.map +1 -1
- package/dist/cjs/Meter/index.cjs +3 -1
- package/dist/cjs/Meter/index.native.js +4 -2
- package/dist/cjs/Meter/index.native.js.map +1 -1
- package/dist/cjs/Meter/meter.native.js.map +1 -1
- package/dist/cjs/OverflowRow/index.native.js +1 -1
- package/dist/cjs/OverflowRow/index.native.js.map +1 -1
- package/dist/cjs/Pagination.native.js +1 -1
- package/dist/cjs/Pagination.native.js.map +1 -1
- package/dist/cjs/Popover.native.js +1 -1
- package/dist/cjs/Popover.native.js.map +1 -1
- package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
- package/dist/cjs/Quote/index.native.js.map +1 -1
- package/dist/cjs/SchemeToggle/index.native.js +1 -1
- package/dist/cjs/SchemeToggle/index.native.js.map +1 -1
- package/dist/cjs/ScrollView/revealFocusedField.native.js.map +1 -1
- package/dist/cjs/Separator/index.native.js.map +1 -1
- package/dist/cjs/Sheet.native.js.map +1 -1
- package/dist/cjs/SheetModal/SheetHeader.native.js.map +1 -1
- package/dist/cjs/SheetModal/SheetNavigation.native.js.map +1 -1
- package/dist/cjs/SheetModal/detents.native.js.map +1 -1
- package/dist/cjs/SheetModal/useSheetFrameFocus.native.js.map +1 -1
- package/dist/cjs/Skeleton/index.native.js.map +1 -1
- package/dist/cjs/SkipLink/index.native.js.map +1 -1
- package/dist/cjs/SortableList/SortableHandle.native.js.map +1 -1
- package/dist/cjs/SortableList/index.cjs +4 -1
- package/dist/cjs/SortableList/index.native.js +4 -1
- package/dist/cjs/SortableList/index.native.js.map +1 -1
- package/dist/cjs/SortableList/useSortableRows.native.js.map +1 -1
- package/dist/cjs/SortableList/useUserOrder.cjs +84 -0
- package/dist/cjs/SortableList/useUserOrder.native.js +107 -0
- package/dist/cjs/SortableList/useUserOrder.native.js.map +1 -0
- package/dist/cjs/Tabs/index.native.js +1 -1
- package/dist/cjs/Tabs/index.native.js.map +1 -1
- package/dist/cjs/Text.native.js.map +1 -1
- package/dist/cjs/ThemePresetPicker/index.native.js +2 -2
- package/dist/cjs/ThemePresetPicker/index.native.js.map +1 -1
- package/dist/cjs/Toast/index.native.js.map +1 -1
- package/dist/cjs/Toast/store.native.js.map +1 -1
- package/dist/cjs/Tooltip/nativePress.native.js.map +1 -1
- package/dist/cjs/Tooltip/tooltipShared.native.js.map +1 -1
- package/dist/cjs/TreeSelect/index.cjs +7 -1
- package/dist/cjs/TreeSelect/index.native.js +8 -2
- package/dist/cjs/TreeSelect/index.native.js.map +1 -1
- package/dist/cjs/TreeSelect/treeSelectModel.native.js.map +1 -1
- package/dist/cjs/Video/PlayerChrome.native.js.map +1 -1
- package/dist/cjs/Video/VideoFrame.native.js.map +1 -1
- package/dist/cjs/Video/types.native.js.map +1 -1
- package/dist/cjs/Wheel/index.native.js.map +1 -1
- package/dist/cjs/Wizard/index.native.js +2 -2
- package/dist/cjs/Wizard/index.native.js.map +1 -1
- package/dist/cjs/actions/ActionBar.native.js.map +1 -1
- package/dist/cjs/actions/DangerSection.native.js.map +1 -1
- package/dist/cjs/actions/DestructiveAction.native.js.map +1 -1
- package/dist/cjs/actions/HeaderActions.native.js +2 -2
- package/dist/cjs/actions/HeaderActions.native.js.map +1 -1
- package/dist/cjs/actions/StandardAction.native.js +1 -1
- package/dist/cjs/actions/StandardAction.native.js.map +1 -1
- package/dist/cjs/actions/devWarn.native.js.map +1 -1
- package/dist/cjs/actions/index.native.js.map +1 -1
- package/dist/cjs/actions/severity.native.js.map +1 -1
- package/dist/cjs/appShell/Dock.native.js.map +1 -1
- package/dist/cjs/appShell/MpoTabHost.native.js.map +1 -1
- package/dist/cjs/appShell/ScopeMenu.native.js.map +1 -1
- package/dist/cjs/appShell/SettingsSplit.native.js +1 -1
- package/dist/cjs/appShell/SettingsSplit.native.js.map +1 -1
- package/dist/cjs/appShell/Springboard.native.js +1 -1
- package/dist/cjs/appShell/Springboard.native.js.map +1 -1
- package/dist/cjs/appShell/SystemBar.native.js.map +1 -1
- package/dist/cjs/appShell/TabBar.cjs +10 -5
- package/dist/cjs/appShell/TabBar.native.js +11 -6
- package/dist/cjs/appShell/TabBar.native.js.map +1 -1
- package/dist/cjs/appShell/TabHost.native.js +1 -0
- package/dist/cjs/appShell/TabHost.native.js.map +1 -1
- package/dist/cjs/appShell/appTile.native.js +1 -1
- package/dist/cjs/appShell/appTile.native.js.map +1 -1
- package/dist/cjs/appShell/bottomChrome.native.js.map +1 -1
- package/dist/cjs/appShell/index.native.js.map +1 -1
- package/dist/cjs/charts/Axis.native.js.map +1 -1
- package/dist/cjs/charts/BarChart.native.js.map +1 -1
- package/dist/cjs/charts/ChartDataView.native.js +1 -1
- package/dist/cjs/charts/ChartDataView.native.js.map +1 -1
- package/dist/cjs/charts/ChartSurface.native.js.map +1 -1
- package/dist/cjs/charts/LineChart.native.js.map +1 -1
- package/dist/cjs/charts/PieChart.native.js.map +1 -1
- package/dist/cjs/charts/Sparkline.cjs +1 -1
- package/dist/cjs/charts/Sparkline.native.js +1 -1
- package/dist/cjs/charts/Sparkline.native.js.map +1 -1
- package/dist/cjs/charts/accessibility.native.js.map +1 -1
- package/dist/cjs/charts/chartHeight.native.js.map +1 -1
- package/dist/cjs/charts/composeChart.native.js.map +1 -1
- package/dist/cjs/charts/index.native.js.map +1 -1
- package/dist/cjs/charts/math.native.js.map +1 -1
- package/dist/cjs/charts/series.native.js.map +1 -1
- package/dist/cjs/charts/svg.native.js.map +1 -1
- package/dist/cjs/charts/types.native.js.map +1 -1
- package/dist/cjs/charts/useChartTheme.native.js.map +1 -1
- package/dist/cjs/code/Code/index.native.js.map +1 -1
- package/dist/cjs/code/CodeBlock/index.native.js +7 -7
- package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
- package/dist/cjs/code/HighlightedCode/index.native.js.map +1 -1
- package/dist/cjs/code/Highlighter/houseSyntaxTheme.native.js.map +1 -1
- package/dist/cjs/code/Highlighter/index.native.js.map +1 -1
- package/dist/cjs/code/Highlighter/namedGroupMatchAll.native.js.map +1 -1
- package/dist/cjs/code/Pre/index.native.js.map +1 -1
- package/dist/cjs/code/index.native.js +5 -5
- package/dist/cjs/code/index.native.js.map +1 -1
- package/dist/cjs/componentColors.cjs +1 -1
- package/dist/cjs/componentColors.native.js +1 -1
- package/dist/cjs/componentColors.native.js.map +1 -1
- package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
- package/dist/cjs/feedback/NotifyHost.native.js +2 -2
- package/dist/cjs/feedback/NotifyHost.native.js.map +1 -1
- package/dist/cjs/feedback/copy.native.js.map +1 -1
- package/dist/cjs/feedback/index.native.js.map +1 -1
- package/dist/cjs/feedback/notify.native.js.map +1 -1
- package/dist/cjs/feedback/route.native.js.map +1 -1
- package/dist/cjs/feedback/store.native.js.map +1 -1
- package/dist/cjs/formLayouts/FormLayouts.native.js +1 -1
- package/dist/cjs/formLayouts/FormLayouts.native.js.map +1 -1
- package/dist/cjs/formLayouts/PreferencePanel.native.js +2 -2
- package/dist/cjs/formLayouts/PreferencePanel.native.js.map +1 -1
- package/dist/cjs/formLayouts/index.native.js.map +1 -1
- package/dist/cjs/hooks/index.native.js +1 -1
- package/dist/cjs/hooks/index.native.js.map +1 -1
- package/dist/cjs/hooks/useClipboard.native.js.map +1 -1
- package/dist/cjs/hooks/useDocumentTitle.native.js.map +1 -1
- package/dist/cjs/hooks/useHoldCue.native.js.map +1 -1
- package/dist/cjs/icons/CheckRegular.native.js.map +1 -1
- package/dist/cjs/icons/MinusRegular.native.js.map +1 -1
- package/dist/cjs/icons/index.native.js.map +1 -1
- package/dist/cjs/icons/lucide.native.js.map +1 -1
- package/dist/cjs/icons/themed.native.js.map +1 -1
- package/dist/cjs/images/Image/ImageFrame.native.js +1 -1
- package/dist/cjs/images/Image/ImageFrame.native.js.map +1 -1
- package/dist/cjs/images/Image/framing.native.js.map +1 -1
- package/dist/cjs/images/Image/index.native.js +1 -1
- package/dist/cjs/images/Image/mediaRadius.native.js.map +1 -1
- package/dist/cjs/images/Image/shared.native.js +1 -1
- package/dist/cjs/images/Image/shared.native.js.map +1 -1
- package/dist/cjs/images/Image/types.native.js.map +1 -1
- package/dist/cjs/images/index.native.js.map +1 -1
- package/dist/cjs/index.cjs +6 -1
- package/dist/cjs/index.native.js +42 -37
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/knobImmuneExports.native.js.map +1 -1
- package/dist/cjs/layouts/AsyncBoundary.native.js +2 -2
- package/dist/cjs/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/cjs/layouts/Debug/index.native.js.map +1 -1
- package/dist/cjs/layouts/EmptyState.native.js.map +1 -1
- package/dist/cjs/layouts/IdentityPlate.native.js.map +1 -1
- package/dist/cjs/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
- package/dist/cjs/layouts/PageTemplates.native.js.map +1 -1
- package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
- package/dist/cjs/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
- package/dist/cjs/layouts/StatusDot.native.js.map +1 -1
- package/dist/cjs/layouts/StatusGlyphStrip.native.js +1 -1
- package/dist/cjs/layouts/StatusGlyphStrip.native.js.map +1 -1
- package/dist/cjs/layouts/ViewSwitcher.native.js.map +1 -1
- package/dist/cjs/layouts/attachments.native.js +1 -1
- package/dist/cjs/layouts/attachments.native.js.map +1 -1
- package/dist/cjs/layouts/bottomAccessory.native.js.map +1 -1
- package/dist/cjs/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/cjs/layouts/index.native.js +3 -3
- package/dist/cjs/layouts/index.native.js.map +1 -1
- package/dist/cjs/layouts/page.cjs +0 -4
- package/dist/cjs/layouts/page.native.js +2 -6
- package/dist/cjs/layouts/page.native.js.map +1 -1
- package/dist/cjs/layouts/pageHeadingScope.native.js.map +1 -1
- package/dist/cjs/layouts/screenScroll.native.js.map +1 -1
- package/dist/cjs/layouts/shellSidebarSlot.native.js.map +1 -1
- package/dist/cjs/layouts/sidebar.native.js +1 -1
- package/dist/cjs/layouts/sidebar.native.js.map +1 -1
- package/dist/cjs/layouts/tags.native.js +2 -2
- package/dist/cjs/layouts/tags.native.js.map +1 -1
- package/dist/cjs/layouts/timeline.native.js +2 -2
- package/dist/cjs/layouts/timeline.native.js.map +1 -1
- package/dist/cjs/layouts/toolbar.native.js +1 -1
- package/dist/cjs/layouts/toolbar.native.js.map +1 -1
- package/dist/cjs/shared/actionScan.native.js.map +1 -1
- package/dist/cjs/shared/i18n.native.js.map +1 -1
- package/dist/cjs/shared/restoreRetries.native.js.map +1 -1
- package/dist/cjs/shared/t.native.js.map +1 -1
- package/dist/cjs/shared/textRidesText.native.js.map +1 -1
- package/dist/cjs/shared/useReturnFocusOnClose.native.js.map +1 -1
- package/dist/cjs/surfaces.native.js +1 -1
- package/dist/cjs/surfaces.native.js.map +1 -1
- package/dist/cjs/tamagui.native.js +1 -1
- package/dist/cjs/tamagui.native.js.map +1 -1
- package/dist/cjs/testSetup.native.js.map +1 -1
- package/dist/cjs/utils/setTinted.native.js.map +1 -1
- package/dist/cjs/utils/unwrapText.native.js.map +1 -1
- package/dist/cjs/views/Calendar.native.js +1 -1
- package/dist/cjs/views/Calendar.native.js.map +1 -1
- package/dist/cjs/views/Dashboard.native.js +2 -2
- package/dist/cjs/views/Dashboard.native.js.map +1 -1
- package/dist/cjs/views/Gantt.native.js +2 -2
- package/dist/cjs/views/Gantt.native.js.map +1 -1
- package/dist/cjs/views/GanttDateGrip.native.js.map +1 -1
- package/dist/cjs/views/ImageGrid.cjs +9 -12
- package/dist/cjs/views/ImageGrid.native.js +11 -18
- package/dist/cjs/views/ImageGrid.native.js.map +1 -1
- package/dist/cjs/views/Kanban.native.js +1 -1
- package/dist/cjs/views/List.native.js.map +1 -1
- package/dist/cjs/views/ListGroup.native.js.map +1 -1
- package/dist/cjs/views/ListRow.native.js.map +1 -1
- package/dist/cjs/views/Matrix.native.js +2 -2
- package/dist/cjs/views/Matrix.native.js.map +1 -1
- package/dist/cjs/views/ReportBuilder.cjs +3 -3
- package/dist/cjs/views/ReportBuilder.native.js +5 -5
- package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
- package/dist/cjs/views/ShortcutCard.native.js.map +1 -1
- package/dist/cjs/views/TreeView.native.js.map +1 -1
- package/dist/cjs/views/calendarMath.native.js.map +1 -1
- package/dist/cjs/views/ganttIntervals.native.js.map +1 -1
- package/dist/cjs/views/ganttMath.native.js.map +1 -1
- package/dist/cjs/views/index.cjs +3 -1
- package/dist/cjs/views/index.native.js +3 -1
- package/dist/cjs/views/index.native.js.map +1 -1
- package/dist/cjs/views/kanbanDnd.native.js.map +1 -1
- package/dist/cjs/views/matrixMath.native.js.map +1 -1
- package/dist/cjs/views/sameNameScope.cjs +39 -0
- package/dist/cjs/views/sameNameScope.native.js +63 -0
- package/dist/cjs/views/sameNameScope.native.js.map +1 -0
- package/dist/cjs/views/treeViewDnd.native.js.map +1 -1
- package/dist/cjs/views/treeViewLayout.native.js.map +1 -1
- package/dist/cjs/views/treeViewMotion.native.js.map +1 -1
- package/dist/cjs/views/treeViewReveal.native.js.map +1 -1
- package/dist/cjs/views/usePageFlowLoadMore.cjs +83 -0
- package/dist/cjs/views/usePageFlowLoadMore.native.js +93 -0
- package/dist/cjs/views/usePageFlowLoadMore.native.js.map +1 -0
- package/dist/cjs/views/widgetChrome.native.js.map +1 -1
- package/dist/esm/Diff/diff.mjs +58 -0
- package/dist/esm/Diff/diff.mjs.map +1 -0
- package/dist/esm/Diff/diff.native.js +79 -0
- package/dist/esm/Diff/diff.native.js.map +1 -0
- package/dist/esm/Diff/index.mjs +147 -0
- package/dist/esm/Diff/index.mjs.map +1 -0
- package/dist/esm/Diff/index.native.js +151 -0
- package/dist/esm/Diff/index.native.js.map +1 -0
- package/dist/esm/ElapsedProgress/index.mjs +76 -0
- package/dist/esm/ElapsedProgress/index.mjs.map +1 -0
- package/dist/esm/ElapsedProgress/index.native.js +83 -0
- package/dist/esm/ElapsedProgress/index.native.js.map +1 -0
- package/dist/esm/Lightbox/MediaControl.mjs +3 -7
- package/dist/esm/Lightbox/MediaControl.mjs.map +1 -1
- package/dist/esm/Lightbox/MediaControl.native.js +3 -9
- package/dist/esm/Lightbox/MediaControl.native.js.map +1 -1
- package/dist/esm/MachineLiteral/index.mjs +73 -0
- package/dist/esm/MachineLiteral/index.mjs.map +1 -0
- package/dist/esm/MachineLiteral/index.native.js +74 -0
- package/dist/esm/MachineLiteral/index.native.js.map +1 -0
- package/dist/esm/Material/blur.mjs +8 -0
- package/dist/esm/Material/blur.mjs.map +1 -0
- package/dist/esm/Material/blur.native.js +67 -0
- package/dist/esm/Material/blur.native.js.map +1 -0
- package/dist/esm/Material/index.mjs +10 -4
- package/dist/esm/Material/index.mjs.map +1 -1
- package/dist/esm/Material/index.native.js +10 -4
- package/dist/esm/Material/index.native.js.map +1 -1
- package/dist/esm/Meter/index.mjs +4 -3
- package/dist/esm/Meter/index.mjs.map +1 -1
- package/dist/esm/Meter/index.native.js +4 -3
- package/dist/esm/Meter/index.native.js.map +1 -1
- package/dist/esm/SortableList/index.mjs +2 -1
- package/dist/esm/SortableList/index.mjs.map +1 -1
- package/dist/esm/SortableList/index.native.js +2 -1
- package/dist/esm/SortableList/index.native.js.map +1 -1
- package/dist/esm/SortableList/useUserOrder.mjs +58 -0
- package/dist/esm/SortableList/useUserOrder.mjs.map +1 -0
- package/dist/esm/SortableList/useUserOrder.native.js +78 -0
- package/dist/esm/SortableList/useUserOrder.native.js.map +1 -0
- package/dist/esm/TreeSelect/index.mjs +8 -2
- package/dist/esm/TreeSelect/index.mjs.map +1 -1
- package/dist/esm/TreeSelect/index.native.js +8 -2
- package/dist/esm/TreeSelect/index.native.js.map +1 -1
- package/dist/esm/appShell/TabBar.mjs +10 -5
- package/dist/esm/appShell/TabBar.mjs.map +1 -1
- package/dist/esm/appShell/TabBar.native.js +10 -5
- package/dist/esm/appShell/TabBar.native.js.map +1 -1
- package/dist/esm/appShell/TabHost.native.js +1 -0
- package/dist/esm/appShell/TabHost.native.js.map +1 -1
- package/dist/esm/charts/Sparkline.mjs +1 -1
- package/dist/esm/charts/Sparkline.mjs.map +1 -1
- package/dist/esm/charts/Sparkline.native.js +1 -1
- package/dist/esm/charts/Sparkline.native.js.map +1 -1
- package/dist/esm/componentColors.mjs +1 -1
- package/dist/esm/componentColors.native.js +1 -1
- package/dist/esm/index.mjs +5 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +5 -2
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/layouts/page.mjs +0 -4
- package/dist/esm/layouts/page.mjs.map +1 -1
- package/dist/esm/layouts/page.native.js +0 -4
- package/dist/esm/layouts/page.native.js.map +1 -1
- package/dist/esm/views/ImageGrid.mjs +10 -13
- package/dist/esm/views/ImageGrid.mjs.map +1 -1
- package/dist/esm/views/ImageGrid.native.js +10 -17
- package/dist/esm/views/ImageGrid.native.js.map +1 -1
- package/dist/esm/views/ReportBuilder.mjs +4 -4
- package/dist/esm/views/ReportBuilder.mjs.map +1 -1
- package/dist/esm/views/ReportBuilder.native.js +4 -4
- package/dist/esm/views/ReportBuilder.native.js.map +1 -1
- package/dist/esm/views/index.mjs +2 -1
- package/dist/esm/views/index.mjs.map +1 -1
- package/dist/esm/views/index.native.js +2 -1
- package/dist/esm/views/index.native.js.map +1 -1
- package/dist/esm/views/sameNameScope.mjs +14 -0
- package/dist/esm/views/sameNameScope.mjs.map +1 -0
- package/dist/esm/views/sameNameScope.native.js +35 -0
- package/dist/esm/views/sameNameScope.native.js.map +1 -0
- package/dist/esm/views/usePageFlowLoadMore.mjs +57 -0
- package/dist/esm/views/usePageFlowLoadMore.mjs.map +1 -0
- package/dist/esm/views/usePageFlowLoadMore.native.js +64 -0
- package/dist/esm/views/usePageFlowLoadMore.native.js.map +1 -0
- package/dist/jsx/Diff/diff.mjs +58 -0
- package/dist/jsx/Diff/diff.mjs.map +1 -0
- package/dist/jsx/Diff/diff.native.js +108 -0
- package/dist/jsx/Diff/diff.native.js.map +1 -0
- package/dist/jsx/Diff/index.mjs +147 -0
- package/dist/jsx/Diff/index.mjs.map +1 -0
- package/dist/jsx/Diff/index.native.js +181 -0
- package/dist/jsx/Diff/index.native.js.map +1 -0
- package/dist/jsx/ElapsedProgress/index.mjs +76 -0
- package/dist/jsx/ElapsedProgress/index.mjs.map +1 -0
- package/dist/jsx/ElapsedProgress/index.native.js +112 -0
- package/dist/jsx/ElapsedProgress/index.native.js.map +1 -0
- package/dist/jsx/Lightbox/MediaControl.mjs +3 -7
- package/dist/jsx/Lightbox/MediaControl.mjs.map +1 -1
- package/dist/jsx/Lightbox/MediaControl.native.js +2 -8
- package/dist/jsx/Lightbox/MediaControl.native.js.map +1 -1
- package/dist/jsx/MachineLiteral/index.mjs +73 -0
- package/dist/jsx/MachineLiteral/index.mjs.map +1 -0
- package/dist/jsx/MachineLiteral/index.native.js +102 -0
- package/dist/jsx/MachineLiteral/index.native.js.map +1 -0
- package/dist/jsx/Material/blur.mjs +8 -0
- package/dist/jsx/Material/blur.mjs.map +1 -0
- package/dist/jsx/Material/blur.native.js +100 -0
- package/dist/jsx/Material/blur.native.js.map +1 -0
- package/dist/jsx/Material/index.mjs +10 -4
- package/dist/jsx/Material/index.mjs.map +1 -1
- package/dist/jsx/Material/index.native.js +9 -3
- package/dist/jsx/Material/index.native.js.map +1 -1
- package/dist/jsx/Meter/index.mjs +4 -3
- package/dist/jsx/Meter/index.mjs.map +1 -1
- package/dist/jsx/Meter/index.native.js +3 -1
- package/dist/jsx/Meter/index.native.js.map +1 -1
- package/dist/jsx/SortableList/index.mjs +2 -1
- package/dist/jsx/SortableList/index.mjs.map +1 -1
- package/dist/jsx/SortableList/index.native.js +4 -1
- package/dist/jsx/SortableList/index.native.js.map +1 -1
- package/dist/jsx/SortableList/useUserOrder.mjs +58 -0
- package/dist/jsx/SortableList/useUserOrder.mjs.map +1 -0
- package/dist/jsx/SortableList/useUserOrder.native.js +107 -0
- package/dist/jsx/SortableList/useUserOrder.native.js.map +1 -0
- package/dist/jsx/TreeSelect/index.mjs +8 -2
- package/dist/jsx/TreeSelect/index.mjs.map +1 -1
- package/dist/jsx/TreeSelect/index.native.js +7 -1
- package/dist/jsx/TreeSelect/index.native.js.map +1 -1
- package/dist/jsx/appShell/TabBar.mjs +10 -5
- package/dist/jsx/appShell/TabBar.mjs.map +1 -1
- package/dist/jsx/appShell/TabBar.native.js +10 -5
- package/dist/jsx/appShell/TabBar.native.js.map +1 -1
- package/dist/jsx/appShell/TabHost.native.js +1 -0
- package/dist/jsx/appShell/TabHost.native.js.map +1 -1
- package/dist/jsx/charts/Sparkline.mjs +1 -1
- package/dist/jsx/charts/Sparkline.mjs.map +1 -1
- package/dist/jsx/charts/Sparkline.native.js +1 -1
- package/dist/jsx/charts/Sparkline.native.js.map +1 -1
- package/dist/jsx/componentColors.mjs +1 -1
- package/dist/jsx/componentColors.native.js +1 -1
- package/dist/jsx/feedback/NotifyHost.native.js +1 -1
- package/dist/jsx/formLayouts/PreferencePanel.native.js +1 -1
- package/dist/jsx/index.js +5 -2
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +5 -2
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +7 -2
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/layouts/AsyncBoundary.native.js +1 -1
- package/dist/jsx/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/jsx/layouts/page.mjs +0 -4
- package/dist/jsx/layouts/page.mjs.map +1 -1
- package/dist/jsx/layouts/page.native.js +0 -4
- package/dist/jsx/layouts/page.native.js.map +1 -1
- package/dist/jsx/views/ImageGrid.mjs +10 -13
- package/dist/jsx/views/ImageGrid.mjs.map +1 -1
- package/dist/jsx/views/ImageGrid.native.js +9 -16
- package/dist/jsx/views/ImageGrid.native.js.map +1 -1
- package/dist/jsx/views/ReportBuilder.mjs +4 -4
- package/dist/jsx/views/ReportBuilder.mjs.map +1 -1
- package/dist/jsx/views/ReportBuilder.native.js +3 -3
- package/dist/jsx/views/ReportBuilder.native.js.map +1 -1
- package/dist/jsx/views/index.mjs +2 -1
- package/dist/jsx/views/index.mjs.map +1 -1
- package/dist/jsx/views/index.native.js +2 -0
- package/dist/jsx/views/index.native.js.map +1 -1
- package/dist/jsx/views/sameNameScope.mjs +14 -0
- package/dist/jsx/views/sameNameScope.mjs.map +1 -0
- package/dist/jsx/views/sameNameScope.native.js +63 -0
- package/dist/jsx/views/sameNameScope.native.js.map +1 -0
- package/dist/jsx/views/usePageFlowLoadMore.mjs +57 -0
- package/dist/jsx/views/usePageFlowLoadMore.mjs.map +1 -0
- package/dist/jsx/views/usePageFlowLoadMore.native.js +93 -0
- package/dist/jsx/views/usePageFlowLoadMore.native.js.map +1 -0
- package/package.json +18 -9
- package/src/Diff/Diff.spec.tsx +105 -0
- package/src/Diff/Diff.stories.tsx +44 -0
- package/src/Diff/diff.ts +61 -0
- package/src/Diff/index.tsx +145 -0
- package/src/ElapsedProgress/ElapsedProgress.spec.tsx +66 -0
- package/src/ElapsedProgress/ElapsedProgress.stories.tsx +43 -0
- package/src/ElapsedProgress/index.tsx +89 -0
- package/src/Lightbox/Lightbox.spec.tsx +1 -1
- package/src/Lightbox/MediaControl.tsx +6 -14
- package/src/MachineLiteral/MachineLiteral.spec.tsx +86 -0
- package/src/MachineLiteral/MachineLiteral.stories.tsx +44 -0
- package/src/MachineLiteral/index.tsx +75 -0
- package/src/Material/blur.native.spec.tsx +135 -0
- package/src/Material/blur.native.tsx +93 -0
- package/src/Material/blur.ts +11 -0
- package/src/Material/index.tsx +18 -6
- package/src/Meter/index.tsx +4 -2
- package/src/SortableList/index.tsx +2 -0
- package/src/SortableList/useUserOrder.spec.tsx +110 -0
- package/src/SortableList/useUserOrder.ts +96 -0
- package/src/TreeSelect/TreeSelect.rows.spec.tsx +44 -0
- package/src/TreeSelect/index.tsx +12 -1
- package/src/appShell/TabBar.tsx +3 -0
- package/src/appShell/TabHost.native.spec.tsx +21 -1
- package/src/appShell/TabHost.native.tsx +8 -0
- package/src/charts/Sparkline.tsx +3 -3
- package/src/componentColors.ts +1 -1
- package/src/index.ts +7 -0
- package/src/layouts/page.tsx +1 -8
- package/src/layouts/pageChrome.phone.spec.tsx +14 -0
- package/src/presentationEmpty.spec.tsx +71 -0
- package/src/views/ImageGrid.native-press.spec.tsx +172 -0
- package/src/views/ImageGrid.tsx +11 -17
- package/src/views/ReportBuilder.tsx +4 -3
- package/src/views/index.ts +1 -0
- package/src/views/sameNameScope.spec.tsx +55 -0
- package/src/views/sameNameScope.ts +22 -0
- package/src/views/usePageFlowLoadMore.ts +79 -0
- package/types/Diff/diff.d.ts +17 -0
- package/types/Diff/diff.d.ts.map +1 -0
- package/types/Diff/index.d.ts +15 -0
- package/types/Diff/index.d.ts.map +1 -0
- package/types/ElapsedProgress/index.d.ts +15 -0
- package/types/ElapsedProgress/index.d.ts.map +1 -0
- package/types/Lightbox/MediaControl.d.ts +2 -4
- package/types/Lightbox/MediaControl.d.ts.map +1 -1
- package/types/MachineLiteral/index.d.ts +13 -0
- package/types/MachineLiteral/index.d.ts.map +1 -0
- package/types/Material/blur.d.ts +9 -0
- package/types/Material/blur.d.ts.map +1 -0
- package/types/Material/blur.native.d.ts +38 -0
- package/types/Material/blur.native.d.ts.map +1 -0
- package/types/Material/index.d.ts.map +1 -1
- package/types/Meter/index.d.ts +2 -0
- package/types/Meter/index.d.ts.map +1 -1
- package/types/SortableList/index.d.ts +2 -0
- package/types/SortableList/index.d.ts.map +1 -1
- package/types/SortableList/useUserOrder.d.ts +28 -0
- package/types/SortableList/useUserOrder.d.ts.map +1 -0
- package/types/TreeSelect/index.d.ts.map +1 -1
- package/types/appShell/TabBar.d.ts.map +1 -1
- package/types/appShell/TabHost.native.d.ts +1 -0
- package/types/appShell/TabHost.native.d.ts.map +1 -1
- package/types/charts/Sparkline.d.ts +2 -2
- package/types/charts/Sparkline.d.ts.map +1 -1
- package/types/componentColors.d.ts +1 -1
- package/types/index.d.ts +5 -2
- package/types/index.d.ts.map +1 -1
- package/types/layouts/page.d.ts.map +1 -1
- package/types/views/ImageGrid.d.ts.map +1 -1
- package/types/views/ReportBuilder.d.ts.map +1 -1
- package/types/views/index.d.ts +1 -0
- package/types/views/index.d.ts.map +1 -1
- package/types/views/sameNameScope.d.ts +8 -0
- package/types/views/sameNameScope.d.ts.map +1 -0
- package/types/views/usePageFlowLoadMore.d.ts +26 -0
- package/types/views/usePageFlowLoadMore.d.ts.map +1 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: () => from[key],
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
23
|
+
value: true
|
|
24
|
+
}), mod);
|
|
25
|
+
var usePageFlowLoadMore_exports = {};
|
|
26
|
+
__export(usePageFlowLoadMore_exports, {
|
|
27
|
+
PAGE_FLOW_POLL_MS: () => PAGE_FLOW_POLL_MS,
|
|
28
|
+
usePageFlowLoadMore: () => usePageFlowLoadMore
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(usePageFlowLoadMore_exports);
|
|
31
|
+
var import_react = require("react");
|
|
32
|
+
var import_tamagui = require("tamagui");
|
|
33
|
+
var PAGE_FLOW_POLL_MS = 250;
|
|
34
|
+
function usePageFlowLoadMore(param) {
|
|
35
|
+
var {
|
|
36
|
+
sentinelRef,
|
|
37
|
+
enabled,
|
|
38
|
+
onLoadMore,
|
|
39
|
+
rearmKey
|
|
40
|
+
} = param;
|
|
41
|
+
var onLoadMoreRef = (0, import_react.useRef)(onLoadMore);
|
|
42
|
+
onLoadMoreRef.current = onLoadMore;
|
|
43
|
+
var {
|
|
44
|
+
width,
|
|
45
|
+
height
|
|
46
|
+
} = (0, import_tamagui.useWindowDimensions)();
|
|
47
|
+
var windowRef = (0, import_react.useRef)({
|
|
48
|
+
width,
|
|
49
|
+
height
|
|
50
|
+
});
|
|
51
|
+
windowRef.current = {
|
|
52
|
+
width,
|
|
53
|
+
height
|
|
54
|
+
};
|
|
55
|
+
var live = enabled && Boolean(onLoadMore);
|
|
56
|
+
(0, import_react.useEffect)(function () {
|
|
57
|
+
if (!live) return;
|
|
58
|
+
if (import_tamagui.isWeb) {
|
|
59
|
+
if (typeof IntersectionObserver === "undefined") return;
|
|
60
|
+
var el = sentinelRef.current;
|
|
61
|
+
if (!el) return;
|
|
62
|
+
var observer = new IntersectionObserver(function (entries) {
|
|
63
|
+
var _onLoadMoreRef_current;
|
|
64
|
+
if (entries.some(function (entry) {
|
|
65
|
+
return entry.isIntersecting;
|
|
66
|
+
})) (_onLoadMoreRef_current = onLoadMoreRef.current) === null || _onLoadMoreRef_current === void 0 ? void 0 : _onLoadMoreRef_current.call(onLoadMoreRef);
|
|
67
|
+
});
|
|
68
|
+
observer.observe(el);
|
|
69
|
+
return function () {
|
|
70
|
+
return observer.disconnect();
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
var active = true;
|
|
74
|
+
var inside = false;
|
|
75
|
+
var timer = setInterval(function () {
|
|
76
|
+
var node = sentinelRef.current;
|
|
77
|
+
if (typeof (node === null || node === void 0 ? void 0 : node.measureInWindow) !== "function") return;
|
|
78
|
+
node.measureInWindow(function (x, y, w, h) {
|
|
79
|
+
var _onLoadMoreRef_current;
|
|
80
|
+
if (!active || w <= 0) return;
|
|
81
|
+
var win = windowRef.current;
|
|
82
|
+
var now = y <= win.height && y + h >= 0 && x < win.width && x + w > 0;
|
|
83
|
+
if (now && !inside) (_onLoadMoreRef_current = onLoadMoreRef.current) === null || _onLoadMoreRef_current === void 0 ? void 0 : _onLoadMoreRef_current.call(onLoadMoreRef);
|
|
84
|
+
inside = now;
|
|
85
|
+
});
|
|
86
|
+
}, PAGE_FLOW_POLL_MS);
|
|
87
|
+
return function () {
|
|
88
|
+
active = false;
|
|
89
|
+
clearInterval(timer);
|
|
90
|
+
};
|
|
91
|
+
}, [live, rearmKey, sentinelRef]);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=usePageFlowLoadMore.native.js.map
|
|
@@ -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","usePageFlowLoadMore_exports","PAGE_FLOW_POLL_MS","usePageFlowLoadMore","module","exports","import_react","require","import_tamagui","param","sentinelRef","enabled","onLoadMore","rearmKey","onLoadMoreRef","useRef","current","width","height","useWindowDimensions","windowRef","live","Boolean","useEffect","isWeb","IntersectionObserver","el"],"sources":["../../../src/views/usePageFlowLoadMore.ts"],"sourcesContent":[null],"mappings":"AAAA,YAAyB;;AACzB,IAAAA,SAAS,GAAOC,MAAA,CAAAC,cAAA;AAGT,IAAAC,gBAAM,GAAAF,MAAoB,CAAAG,wBAAA;AA8B1B,IAAAC,iBAAS,GAAAJ,MAAoB,CAAAK,mBAAA;AAAA,IAClCC,YAAA,GAAAN,MAAA,CAAAO,SAAA,CAAAC,cAAA;AAAA,IACAC,QAAA,GAAAA,CAAAC,MAAA,EAAAC,GAAA;EACA,SAAAC,IAAA,IAAAD,GAAA,EACAZ,SAAA,CAAAW,MAAA,EAAAE,IAAA;IAAAC,GAAA,EAAAF,GAAA,CAAAC,IAAA;IAAAE,UAAA;EAAA;AACF;AACE,IAAAC,WAAM,GAAAA,CAAAC,EAAA,EAAAC,IAAgB,EAAAC,MAAO,EAAAC,IAAU;EACvC,IAAAF,IAAA,WAAcA,IAAA,KAAU,mBAAAA,IAAA;IACxB,KAAM,IAAEG,GAAA,IAAOhB,iBAAW,CAAAa,IAAA,GAC1B,IAAM,CAAAX,YAAY,CAAAe,IAAO,CAAEL,EAAA,EAAAI,GAAO,KAAAA,GAAQ,KAAAF,MAAA,EAC1CnB,SAAU,CAAAiB,EAAA,EAAUI,GAAE;MAAAP,GAAO,EAAAA,CAAA,KAAOI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;EACpC;EAEA,OAAAE,EAAA;AACE;AACA,IAAAM,YAAW,GAAAC,GAAA,IAAAR,WAAA,CAAAhB,SAAA;EAAAyB,KAAA;AAAA,IAAAD,GAAA;AACT,IAAAE,2BAAW;AACXhB,QAAA,CAAAgB,2BAAuB;EACvBC,iBAAS,EAAAA,CAAA,KAAAA,iBAAA;EACTC,mBAAM,EAAWA,CAAA,KAAIA;AACnB;AAA2EC,MAC7E,CAACC,OAAA,GAAAP,YAAA,CAAAG,2BAAA;AACD,IAAAK,YAAS,GAAAC,OAAU;AACnB,IAAAC,cAAO,GAAMD,OAAS,WAAW;AAAA,IACnCL,iBAAA;AACA,SAAIC,mBAASA,CAAAM,KAAA;EACb;IAAIC,WAAS;IAAAC,OAAA;IAAAC,UAAA;IAAAC;EAAA,IAAAJ,KAAA;EACb,IAAAK,aAAc,OAAAR,YAAkB,CAAAS,MAAA,EAAAH,UAAA;EAC9BE,aAAM,CAAAE,OAAO,GAAAJ,UAAY;EACzB;IAAAK,KAAI;IAAAC;EAAO,CAAM,OAAAV,cAAoB,CAAAW,mBAAY;EACjD,IAAAC,SAAK,OAAAd,YAAuB,CAAAS,MAAG,EAAM;IAEnCE,KAAA;IACAC;EACA;EACAE,SAAA,CAAIJ,OAAO,GAAC;IACZC,KAAA;IAASC;EACV;EAEH,IAAAG,IAAA,GAAOV,OAAM,IAAAW,OAAA,CAAAV,UAAA;EACX,IAAAN,YAAS,CAAAiB,SAAA;IACT,KAAAF,IAAA;IACF,IAAAb,cAAA,CAAAgB,KAAA;MACE,WAAMC,oBAAsB;MAClC,IAAAC,EAAA,GAAAhB,WAAA,CAAAM,OAAA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/components",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.79.0",
|
|
4
4
|
"description": "multiplatform.one ui components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"components",
|
|
@@ -58,11 +58,11 @@
|
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
60
|
"@floating-ui/react": "^0.27.20",
|
|
61
|
-
"@multiplatform.one/forms": "^7.
|
|
62
|
-
"@multiplatform.one/i18n": "^7.
|
|
63
|
-
"@multiplatform.one/platform": "^7.
|
|
64
|
-
"@multiplatform.one/router": "^7.
|
|
65
|
-
"@multiplatform.one/theme": "^7.
|
|
61
|
+
"@multiplatform.one/forms": "^7.79.0",
|
|
62
|
+
"@multiplatform.one/i18n": "^7.79.0",
|
|
63
|
+
"@multiplatform.one/platform": "^7.79.0",
|
|
64
|
+
"@multiplatform.one/router": "^7.79.0",
|
|
65
|
+
"@multiplatform.one/theme": "^7.79.0",
|
|
66
66
|
"@phosphor-icons/react": "^2.1.10",
|
|
67
67
|
"@shopify/flash-list": "^2.3.1",
|
|
68
68
|
"@tamagui/colors": "2.7.6",
|
|
@@ -89,9 +89,9 @@
|
|
|
89
89
|
"tamagui": "2.7.6"
|
|
90
90
|
},
|
|
91
91
|
"devDependencies": {
|
|
92
|
-
"@multiplatform.one/config": "7.
|
|
93
|
-
"@multiplatform.one/storybook": "7.
|
|
94
|
-
"@multiplatform.one/test-utils": "7.
|
|
92
|
+
"@multiplatform.one/config": "7.79.0",
|
|
93
|
+
"@multiplatform.one/storybook": "7.79.0",
|
|
94
|
+
"@multiplatform.one/test-utils": "7.79.0",
|
|
95
95
|
"@tamagui/build": "2.7.6",
|
|
96
96
|
"@testing-library/jest-dom": "^7.0.1",
|
|
97
97
|
"@testing-library/react": "^16.3.3",
|
|
@@ -99,6 +99,7 @@
|
|
|
99
99
|
"@types/d3-shape": "^3.2.0",
|
|
100
100
|
"@vitejs/plugin-react": "^6.1.2",
|
|
101
101
|
"@vitest/coverage-v8": "^4.1.5",
|
|
102
|
+
"expo-blur": "~55.0.18",
|
|
102
103
|
"expo-video": "~55.0.19",
|
|
103
104
|
"matchmedia-polyfill": "^0.3.2",
|
|
104
105
|
"moti": "^0.30.0",
|
|
@@ -115,6 +116,8 @@
|
|
|
115
116
|
"@mdx-js/react": "^3.1.1",
|
|
116
117
|
"@vxrn/color-scheme": "^1.0.0",
|
|
117
118
|
"expo-asset": "*",
|
|
119
|
+
"expo-blur": "*",
|
|
120
|
+
"expo-modules-core": "*",
|
|
118
121
|
"expo-video": "*",
|
|
119
122
|
"gray-matter": "^4.0.3",
|
|
120
123
|
"hast-util-to-html": "8.0.4",
|
|
@@ -149,6 +152,12 @@
|
|
|
149
152
|
"expo-asset": {
|
|
150
153
|
"optional": true
|
|
151
154
|
},
|
|
155
|
+
"expo-blur": {
|
|
156
|
+
"optional": true
|
|
157
|
+
},
|
|
158
|
+
"expo-modules-core": {
|
|
159
|
+
"optional": true
|
|
160
|
+
},
|
|
152
161
|
"expo-video": {
|
|
153
162
|
"optional": true
|
|
154
163
|
},
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LC-190 CHANGE-POLARITY: a change view speaks insert and delete. The Main
|
|
3
|
+
* story marks added content <ins> and removed content <del>, says "added" and
|
|
4
|
+
* "removed" to assistive tech, puts the counts in the region's name, keeps the
|
|
5
|
+
* +/− gutter out of selection and out of the accessibility tree, and paints
|
|
6
|
+
* the success and error washes with neutral ink, never a border or solid.
|
|
7
|
+
*/
|
|
8
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
9
|
+
import { cleanup } from "@testing-library/react";
|
|
10
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
11
|
+
import meta, { Default, NoChanges, NoReading } from "./Diff.stories";
|
|
12
|
+
import { Diff, countDiff, diffLines, type DiffProps } from "./index";
|
|
13
|
+
|
|
14
|
+
afterEach(cleanup);
|
|
15
|
+
|
|
16
|
+
function mount(args: unknown) {
|
|
17
|
+
return renderWithProviders(<Diff {...(args as DiffProps)} />);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
describe("diffLines", () => {
|
|
21
|
+
it("keeps common lines and orders a hunk removed before added", () => {
|
|
22
|
+
const lines = diffLines("a\nb\nc", "a\nB\nc\nd");
|
|
23
|
+
expect(lines.map((line) => `${line.kind}:${line.text}`)).toEqual([
|
|
24
|
+
"same:a",
|
|
25
|
+
"removed:b",
|
|
26
|
+
"added:B",
|
|
27
|
+
"same:c",
|
|
28
|
+
"added:d",
|
|
29
|
+
]);
|
|
30
|
+
expect(countDiff(lines)).toEqual({ added: 2, removed: 1 });
|
|
31
|
+
expect(lines[2]).toMatchObject({ after: 2 });
|
|
32
|
+
expect(lines[1]).toMatchObject({ before: 2 });
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
describe("Diff (LC-190)", () => {
|
|
37
|
+
it("declares the Components/Diff title", () => {
|
|
38
|
+
expect(meta.title).toBe("Components/Diff");
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("marks content with ins and del and the hidden polarity words", () => {
|
|
42
|
+
const { container } = mount(Default.args);
|
|
43
|
+
const ins = [...container.querySelectorAll("ins")];
|
|
44
|
+
const del = [...container.querySelectorAll("del")];
|
|
45
|
+
expect(ins.map((node) => node.textContent)).toEqual([
|
|
46
|
+
"added: listen 443 ssl;",
|
|
47
|
+
"added: http2 on;",
|
|
48
|
+
]);
|
|
49
|
+
expect(del.map((node) => node.textContent)).toEqual(["removed: listen 80;"]);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("names the region with the counts", () => {
|
|
53
|
+
const { container } = mount(Default.args);
|
|
54
|
+
const region = container.querySelector("[role='region']");
|
|
55
|
+
expect(region?.getAttribute("aria-label")).toBe("nginx.conf: 2 added, 1 removed");
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("keeps the gutter out of selection and out of the accessibility tree", () => {
|
|
59
|
+
const { container } = mount(Default.args);
|
|
60
|
+
const gutters = [...container.querySelectorAll("[data-diff-gutter]")] as HTMLElement[];
|
|
61
|
+
expect(gutters.length).toBe(6);
|
|
62
|
+
for (const gutter of gutters) {
|
|
63
|
+
expect(gutter.getAttribute("aria-hidden")).toBe("true");
|
|
64
|
+
const inline = gutter.getAttribute("style") ?? "";
|
|
65
|
+
const unselectable =
|
|
66
|
+
/(?:^|\s)_(?:userSelect|ussl|ussel)-none(?:\s|$)/.test(gutter.className) ||
|
|
67
|
+
/user-select:\s*none/.test(inline) ||
|
|
68
|
+
getComputedStyle(gutter).userSelect === "none";
|
|
69
|
+
expect(unselectable, `${gutter.className} | ${inline}`).toBe(true);
|
|
70
|
+
}
|
|
71
|
+
const glyphs = gutters.map((gutter) => gutter.textContent?.slice(-1));
|
|
72
|
+
expect(glyphs.filter((glyph) => glyph === "+")).toHaveLength(2);
|
|
73
|
+
expect(glyphs.filter((glyph) => glyph === "−")).toHaveLength(1);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("washes added and removed rows, neutral ink, no border or solid fill", () => {
|
|
77
|
+
const { container } = mount(Default.args);
|
|
78
|
+
for (const kind of ["added", "removed"] as const) {
|
|
79
|
+
for (const row of container.querySelectorAll(`[data-diff-line='${kind}']`)) {
|
|
80
|
+
const style = getComputedStyle(row as HTMLElement);
|
|
81
|
+
expect(style.borderTopWidth || "0px").toMatch(/^0/);
|
|
82
|
+
expect(row.className).not.toMatch(/_bw-|_btw-/);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
expect(container.querySelectorAll("[data-diff-line='same']")).toHaveLength(3);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it("identical sides draw No changes, not a zero count", () => {
|
|
89
|
+
const { container } = mount(NoChanges.args);
|
|
90
|
+
expect(container.textContent).toContain("No changes");
|
|
91
|
+
expect(container.textContent).not.toMatch(/\b0\b/);
|
|
92
|
+
expect(container.querySelector("[role='region']")?.getAttribute("aria-label")).toBe(
|
|
93
|
+
"nginx.conf: no changes",
|
|
94
|
+
);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("no reading draws the em dash and says so", () => {
|
|
98
|
+
const { container } = mount(NoReading.args);
|
|
99
|
+
expect(container.querySelector("[data-diff-empty='unknown']")?.textContent).toBe("—");
|
|
100
|
+
expect(container.textContent).not.toMatch(/\b0\b/);
|
|
101
|
+
expect(container.querySelector("[role='region']")?.getAttribute("aria-label")).toBe(
|
|
102
|
+
"nginx.conf: no reading",
|
|
103
|
+
);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
2
|
+
import { Diff } from "./index";
|
|
3
|
+
|
|
4
|
+
const meta: Meta<typeof Diff> = {
|
|
5
|
+
title: "Components/Diff",
|
|
6
|
+
component: Diff,
|
|
7
|
+
parameters: {
|
|
8
|
+
status: { type: "beta" },
|
|
9
|
+
docs: {
|
|
10
|
+
description: {
|
|
11
|
+
component:
|
|
12
|
+
"A change view (LC-190): added lines on the success wash, removed lines on the error wash, neutral ink, a +/− gutter that is never selected or read, <ins>/<del> with hidden polarity words on web, and the counts in the region's accessible name. No reading draws an em dash; identical sides draw No changes (LC-220).",
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
export default meta;
|
|
18
|
+
|
|
19
|
+
type Story = StoryObj<typeof Diff>;
|
|
20
|
+
|
|
21
|
+
export const Default: Story = {
|
|
22
|
+
name: "Main",
|
|
23
|
+
args: {
|
|
24
|
+
label: "nginx.conf",
|
|
25
|
+
before: "server {\n listen 80;\n root /srv/www;\n}",
|
|
26
|
+
after: "server {\n listen 443 ssl;\n root /srv/www;\n http2 on;\n}",
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const NoChanges: Story = {
|
|
31
|
+
args: {
|
|
32
|
+
label: "nginx.conf",
|
|
33
|
+
before: "server {\n listen 80;\n}",
|
|
34
|
+
after: "server {\n listen 80;\n}",
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const NoReading: Story = {
|
|
39
|
+
args: {
|
|
40
|
+
label: "nginx.conf",
|
|
41
|
+
before: null,
|
|
42
|
+
after: null,
|
|
43
|
+
},
|
|
44
|
+
};
|
package/src/Diff/diff.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export type DiffLineKind = "added" | "removed" | "same";
|
|
2
|
+
|
|
3
|
+
export interface DiffLine {
|
|
4
|
+
kind: DiffLineKind;
|
|
5
|
+
text: string;
|
|
6
|
+
/** 1-based line in the before text; absent on an added line. */
|
|
7
|
+
before?: number;
|
|
8
|
+
/** 1-based line in the after text; absent on a removed line. */
|
|
9
|
+
after?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface DiffCounts {
|
|
13
|
+
added: number;
|
|
14
|
+
removed: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function splitLines(text: string): string[] {
|
|
18
|
+
return text === "" ? [] : text.replace(/\r\n/g, "\n").split("\n");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Line diff by longest common subsequence, removals before additions in a hunk. */
|
|
22
|
+
export function diffLines(before: string, after: string): DiffLine[] {
|
|
23
|
+
const a = splitLines(before);
|
|
24
|
+
const b = splitLines(after);
|
|
25
|
+
const lcs: number[][] = Array.from({ length: a.length + 1 }, () =>
|
|
26
|
+
new Array<number>(b.length + 1).fill(0),
|
|
27
|
+
);
|
|
28
|
+
for (let i = a.length - 1; i >= 0; i -= 1) {
|
|
29
|
+
for (let j = b.length - 1; j >= 0; j -= 1) {
|
|
30
|
+
lcs[i]![j] =
|
|
31
|
+
a[i] === b[j] ? lcs[i + 1]![j + 1]! + 1 : Math.max(lcs[i + 1]![j]!, lcs[i]![j + 1]!);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const lines: DiffLine[] = [];
|
|
35
|
+
let i = 0;
|
|
36
|
+
let j = 0;
|
|
37
|
+
while (i < a.length || j < b.length) {
|
|
38
|
+
if (i < a.length && j < b.length && a[i] === b[j]) {
|
|
39
|
+
lines.push({ kind: "same", text: a[i]!, before: i + 1, after: j + 1 });
|
|
40
|
+
i += 1;
|
|
41
|
+
j += 1;
|
|
42
|
+
} else if (j >= b.length || (i < a.length && lcs[i + 1]![j]! >= lcs[i]![j + 1]!)) {
|
|
43
|
+
lines.push({ kind: "removed", text: a[i]!, before: i + 1 });
|
|
44
|
+
i += 1;
|
|
45
|
+
} else {
|
|
46
|
+
lines.push({ kind: "added", text: b[j]!, after: j + 1 });
|
|
47
|
+
j += 1;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return lines;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function countDiff(lines: readonly DiffLine[]): DiffCounts {
|
|
54
|
+
let added = 0;
|
|
55
|
+
let removed = 0;
|
|
56
|
+
for (const line of lines) {
|
|
57
|
+
if (line.kind === "added") added += 1;
|
|
58
|
+
else if (line.kind === "removed") removed += 1;
|
|
59
|
+
}
|
|
60
|
+
return { added, removed };
|
|
61
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff — a change view that speaks insert and delete (LC-190).
|
|
3
|
+
*
|
|
4
|
+
* Added lines sit on the success wash, removed lines on the error wash, both
|
|
5
|
+
* in neutral ink, with a +/− gutter glyph that is never selected or read.
|
|
6
|
+
* Web marks the content `<ins>`/`<del>` and prefixes the hidden words
|
|
7
|
+
* "added"/"removed"; native puts the same words in each row's label. The
|
|
8
|
+
* region's accessible name carries the counts.
|
|
9
|
+
*
|
|
10
|
+
* LC-220: no reading (either side missing) draws the em dash and says so;
|
|
11
|
+
* identical sides draw "No changes". Neither is a zero.
|
|
12
|
+
*/
|
|
13
|
+
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
14
|
+
import { useMemo } from "react";
|
|
15
|
+
import { Text, XStack, YStack, isWeb, type YStackProps } from "tamagui";
|
|
16
|
+
import { useTranslation } from "../shared/i18n";
|
|
17
|
+
import { withInterp } from "../shared/t";
|
|
18
|
+
import { countDiff, diffLines, type DiffLine } from "./diff";
|
|
19
|
+
|
|
20
|
+
export { countDiff, diffLines } from "./diff";
|
|
21
|
+
export type { DiffCounts, DiffLine, DiffLineKind } from "./diff";
|
|
22
|
+
|
|
23
|
+
export interface DiffProps extends Omit<YStackProps, "children"> {
|
|
24
|
+
/** The text before the change; null or undefined is no reading. */
|
|
25
|
+
before?: string | null;
|
|
26
|
+
/** The text after the change; null or undefined is no reading. */
|
|
27
|
+
after?: string | null;
|
|
28
|
+
/** What changed, the head of the region's accessible name ("nginx.conf"). */
|
|
29
|
+
label: string;
|
|
30
|
+
/** Show before/after line numbers in the gutter (default true). */
|
|
31
|
+
lineNumbers?: boolean;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const unknownMark = "—";
|
|
35
|
+
const glyphs = { added: "+", removed: "−", same: " " } as const;
|
|
36
|
+
const washes = { added: "$green3", removed: "$red3", same: undefined } as const;
|
|
37
|
+
const elements = { added: "ins", removed: "del", same: "span" } as const;
|
|
38
|
+
|
|
39
|
+
const hiddenWord = isWeb
|
|
40
|
+
? ({
|
|
41
|
+
position: "absolute",
|
|
42
|
+
width: 1,
|
|
43
|
+
height: 1,
|
|
44
|
+
overflow: "hidden",
|
|
45
|
+
whiteSpace: "nowrap",
|
|
46
|
+
opacity: 0,
|
|
47
|
+
} as const)
|
|
48
|
+
: undefined;
|
|
49
|
+
|
|
50
|
+
export function Diff({ before, after, label, lineNumbers = true, ...frameProps }: DiffProps) {
|
|
51
|
+
const { t } = useTranslation();
|
|
52
|
+
const { knobProps } = useResolvedKnobs({ component: "Diff" });
|
|
53
|
+
const known = before != null && after != null;
|
|
54
|
+
const lines = useMemo(
|
|
55
|
+
() => (known ? diffLines(before as string, after as string) : []),
|
|
56
|
+
[known, before, after],
|
|
57
|
+
);
|
|
58
|
+
const counts = countDiff(lines);
|
|
59
|
+
const changed = counts.added + counts.removed > 0;
|
|
60
|
+
const state = !known ? "unknown" : changed ? "changed" : "same";
|
|
61
|
+
const summary =
|
|
62
|
+
state === "unknown"
|
|
63
|
+
? withInterp(t("{{label}}: no reading", { label }), { label })
|
|
64
|
+
: state === "same"
|
|
65
|
+
? withInterp(t("{{label}}: no changes", { label }), { label })
|
|
66
|
+
: withInterp(t("{{label}}: {{added}} added, {{removed}} removed", { label, ...counts }), {
|
|
67
|
+
label,
|
|
68
|
+
...counts,
|
|
69
|
+
});
|
|
70
|
+
const words = { added: t("added"), removed: t("removed") };
|
|
71
|
+
|
|
72
|
+
const mono = {
|
|
73
|
+
...knobProps.body,
|
|
74
|
+
fontFamily: "$mono",
|
|
75
|
+
letterSpacing: 0,
|
|
76
|
+
color: "$color12",
|
|
77
|
+
} as const;
|
|
78
|
+
|
|
79
|
+
const row = (line: DiffLine, index: number) => {
|
|
80
|
+
const marked = line.kind !== "same";
|
|
81
|
+
return (
|
|
82
|
+
<XStack
|
|
83
|
+
key={index}
|
|
84
|
+
backgroundColor={washes[line.kind]}
|
|
85
|
+
data-diff-line={line.kind}
|
|
86
|
+
{...(!isWeb && marked
|
|
87
|
+
? { accessible: true, accessibilityLabel: `${words[line.kind]}: ${line.text}` }
|
|
88
|
+
: null)}
|
|
89
|
+
>
|
|
90
|
+
<XStack
|
|
91
|
+
aria-hidden
|
|
92
|
+
userSelect="none"
|
|
93
|
+
flexShrink={0}
|
|
94
|
+
gap="$2"
|
|
95
|
+
paddingHorizontal="$2"
|
|
96
|
+
data-diff-gutter=""
|
|
97
|
+
>
|
|
98
|
+
{lineNumbers ? (
|
|
99
|
+
<>
|
|
100
|
+
<Text {...mono} color="$color11" minWidth="$2" textAlign="right">
|
|
101
|
+
{line.before ?? ""}
|
|
102
|
+
</Text>
|
|
103
|
+
<Text {...mono} color="$color11" minWidth="$2" textAlign="right">
|
|
104
|
+
{line.after ?? ""}
|
|
105
|
+
</Text>
|
|
106
|
+
</>
|
|
107
|
+
) : null}
|
|
108
|
+
<Text {...mono}>{glyphs[line.kind]}</Text>
|
|
109
|
+
</XStack>
|
|
110
|
+
<Text
|
|
111
|
+
{...mono}
|
|
112
|
+
flex={1}
|
|
113
|
+
render={isWeb ? elements[line.kind] : undefined}
|
|
114
|
+
textDecorationLine="none"
|
|
115
|
+
{...(isWeb ? { whiteSpace: "pre-wrap" } : null)}
|
|
116
|
+
>
|
|
117
|
+
{marked && isWeb ? <Text style={hiddenWord}>{`${words[line.kind]}: `}</Text> : null}
|
|
118
|
+
{line.text}
|
|
119
|
+
</Text>
|
|
120
|
+
</XStack>
|
|
121
|
+
);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
return (
|
|
125
|
+
<YStack
|
|
126
|
+
role="region"
|
|
127
|
+
aria-label={summary}
|
|
128
|
+
accessibilityLabel={summary}
|
|
129
|
+
overflow="hidden"
|
|
130
|
+
{...knobProps.borderRadius}
|
|
131
|
+
data-diff-state={state}
|
|
132
|
+
{...frameProps}
|
|
133
|
+
>
|
|
134
|
+
{state === "changed" ? (
|
|
135
|
+
lines.map(row)
|
|
136
|
+
) : (
|
|
137
|
+
<XStack paddingHorizontal="$2" data-diff-empty={state}>
|
|
138
|
+
<Text {...mono} color="$color11">
|
|
139
|
+
{state === "unknown" ? unknownMark : t("No changes")}
|
|
140
|
+
</Text>
|
|
141
|
+
</XStack>
|
|
142
|
+
)}
|
|
143
|
+
</YStack>
|
|
144
|
+
);
|
|
145
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LC-185 ELAPSED-NOT-SPINNER: under a fake clock, a short wait is a bare
|
|
3
|
+
* spinner; past the threshold the elapsed time joins it and keeps counting;
|
|
4
|
+
* determinate work draws the bar.
|
|
5
|
+
*/
|
|
6
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
7
|
+
import { act, cleanup } from "@testing-library/react";
|
|
8
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
9
|
+
import { Default } from "./ElapsedProgress.stories";
|
|
10
|
+
import { ElapsedProgress, formatElapsed } from "./index";
|
|
11
|
+
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
vi.useFakeTimers();
|
|
14
|
+
vi.setSystemTime(new Date("2026-10-29T12:00:00Z"));
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
cleanup();
|
|
19
|
+
vi.useRealTimers();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
function elapsedOf(container: HTMLElement) {
|
|
23
|
+
return container.querySelector("[data-elapsed]")?.textContent ?? null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
describe("ElapsedProgress (LC-185)", () => {
|
|
27
|
+
it("formats the length as m:ss, then h:mm:ss", () => {
|
|
28
|
+
expect(formatElapsed(4_000)).toBe("0:04");
|
|
29
|
+
expect(formatElapsed(65_000)).toBe("1:05");
|
|
30
|
+
expect(formatElapsed(2 * 3_600_000 + 4 * 60_000 + 9_000)).toBe("2:04:09");
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("a short wait is a bare spinner; past the threshold the time joins and counts", () => {
|
|
34
|
+
const { container } = renderWithProviders(
|
|
35
|
+
<ElapsedProgress startedAt={Date.now()} label="Sync" />,
|
|
36
|
+
);
|
|
37
|
+
expect(container.querySelector("[role='status']")).toBeTruthy();
|
|
38
|
+
expect(elapsedOf(container)).toBeNull();
|
|
39
|
+
|
|
40
|
+
act(() => {
|
|
41
|
+
vi.advanceTimersByTime(4_000);
|
|
42
|
+
});
|
|
43
|
+
expect(elapsedOf(container)).toBe("0:04");
|
|
44
|
+
act(() => {
|
|
45
|
+
vi.advanceTimersByTime(61_000);
|
|
46
|
+
});
|
|
47
|
+
expect(elapsedOf(container)).toBe("1:05");
|
|
48
|
+
expect(container.querySelector("[aria-label='Sync, running for 1:05']")).toBeTruthy();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("the Main story, a minute in, shows the length beside the spinner", () => {
|
|
52
|
+
const { container } = renderWithProviders(<>{Default.render?.({} as never, {} as never)}</>);
|
|
53
|
+
expect(elapsedOf(container)).toBe("1:05");
|
|
54
|
+
expect(container.querySelector("[role='status']")).toBeTruthy();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("determinate work draws the bar and the length, no spinner", () => {
|
|
58
|
+
const { container } = renderWithProviders(
|
|
59
|
+
<ElapsedProgress startedAt={Date.now() - 95_000} progress={0.42} label="Upload" />,
|
|
60
|
+
);
|
|
61
|
+
expect(container.querySelector("[data-elapsed-state='determinate']")).toBeTruthy();
|
|
62
|
+
expect(container.querySelector("[role='progressbar']")).toBeTruthy();
|
|
63
|
+
expect(container.querySelector(".mp1-spinner")).toBeNull();
|
|
64
|
+
expect(elapsedOf(container)).toBe("1:35");
|
|
65
|
+
});
|
|
66
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { YStack } from "tamagui";
|
|
4
|
+
import { ElapsedProgress } from "./index";
|
|
5
|
+
|
|
6
|
+
const meta: Meta<typeof ElapsedProgress> = {
|
|
7
|
+
title: "Components/ElapsedProgress",
|
|
8
|
+
component: ElapsedProgress,
|
|
9
|
+
parameters: {
|
|
10
|
+
status: { type: "beta" },
|
|
11
|
+
docs: {
|
|
12
|
+
description: {
|
|
13
|
+
component:
|
|
14
|
+
"Long work shows how long (LC-185). Determinate progress draws the bar beside the elapsed time; otherwise the spinner stands alone for the first few seconds and then the elapsed time joins it. Reduced motion stops the spinner, never the count.",
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
export default meta;
|
|
20
|
+
|
|
21
|
+
type Story = StoryObj<typeof ElapsedProgress>;
|
|
22
|
+
|
|
23
|
+
function Started({ agoMs, progress, label }: { agoMs: number; progress?: number; label?: string }) {
|
|
24
|
+
const [startedAt] = useState(() => Date.now() - agoMs);
|
|
25
|
+
return <ElapsedProgress startedAt={startedAt} progress={progress} label={label} />;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** A sync that has run a minute and five seconds: spinner plus its length. */
|
|
29
|
+
export const Default: Story = {
|
|
30
|
+
name: "Main",
|
|
31
|
+
render: () => <Started agoMs={65_000} label="Sync" />,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const States: Story = {
|
|
35
|
+
render: () => (
|
|
36
|
+
<YStack gap="$4" maxWidth={360}>
|
|
37
|
+
<Started agoMs={0} label="Short wait" />
|
|
38
|
+
<Started agoMs={65_000} label="Sync" />
|
|
39
|
+
<Started agoMs={2 * 3_600_000 + 4 * 60_000} label="Build" />
|
|
40
|
+
<Started agoMs={95_000} progress={0.42} label="Upload" />
|
|
41
|
+
</YStack>
|
|
42
|
+
),
|
|
43
|
+
};
|